Mysql-DQL查询数据(重点)

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 NULLa is null如果操作符为NULL,结果为真
IS NOT NULLa is not null如果操作符不为NULL,结果为真
BETWEENa between b and c若a 在b 和c之间,则结果为真
Likea like bSQL匹配,如果a匹配到b,则为结果为真
Ina 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'
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有梦想的java菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值