4. DQL查询数据(最重点)
4.1 DQL
select语法
- 数据库查询语言
- 所有的查询都用它
- 数据库最核心的语言
- 使用频率最高
4.2 指定查询字段
语法:select 字段 ...from 表
- 如果列名不是那么见名知意,所以会给他起别名
--查询全部学生 select 字段 from 表
select* from student --查询全部学生
select* from result -- 查询所有成绩
--查询指定字段
select `studentNo`,`studentName` from student
--使用别用查询,给结果换一个名字,表也可以使用别名
select `studentNo` as 学号,`studentName` as 学生姓名 from student as s
--拼接函数 Concat(a,b)
select cincat(`姓名:`,studentName) as 新名字 from student
去重 distinct
作用:去除SELECT查询出来的结果中重复的数据,重复的数据只显示一条
--查询那些同学参加了考试
select * from result --查询全部的考试成绩
select diastinct `studentNo` from result --将结果去重
数据库的列
SELECT VERSION ()--查询系统版本(函数)
SELECT100*3-1 As 计算结果--用来计算(表达式)
SELECT auto increment_ increment -- 查询自增的步长(变量)
--学员考试成绩+1分查看
SELECT studentNo ' , 'studentResult`+1 AS '提分后’FROM resu1t
4.3 where 条件子句
作用:检索数据中符合条件的值
逻辑运算符
运算符 | 语法 | 描述 |
and && | a and b a&&b | 逻辑与 |
or || | a or b a||b | 逻辑或 |
not ! | not a !a | 逻辑非 |
--查询考试成绩在95~100分之间
SELECT studentNo, `StudentResult` FROM result
WHERE StudentResult>=95 AND StudentResult<=100
-- and& &
SELECT studentNo, `StudentResult` FROM result
WHERE StudentResult>=95 && StudentResult<=100
--模糊查询(区间)
SELECT studentNo, `StudentResult` FROM result
WHERE StudentResult BETWEEN 95 AND 100
-―除了1000号学生之外的同学的成绩
SELECT studentNo, `StudentResult` FROM result
WHERE studentNo != 1000
-- !=not
SELECT studentNo, `studentResult`FROM result
WHERE NOT studentNo = 1000
模糊查询:本质是比较运算符
运算符 | 语法 | 描述 |
is null | a is null | 如果操作符为null,结果为真 |
is not null | a is not null | 如果操作符不为null,结果为真 |
between and | a between b and c | 若a在b和c之间,则结果为真 |
like | a like b | SQL匹配,如果a匹配b,则结果为真 |
in | a in (a1,a2,a3....) | 假设a在a1,或者a2.....其中的某一个值中,结果为真 |
--查询姓文的同学
-- like结合%(代表0到任意个字符)_(一个字符)
SELECT `StudentNo`, 'studentName` FROM `student`
WHERE StudentName LIKE'刘%'
--查询姓刘的同学,名字后面只有一个字的
SELECT `StudentNo`, `StudentName` FROM `student`
WHEREstudentName LIKE '刘_'
--查询姓文的同学,名字后面只有两个字的
SELECT `StudentNo`, `StudentName` FROM `student`
WHERE StudentName LIKE '刘__'
--查询名字中间有嘉字的同学%嘉%
SELECT `StudentNo`, `StudentName` FROM `student`
WHERE StudentName LIKE '%嘉'
--===== in(具体的一个或者多个值)=====
--查询1001,1002,1003号学员
SELECT `StudentNo`, 'StudentName` FROM `student`
WHERE StudentNo IN( 1001,1002,1003);
--查询在北京的学生
SELECT `StudentNo`, `StudentName` FROM `student`
WHERE `Address` IN('安徽','河南洛阳');
-- ==== null not null====
--查询地址为空的学生 nu17 ''
SELECT `studentNo` , `studentName` FROM `student`
WHERE address='' OR address IS NULL
--查询有出生日期的同学不为空
SELECT `studentNo` , `studentName` FROM `student`
WHERE `BornDate` IS NOT NULL
--查询没有有出生日期的同学为空
SELECT `studentNo` , `studentName` FROM `student`
WHERE `BornDate` IS NULL
4.4 联表查询
join
============联表查询join ==============
--查询参加了考试的同学(学号,姓名,科目编号,分数)
SELECT * FROM student
SELECT * FROM result
/*思路
1.分析需求,分析查询的字段来自哪些表,(连接查询)2.确定使用哪种连接查询?7种
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表的中 studentNo =成绩表studentNo*/
SELECT s.studentNO, studentName, SubjectNo,StudentResult
FROM student AS s
INNER JOIN result As r
WHERE s.studentNo = r.studentNo
三种连接的对比:
- -- join (连接的表) on (判断的条件) 连接查询
- -- where 等值查询
自连接
自己的表和自己的表连接,核心:一张表拆为两张一样的表即可
4.5 分页和排序
排序:升序 ASC 降序 DESC
为什么要分页?
- 缓解数据库压力
- 给用户好的体验
语法: limit(查询起始下标,pagesize)
练习题:
4.6 子查询
where (这个值是计算出来的)
本质︰在where语句中嵌套一个子查询语句
4.7 分组和过滤
4.8 select小结