1.DQL

  • (Data Query LANGUAGE:数据查询语言)
  • ·所有的查询操作都用它Select
  • ·简单的查询,复杂的查询它都能做~
  • ·数据库中最核心的语言,最重要的语句
  • ·使用频率最高的语句

image.png

2.指定查询字段

  1. -- 查询全部学生 SELECT 字段 FROM
  2. select * from student
  3. -- 查询指定字段
  4. select `studentno`,`studentname` from student
  5. -- 别名,给结果起一个名字 AS 可以给字段起别名,也可以给表起别名
  6. select `studentno` As 学号,`studentname` AS 学生姓名 From student
  7. -- 函数 Concat(a,b)
  8. 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:
image.png
In
image.png

4.联表查询

JOIN对比
image.png
image.png


-- ==================联表查询 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

分页

为什么要分页?
缓解数据库压力,给人的体验更好,瀑布流
image.png

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

image.png
语法: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'
)