文章目录

  • DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。
  • 1)简单查询
  • 2)条件查询
  • 3)模糊查询
  • 4)字段控制查询
  • 5)排序
  • 6)聚合函数
  • 7)分组查询
  • 8)HAVING 子句
  • 9)LIMIT
  • 10)分页查询


DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。

数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。

查询返回的结果集是一张虚拟表。

语法: SELECT 列名 FROM 表名 【WHERE --> BROUP BY–>HAVING–> ORDER BY】

SELECT 要查询的列名称
    FROM 表名称 
    WHERE 限定条件 /*行条件*/ 
    GROUP BY grouping_columns /*对结果分组*/
    HAVING condition /*分组后的行条件*/ 
    ORDER BY sorting_columns /*对结果分组*/ 
    LIMIT offset_start, row_count /*结果限定*/

1)简单查询

# 查询所有列
SELECT * FROM stu;
# 查询指定列
SELECT sid, sname, age FROM stu;

2)条件查询

条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:

=、!=、<>、<、<=、>、>=; BETWEEN…AND; IN(set); IS NULL; AND;OR; NOT;

3)模糊查询

语法: 列名 like ‘表达式’ //表达式必须是字符串

通配符:

  • _(下划线): 任意一个字符
  • %:任意0~n个字符,‘张%’
#查询姓名中第2个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE '_i%';
#查询姓名中包含“a”字母的学生记录
SELECT * FROM stu WHERE sname LIKE '%a%';

4)字段控制查询

  1. 去除重复记录
    关键字:DISTINCT
SELECT DISTINCT sal FROM emp;
  1. 查看两个列值相加结果
SELECT *,sal+comm FROM emp;

comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出 现NULL。下面使用了把NULL转换成数值0的函数IFNULL

SELECT *,sal+IFNULL(comm,0) FROM emp;
  1. 给列名添加别名
SELECT *,sal+IFNULL(comm,0) as total FROM emp;

可以省略AS关键字!

5)排序

语法: order by 列名 asc/desc (asc:升序;desc:降序;默认不写是升序)

//查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
 //多列排序:当前面的列的值相同的时候,才会按照后面的列值进行排序
SELECT * FROM emp ORDER BY sal DESC,empno ASC;

6)聚合函数

聚合函数是用来做纵向运算的函数:

COUNT(列名):统计指定列不为NULL的记录行数;

MAX(列名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

MIN(列名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

SUM(列名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

AVG(列名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

SELECT MAX(sal), MIN(sal) FROM emp;

7)分组查询

注意如果查询语句中有分组操作,则select后面能添加的只能是聚合函数和被分组的列名

查询每个部门的部门编号以及每个部门的人数:

SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;

查询每个部门的部门编号以及每个部门工资大于1500的人数:

SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;

8)HAVING 子句

查询工资总和大于9000的部门编号以及工资和:

SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;

多列分组:

-- 统计出stu表中每个班级的男女生各多少人
 select gradename,gender ,count(*) from stu
 group by gradename,gender

注:having与where的区别:

1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤

2.having后面可以使用分组函数(统计函数)

where后面不可以使用分组函数。

9)LIMIT

LIMIT用来限定查询结果的起始行,以及总行数。

limit 开始下标,显示条数; //开始下标从0开始

limit 显示条数; //表示默认从0开始获取数据

如:查询5行记录,起始行从0开始

SELECT * FROM emp LIMIT 0, 5;

10)分页查询

如果一页记录为10条,希望查看第3页记录应该怎么查呢?

l 第一页记录起始行为0,一共查询10行; limit 0,10

l 第二页记录起始行为10,一共查询10行;limit 10,10

l 第三页记录起始行为20,一共查询10行; limit 20,10

pageIndex 页码值 pageSize 每页显示条数

limit (pageindex-1)*pagesize,pagesize;

查询语句书写顺序:select – from- where- groupby- having- order by-limit

查询语句执行顺序:from - where -group by -having - select - order by-limit