mysql学习05(DQL)
-
DQL查询语句(最重点)
-
DQL:数据查询语言;
-
所有的查询操作都用它, select
-
简单的查询,复杂的查询它都能查
-
数据库中最核心的语言,最最重要的语言
-
数据库的设计范式
-
-
SELECT语法
--语法:
select [all | distinct]
{* |table.* | [table.field1][as alias1]...}
from table_name [as table_alias]
[left | right | inner join table_name2] --联合查询
[where...] --指定结果需满足的条件
[group by ...] --指定结果按照哪几个字段来分组
[having] --过滤分组的记录必须满足的次要条件
[order by...] --指定查询记录按照一个或多个条件排序
[limit {[offset,]row_count | row_countOFFSET offset}]; --指定查询的记录从哪条到哪条
-
指定查询字段:基本查询及别名使用
--语法:
select 字段 from 表 ;
--查询全部学生
select * from student;
--查询指定字段
SELECT `gradeId`,`gradeName` FROM grade ;
--别名:给结果起一个名字 AS ; 可以给字段起别名,也可以给表起别名
SELECT `gradeId` AS 年级号, `gradeName` AS 年级名称 FROM grade ;
-- 函数:Concat(a,b) :拼接字符串
SELECT CONCAT('我的:',`gradeName`) AS 新名字 FROM grade ;
-
去重及数据库的表达式:
--去重:distinct
--作用:去除select查询出来的结果中重复的数据,只显示一条;
SELECT DISTINCT `gradeName` FROM grade ;
SELECT VERSION();-- 查询系统版本(函数)
SELECT 100*3-1 AS result ;-- 用来计算(表达式)
SELECT @@auto_increment_increment ;-- 查询自增的步长(变量)
--数据库中的表达式:文本的值,列,Null,函数,计算表达式,系统变量
select '表达式' from 表 ; -
where子句之逻辑运算符:
-
作用:检索数据中符合条件的值;
-
搜索的条件由一个或多个表达式组成!结果都是布尔值!
--
逻辑运算符:
-
推荐使用英文字母;
运算符 语法 描述 and && A and B a&&b 逻辑与:2个都为真,结果为真 or || a or b a|| b 逻辑或:一个为真,则结果为真 not ! not a !a 逻辑非:取反,真为假 -
-
模糊查询:
-
比较运算符;
-
-
in是精确匹配;具体的一个或者多个值;
运算符 语法 描述 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....其中的某一个值中,则结果为真 -
-
联表查询,Join On详解:数据库的设计范式
-
join:对比
-
语法:
-- join(连接的表) on(on 判断的条件): 连接查询
-- where : 等值查询
/* 思路:
1,分析需求,分析查询的字段来自哪些表;(连接查询)
2,确定使用哪种连接查询;7种
3,确定一个交叉点(这2个表中哪个数据是相同的)
4,判断的条件:学生表中的studentNo=成绩表中的studentNo
*/
-- inner join
SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
INNER JOIN result AS r
WHERE s.`studentno`=r.`studentno`
-- right join
SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student s
RIGHT JOIN result r
ON s.`studentno`=r.`studentno`
-- Left join
SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student s
LEFT JOIN result r
ON s.`studentno`=r.`studentno`
-- 查询缺考的同学
SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student s
LEFT JOIN result r
ON s.`studentno`=r.`studentno` WHERE result IS NULL
-- 思考题:查询了参加考试的同学信息:学号,学生姓名,科目名,分数
/* 思路:
1,分析需求,分析查询的字段来自哪些表;student,result,subject(连接查询)
2,确定使用哪种连接查询;7种
3,确定一个交叉点(这2个表中哪个数据是相同的)
4,判断的条件:学生表中的studentNo=成绩表中的studentNo
*/
SELECT s.studentNo,studentName,subjectName,studentresult
FROM student s
RIGHT JOIN result r
ON r.`studentno`=s.`studentno`
INNER JOIN `subject` sub
ON r.`subjectno`=sub.`subjectno`
-- 我要查询哪些数据 select ...
-- 从哪几个表中查 from 表 XXX Join 连接的表 on 交叉条件
-- 假设存在一种多张表查询,慢慢来,先查询2张表然后再慢慢增加
-
操作 描述 inner join 如果表中至少有一个匹配,则返回行 Left join 会从左表中返回所有的值,即使右边没有匹配; right join 会从右表中返回所有的值,即使左边没有匹配;
-
-
自连接及联表查询练习:
-
自连接:
-
自己的表和自己的表连接,核心:一张表拆为2张一样的表即可;
-
-
父类表:
-
categoryid categoryname 2 信息技术 3 软件开发 5 美术设计
-
-
子类表:
-
pid categoryid categoryname 3 4 数据库 2 8 办公信息 3 6 web开发 5 7 PS技术
-
-
操作:查询父类对应的子类关系
-
父类 子类 信息技术 办公信息 软件开发 数据库 软件开发 web开发 美术设计 ps技术
-
-
SQL实现:
-- 自连接实现:核心也是数据库连接
SELECT a.`categoryname` AS '父目录',b.`categoryname` AS '子目录'
FROM `category` a, `category` b
WHERE a.`categoryid`=b.`pid`;
-
-
分页和排序:
-
排序:order by:升序ASC,降序DESC
--语法:
-- order by 通过哪个字段排序 怎么排
SELECT * FROM student s ORDER BY s.`studentno` DESC;
-
分页:limit:
-- 分页:
-- 为什么要分页:1,缓解数据库压力;2,给人的体验更好;3,瀑布流(一般图片才会使用)
-- 查询成绩表,每页只显示2条
-- 语法:limit 起始值,页面的大小 ; (limit 0,2 从第0页开始,每页2行)
-- limit 0,2 : 1-2
-- limit 1,2 : 2-3
-- limit 3,2 : 4-5
SELECT * FROM result ;
SELECT * FROM result
LIMIT 3,2 ;
--第一页:limit 0,5 (1-1)*5
--第二页:limit 5,5 (2-1)*5
--第三页:limit 10,5 (3-1)*5
--第n页: limit (n-1)*5,5 (n-1)*5 (n-1)*pageSize,pageSize
--规律:
--【pageSize:页面大小】
--【(n-1)*pageSize:起始值】
--【n代表当前页】
--【数据总数/页面大小:总页数】
-
-
子查询和嵌套查询:
-
where(这个值是计算出来的)
-
本质:在where语句中,嵌套一个子查询语句;
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix