DQL
制定查询字段
--查询全部的学生
select * from student
--查询指定字段
select `studentNo`,`studentName` from student
--别名,给结果起一个名字
select `studentNo` as 学号,`studentName` as 姓名 from student as s
--函数 concat(a,b) 输出为ab
select concat('姓名:',studentName) as 新名字 from student
--发现重复数据并去重
select distinct `StudentNo` from result
--查询自增的步长
SELECT @@auto_increment_increment
--查询系统版本
SELECT VERSION()
--用于计算
SELECT 2*100+50 AS 智商
--查询同时改变输出的值
select `StudentNo`,`StudentResult`+1 as '提分后' from result
模糊查询
- like
like专属的两个通配符:%表任意个字符,_代表一个字符
--查询姓刘的同学
select `StudentNo`,`studentName` from `student`
where StudentName like '刘%'
--查询姓刘的只有两个字的同学
select `StudentNo`,`studentName` from `student`
where StudentName like '刘_'
--查询姓刘的名字有三个字的同学
select `StudentNo`,`studentName` from `student`
where StudentName like '刘__'
--查询名字中含有嘉的同学
select `StudentNo`,`studentName` from `student`
where StudentName like '%嘉%'
- in
具体的一个值或多个值
select `StudentNo`,`studentName` from `student`
where StudentNo in (1001,1002,1003);
select `StudentNo`,`studentName` from `student`
where StudentNo in ('安徽','河南','北京');
- null和not null
注意''和null不能混为一谈,前者是为空后者是一个空字符串
select `StudentNo`,`studentName` from `student`
where address ='' or address is null
select `StudentNo`,`studentName` from `student`
where address is not null
联表查询
LEFT JOIN / INNER JOIN / RIGHT JOIN
- INNER JOIN:只保留两边都匹配的数据(取交集)
- LEFT JOIN:左边表全保留,右边表只显示匹配的,不匹配为 NULL
- RIGHT JOIN:右边表全保留,左边表只显示匹配的,不匹配为 NULL
先创建两张表


inner join :只返回两张表中 完全匹配 的数据(交集)。
SELECT s.id, s.name, sc.score
FROM student s
INNER JOIN score sc
ON s.id = sc.student_id;
只有两边都存在的学生才会显示

left join :左边的表 100% 全部保留,右边表只显示匹配的数据,不匹配的填 NULL。
SELECT s.id, s.name, sc.score
FROM student s -- 左表
LEFT JOIN score sc -- 右表
ON s.id = sc.student_id;

right join :右边的表 100% 全部保留,左边表只显示匹配的数据,不匹配的填 NULL。
SELECT s.id, s.name, sc.score
FROM student s -- 左表
RIGHT JOIN score sc -- 右表
ON s.id = sc.student_id;

自连接
自连接就是:自己跟自己连接。
把同一张表当成两张不同的表来用,给它起两个不同别名,然后按条件关联。
先创建一张表

SELECT
e.id,
e.name AS 员工,
m.name AS 领导
FROM emp e
LEFT JOIN emp m -- 同一张表,别名 m
ON e.manager_id = m.id;

常见用途
查询上下级(员工 - 领导)
查询分类父子关系(栏目 - 子栏目)
查询同组 / 同班 / 同地区的数据对比
一张表里有关联自身的逻辑
分页limit和排序order by
- 排序 asc升序 desc降序
SELECT st.studentno,studentname,subjectname,studentresult
FROM student AS st
RIGHT JOIN `result` AS r
ON r.studentno = st.studentno
INNER JOIN `subject` AS sb
ON r.subjectno=sb.`subjectno`
ORDER BY studentresult ASC
- 分页
从第 0 条开始,一共取 20 条。
LIMIT 0, 20
子查询
select
from
where (
select
from
where
)

浙公网安备 33010602011771号