SQL查询单表数据之组合(三)

【SQL从一点一滴分析系列文章】为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询
在分析 SQL 时,也会同时分析 mybatis 、Hibernate 中的相关操作
点击查看详情

本节讲述 基本的 select 查询单表数据语句

1 对查询数据结果集的组合(并集)

有这样的需求,要交来自多个表的数据组织到一起,就像是一个结果集叠加到另一个上页面一样,例如有两个表

表一 用户 t_user 表


在这里插入图片描述

表二 部门 t_dep 表


在这里插入图片描述

我们要显示 t_user 表中的用户的 名字和年龄以及 t_dep 表中用户的名字年龄,我们可以使用 union all 来把多个表中的行组合到一起

select user_name,user_age 
    from t_user 
    union all 
select dep_user_name,dep_user_age 
    from t_dep

查询结果如下


在这里插入图片描述

我们可以看到有两条重复 张三 数据,如果要去重,我们可以使用 union 运算符

select user_name,user_age 
    from t_user 
    union  
select dep_user_name,dep_user_age 
    from t_dep

UNION 操作符用于合并两个或多个 SELECT 语句的结果集
UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

2 组合两个表中相关的行

例如这种情况,要显示用户表中所有用户的姓名,以及每个员工的心情日志,这些数据存储在两个独立的表中


select u.user_name,d.dep_user_flag
     from t_user u,t_dep d
where u.user_id = d.dep_user_id

这两个表中通过 用户的 id 来关联,用户表中 user_id ,部门表中,dep_user_id 为用户在用户表中对应的id.

3 对查询数据结果集的组合(交集)

需要查找两个表中共同的行,但是有多个列可以用来联接这两个表,如下

在 MySql 和 SQL Server 中,可使用多个联接条件,将 user 表 与 dep 表中联接起来

select u.user_name as userName,d.dep_user_flag userFlag,d.dep_user_age as age
    from t_user u,t_dep d
where 
    u.user_name = d.dep_user_name 
    and 
    u.user_age = d.dep_user_age

或者使用 join on 子句联接

select u.user_name as userName,d.dep_user_flag userFlag,d.dep_user_age as age
    from t_user u 
    join t_dep d
    on  (
        u.user_name = d.dep_user_name 
        and 
        u.user_age = d.dep_user_age)
4 从一个表中查询另一个表没有的值(两个表的补集)

MySQL 和 SQL Server 中

select u.user_name as userName,u.user_age as age
    from t_user u
where  u.user_name not in (select dep_user_name from t_dep)

使用子名查出 dep 表中所有的 user_name,然后外层查询则从 user 表中查找 子查询结果中没有的行

Oracle 中

select u.user_name from t_user u
minus 
select d.dep_user_name from t_dep d

minus指令是运用在两个 SQL 语句上。它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现

DB2 和 PostgreSQL 中使用集合操作 except

select u.user_name from t_user u
except 
select d.dep_user_name from t_dep d
5 向查询中增加联接而不影响其他联接

例如 用户信息表 user ,部门信息工作表 dep ,员工奖励表 bonus 表,我们需要返回所有的员工信息、他们工作部门的心情信息、以及所获得的奖励,在这里,并不是每个员工都有部门心情信息,也并不是每个员工有奖励信息,但是我们希望把所有的信息查询出来,这时我们可以这样来写

在 MySQL 、DB2、 PostgreSQL 和SQL Server 中


select u.user_name,u.user_age,d.dep_user_flag,b.bonus_count
from t_user u 

left join t_dep d on d.dep_user_id = u.user_id 
left join t_bonus b on b.bonus_user_id = u.user_id 


在这里插入图片描述

这三个表中 分别通过 user_id 来关联


完结

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

推荐阅读更多精彩内容