目錄
- 笛卡爾積查詢 沒(méi)卵用 略
- 內(nèi)連接查詢====>只連接匹配的行
- 外鏈接之左連接:優(yōu)先顯示左表全部記錄
- 外鏈接之右連接:優(yōu)先顯示右表全部記錄
- 全外連接
0. 需求
在多個(gè)表中查詢需要的數(shù)據(jù)
例如:有班級(jí)表 和學(xué)生表
給你已給班級(jí)名稱(chēng) 請(qǐng)查詢所有的學(xué)員數(shù)據(jù)
先查班級(jí)表 得到一個(gè)班級(jí)的id 再根據(jù)id去學(xué)院表查詢對(duì)應(yīng)的學(xué)員
!!!!!!語(yǔ)法!!!!!!
SELECT 字段列表
FROM 表1 INNER|LEFT|RIGHT JOIN 表2
ON 表1.字段 = 表2.字段;
準(zhǔn)備表 :
create table emp (id int,name char(10),sex char,dept_id int);
insert emp values(1,"大黃","m",1);
insert emp values(2,"老王","m",2);
insert emp values(3,"老李","w",30);
create table dept (id int,name char(10));
insert dept values(1,"市場(chǎng)");
insert dept values(2,"財(cái)務(wù)");
insert dept values(3,"行政");
mysql> select * from dept;
+------+--------+
| id | name |
+------+--------+
| 1 | 市場(chǎng) |
| 2 | 財(cái)務(wù) |
| 3 | 行政 |
+------+--------+
mysql> select * from emp;
+------+--------+------+---------+
| id | name | sex | dept_id |
+------+--------+------+---------+
| 1 | 大黃 | m | 1 |
| 2 | 老王 | m | 2 |
| 3 | 老李 | w | 30 |
+------+--------+------+---------+
1. 笛卡爾積查詢 沒(méi)卵用 略
2. 內(nèi)連接查詢====>只連接匹配的行
查詢關(guān)鍵字:inner join
on 用于多表查詢 對(duì)條件進(jìn)行限制
!!!!!注意 on 與where 區(qū)別!!!!!
where 用于一個(gè)字段的值與給定的值比較
on 用于兩個(gè)字段的值比較
mysql> SELECT * FROM emp INNER JOIN dept ON emp.dept_id = dept.id;
+------+--------+------+---------+------+--------+
| id | name | sex | dept_id | id | name |
+------+--------+------+---------+------+--------+
| 1 | 大黃 | m | 1 | 1 | 市場(chǎng) |
| 2 | 老王 | m | 2 | 2 | 財(cái)務(wù) |
+------+--------+------+---------+------+--------+
3. 外鏈接之左連接:優(yōu)先顯示左表全部記錄
查詢關(guān)鍵字:left join
左 指的是 放在左邊的表
mysql> select *from emp left join dept
-> on emp.dept_id = dept.id;
+------+--------+------+---------+------+--------+
| id | name | sex | dept_id | id | name |
+------+--------+------+---------+------+--------+
| 1 | 大黃 | m | 1 | 1 | 市場(chǎng) |
| 2 | 老王 | m | 2 | 2 | 財(cái)務(wù) |
| 3 | 老李 | w | 30 | NULL | NULL |
+------+--------+------+---------+------+--------+
4. 外鏈接之右連接:優(yōu)先顯示右表全部記錄
查詢關(guān)鍵字:right join
mysql> select *from emp right join dept
-> on emp.dept_id = dept.id;
+------+--------+------+---------+------+--------+
| id | name | sex | dept_id | id | name |
+------+--------+------+---------+------+--------+
| 1 | 大黃 | m | 1 | 1 | 市場(chǎng) |
| 2 | 老王 | m | 2 | 2 | 財(cái)務(wù) |
| NULL | NULL | NULL | NULL | 3 | 行政 |
+------+--------+------+---------+------+--------+
5. 全外連接
左連接加上右連接
簡(jiǎn)單說(shuō)就是 :
兩個(gè)表的數(shù)據(jù)共用一個(gè)表頭顯示
語(yǔ)法就是在兩個(gè)查詢語(yǔ)句中間加上 union
注意 , 兩個(gè)查詢語(yǔ)句查出的結(jié)果的結(jié)構(gòu)必須相同
mysql> select *from emp right join dept on emp.dept_id = dept.id
-> union
-> select *from emp left join dept on emp.dept_id = dept.id;
+------+--------+------+---------+------+--------+
| id | name | sex | dept_id | id | name |
+------+--------+------+---------+------+--------+
| 1 | 大黃 | m | 1 | 1 | 市場(chǎng) |
| 2 | 老王 | m | 2 | 2 | 財(cái)務(wù) |
| NULL | NULL | NULL | NULL | 3 | 行政 |
| 3 | 老李 | w | 30 | NULL | NULL |
+------+--------+------+---------+------+--------+
默認(rèn)去重 , 若不想去重的話在將union
改為union all