SQL基础_2多表功能

本文详细探讨了SQL中的多表查询技术,包括两表和三表的父子查询与连接查询架构,深入讲解了多表简便连接以及子查询在不同场景下的组合应用。同时,还介绍了如何处理多表查询的结果以及子查询在各种位置的用法,为SQL查询提供全面的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 两表_父子查询和连接查询架构

1 嵌套查询 
select * FROM  父表                               
WHERE  相同列  IN  (SELECT 相同列 FROM 子表)     --1.子表在父表中存在的数据

SELECT * FROM  父表  
WHERE  相同列  NOT IN  (SELECT 相同列 FROM 子表) --2.子表不在附表中存在的数据

--说明:附带属性:用相同字段连接,通过子句属性,显示父句中匹配的数据


2 链接查询
SELECT * FROM1 AS a   FULL  JOIN2 AS b   --1.两表全部连接,包括空值 
ON  a.相同列=b.相同列                            

SELECT * FROM1 AS a   INNER JOIN2 AS b   --2.两表有效值链接
ON  a.相同列=b.相同列

SELECT * FROM1 AS a   LEFT  JOIN2 AS b   --3.以左表为准,包括空值
ON  a.相同列=b.相同列

SELECT * FROM1 AS a   RIGHT JOIN2 AS b   --4.以右表为准,包括空值
ON  a.相同列=b.相同列

SELECT * FROM1 AS a         JOIN1 AS b   --5.自连接,同一列分类排序
ON  a.相同列=b.相同列

--说明:连表后去掉重复列名:逐个显示列

2 三表父子查询和连接查询架构

1 三表子查询_重复                          
select * 
from1 
where  相同列 in ( select 相同列 
                  from2  
                  where  身份证 in ( select 相同列 
                                    from3 ))


2 三表子查询_不重复   
select * 
from1 
where  相同列 in ( select 相同列 
                  from2  
                  where  身份证 not in ( select 相同列 
                                        from3 ))
                                        
--说明:三表嵌套,赛选不重复数据,最下一层是not in 上一层是in,这就是一个逻辑反转负负得正的结果       
 
 
3 三表连接_重复 
select * 
from1 as a join2 as b  on a.1相同列 = b.2相同列
               join3 as c  on b.2相同列 = c.3相同列


4 三表连接_不重复 
select * 
from1 as a join2 as b  on a.1相同列 != b.2相同列
               join3 as c  on b.2相同列 != c.3相同列

3 多表简便连接

1 二表简便连接
select * 
from1 ,2   
where1.相同列 =2.相同列 

2 三表简便连接
select  *
from1 a,2 b,3 c
where   a.身份证号=b.身份证号   
 and    b.参合家庭编号=c.参合家庭编号

--说明:三表连接相同,结果正常显示没毛病,如果是显示三表连接不相同的,那么在连接的 = 号就有一个逻辑关系,类似于负负得正的关系

4 子查询组合连接查询

SELECT *  from                                            --1总查询模型

	(select *                                             --2子查询1
	 from   父表1                                          
	 where1相同列  in   (select1相同列 
                  	        from   子表1   ) )  AS  a
                  	        
JOIN                                                      --3表连接名

	(select *                                             --4子查询2
	 from 父表2                                          
	 where2相同列  not in   (select2相同列 
                                from  子表2) )  as  b
ON  a.1相同列 = b.2相同列                               --5表连接条件

5 多表查询结果处理

--说明:union的功能不仅可以合并相同字段结果,也可以达到去掉重复的结果
--说明:字段必须相同

1 合并结果:列必须相同
SELECT1,列2,列3  FROM  数据表  WHERE  
UNION                                       
SELECT1,列2,列3  FROM  数据表 WHERE  

2 结果新建表
SELECT   *  
 INTO 新建表名 
   FROMSELECT  * FROM1  
          UNION                            
          SELECT  * FROM2AS  新表名

3 批量合并结果
careate view 视图名 as
select * from1
union all
select * from2
......其他所有表
--说明:使用union all 上面不能接别的语句,会报错

6 子查询各位置用法

说明:where位置的子查询是最常用的.

--1单句from位置,具体用途待研究
select * from (select 统筹支付,count(*) 次数  --门诊结算金额出现频率前20名
               from T_医院门诊结算单_西丰
               where 统筹支付>0
               group by 统筹支付
               order by 次数 desc)
where rownum<21;
    
 --2union位子 双句子查询,两句结果合并
  select count(*) 
  from (select 身份证号
   		from T_医院门诊结算单_西丰
   		group by 身份证号
        having sum(统筹支付)>0
        
  union  --合并去重
      
  select 身份证号
  from T_医院住院结算单_西丰
  group by 身份证号
  having sum(统筹支付)>0);  
  
--3 from位置 连接查询带子查询
 select * from (查询语句)  join (查询语句)  on 条件连接
 
--4 select位置的子查询
select *,(select 想要在父表显示的列名1 
          from 子表1 
          where 父表.相同列 = 子表1.相同列  ) as1 ,
          
         (select 想要在父表显示的列名2 
          from 子表2 
          where 父表.相同列 = 子表2.相同列  ) as2
from  父表 
--格式说明:新增列子查询中:select 只能显示一列信息,多了报错,如果想显示多列可以再写一个,where 中设定的条件就是两个表连接的内容
--重点说明:如果是新增的列参与运算,不能用as后的名字,需要用新增的运算格式
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值