当前位置:网站首页>MySQL数据高级查询之连接查询、联合查询、子查询[通俗易懂]
MySQL数据高级查询之连接查询、联合查询、子查询[通俗易懂]
2022-08-10 17:41:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
一、连接查询
1、交叉连接:CROSS JOIN 把表A和表B的数据进行一个NM的组合,即笛卡尔积。如本例会产生44=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。
DROP TABLE IF EXISTS `t2`;
CREATE TABLE `t2` (
`student_id` int(11) NOT NULL,
`name` varchar(32) DEFAULT NULL,
`major` varchar(32) DEFAULT NULL,
PRIMARY KEY (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SELECT *
FROM t1
CROSS JOIN t2
2、**内连接:**SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.nameINNER JOIN 产生的结果是AB的交集 。 从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留.
基本语法:左表 [inner] join 右表 on 左表.字段 = 右表.字段; on表示连接条件: 条件字段就是代表相同的业务含义(如my_student.c_id和my_class.id)
字段别名以及表别名的使用: 在查询数据的时候,不同表有同名字段,这个时候需要加上表名才能区分, 而表名太长, 通常可以使用别名.
内连接可以没有连接条件: 没有on之后的内容,这个时候系统会保留所有结果(笛卡尔积)
内连接还可以使用where代替on关键字,但效率差很多。
DROP TABLE IF EXISTS `cms_manage`;
CREATE TABLE `cms_manage` (
`id` int(11) NOT NULL,
`admin_user` varchar(32) DEFAULT NULL,
`login_count` int(11) DEFAULT NULL,
`level` int(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `cms_level`;
CREATE TABLE `cms_level` (
`id` int(11) NOT NULL,
`level_name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SELECT
m.id,
m.admin_user,
m.login_count,
l.level_name
FROM
cms_manage as m
JOIN cms_level as l ON m.level = l.id
3、外连接: 以某张表为主,取出里面的所有记录, 然后每条与另外一张表进行连接: 不管能不能匹配上条件,最终都会保留: 能匹配,正确保留; 不能匹配,其他表的字段都置空NULL.
外连接分为两种: 是以某张表为主: 有主表
left join: 左外连接(左连接), 以左表为主表
right join: 右外连接(右连接), 以右表为主表
基本语法: 左表 left/right join 右表 on 左表.字段 = 右表.字段; 修改成
SELECT
m.id,
m.admin_user,
m.login_count,
l.level_name
FROM
cms_manage as m
LEFT JOIN cms_level as l ON m.level = l.id
4、**自然连接:**略(基本不用自然连接) **
二、联合查询
** 1、**联合查询:**将多次查询(多条select语句), 在记录上进行拼接(字段不会增加)
基本语法:多条select语句构成: 每一条select语句获取的字段数必须严格一致(但是字段类型无关)
Select 语句1
Union [union选项]
Select语句2…
Union选项: 与select选项一样有两个
All: 保留所有(不管重复)
Distinct: 去重(整个重复): 默认的
SELECT *
FROM t2
UNION
SELECT *
FROM t2
SELECT *
FROM t2
UNION all
SELECT *
FROM t2
联合查询只要求字段一样, 跟数据类型无关
SELECT *
FROM t1
UNION all
SELECT *
FROM t2
联合查询的意义:
- 查询同一张表,但是需求不同: 如查询学生信息, 男生身高升序, 女生身高降序.
- 多表查询: 多张表的结构是完全一样的,保存的数据(结构)也是一样的.
FROM t2
WHERE `name`="大圣"
UNION all
SELECT *
FROM t2
WHERE `name`="aa"
Order by使用
在联合查询中: order by不能直接使用,需要对查询语句使用括号才行;另外,要orderby生效: 必须搭配limit: limit使用限定的最大数即可.
**
三、子查询
** 子查询: 查询是在某个查询结果之上进行的.(一条select语句内部包含了另外一条select语句).
子查询分类
子查询有两种分类方式: 按位置分类;和按结果分类
按位置分类: 子查询(select语句)在外部查询(select语句)中出现的位置
From子查询: 子查询跟在from之后
Where子查询: 子查询出现where条件中
Exists子查询: 子查询出现在exists里面
按结果分类: 根据子查询得到的数据进行分类(理论上讲任何一个查询得到的结果都可以理解为二维表)
标量子查询: 子查询得到的结果是一行一列
列子查询: 子查询得到的结果是一列多行
行子查询: 子查询得到的结果是多列一行(多行多列) (1,2,3出现的位置都是在where之后)
表子查询: 子查询得到的结果是多行多列(出现的位置是在from之后)
1、标量子查询
需求: 找到分类为科技的所有文章标题
SELECT title
FROM t22
WHERE category_id=(SELECT category_id FROM t11 WHERE name='科技')
列子查询
行子查询
表子查询
Exists子查询
参考文章:MySQL数据高级查询之连接查询、联合查询、子查询
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130075.html原文链接:https://javaforall.cn
边栏推荐
- Your local docbook2man was found to work with SGML rather than XML
- 验算移位距离和假设的通用性
- 招聘分析2020.6.1
- excel的lookup函数查找匹配关键字的坑
- LeetCode 0640.求解方程:过几天就看不懂了的迷惑性代码,但是是详解
- 电路板ROHS测试报告怎么办理?电路板ROHS检测流程
- Interpretation of ZLMediaKit server source code---RTSP push and pull
- Toronto Research Chemicals萜烯分析丨(+)-柠檬烯
- 【接入指南 之 直接接入】手把手教你快速上手接入HONOR Connect平台(中)
- 华为云连续5年保持中国政务云基础设施市场份额第一…
猜你喜欢
H3C_堆叠(IRF)及链路聚合在项目中的综合应用
Allegro软件Shape菜单下的每个命令的含义
Product Description丨MobPush fast integration method on Android side
Wuling Hongguang MINI EV, the only drawback is safety
「Web应用架构」轮询,SSE 和WebSocket,如何选择合适的?
【2011】【论文笔记】用THz-TDS观察水树——
老板加薪!看我做的WPF Loading!!!
Making Pre-trained Language Models Better Few-Shot Learners
机器人控制器编程实践指导书旧版-实践四 步进电机(执行器)
WebRTC源码分析 nack详解
随机推荐
Flexsim 发生器设置label和颜色
产品-Axure9英文版,A页面内a1状态跳转B页面的b2状态,(条件跳转状态)
文件包含漏洞复习总结
CAS客户端对接
浅谈泰山众筹系统开发技术说明及dapp链上众筹系统开发分析
R语言ggplot2可视化:使用ggpubr包的text_grob函数和as_ggplot函数可视化文本段落(将指定文本段落可视化出来、指定文本段可视化为图像)、face参数指定文本的字体样式
Your local docbook2man was found to work with SGML rather than XML
Toronto Research Chemicals BTK甜味剂配方丨D-Abequose
产品说明丨Android端使用MobPush快速集成方法
FlexSim仿真软件入门笔记:基本操作、快捷键
欧洲核子研究中心首次在量子机器学习研究中取得实效
Toronto Research Chemicals萜烯分析丨反式植物醇
兼具外观、性能、屏幕!华硕灵耀X 14火热抢购中
skywalking漏洞学习
老板加薪!看我做的WPF Loading!!!
微信小程序富文本标签rich-text
AVFrame related api memory management
Moonbeam于Moonbase Alpha构建新式XCM对EVM跨链功能
R语言使用ggpubr包的ggbarplot函数可视化柱状图、设置add参数为mean_se和jitter可视化不同水平均值的柱状图并为柱状图添加误差线(se标准误差)和抖动数据点分布
【接入指南 之 直接接入】手把手教你快速上手接入HONOR Connect平台(中)