一.联合查询

 1 -- 关键字: union
 2
 3 -- 语法
 4 select 语句1
 5 union[union 选项]
 6 select 语句2
 7 union[union 选项]
 8 ......
 9 union[union 选项]
10 select 语句n;

所谓的联合查询,就是将多个查询语句的结果进行纵向上的拼接,也就是将select语句2的查询结果放在select语句1的后面!很显然,总的记录数增加了,但是字段的数量并没有增加!

既然是多个查询记录的拼接,所以联合查询有一个最基本的语法,就是各个select语句查询结果的字段数应该是一样的,比如,不能一个3列,一个是4列!

这里的union选项跟以前学习的select选项是一样的,只是它们的默认值不一样:

1 -- 这里的union跟select的选项一样的,只是默认值不一样
2 -- all:显示全部记录
3 -- distinct : 去除重复数据(union默认选择的值)
4 select * from php_student
5 union all
6 select * from php_student;

当然,上面的查询结果毫无意义!

1.union的应用

表和数据

create table php_student(id int primary key auto_increment,name varchar(20),gender enum('male','female'),class_id tinyint unsigned,age int unsigned,home varchar(40),score tinyint unsigned
);insert into php_student values(null,'孙悟空','male',17,600,'花果山',98),(null,'蜘蛛精','female',18,500,'花果山',90),(null,'猪悟能','male',17,700,'高老庄',88),(null,'沙悟净','male',17,750,'流沙河',78),(null,'唐僧','male',17,30,'东土大唐',100),(null,'高翠兰','female',16,18,'高老庄',70),(null,'皇后','female',16,18,'东土大唐',73),(null,'小龙女','female',17,30,'流沙河',80),(null,'小猴子','male',16,100,'花果山',95),(null,'皇帝','male',16,60,'东土大唐',93),(null,'高翠华','female',16,16,'高老庄',80);

union主要应用在以下的几种情形:
第一.获得数据的条件,在同一个select语句中存在某种逻辑上的冲突,或者说很难在同一个逻辑内表示,此时,需要拆分成多个逻辑,也就是在多个select语句中分别实现再将最终的结果组合到一起!

 

/*
比如:现在要查询上面php_student中,高老庄的一个score最高分,和花果山中的一个最低分!
*/
-- 先查高老庄中的最高分
select * from php_student where home='高老庄' order by score desc limit 1;
-- 在查花果山中最低分
select * from php_student where home='花果山' order by score asc limit 1;-- 把两个查询结果连接在一起
select * from php_student where home='高老庄' order by score desc limit 1
union
select * from php_student where home='花果山' order by score asc limit 1;  -- 运行出错

这里有几点需要注意的地方:

1,  联合查询中如果使用到了order by,那么就必须要对select子句加上一对小括号();

    

1 (select * from php_student where home='高老庄' order by score desc limit 1)
2  union
3 (select * from php_student where home='花果山' order by score asc limit 1); -- 运行ok

一个小测试:

1 -- (一个问题)把高老庄按score进行降序排序,并对花果山按score升序排序,并联合在一起
2 (select * from php_student where home='高老庄' order by score desc )
3  union
4 (select * from php_student where home='花果山' order by score asc ); -- 结果是混乱,不符合要求

2,  如果联合查询中出现了order by子句,就必须配合上limit子句才能生效,当然,如果确实想显示全部的数据,可以在limit的后面加上一个很大的数,比如999999;

1 (select * from php_student where home='高老庄' order by score desc limit 9999999)
2 union
3 (select * from php_student where home='花果山' order by score asc  limit 9999999); -- 执行ok

第二,   如果一张数据表的记录数特别大,往往会导致查询效率的低下,此时,我们可以采取某种方式或者规律对数据表进行“水平切割”,此时,每张数据表的结构都是一样的,只是里面存放的数据不一样!此时,在根据某些条件进行查询的时候,可能每一张表都需要查询,最后通过union语句联合到一起!

 

转载于:https://www.cnblogs.com/mrszhou/p/7470548.html

