天天看點

mysql内連結 外連接配接 詳解,MySQL總結(十)表連接配接查詢(内、外連接配接)-詳解

MySQL總結(十)表連接配接查詢(内、外連接配接)-詳解

mysql内連結 外連接配接 詳解,MySQL總結(十)表連接配接查詢(内、外連接配接)-詳解

表連接配接查詢

1.什麼是多表查詢

準備資料

# 建立部門表

create table dept(

id int primary key auto_increment,

name varchar(20)

)

insert into dept (name) values ("開發部"),("市場部"),("财務部");

# 建立員工表

create table emp (

id int primary key auto_increment,

name varchar(10),

gender char(1), -- 性别

salary double, -- 工資

join_date date, -- 入職日期

dept_id int,

foreign key (dept_id) references dept(id) -- 外鍵,關聯部門表(部門表的主鍵)

)

insert into emp(name,gender,salary,join_date,dept_id) values("孫悟空","男",7200,"2013-02-24",1);

insert into emp(name,gender,salary,join_date,dept_id) values("豬八戒","男",3600,"2010-12-02",2);

insert into emp(name,gender,salary,join_date,dept_id) values("唐僧","男",9000,"2008-08-08",2);

insert into emp(name,gender,salary,join_date,dept_id) values("白骨精","女",5000,"2015-10-07",3);

insert into emp(name,gender,salary,join_date,dept_id) values("蜘蛛精","女",4500,"2011-03-14",1);

多表查詢的作用:

比如:我們想查詢孫悟空的名字和他所在的部門的名字,則需要使用多表查詢。

如果一條 SQL 語句查詢多張表,因為查詢結果在多張不同的表中。每張表取 1 列或多列。

多表查詢的分類:

mysql内連結 外連接配接 詳解,MySQL總結(十)表連接配接查詢(内、外連接配接)-詳解

2.2 如何清除笛卡爾積現象的影響

我們發現不是所有的資料組合都是有用的,隻有 員工表.dept_id = 部門表.id 的資料才是有用的。是以需要通過條件過濾掉沒用的資料。

-- 設定過濾條件 Column "id" in where clause is ambiguous

select * from emp,dept where id=5;

select * from emp,dept where emp.`dept_id` = dept.`id`;

-- 查詢員工和部門的名字

select emp.`name`, dept.`name` from emp,dept where emp.`dept_id` = dept.`id`;

3. 内連接配接

用左邊表的記錄去比對右邊表的記錄,如果符合條件的則顯示。如:從表.外鍵=主表.主鍵

3.1 隐私内連接配接

看不到 JOIN 關鍵字,條件使用 WHERE 指定

-- SELECT 字段名 FROM 左表, 右表 WHERE 條件

select * from emp,dept where emp.`dept_id` = dept.`id`;

mysql内連結 外連接配接 詳解,MySQL總結(十)表連接配接查詢(内、外連接配接)-詳解

1)确實查詢哪些表

select * from emp inner join dept;

mysql内連結 外連接配接 詳解,MySQL總結(十)表連接配接查詢(内、外連接配接)-詳解

3)确定查詢條件,我們查詢的是唐僧的資訊,員工表.name="唐僧"

select * from emp e inner join dept d on e.`dept_id` = d.`id` where e.`name`="唐僧";

mysql内連結 外連接配接 詳解,MySQL總結(十)表連接配接查詢(内、外連接配接)-詳解

5)我們發現寫表名有點長,可以給表取别名,顯示的字段名也使用别名

select e.`id` 編号,e.`name` 姓名,e.`gender` 性别,e.`salary` 工資,d.`name` 部門名字 from emp e inner join dept d on e.`dept_id` = d.`id` where e.`name`="唐僧";

mysql内連結 外連接配接 詳解,MySQL總結(十)表連接配接查詢(内、外連接配接)-詳解

5. 右外連接配接

使用 RIGHT OUTER JOIN ... ON,OUTER 可以省略

-- SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 條件

用右邊表的記錄去比對左邊表的記錄,如果符合條件的則顯示;否則,顯示 NULL

可以了解為:在内連接配接的基礎上保證右表的資料全部顯示

-- 在員工表中增加一個員工

insert into emp values (null, "沙僧","男",6666,"2013-12-05",null);

select * from emp;

mysql内連結 外連接配接 詳解,MySQL總結(十)表連接配接查詢(内、外連接配接)-詳解

OK,這篇就到這裡

MySQL總結(十)表連接配接查詢(内、外連接配接)-詳解相關教程