SQL命令-DQL
- DQL(数据查询语言)主要用于进行数据表中数据的查询
基本语法
SELECT 属性1,属性2,.... FROM 表名;
- 例子:
SELECT empno,ename,jobno,hiredate FROM insane_emp;
- 通配符
*
,代表所有,可以使用*
代表查询表中所有列- 例子:
SELECT * FROM insane_emp;
- 例子:
运算
- 使用SELECT语句进行数据查询时,还可以进行算术运算、限定查询、排序、分组等控制
- 算术运算
- 能够在SELECT语句查询的结果基础上进行相应的数学运算
- 例子:
SELECT sal+100 FROM insane_job;
限定查询
- 在使用SELECT语句进行查询时,使用WHERE子句,就能查询出满足条件的记录,而不是表中的所有记录
- 例子:
SELECT * FROM insane_emp WHERE empno=20161001;
- WHERE子句也可以使用多个限定条件
- 在WHERE子句中设置的限定条件,一般由各种运算符组成MySQL中常用的运算符有几类:数学运算符、比较运算符、逻辑运算符
-
比较运算符:
image.png -
特殊的比较运算符:
image.png
image.png
- 通配符%代表若干个字符,通配符_代表一个字符
-
逻辑运算符:
image.png
image.png
- 逻辑运算符 ! 在使用的时候一定要注意不能省略后面括号
- 运算符优先级:数学运算符>比较运算符>逻辑运算符
去除重复
- 使用
DISTINCT
关键字能够将查询到的结果集中重复的记录去除 - 例子:
SELECT DISTINCT hiredate FROM insane_emp;
设置别名
- 设置别名使用
AS
关键字可以在查询时设置属性(列)的别名,不过AS可以省略 - 例子:
SELECT empnoAS '员工号',ename AS '员工姓名' FROM insane_emp;
排序
- 使用
ORDER BY
子句可以将SELECT查询到的结果集按照指定属性排序,默认采用升序(ASC)排序方式,也可以使用降序(DESC) - 例子:
SELECT * FROM insane_emp ORDER BY deptno;
- 同样,排序时也可以指定多个属性排序
- 当多属性排序方式有冲突时,按照指定先后顺序排序
分组统计
- 使用
GROUP BY
子句可以对查询结果按指定属性进行分组统计 - 例如:查询公司内各个部门员工人数
SELECT COUNT(deptno) FROM insane_emp GROUP BY deptno;
- 一般分组GROUP BY子句和聚合函数一起使用,常用的聚合函数有:
COUNT()、AVG()、SUM()、MAX()、MIN()、GROUP_CONCAT()
聚合函数
- 计数函数COUNT
- 统计表中某个属性对应的记录数
- 例子:
SELECT COUNT(empno) FROM insane_emp;
- 求平均值函数AVG
- 统计表中某个属性对应的平均值
- 例子:
SELECT AVG(sal) FROM insane_job;
- 求和函数SUM
- 统计表中某个属性的汇总值(和)
- 例子:
SELECT SUM(sal) FROM insane_job;
- 最大值函数MAX
- 统计表中某个属性的最大值
- 例子:
SELECT MAX(sal) FROM insane_job;
- 最小值函数MIN
- 统计表中某个属性的最小值
- 例子:
SELECT MIN(sal) FROM insane_job;
- 列值拼接函数GROUP_CONCAT
- 将表中某个属性的所有值拼接到同一个结果中,默认值与值之间用逗号分隔,也可以使用
SEPARATOR
关键字指定分隔符 - 例子:
SELECT GROUP_CONCAT(jobname SEPARATOR '+') FROM insane_job;
需要注意的是:
1.在SELECT命令中使用分组时,SELECT关键字后只能使用聚合函数和GROUP BY子句后出现的属性2.聚合函数不能直接在WHERE子句中使用
分组统计-Having
- 和分组
GROUP BY
子句经常一起使用的还有HAVING
子句 -
HAVING
子句为分组统计进一步设置统计条件,效果和WHERE
子句类似 - 它们的区别是:
-
WHERE
子句在查询前限定查询条件 -
HAVING
子句在分组后进行进一步限定
- 例如:查询公司内各个部门员工人数,并返回部门员工人数大于2人的部门编号
SELECT COUNT(*),deptno FROM insane_emp GROUP BY deptno HAVING COUNT(deptno)>2;
-
- 分组同样可以基于多个属性
- 例如:查询公司内各个部门不同职位的员工人数
- SQL语句:
SELECT deptno,jobno,COUNT(empno) FROM insane_emp GROUP BY deptno,jobno;
限定结果
- 使用
LIMIT
子句可以限定查询返回的记录数 - 例如:查询数据表中前两条记录
-SQL语句:
SELECT * FROM insane_emp LIMIT 2;` -
LIMIT
子句后面可以有一个参数,也可以有两个参数- 如果有一个参数,该参数表示从表开始位置查询对应的记录数量
- 如果有两个参数,那么第一个参数表示起始位置与第一行的偏移量,第二个参数表示查询的数量
- 例子:
SELECT * FROM insane_emp LIMIT 2,3;