数据表
a表 | b表 | ||||
id | name | id | job | parent_id | |
1 | 张三 | 1 | Java | 1 | |
2 | 李四 | 2 | C | 2 | |
3 | 王五 | 3 | C++ | 4 |
交叉连接
笛卡尔集表(笛卡尔集表=列数之和,行数之积,笛卡尔集表内中有些数据是不符合要求的)
select * from a cross join b;
select * from a,b;
1 | 张三 | 1 | Java | 1 |
2 | 李四 | 1 | Java | 1 |
3 | 王五 | 1 | Java | 1 |
1 | 张三 | 2 | C | 2 |
2 | 李四 | 2 | C | 2 |
3 | 王五 | 2 | C | 2 |
1 | 张三 | 3 | C++ | 4 |
2 | 李四 | 3 | C++ | 4 |
3 | 王五 | 3 | C++ | 4 |
内连接
等值连接
select * from a inner join b on a.id=b.parent_id;
select * from a,b where a.id=b.parent_id;
1 | 张三 | 1 | Java | 1 |
2 | 李四 | 2 | C | 2 |
非等值连接(不能使用=号,其它符号可以,例如:>=,<=,<>,betwen and等)
外连接
左外连接:在oracle中,(+)出现在=右边,叫左外连接,(+)只能出现一次
select * from a,b where a.id=b.parent_id(+);
select * from a left join b on a.id=b.parent_id;
1 | 张三 | 1 | Java | 1 |
2 | 李四 | 2 | C | 2 |
3 | 王五 |
右外连接:(+)出现在=左边,叫右外连接
select * from a,b where a.id(+)=b.parent_id;
select * from a right join b on a.id=b.parent_id;
1 | 张三 | 1 | Java | 1 |
2 | 李四 | 2 | C | 2 |
3 | C++ | 4 |
全外连接
select * from a full join b on b.parent_id=a.id;
select * from a left join b on a.id=b.parent_id union select * from a right join b on a.id=b.parent_id;
1 | 张三 | 1 | Java | 1 |
2 | 李四 | 2 | C | 2 |
3 | 王五 | |||
3 | C++ | 4 |