美文网首页
SQL查询单表数据之组合(三)

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

作者: 早起的年轻人 | 来源:发表于2020-02-22 20:51 被阅读0次

【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 来关联


完结

相关文章

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

    【SQL从一点一滴分析系列文章】为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询在分析 S...

  • SQL查询单表数据(一)

    本节讲述 基本的 select 查询单表数据语句 1 从单表中查询所有的行和列 查询表中所有的数据 在 SQL 中...

  • SQL常用命令书目录

    SQL常用命令之单表查询 SQL常用命令之多表查询 SQL常用命令之模糊查找 SQL常用命令之空值查询 SQL常用...

  • Mysql索引优化

    1、单表索引优化 单表索引优化分析 创建表 建表 SQL 表中的测试数据 查询案例 查询category_id为1...

  • 2021-08-29

    数据模型: 插入数据: 查询数据: 两表,连查询研究: 单表查询研究: 结果; 三表联查 结果: 项目思路:"""...

  • iOS数据库优化

    1.改变sql语句,做分表查询,内存组合数据 2.不改变sql语句,添加索引,加快查询速度。 3.区分对待数据库串...

  • 无限极分类-全路径方式

    创建表SQL 测试数据 组装SQL查询 查询结果

  • 用Excel做数据分析:商品组合

    这算数据分析?! 数据1:销售明细 数据2:商品组合清单 要求:在【销售明细表】中查询符合【商品组合清单】的销售单...

  • 数据库表行列转换

    行转列 创建表kecheng,并插入数据 查询该表,结构显示: 通过sql查询显示下图: SQL_A: SQL_B...

  • 延迟加载

    意义 在进行数据查询时,为了提高数据库查询性能,尽量使用单表查询,因为单表查询比多表关联查询速度要快。 如果查询单...

网友评论

      本文标题:SQL查询单表数据之组合(三)

      本文链接:https://www.haomeiwen.com/subject/fferqhtx.html