1.DQL
- (Data Query LANGUAGE:数据查询语言)
- ·所有的查询操作都用它Select
- ·简单的查询,复杂的查询它都能做~
- ·数据库中最核心的语言,最重要的语句
- ·使用频率最高的语句
2.指定查询字段
-- 查询全部学生 SELECT 字段 FROM 表
select * from student
-- 查询指定字段
select `studentno`,`studentname` from student
-- 别名,给结果起一个名字 AS 可以给字段起别名,也可以给表起别名
select `studentno` As 学号,`studentname` AS 学生姓名 From student
-- 函数 Concat(a,b)
select concat('姓名:',studentname) AS 新名字 from student
语法:SELECT 字段 FROM 表
去重:distinct
-- 发现有重复数据,去重
SELECT DISTINCT `subjectno` FROM result
作用:去除SELECT查询出来的结果中重复的数据,重复的数据只显示一条
数据库中的表达式:文本值,列,NULL,函数,计算表达式,系统变量…
select 表达式 from 表
3.where条件子句
作用:检索数据中符合条件的值
-- ========================where==========
-- 查询考试成绩在95-100分之间
SELECT `studentno`,`studentresult` FROM result
WHERE `studentresult`>=98 AND `studentresult`<=100
-- 模糊查询(区间)
SELECT `studentno`,`studentresult` FROM result
WHERE studentresult BETWEEN 96 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 | 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:
In
4.联表查询
JOIN对比
-- ==================联表查询 join==================
/*思路
1.分析需求,分析查询的字段来自那些表,(连接查询)
2.确定使用哪种连接查询?7种
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表的中 studentno=成绩表 studentno
*/
SELECT r.studentno,studentName,subjectno,studentresult
FROM student AS s
INNER JOIN result AS r
WHERE s.studentno = r.studentno
-- RIGHT join
SELECT r.studentno,studentName,subjectno,studentresult
FROM student AS s
RIGHT JOIN result AS r
ON s.studentno = r.studentno
-- LEFT join
SELECT r.studentno,studentName,subjectno,studentresult
FROM student AS s
LEFT JOIN result AS r
ON s.studentno = r.studentno
操作 | 描述 |
---|---|
Inner join | 如果一个表中至少有一个匹配,就返回行 |
left join | 会从左表中返回所有的值,即使右表中没有匹配 |
right join | 会从右表中返回所有的值,即使左表中没有匹配 |
5.分页和排序
排序
-- 排序:升序ASC,降序DES
-- ORDER BY 通过那个字段排序,怎么排
-- 查询的结果根据成绩降序排序
SELECT s.`studentno`,`studentname`,`subjectname`,`studentresult`
FROM student s
INNER JOIN `result` r
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` sub
ON r.`subjectno`=sub.`subjectno`
WHERE subjectname='数据库结构-1'
ORDER BY studentresult ASC
分页
为什么要分页?
缓解数据库压力,给人的体验更好,瀑布流
SELECT s.`studentno`,`studentname`,`subjectname`,`studentresult`
FROM student s
INNER JOIN `result` r
ON s.`studentno`=r.`studentno`
INNER JOIN `subject` sub
ON r.`subjectno`=sub.`subjectno`
WHERE subjectname='数据库结构-1'
ORDER BY studentresult ASC
LIMIT 5,5
语法:limit(查询起始下标,pageSize)
7.子查询
where(这个值是计算出来的)
本质:在where语句中嵌套一个子查询语句
-- ==========where============
-- 1.查询高等数学一-1 的所有考试结果(学号,科目编号,成绩),降序排列
-- 方法一:使用连接查询
SELECT `studentno`,r.`subjectno`,`studentresult`
FROM `result` r
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname = '高等数学-1'
ORDER BY studentresult DESC
-- 方式二:使用子查询()
SELECT `studentno`,`subjectno`,`studentresult`
FROM `result`
WHERE subjectno = (
SELECT subjectno FROM `subject`
WHERE subjectname = '高等数学-1'
)