sql多表查询 内连接,外连接

sql多表查询和子查询以及连接查询

数据库查询,尽量使用多表查询,减少子查询,子查询相对耗时。

1  多表查询

1.1 内连接查询分为两类:

隐式内连接: select * from A,B where 条件

隐式连接使用别名:select * from A 别名1,B 别名2 where 别名1.xx=别名2.xx;

显示内连接: select * from A inner join B on 条件 (inner可以省略)

显示连接使用别名: select * from A 别名1 inner join B 别名2 on 别名1.xx=别名2.xx

举例:

SELECT * FROM category c,product p WHERE c.cid=p.category_id;

关于 FROM a,b 和 a LEFT JOIN b on 的区别

两个表a,b相连接,要取出id相同的字段 
select * from a ,b where a.aid = b.bid这是仅取出匹配的数据. 

此时的取出的是: 
1 a1 b1 
2 a2 b2 

那么left join 指: 
select * from a left join b on a.aid = b.bid 
首先取出a表中所有数据,然后再加上与a,b匹配的的数据 
此时的取出的是: 
1 a1 b1 
2 a2 b2 
3 a3 空字符 

https://blog.csdn.net/jovi_zhao/article/details/83143517

1.2 外连接

外连接有两种方式,一种是左外连接,一种是右外连接

左外连接:select * from A left outer join B on条件

右外连接:select * from A right out join B on 条件

左外连接就是左边的表的内容全部显示,然后匹配右边的表,如果右边的表匹配不到,则空

右外连接就是右边的表的内容全部显示,然后匹配左边的表,如果左边的表匹配不到,则空

1.3 总结

内连接就是两个表的交集

左外连接就是左边表加两表交集

右外连接就是右边表加两表交集

2  子查询

子查询就是查询中还有查询,就是一条select语句结果作为另外一条select语法的一部分(查询结果,查询条件,表等)

 

2.1子查询出现在where后是作为条件出现的

比如:查询本公司工资最高的员工的详细信息

用子查询select* from emp where sal=(select max(sal)from emp)

exists关键字select * from emp where exists(select max(sal) from emp)

只要(select max(sal) from emp)有结果则执行select * from emp,否则不执行

 

作为条件有以下几种情况

单行单列:可以使用=,>,<,>=,<=,!=多行单列(集合)可以用All ANY IN not IN单行多列(对象),就是一行,像一个对象一样什么属性都有多行多列:多行多列一直用在from后面作为表

单行单列举例:select * from emp where sal >(select avg(sal) from emp)

多行多列举例:select * from emp where sal> All(select sal from emp where deptno=10)

单行多列举例:select * from emp where(job,deptno,sal)IN(select job,deptno,sal from emp where ename='殷天正');(查询和殷天正一样工作,工号,工资的人的工作,工号,工资从emp表中)

 

2.2 子查询出现在from之后是作为表存在的

作为表举例 select e.emono,e.ename from(select * from where deptno=30) e还给表起了一个别名e
 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值