oracle中连接表的方式有三种,内连接,外连接,自连接,下面重点说说内连接,外连接。
1:什么时候用内连接,什么时候用外连接?当两个表需要对比或者说需要显示出a表的某个属性对应b表中的空数据时
2:内连接,外连接的书写格式是 inner join on ;left/right out join on ,通常inner,outer省略不写。
3:写外连接在判断哪个表是基表的时候,实际情况还要看主外键,没有外键就不用看了。
内连接:
内连接查询和多表查询的效果是一样的,写法也比较简单,看例子;
内连接查询:
SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id;
多表查询:(常用)
SELECT *
FROM table1,table2
WHERE table1.id = table2.id;
这两个执行结果是一样的.
外连接:
就是以一个表为基表,left/right jion 另一个表on条件,查询出来的结果就是基表中的所有数据,另一表如果没有对应的数据就用null代替。
看例子:
执行 SELECT * FROM emp
结果:
执行 SELECT * FROM department
结果:
执行外连接查询语句(以department表为基表)
SELECT eid, ename, esalary, dname
FROM department
LEFT JOIN emp
ON emp.did = department.did; //查询每个部门的所有员工的编号,名字,工资,所在部门名称
结果:
再来看以emp表为基表的查询情况:
执行sql语句:
SELECT eid, ename, esalary, dname
FROM emp
LEFT JOIN department
ON emp.did = department.did; //这个sql语句没有什么实际意思,只是为了对比基表不一样,查询结果就不一样。
结果:
右连接的道理和左连接道理相同,这里就不演示了。