单表查询
比较符
当在子句中使用 <、 >、 <=、 >=、 <>或 !=时,字段的名字不加引号。如果使用引号,则查询出的结果为空,并且不会报错。
select name, age from emplyee where post = 'teacher' having age > 30;
等号
当在子句中查找限定字段的记录时,等号(=)后面的字段是以字符串的形式书写,也就是说必须加引号('')。
select name, age, salary from emplyee where post = 'teacher' having salary between 9000 and 10000;
is\not is
当查询某个字段是什么或者不是什么的时候,可以使用 is 或者 not is.
select * from emplyee where post_comment is not null;
group by
当没有进行 where 筛选而直接进行 group by 筛选是没有任何意义的,查出来的结果是以 post字段 为分组的结果中的每一组的的第一条记录。
select * from emplyee group by post;
如果使用分组,必须设置全局SQL的模式为 'ONLY_FULL_GROUP_BY'。
set global sql_mode = 'ONLY_FULL_GROUP_BY';
设置成功后要exit退出后重新登录才能生效。
group_contact
group_concat(字段名) 将每个分组中的指定字段拼接起来。例如:
查询岗位名以及岗位包含的所有员工名字
select post , group_concat(name) from emplyee group by post;
必须使用group by才能使用group_concat()函数,将所有的name值拼接起来。
查询薪资大于10000的岗位名以及岗位包含的所有员工的名字。
select post, group_concat(name) from emplyee group by post having avg(salary) > 10000;
结果:
+-----------+-----------------------------------------------------------+
| post | group_concat(name) |
+-----------+-----------------------------------------------------------+
| operation | 张野,程咬金,程咬银,程咬铜,程咬铁 |
| teacher | alex,wupeiqi,yuanhao,liwenzhou,jingliyang,jinxin,xiaomage |
+-----------+-----------------------------------------------------------+
ASC 升序
DESC 降序