MySQL数据管理(二)(DQL语言)
1.DQL简介
数据库查询语言 ------数据库最核心的语言
2.简单的字段查询操作
-- select 语句
-- 查询所有的字段值 ,显示所有的字段结果
SELECT * FROM student
-- 查询指定的字段值
SELECT `name` FROM student
-- 查询时的别名操作
SELECT `name` AS '姓名' FROM student -- 表名和字段名都可以AS更名
-- 查询时的字符串拼接操作
SELECT CONCAT('姓名:',`name`) FROM student
-- 语法分析
select `字段名`,`字段名2` from `表名`
3.SELECT 语句 查询表达式
数据库列的表达式:
- 文本值
- 列
- Null
- 函数
- 计算表达式
- 系统变量
-- select 语法
select `表达式` from `表名`
-- 查询系统版本
SELECT VERSION()
-- 计算表达式
SELECT 2*3-1 AS '计算结果'
-- 去重
SELECT DISTINCT `name` AS '查重name' FROM student
- 查重后
-- 更改查询结果的值
SELECT `pwd`+'1' AS '查询改值' FROM student
- 查询改值后
4. WHERE条件字句
逻辑运算符
与:AND &&
或:OR ||
非:NOT !
模糊查询(区间): BETWEEN AND
SELECT * FROM student WHERE NOT id=2
SELECT * FROM student WHERE id != 2
- result:
SELECT * FROM student WHERE id >= 2 AND id<=5
SELECT * FROM student WHERE id BETWEEN 2 AND 5
- result:
SELECT * FROM student WHERE id =2 || id=3
- result:
SELECT * FROM student WHERE id%2=0
- result:
模糊查询
比较运算符
- IS NULL 为空
- IS NOT NULL 不为空
- LIKE SQL匹配
- IN 在某个确定的范围内
-- ====================模糊查询=================
-- 查询address为null
SELECT * FROM student WHERE address IS NULL
-- 查询address不为null
SELECT * FROM student WHERE address IS NOT NULL
-- ====================LIKe=================
-- % 表示一个或多个字符 _表示一个字符
-- 查询name为一个J开头的
SELECT * FROM student WHERE `name` LIKE 'J%'
-- 查询name为中间有J的
SELECT * FROM student WHERE `name` LIKE '%J%'
-- 查询第二字为J的name
SELECT * FROM student WHERE `name` LIKE '_J%'
-- ====================In=================
-- IN 匹配的是一堆确定的值,不能用% 或 _
-- 查询id为2,3,4 的人
SELECT * FROM student WHERE `id` IN (2,3,4)
5.联表查询
-
作用:当我们需要查询的数据来源于多个不同的有关系的数据表时,我们通过这个连接点跨数据表查询数据
-
思路:1. 确定我们需要查询的数据有哪些?
2. 确定这些数据来源于那些表?(确定是否使用联表查询)
3. 确定数据表的连接方式(INNER RIGHT LEFT)
4. 确定数据表之间的连接点
七种JOIN方式
我们将需要查询的数据表分为A表,和B表,连接点为id
-- ================== 7中JOIN方式 ====================
-- A表独有的+AB共有的
SELECT s.`id`,`name`,`score`
FROM `student` AS s
LEFT JOIN `result` AS r
ON s.id=r.id
-- B表独有的+AB共有的
SELECT s.`id`,`name`,`score`
FROM `student` AS s
RIGHT JOIN `result` AS r
ON s.id = r.id
-- AB共有的
SELECT s.`id`,`name`,`score`
FROM `student` AS s
INNER JOIN `result` AS r
ON s.id = r.id
-- A独有
SELECT s.`id`,`name`,`score`
FROM `student` AS s
LEFT JOIN `result` AS r
ON s.id=r.id
WHERE r.id =NULL
-- B独有
SELECT s.`id`,`name`,`score`
FROM `student` AS s
RIGHT JOIN `result` AS r
ON s.id = r.id
WHERE s.id =NULL
-- A独有+B独有(外连接但不包括内连接)
SELECT s.`id`,`name`,`score`
FROM `student` AS s
LEFT JOIN `result` AS r
ON s.id=r.id
WHERE r.id =NULL
UNION
SELECT s.`id`,`name`,`score`
FROM `student` AS s
RIGHT JOIN `result` AS r
ON s.id = r.id
WHERE s.id =NULL
-- 全部都有 (全连接)
SELECT s.`id`,`name`,`score`
FROM `student` AS s
LEFT JOIN `result` AS r
ON s.id=r.id
UNION
SELECT s.`id`,`name`,`score`
FROM `student` AS s
RIGHT JOIN `result` AS r
ON s.id = r.id
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EWBlFABH-1585911200017)(C:\Users\MACHENIKE\Desktop\1xjhtnei.bmp)]
6.自连接查询
作用:当一个数据表的数据之间层级之间存在子父级关系,自连接查询用于查询显示子父级关系
(针对于树状结构的数据存储方式!!!)
思路:首先假想有两张表,一张为子表,一张为父表
题目一:查询子类所对应的父类 (子表在左,父表在右)
连接点:子表的PID(父ID)=父类的ID
题目二:查询父类所对应的各个子类(父表在左,子表在右)
连接点:父表的ID = 子表的PID
-- 查询子类所对应的父类
SELECT s.id,s.`cate_name`,r.`cate_name`
FROM `cates` AS s
INNER JOIN `cates` AS r
WHERE s.`parent_id` = r.`id`
-- 查询父类所对应的各个子类
SELECT s.id,s.`cate_name`,r.`cate_name`
FROM `cates` AS s
INNER JOIN `cates` AS r
WHERE s.`id` = r.`parent_id`
7.子查询
作用:用于和联结查询差不多,但是形式不同,采用的时嵌套的select语句,子查询语句只能返回一个列值
将select语句的结果作为另外一个查询语句的条件
思路:由里向外的查询思路
-- ALL子查询
-- 比较满足子查询结果的每一条(例如大小比较)
--ANY 子查询
-- 满足子查询结果的任意一条(例如大小比较)
--EXISTS子查询
-- 当子查询存在结果时,执行外层查询
--IN子查询
-- 存在于子查询结果中
8.排序
作用:对查询的结果,按某个值,升序或降序排序
关键字:order by
-- =============== 排序查询 ==================
SELECT * FROM `result`
ORDER BY `score` ASC -- 升序
SELECT * FROM `result`
ORDER BY `score` DESC -- 降序
9.分页
作用:对查询结果进行分页显示
关键字:limit
-- =============== 查询分页 ==================
--假设总记录为5条
-- limit 的第一个参数 为 查询结果的起始下标值(从0开始),查询结果的最大条数(pagesize)
SELECT * FROM `result`
LIMIT 1,2 --返回第2条——第3条记录
SELECT * FROM `result`
LIMIT 0,3 --返回第1条——第3条记录
SELECT * FROM `result`
LIMIT 4,3 --返回第5条——第5条记录
10.分组
作用:可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。
关键字:Group By
11.过滤
作用:对分组后的结果进行过滤,(不能用where!where不能和group by 一起,同时where也不能使用聚合函数当作条件!!)
关键字:Having