说明:MySQL的offset第一行是0
位置指的是在SELECT语句中第几个出现的字段,如:1,则代表用第一个出现的字段来分组。
SELECT语句:
SELECT select_expr1 【,select_expr2......】
【
FROM 表名
【WHERE where_condition】
【GROUP BY {列名|位置} 【ASC | DESC】,.....】 //对查询结果进行分组,如:SELECT sex,id FROM tb1 GROUP BY sex;
【HAVING where_condition】 //分组条件,如:SELECT sex FROM tb1 GROUP BY sex HAVING count(id) >2;对tb1表中id列的值大于2的sex列进行分组
【ORDER BY {列名|expr|位置}】 【ASC | DESC】,.....】 //对查询结果进行排序,如:SELECT * FROM tb1 ORDER BY id DESC,sex ASC;把行先按id降序排列,不满足条件的再按sex升序排列。
【LIMIT {【offset,】 行数 | 行数 OFFSET offset}】 //限制查询结果的返回数量,如:SELECT * FROM tb1 LIMIT 2;返回前两行
SELECT * FROM tb1 LIMIT 2,2;从第二行开始,返回2行
】
select_expr的顺序将影响结果的排列顺序,如:SELECT id,username FROM tb1;和SELECT username,id FROM tb1;结果是不一样的。
select_expr可以使用【AS】 alias_name为其赋予别名,字段的别名将影响结果集,别名可用于GROUP BY,ORDRE BY或HAVING,如:SELECT id AS userid,username AS uname FROM tb1;
*表示所有的列,tbl_name.*可以表示数据表下的所有列,如:tb1.id表示数据表tb1下的id列。
where_condition中可以使用MySQL支持的函数或运算符。
通过连接来显示多张表的内容:
连接的语法结构:
表1 {【INNER | CROSS】 JOIN | {LEFT | RIGHT} 【OUTER】JOIN} 表2 ON conditional_expr(连接条件)
连接类型:
INNER JOIN等同于JOIN等同于CROSS JOIN 称为内连接
LEFT 【OUTER】JOIN 称为左外连接
RIGHT 【OUTER】JOIN 称为右外连接
SELECT ...... INNER JOIN ......【INNER JOIN ......】 显示左表及右表符合连接条件的记录
SELECT ...... LEFT JOIN ......【LEFT JOIN ......】查询的结果集包括SQL语句中左表的所有行,右表中匹配的行。如果左表的某行在右表中没有匹配行,则用空值表示
SELECT ...... RIGHT JOIN ......【RIGHT JOIN ......】查询的结果集包括SQL语句中右表的所有行,左表中匹配的行。如果右表的某行在左表中没有匹配的行,则用空值表示
完全外连接(full join 或 full outer join),查询的结果集包括SQL语句中左表和右表的所有行。如果某行在另一个表中没有匹配行时,则用空值表示。
通过CREATE...SELECT来创建数据表并且同时写入SELECT查询到的记录:
>CREATE TABLE tdb_goods_brands (
->brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
->brand_name VARCHAR(40) NOT NULL
->) SELECT brand_name FROM tdb_goods GROUP BY brand_name;
自身连接:
-- 查找所有分类及其父类
SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id;
-- 查找所有分类及其子类
SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_id;