专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

MySql: 从一个案例中学习 union&join查询

54_1.png

前言:

基础篇,大牛请绕行

今天用推进项目的时候,看到一条有点诡异的SQL语句,(SELECT…..) pic , 中间又没加as??

SELECT
course_base.*,
(SELECT pic FROM course_pic WHERE courseid = course_base.id) pic     
FROM
course_base

先贴一下两张表

course_base表

54_2.png

course_pic表

54_3.png

查询条件:course_base.id = pic.courseid

结果:第一章表的基础上添加了第二章表的pic字段

54_4.png

一开始弄不懂那个SQL语句,对UNION查询也不熟悉,以为是UNION查询,于是折腾学习了一番。

UNION查询

描述

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。是结果集进行上下合并,select后面的expression个数要一致,且类型要相近。

语法

MySQL UNION 操作符语法格式:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
ALL: 可选,返回所有结果集,包含重复数据。

示例

用上面的course_pic表为例

SELECT * FROM course_pic
union all
SELECT * FROM course_pic;

结果,courseid为297e7c……出现了两次,确实是上下整合了。去掉all就会把重复数据去掉。

54_5.png

54_6.png

回到那条有点个性的SQL,通过上面的学习表明UNION是上下连接,不是这种左右连接。后来想到了join(这才想到)

join查询

join常用的就是left join & [inner] join,笔者写join的思路是采用连线,举个例子。

a表(左表)name字段拼接b表(右表)vip字段

1、 让course_base 左连接到 course_pic, 两张表(a表和b表)拼在一起

54_7.png

2、 按条件 a.id = b.id 连线

54_8.png

  • left join查询,左边的全部保留,右边的有联系的才保留,其余空隙为NULL
  • join查询,左右两边有联系的保留

54_9.png

那么,回到那个挺有个性的SQL,改造一下

SELECT
course_base.*, pic
SELECT
course_base.*, pic
FROM
course_base
left join course_pic
on course_base.id = course_pic.courseid;

结果一样,,不过,以后还是用常规的join就好了,搞那么多花里胡哨的

54_10.png

希望对你有帮助!!

文章永久链接:https://tech.souyunku.com/29468

未经允许不得转载:搜云库技术团队 » MySql: 从一个案例中学习 union&join查询

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们