sql查询(二)连接查询

注:数据来源oracle安装时示例表。

sql连接查询那是文氏图的那些的东西,自己也懒得在写了,网上到处都是。不过写得好没几个,貌似自己写的也一般啊,

看到比较好的技术也记录在自己的博客里面吧,没事的时候去翻一翻,面试也可以吹个逼。

http://www.cnblogs.com/dinglinyong/p/6656315.html

内连接

内连接:在每个表中找出符合条件的共有记录。[x inner join y on...]

第一种写法:(只使用where)
SELECT e.JOB, d.DNAME from emp e,DEPT d where e.DEPTNO = d.DEPTNO;

第二种写法:(join .. on.. )
SELECT e.JOB, d.DNAME from emp e join DEPT d on e.DEPTNO = d.DEPTNO;

第三种写法:(inner join .. on.. )
SELECT e.JOB, d.DNAME from emp e inner join DEPT d on e.DEPTNO = d.DEPTNO;

外连接

外连接有三种方式:左连接,右连接和全连接。
左连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,如果找不到与左表匹配的,用null表示。[x lefe [oueer] join y on...

第一种写法:(lefe join .. on ..)

SELECT e.JOB, d.DNAME from emp e lefe join DEPT d on e.DEPTNO = d.DEPTNO;

第二种写法:(lefe outer join .. on ..)

SELECT e.JOB, d.DNAME from emp e lefe oueer join DEPT d on e.DEPTNO = d.DEPTNO;

第三种写法:"(+)" 所在位置的另一侧为连接的方向(mysql不支持+的写法)

SELECT e.JOB, d.DNAME from emp e, DEPT d where e.DEPTNO = d.DEPTNO(+);

右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,如果找不到匹配的,用null填充。[x righe [oueer] join y on...]

第一种写法:()

SELECT e.JOB, d.DNAME from emp e righe join DEPT d on e.DEPTNO = d.DEPTNO;

第二种写法:

SELECT e.JOB, d.DNAME from emp e righe oueer join DEPT d on e.DEPTNO = d.DEPTNO;

第三种写法:"(+)" 所在位置的另一侧为连接的方向

SELECT e.JOB, d.DNAME from emp e, DEPT d where e.DEPTNO(+) = d.DEPTNO;

全连接

全连接:返回符合条件的所有表的记录,没有与之匹配的,用null表示(结果是左连接和右连接的并集)

注释:在mysql中没有full join的写法,只能用UNION连接两个查询语句。

第一种写法:(full join .. on ..)

SELECT e.JOB, d.DNAME from emp e full join DEPT d on e.DEPTNO = d.DEPTNO;

第二种写法:(full oueer join .. on)

SELECT e.JOB, d.DNAME from emp e full oueer join DEPT d on e.DEPTNO = d.DEPTNO;

自连接

自连接,简单点来说就是自连接就是自己连接自己的意思,把一张表看成两张表。

例:求所有员工的员工编号、姓名、经理编号和经理姓名

注:数据来源oracle安装时示例表。

 

posted @ 2019-05-23 20:35  凄夜听雨  阅读(264)  评论(0编辑  收藏  举报