MySQL数据库之子查询与合并查询

温馨提示:本文阅读需要5分钟,建议收藏后阅读!


各位宝宝们

我们今天一起来了解

MySQL数据库的子查询与合并查询


子查询


任务:

我们现在想要找出分公司人数最多的总经理的姓名。


方案一:


select office_id from employee group by office_id order by count(employee_id) desc limit 1;


要出人数最多的分公司的 ID 号码


select employee_name from employee where office_id=1003 and job_title='总经理';


然后再找出这个分公司的总经理是谁

那我们可不可以用一条查询语句来完成这个任务呢?


方案二:


select employee_name from employee where office_id=(select office_id from employee group by office_id order by count(employee_id) desc limit 1) and job_title='总经理';


这个就是我们的子查询了


子查询就是指用 select 查询的是另一个查询的结果。

注:子查询是从最内层的查询开始执行的。

子查询的分类:


类型一(根据子查询的返回值):

一个子查询会返回一个标量(单一值),一个行, 一个列,一个表

这些子查询被称为标量子查询,行子查询,列子查询,表子查询。


类型二根据子查询的出现条件语句):

where 子查询  

from 子查询


那么我们刚才使用的查询就是


标量子查询(返回 office_id  单一值), where子查询(使用了where语句)


select employee_name from employee where office_id=(select office_id from employee group by office_id order by count(employee_id) desc limit 1) and job_title='总经理';


任务:

查询电话有10的公司的所有员工。

select * from employee where office_id in(select office_id from office where phone like '%10%');


列子查询,where 子查询


任务:

查询员工id=18的员工信息

select a.* from (select employee_name,gender,email from employee where employee_id =18) a;


行子查询, from子查询

我们实际的使用中很少这么用,就是给大家演示一下行子查询!


任务:

统计分公司(office_id=1003)的男女员工人数


select count(a.employee_name),a.gender from (select employee_name,gender from employee where office_id=1003) a group by a.gender;


表子查询, from 子查询


select employee_name,gender from employee where office_id=1003;


子查询返回的一张表所以是一个表子查询!


带 exists 关键字的子查询

内层查询语句不返回查询记录,而是返回一个真假值(满足条件记录时候,就返回一个true,否则返回false)


select employee_name,gender,email,job_title from employee where exists(select * from employee where employee_name='李娜');


显然我的名字并不在这个数据表中,返回一个空(empty)


select employee_name,gender,email,job_title from employee where exists(select * from employee where employee_name='成龙');


我们的表中是有成龙的,所以可以返回数据。


这个带 exists 关键字的子查询语句,更适合我们的数据权限控制,当子查询成立的时候才会显示数据,否则我们就不显示数据!


带 any 关键字的子查询

只要满足内层查询语句返回结果中的任意一个,就为true。就可以执行外层查询语句。


select order_id,customer_id,order_number,order_date from `order` where order_id = any(select order_id from order_detail where buy_number>49);


这个就是查询所有购买数量大于49的订单的信息!


带 all 关键字的子查询

all 关键字表示满足所有条件,即满足内层查询语句返回的所结果,才可以执行外层的查询语句。


select order_id,customer_id,order_number,order_date from `order` where total_money> all(select price*10 from order_detail);


所有满足订单的总金额大于单价*10的订单的信息


合并查询


将多条select语句结果,合并在一起,称为合并查询

任务:

找出公司人数最多的总经理信息和office_id为1001分公司所有女生的信息。


select office_id from employee group by office_id order by count(employee_id) desc limit 1



从表中我们可以看出,人数最多的分公司 id 是1003不是 1001

so!我们可以分别来查询出这两个信息                                                                                                                                                                

select employee_name,gender,email from employee where office_id = (select office_id from employee group by office_id order by count (employee_id) desc limit 1) and job_title='总经理';



select employee_name,gender,email from employee where office_id = 1001 and gender='女';



那么该如何让他们出现在同一张表上


select employee_name,gender,email from employee where office_id = (select office_id from employee group by office_id order by count (employee_id) desc limit 1) and job_title ='总经理' union select employee_name ,gender,email from employee where office_id=1001 and gender='女'; 



当获得数据的条件出现逻辑冲突,或者很难在一个逻辑内表示,就可以拆分成为多个逻辑,分别实现最终将结果用(union 或者union all)合并在一起。这个就是合并查询!


任务:

找出公司所有女生的信息和上海公公司所有员工的信息。


select employee_name,gender,email from employee where gender='女';

                                       


select employee_name,gender,email from employee where office_id = 1001;



select employee_name,gender,email from employee where gender='女' union select employee_name,gender,email from employee where office_id =1001;


只有21条记录


select employee_name,gender,email from employee where gender='女' union all select employee_name,gender,email from employee where office_id=1001;



总结 union 与union all 的区别 :

union : 有去重的功能

union all:没有去重的功能


合并查询语法要求 :

二个需要合并的语句,字段的个数要求一致,可以允许字段的类型不一致。


select employee_name,gender,email from employee where gender='女' union select employee_name,gender,office_id from employee where office_id=1001;



数据库到这里的话

初级部分就算是基本结束了

一般的查询问题应该是没有问题的

宝宝们勤加练习哈!


给大家一点小建议:

开发的时候无所谓,真的发布项目的时候,一定要设置一个复杂一点的密码!前段时间看新闻,好像朝鲜的一个系统就被破解了,原因就是密码太简单,一下就被猜出来了。。。 

伙伴们呀!可长点心吧!




有任何问题都可以在文章留言,娜姐都看着的呢!

合作,投稿,转载,版权问题请联系 李娜:Lina_Java


娜姐带你用 Eclipse 写一个 Servlet

【福利合集】JavaSE 高阶篇文章汇总

为什么有些 专业程序员 做出的软件 不被认可?

程序员就是这样聊天把女朋友聊没的。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容