sql多表查询

交叉链接查询函数

这种查询方式基本不会使用,缘由就是这种查询方式获得的是两个表的乘积(笛卡儿集)spa

语法就是select * from a,b;对象

内链接查询,能够有效的去除笛卡尔集现象ci

内链接查询分为两类:class

隐式内链接 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.xxselect

举例:语法

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

外链接总结

外链接有两种方式,一种是左外链接,一种是右外链接查询

左外链接:select * from A left outer join B on条件右外链接:select * from A right out join B on 条件左外链接就是左边的表的内容所有显示,而后匹配右边的表,若是右边的表匹配不到,则空右外链接就是右边的表的内容所有显示,而后匹配左边的表,若是左边的表匹配不到,则空

总结:

内链接就是两个表的交集

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

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

子查询

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

子查询的用处不少好比:查询本公司工资最高的员工的详细信息

select * from emp where sal=max(sal)这个是错误的,缘由是聚合函数不能够用在条件中,要想解决这个问题,只能用子查询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,不然不执行

子查询出如今where后是做为条件出现的

子查询出如今from以后是做为表存在的

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

做为条件有如下几种状况

单行单列:可使用=,>,<,>=,<=,!=多行单列(集合)能够用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表中)

相关文章
相关标签/搜索