高级数据操作--联合查询相关推荐

  1. 高级数据操作--连接查询

    一.连接查询--交叉连接 概念 表与表之间是有联系的! 所谓的连接查询,就是指将两张表或者多张表按照某个指定的条件,进行横向上的连接并显示! 所以,从结果上看,字段数增加了! 分类 根据连接查询的性质 ...

  2. MySQL数据库(17):高级数据操作-删除数据

    高级数据操作-删除数据 1.删除数据应该使用where进行条件控制 delete from 表名 where 条件; 2.删除数据可以使用limit来限制删除数量 delete from 表名 whe ...

  3. MySQL数据操作与查询笔记 • 【目录】

    持续更新中- 我的大学笔记>>> 章节 内容 第1章 MySQL数据操作与查询笔记 • [第1章 MySQL数据库基础] 第2章 MySQL数据操作与查询笔记 • [第2章 表结构管 ...

  4. 读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令

    查询数据 完整的查询指令: select  select选项 字段列表  from 数据源 where 条件 group by 分组 having 条件 order by 排序 limit 限制 se ...

  5. hive mysql类型,(二)Hive数据类型、数据定义、数据操作和查询

    1.数据类型 1.1 基本数据类型Hive数据类型长度例子TINYINT1byte有符号整数20 SMALINT2byte有符号整数20 INT4byte有符号整数20 BIGINT8byte有符号整 ...

  6. 小汤学编程之MySQL(二)——数据库操作、表结构操作、表数据操作、查询数据和数据类型

    一.数据库操作 1.创建数据库     2.查询数据库     3.修改数据库     4.使用数据库 二.表结构操作 1.创建表     2.查询表     3.修改表     4.删除表 三.表数 ...

  7. MySQL查询的进阶操作--联合查询

    目录 联合查询 联合查询 union 联合 合并: 将多条查询语句的结果合并成一个结果. 语法格式:查询语句1union查询语句2union ...... union的应用场景: 要查询的结果来自于多 ...

  8. mysql user表添加记录_《MySQL数据操作与查询》- 返校复习课练习题,创建数据库user_system,创建数据表user及user_ext...

    一.其它(共18题,100分) 1.创建数据库user_system CREATE DATABASE user_system 2.在数据库user_system中创建数据表user及user_ext, ...

  9. MySQL数据操作与查询笔记 • 【第7章 连接查询】

    全部章节   >>>> 本章目录 7.1 内连接查询 7.1.1 交叉连接(笛卡尔积) 7.1.2 内连接查询概要 7.1.3 内连接案例 7.1.4 自然连接 7.2 多表连 ...

最新文章

  1. 漫画:设计模式之 “工厂模式”
  2. 高并发下缓存与数据库双写不一致解决方案
  3. Eclipse的基本设置
  4. 【备忘录】技术笔记整理。
  5. lamba把逗号拼接的字符串转为list
  6. 一起来庆祝 .NET 20 周年!
  7. CF1039D-You Are Given a Tree【根号分治,贪心】
  8. docker 磁盘问题:device or resource busy
  9. iOS开源App整理
  10. 昨晚的我是歌手,人工智能也掺了一脚
  11. 生成式对抗神经网络code实现
  12. QT 用QAudio语音库实现音频信号的采集 以及发送到另一台电脑 播放
  13. 2021 年 4 月程序员工资统计,这太可怕了……
  14. 无法启动excel服务器以导入_无法启动 web 服务器unable to start embedded tomcat
  15. 关于Unicode字符集
  16. 企业微信的聊天记录保存在了哪里?
  17. 项目经理的修炼,直面需求变更
  18. 将列表类型的数据转换为树形数据
  19. 塞尔达传说修改器html,塞尔达传说荒野之息内存修改器修改服装教程
  20. Docker 中 latest 标签引发的困惑

热门文章

  1. 植物大战僵尸android11,植物大战僵尸自创版APK
  2. Vue-生命周期的理解+生命周期图示的理解
  3. 引用feignClient对象项目启动异常-Consider defining a bean of type ‘com.xxx.service.xxxRemote‘ in your configura
  4. c语言变量名用一个字母,C语言变量命名规则
  5. 紧随时代的步伐--Java8特性之接口默认方法
  6. bzoj 2299(裴蜀定理)
  7. web3:颠覆互联网还是白日梦一场?
  8. FFMPEG 压缩视频文件
  9. 【Windows网络重置】
  10. golang计算任意两点间的方位角