11,sql 合并结果集

合并结果集(垂直)
语法:
    union  #去重复行合并
    union all  #不去重复合并
作用:
    将多个结果集,垂直拼接,统一返回
    汇总返回
注意:
    合并的多个结果集之间的列数和类型要一一对应
    合并结果集,是垂直数据合并,数据行之间不会有关联,不要求合并的结果表存在主外键关系
    重复行,一行中的所有数据都重复
1,创建两个表


create table b1(
	b_id int,
	b_name varchar(20),
	b_age tinyint unsigned
	
)
create table b2(
	b2_id int,
	b2_name varchar(20),
	b2_age tinyint unsigned
)

插入数据
insert into  b1 values (1,'111',20),(2,'22',3)
insert into  b2 values (2,'b111',20),(2,'22',3)
然后进行查询处理


union 的意思是合并,并且去掉重复的数据
select * from 表名 union select * from 表名

union all 的意思是合并所有的数据
select * from 表名 union all select * from 表名

# 去重复合并 [将a和b的数据去重复合并成一个结果集]

SELECT * FROM a
UNION
SELECT * FROM b;



# 不去重复合并

SELECT * FROM a
UNION ALL
SELECT * FROM b

合并结果集(水平)

1,内连接

作用:可以查到多个表中行的所有数据

语法

select * from 表1 join 表2 on 表1.主键 = 表2.主键(标准写法是,所有数据库都可以用)

select * from 表1,表2 where 表1.主键 = 表2.主键  (非标准写法,只在Mysql中可用)

注意事项,表也可以起别名

起别名方法  一种是空格隔开,一种是as 

1,表1 表1的别名

2,表1 as 表1的别名

select * from 表1 as 表1的别名  join 表2 as 表2的别名 on 表1的别名.主键 = 表2的别名.主键(标准写法是,所有数据库都可以用)

select * from 表1,表2 where 表1.主键 = 表2.主键  (非标准写法,只在Mysql中可用)

1,查询员工编号、姓名以及所属部门的编号和部门名称

语法

标准写法

select 表1.列名1,表1.列名2 表2.列表1 from 表1 join 表2 on 表1.主键 = 表2.主键

非标准写法

select 表1.列名1,表1.列名2 表2.列表1 from 表1,表2 where 表1.主键 = 表2.主键



select e.eid , e.ename,  d.did , d.dname from t_employee e join t_department d on e.eid = d.did
select e.eid , e.ename,  d.did , d.dname from t_employee e,t_department d where e.eid = d.did

添加额外的条件筛选
如果有额外的条件(非主外键相等) 两种都正常添加where即可! 添加条件
语法
标准写法
正常写完后面加上where 然后跟上条件就行
select 表1.列名1,表1.列名2,表2.列名1 from 表1 join 表2 on 表1的主键 = 表2的主键 where  表1.列名2 > 5(这种条件)

select e.eid , e.ename,  d.did , d.dname from t_employee e join t_department d on e.did = d.did where e.eid > 10


非标准写法直接后面使用and or就行
select e.eid , e.ename,  d.did , d.dname from t_employee e, t_department d where e.did = d.did And e.eid > 10

多个表甚至n个表内连接查询

语法

select 表1.列名1,表1.列名2,表2.列名1 from 表1 join 表2 on 表1的主键 = 表2的主键 join 表3 on 表3.主键 = 表1.主键

使用 from  A   join   B on  A.主键 = B.主键    join  C   on A.主键 = C.主键


select e.eid , e.ename,  d.did , d.dname,j.jid,j.jname from t_employee e join t_department d on e.did = d.did   JOIN t_job j on e.eid = j.jid 



非标准语法


select 表1.列名1,表1.列名2,表2.列名1 from 表1 ,表2,表3 where 表1的主键 = 表2的主键 and 表3.主键 = 表1.主键


select e.eid , e.ename,  d.did , d.dname,j.jid,j.jname from t_employee e, t_department d ,t_job j where e.did = d.did and e.eid = j.jid 

多个表甚至n个表内连接查询并且添加条件

1,标准语法

标准语法在最后面添加   where   条件
select e.eid , e.ename,  d.did , d.dname,j.jid,j.jname from t_employee e join t_department d on e.did = d.did   JOIN t_job j on e.eid = j.jid WHERE e.ename like '黄%'

2,非标准语法

非标准语法   and or 添加即可


select e.eid , e.ename,  d.did , d.dname,j.jid,j.jname from t_employee e, t_department d ,t_job j where e.did = d.did and e.eid = j.jid and e.ename like '黄%'

外连接查询
/*
   语法:
       表1 别名 left | right [outer] join 表2 别名 on 主 = 外键
   作用:
       连接的作用和内连接一致
       外连接可以通过left或者right指定一个逻辑主表,逻辑主表的数据一定会显示全
   注意:
       内连接-> 必须存在主外键 主外键相等
       外连接-> 指定一个逻辑主表,一定会显示全
       外连接的outer可以省略  left join = left outer join 
       经验: 如果有逻辑主表,就将逻辑主表放在第一位, 后面全部是左外连接
*/
语法
在 JOIN 前面添加 left 或者right,尽量把主逻辑表放在左边,之后直接都left 就行


select e.eid,e.ename,d.did,d.dname,j.jid from t_employee e left Join t_department d on e.eid = d.did left JOIN t_job as j on j.jid  = e.eid

内外连接总结

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值