mysql 联合查询_MySQL联合查询

mysql 联合查询_MySQL联合查询MySQL联合查询联合查询:union,将多次查询(多条select语句)的结果,在字段数相同的情况下,在记录的层次上进行拼接。基本语法联合查询由多条select语句构成,每条select语句获取的字段数相同,但与字段类型无关。基本语法:select语句1+union+[union选项]+select语句2+…;union选项:与select选项一样有两种all:无论重复…

大家好,又见面了,我是你们的朋友全栈君。

MySQL联合查询

联合查询:union,将多次查询(多条select语句)的结果,在字段数相同的情况下,在记录的层次上进行拼接。

基本语法

联合查询由多条select语句构成,每条select语句获取的字段数相同,但与字段类型无关。

基本语法:select 语句1 + union + [union选项] + select 语句2 + …;

union 选项:与select选项一样有两种

all:无论重复与否,保留所有记录;

distinct:表示去重,为默认选项。

执行如下 SQL 语句,进行测试:

— 联合查询,默认去重

select * from class

union distinct

select * from class;

— 联合查询,保留所有记录

select * from class

union all

select * from class;

a564e83e784350d2e1aa4b9b3a6c18e7.png

如上图所示,展示了联合查询的两种形式。特别地,联合查询只要求字段数相同,而跟类型无关。执行如下 SQL 语句,进行测试:

— 联合查询,字段数相同,类型不同

select id, grade, room from class

union distinct

select name, age, id from student;

1dc714d5add352db6cf580e7350ab9dc.png

如上图所示,联合查询只保留了第一张表的字段,而不保留第二张表的字段。

意义

联合查询的意义有两种,分别为:

查询同一张表,按时需要不同,例如查询学生信息,要求男生按年龄升序排序,女生按年龄降序排序;

多表查询,多张表的结构是完全一样的,保持的数据结构也是一样的。

此外,如果数据量非常的大,就要进行分表(垂直分表和水平分表),而分表的依据无外乎数据多不多和常不常用。

排序

首先,让我们看看student表中的数据:

7fa388a8a6751ec181f86fb4aaee66a3.png

接下来,给出一个需求: 在student表中,让男生按年龄升序排序,让女生按年龄降序排序。根据我们刚刚学到的联合查询,貌似很容易啊!执行如下 SQL 语句,进行测试:

— 在 student 表中,按年龄,男升女降

select * from student where gender = “boy” order by age asc

union

select * from student where gender = “girl” order by age desc;

aa10257a3ebe363f85fab20777cf77f6.png

如上图所示,呃,好吧,貌似出错啦!这是因为要想在联合查询中使用order by,我们必须将select语句用括号括起来。执行如下 SQL 语句,进行测试:

— 在 student 表中,按年龄,男升女降

(select * from student where gender = “boy” order by age asc)

union

(select * from student where gender = “girl” order by age desc);

071bbaf82db3391e364b7b7e700f9ba9.png

如上图所示,啊,我们都已经将select语句用括号括起来了,但是男生和女生也没有按我们的目的实现啊!好吧,这是因为要想在联合查询中使order by生效,我们必须将其与limit搭配使用,而limit的限定数,我们设置为一个非常大的数即可。执行如下 SQL 语句,进行测试:

— 在 student 表中,按年龄,男升女降

(select * from student where gender = “boy” order by age asc limit 666)

union

(select * from student where gender = “girl” order by age desc limit 666);

517968d6b23b1dd4587cdbc7da20a5e0.png

如上图所示,显然,这次咱们的目的实现啦!

温馨提示:符号[]括起来的内容,表示可选项;符号+,则表示连接的意思。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132518.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IDEA卸载和删除注册表

    IDEA卸载和删除注册表当我们在用idea的时候,idea的环境出现了莫名其妙的问题,怎么也找不到问题原因的时候可以试着把idea卸载重新安装。但是如果你卸载的时候没有删除干净注册表里的信息。就算再次安装回来也还是解决不了问题。如何删除干净IDEA1.卸载程序打开控制面板,选中idea点击卸载;2.删除注册表windows+R输入regedit进入注册表,右键一级菜单HKEY_CURRENT_USER,右键查找,输入idea,会找到jetbrains,…

    2022年6月29日
    548
  • ubuntu18.04安装中文输入法_ubuntu搜狗输入法乱码

    ubuntu18.04安装中文输入法_ubuntu搜狗输入法乱码转自:http://blog.csdn.net/u011795345/article/details/53041707最近刚给笔记本装了Ubuntu+win10双系统,但是ubuntu16.04没有自带中文输入法,所以经过网上的一些经验搜索整合,分享一下安装中文输入法的心得。本文主要介绍了谷歌拼音跟ibus中文输入法的安装,由于ibus输入法问题较多,所以目前我用的是谷歌输入法。

    2022年9月26日
    2
  • BZOJ4827:[HNOI2017]礼物(FFT)

    BZOJ4827:[HNOI2017]礼物(FFT)

    2022年4月2日
    44
  • 线程 ManualResetEvent 类「建议收藏」

    线程 ManualResetEvent 类「建议收藏」Reset():当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时, 它调用Reset以将ManualResetEvent置于非终止状态。此线程可被视为控制ManualResetEvent。为了把状态修改为无信号的,必须调用ReSet()方法。WaitOne():调用ManualResetEvent上的WaitOne的线程将阻止,并等待信号。  Se

    2022年7月13日
    16
  • C++中list用法详解[通俗易懂]

    C++中list用法详解[通俗易懂]1.关于list容器list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。list的实现大概是这样的:list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。前驱元素指针域保存了前驱元素的首地

    2022年7月12日
    28
  • phpstom 2022.01 激活码【最新永久激活】2022.02.03

    (phpstom 2022.01 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月1日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号