文章目錄
- 表的內外連接(重點)
- 內連接
- 外連接
- 左外連接
- 右外連接

表的內外連接(重點)
內連接
- 內連接實際上就是利用where子句對兩種表形成的笛卡兒積進行篩選,我們前面學習的查詢都是內連接,也是在開發過程中使用的最多的連接查詢。
- 語法
select * from 表1 inner join 表2 on 連接條件 and 其他條件;
案例
顯示SMITH的名字和部門名稱
// 第一種,對兩張表做笛卡爾積
select ename,dname from emp,dept where emp.deptno=dept.deptno and ename='SMITH';
// 第二種,內連接
select ename,dname from emp inner join dept on emp.deptno=dept.deptno where ename='SMITH';
外連接
左外連接
-
左外連接,左側表的數據完全保留,右側如果沒有數據,對應的右側就全為空
-
語法
select * from 表名1 left join 表名2 on 連接條件 -
案例
// 見兩張表
學生表
create table stu(
id int,
varchar(30)
);
插入信息
insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
成績表
create table exam(
id int,
grade int
);
插入信息
insert into exam values(1, 56),(2,76),(11, 8);
查詢所有學生的成績,如果這個學生沒有成績,也要將學生的個人信息顯示出來
select * from stu left join exam on stu.id=exam.id;
右外連接
-
右外連接,右側表的數據完全保留,左側如果沒有數據,對應的左側就全為空
-
語法
select 字段 from 表名1 right join 表名2 on 連接條件; -
案例
對stu表和exam表聯合查詢,把所有的成績都顯示出來,即使這個成績沒有學生與它對應,也要顯示出來
select * from stu right join exam on stu.id=exam.id;
- 其實左外連接也可以達到右外連接的目的
- 列出部門名稱和這些部門的員工信息,同時列出沒有員工的部門
// 左外連接
select * from dept left join emp on dept.deptno=emp.deptno;
select * from dept left join emp on dept.deptno=emp.deptno order by dept.deptno asc;
// 右外連接
select * from emp right join dept on dept.deptno=emp.deptno;