常州酒店網(wǎng)站建設(shè)代運(yùn)營公司排行榜
文章目錄
- 一. 內(nèi)連接
- 二. 外連接
- 1. 左外連接
- 2. 右外連接
一. 內(nèi)連接
利用where子句對兩種表形成的笛卡爾積進(jìn)行篩選,其實(shí)就是內(nèi)連接的一種方式
另一種方式是inner join
select 字段 from 表1 inner join 表2 on 連接條件 and 其他條件
現(xiàn)在有如下表
mysql> desc emp;
+----------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------------------+------+-----+---------+-------+
| empno | int(6) unsigned zerofill | NO | | NULL | |
| ename | varchar(10) | YES | | NULL | |
| job | varchar(9) | YES | | NULL | |
| mgr | int(4) unsigned zerofill | YES | | NULL | |
| hiredate | datetime | YES | | NULL | |
| sal | decimal(7,2) | YES | | NULL | |
| comm | decimal(7,2) | YES | | NULL | |
| deptno | int(2) unsigned zerofill | YES | | NULL | |
+----------+--------------------------+------+-----+---------+-------+mysql> desc dept;
+--------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------------------+------+-----+---------+-------+
| deptno | int(2) unsigned zerofill | NO | | NULL | |
| dname | varchar(14) | YES | | NULL | |
| loc | varchar(13) | YES | | NULL | |
+--------+--------------------------+------+-----+---------+-------+
- 使用內(nèi)連接查詢方式,顯示員工名為SMITH的名字和部門名稱
因?yàn)閱T工名在emp表中,但部門名稱在dept表中,所以需要對兩個表進(jìn)行笛卡爾積,也就是內(nèi)連接
mysql->select ename,dname from emp,dept where emp.deptno=dept.deptno and ename='SMITH'mysql->select ename,dname from emp inner join dept on emp.deptno=dept.deptno and ename='SMITH'
二. 外連接
外連接分為左外連接和右外連接
1. 左外連接
如果聯(lián)合查詢,左側(cè)的表完全顯示,就是左外連接
select 字段 from 表1 left join 表2 on 連接條件
現(xiàn)在有兩張表
mysql> select * from su; //學(xué)生表
+------+------+
| id | name |
+------+------+
| 1 | jack |
| 2 | tom |
| 3 | kity |
| 4 | nono |
+------+------+mysql> select * from exam; //成績表
+------+-------+
| id | grade |
+------+-------+
| 1 | 56 |
| 2 | 76 |
| 11 | 8 |
+------+-------+
可以看到,不是所有學(xué)生都有成績,也不是所有成績都有對應(yīng)的學(xué)生
- 查詢所有學(xué)生的成績,如果這個學(xué)生沒有成績,也要將學(xué)生的個人信息顯示出來
mysql> select * from su left join exam on su.id=exam.id;
+------+------+------+-------+
| id | name | id | grade |
+------+------+------+-------+
| 1 | jack | 1 | 56 |
| 2 | tom | 2 | 76 |
| 3 | kity | NULL | NULL |
| 4 | nono | NULL | NULL |
+------+------+------+-------+
su是左表,其信息會被完整顯示出來,此時如果右表沒有數(shù)據(jù),則會使用默認(rèn)值
2. 右外連接
如果聯(lián)合查詢,右側(cè)的表完全顯示我們就說是右外連接
select 字段 from 表1 right join 表2 on 連接條件
還是上述表
- 對su表和exam表聯(lián)合查詢,把所有的成績都顯示出來,即使這個成績沒有學(xué)生與它對應(yīng),也要顯示出來
mysql> select * from su right join exam on su.id=exam.id;
+------+------+------+-------+
| id | name | id | grade |
+------+------+------+-------+
| 1 | jack | 1 | 56 |
| 2 | tom | 2 | 76 |
| NULL | NULL | 11 | 8 |
+------+------+------+-------+
和左外連接大抵相同