SQL中的DQL查询语句


数据库执行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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值