mysql多表查詢的兩種方法

2022-09-19 16:15:14 字數 3034 閱讀 4304

為什麼要用多表查詢?

因為我們在涉及表的時候肯定不止一張表。

資料準備:

# 建表

create table dep(

id int primary key auto_increment,

name varchar(20)

);create table emp(

id int primary key auto_increment,

name varchar(20),

*** enum('male','female') not null default 'male',

age int,

dep_id int

);# 插入資料

insert into dep values

(200,'技術'),

(201,'人力資源'),

(202,'銷售'),

(203,'運營'),

(205,'安保');

insert into emp(name,***,age,dep_id) values

('jason','male',18,200),

('tony','female',48,201),

('kevin','male',18,201),

('nick','male',28,202),

('owen','male',18,203),

('jerry','female',18,204);

1、多表查詢方法之連表操作

補充:

1、from 後可跟多個錶用逗號隔開,使兩張表拼接

eg :from emp,dep

2、在涉及到多表操作的時候 為了避免表字段重複

需要在欄位名的前面加上表名限制

例項:1、查詢員工名字和對應的部門名稱

分析:select * from emp,dep; # 先使員工表和部門表進行拼接 這樣查詢的結果是員工對應了每乙個部門的id

select * from emp,dep where dep_id=id; # 想要兩個表id對應 這樣的寫法是不對的

select * from emp,dep where emp.dep_id=dep.id; # 這樣的寫法才對 指定表名 表名.欄位名的方式

select emp.name,dep.name from emp,dep where emp.dep_id=dep.id; # 只取人名和對應的部門

# 上述的方法非常的麻煩也不符合合理的操作方式 那麼接下來就要用到幾個規定的語法格式實現對錶查詢

1、inner join:內連線 :只連線兩個表中都存在(有對應關係)的資料

2、left join : 左連線:以左邊表為基準展示左表的所有資料沒有對應則null填充

3、reght join :右連線:以右邊表為基準展示右邊表的所有資料沒有對應則null填充

4、union :全連線:展示左右兩個表中所有的資料沒有對應則用null填充 (其實相當於乙個連線符 把左右連接合起來)

2、多表查詢方法之子查詢

定義:

子查詢:其實就是分布操作 將一張表的查詢結果當作另外一條sql語句的查詢條件

例項:1、查詢部門是技術部或者人力資源部的員工資訊

第一種方法:分布式

先查詢技術部和人力資源部的部門編號:

select id from dep where name in('技術','人力資源');

根據部門的編號去員工表裡篩選出對應的員工資料:

select * from emp where dep_id in (200,201); # 查詢到部門編號在根據上一步結果判斷 這樣的話是比較繁瑣的

子查詢方法:將sql語句括號括起來充當查詢條件

select * from emp where dep_id in (select id from dep where name in('技術','人力資源')); # 在不知道員工部門編號的情況下可一步實現檢視部門員工資訊

完善:select * from emp inner join dep on emp.dep_id = dep.id where dep_id in (select id from dep where name in('技術','人力資源')); # 也可通過新增連表操作同時檢視部門資訊

oracle多表關聯刪除的兩種方法

oracle多表關聯刪除的兩種方法 第一種使用exists方法 delete from tablea where exits select 1 from tableb where tablea.id tableb.id 第二種使用匿名表方式進行刪除 delete from select 1 from...

列表查詢的兩種方法

列表查詢 從列表中查詢指定元素 輸入 列表 待查詢元素 輸出 元素下標或未找到元素 二分查詢 1.順序查詢 時間複雜度為o n def linear search data set,value for i in range len data set if value data set i retur...

MySQL關閉查詢快取(QC)的兩種方法

mysql query cache 會快取select 查詢,安裝時預設是開啟的,但是如果對錶進行insert,update,delete,truncate,alter table,drop table,or drop database等操作時,之前的快取會無效並且刪除。這樣一定程度上也會影響我們資...