单表查询语法
1 | SELECT 字段1,字段2... FROM 表名 |
关键字的执行优先级
1 | FROM |
- 找到表:FROM
- 拿着WHERE指定的约束条件,去表中取出一条条记录
- 将拿到的记录进行分组GROUP BY ,没有GROUP BY 整体当成一组
- 将分组的结果进行having过滤
- 执行SELECT
- 去重DISTINCT
- 将结果按条件进行排序ORDER BY
- 限制结果的显示条数
简单查询
1 | company.employee |
简单查询1
2
3
4
5
6SELECT id,name,sex,age,hire_date,post,post_comment,salary,office,depart_id
FROM employee;
SELECT * FROM employee;
SELECT name,salary FROM employee;
避免重复DISTINCT1
SELECT DISTINCT post FROM employee;
通过四则运算1
2
3SELECT name, salary*12 FROM employee;
SELECT name, salary*12 AS Annual_salary FROM employee;
SELECT name, salary*12 Annual_salary FROM employee;
定义显示格式
1 | #CONCAT() 函数用于连接字符串 |
WHERE约束
where字句中可以使用:
- 比较运算符:> < >= <= <> !=
- between 80 and 100 值在10到20之间
- in(80,90,100) 值是10或20或30
- like ‘egon%’
pattern可以是%或,
%表示任意多字符 表示一个字符 - 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not
1 | #1:单条件查询 |
分组查询GROUP BY
- 分组发生在where之后,即分组是基于where之后得到的记录而进行的
- 分组:将所有记录按照某个相同字段进行分类
- 可按照任意字段分组,分组后只能看到该字段的结果,想看组内信息,需要借助聚合函数
1 | ALTER TABLE employee RENAME emp; |
GROUP BY + GROUP_CONCAT()1
2
3
4
5
6
7
8
9
10SELECT post,group_concat(name) FROM emp GROUP BY post;
#+----------------------------+-------------------------------------------------------+
#| post | group_concat(name) |
#+----------------------------+-------------------------------------------------------+
#| operation | 张野,程咬金,程咬银,程咬铜,程咬铁 |
#| sale | 歪歪,丫丫,丁丁,星星,格格 |
#| teacher | alex,wupeiqi,yuanhao,liwenzhou,jingliyang,jinxin,成龙 |
#| 老男孩驻沙河办事处外交大使 | egon |
#+----------------------------+-------------------------------------------------------+
GROUP BY + 聚合函数1
2# 按岗位分组,查看每个组有多少人
SELECT post,count(id) count FROM emp GROUP BY post;
聚合函数
聚合函数聚合的事组的内容,若没有分组,则默认为一组1
2
3
4
5
6
7SELECT COUNT(*) FROM employee;
SELECT COUNT(*) FROM employee WHERE depart_id=1;
SELECT MAX(salary) FROM employee;
SELECT MIN(salary) FROM employee;
SELECT AVG(salary) FROM employee;
SELECT SUM(salary) FROM employee;
SELECT SUM(salary) FROM employee WHERE depart_id=3;
HAVING 过滤
HAVING与WHERE不一样的地方在于:
!!!执行优先级从高到低:where > group by > having
- Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数;
- Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数。
1 | #查询各岗位的员工个数小于2的岗位名称、岗位内包含员工名字、个数 |
查询排序 ORDER BY
1 | #按单列排序 默认升序 |
限制查询记录数 LIMIT
1 | SELECT * FROM employee ORDER BY salary DESC |
正则表达式查询
1 | SELECT * FROM employee WHERE name REGEXP '^ale'; |