QL数据查询
- 1 简单查询
- 2 条件查询
- 3 模糊查询
- 4 字段控制查询
- 5 排序
- 6 聚合函数
- 7 分组查询
- 8 LIMIT
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。查询返回的结果集是一张虚拟表。
查询关键字:
SELECT
语法: 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 表名;
查询所有列
SELECT * FROM stu;
查询指定列
SELECT sid, sname, age FROM stu;
2 条件查询
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
=、!=、<>、<、<=、>、>=; BETWEEN…AND; IN(set); IS NULL; AND;OR; NOT;
(1)查询性别为女,并且年龄50以内的记录
SELECT * FROM stu WHERE gender='female' AND age<50;
(2)查询学号为S_1001,或者姓名为liSi的记录
SELECT * FROM stu WHERE sid ='S_1001' OR sname='liSi';
3 模糊查询
查询包含某个关键字的属性的信息。模糊查询需要使用关键字 LIKE。
语法: 列名 like ‘表达式’ //表达式必须是字符串
通配符:
_(下划线): 任意一个字符
%:任意0~n个字符,‘张%’
(1)查询姓名由2个字构成的姓“张”学生的记录:
SELECT * FROM student WHERE stuname LIKE '张_';
(2)查询所有姓“张”学生的记录:
SELECT * FROM student WHERE stuname LIKE '张%';
4 字段控制查询
(1)去除重复记录
去除重复记录(两行或两行以上记录中系列的上的数据都相同),需要使用 DISTINCT:
SELECT DISTINCT age FROM student;
(2)查看英语成绩和数学成绩的和
SELECT *,(Eng_score + MATH_score) FROM student;
(3)给列名添加别名
SELECT *,(Eng_score + MATH_score) as totalscore FROM student;
给列起别名时,是可以省略AS关键字的:
SELECT *,(Eng_score + MATH_score) totalscore FROM student;
5 排序
语法: order by 列名 asc/desc
(1) 查询所有学生记录,按年龄升序排序
SELECT * FROM stu ORDER BY age ASC; 或者:
SELECT * FROM stu ORDER BY age;
(2) 查询所有学生记录,按年龄降序排序
SELECT * FROM stu ORDER BY age DESC;
(3)多列排序:当前面的列的值相同的时候,才会按照后面的列值进行排序
//按年龄降序排,相同年龄按分数升序拍
SELECT * FROM stu ORDER BY age DESC,score ASC;
6 聚合函数
聚合函数是用来做纵向运算的函数:
COUNT(列名):统计指定列不为NULL的记录行数;
MAX(列名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN(列名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM(列名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG(列名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
查询stu表中男生的人数:
SELECT sex,COUNT(sex) from stu where sex='男';
查询班级 平均分:
SELECT AVG(score) FROM stu;
7 分组查询
当需要分组查询时需要使用GROUP BY子句.
注意:如果查询语句中有分组操作,则select后面能添加的只能是聚合函数和被分组的列名
查询班级男女生人数
SELECT sex,COUNT(sex) FROM stu GROUP BY sex;
HAVING子句
查询班级中成绩大于90分的男女生人数
SELECT sex,COUNT(sex) FROM stu GROUP BY sex HAVING score>90;
注:having与where的区别:
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数).where后面不可以使用分组函数。
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
8 LIMIT
LIMIT 用来限定查询结果的起始行,以及总行数。
limit 开始下标 , 显示条数;//开始下标从0开始
limit 显示条数;//表示默认从0开始获取数据
1.查询5行记录,起始行从0开始
SELECT * FROM emp LIMIT 0, 5;
分页查询
如果一页记录为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