MySQL 子查詢和多表聯查

2022-05-09 10:09:15 字數 1719 閱讀 5213

1、多表聯查

使用多表聯查的場景,有些時候資料在不同的表中,這個時候我們就需要用到mysql中的多表聯查。

2、多表聯查概念

將兩個或兩個以上的表按某個條件連線起來,從而選取需要的資料。多表聯查是同時查詢兩個或兩個以上的表時使用的。

3、多表聯查分類

1. 內連線查詢  

內連線查詢使用關鍵字join或cross join 或 inner join, 然後通過on連線表與表之間的條件

注意: 內連線查詢只能查詢出兩個表符合條件的資料

語法: select 字段,欄位1,.. from table_name1 inner join table_name2 on table_name1.column_name=table_name2.column_name

2. 外連線查詢

2.1 左外連線

左外連線使用關鍵字left join, 然後通過on連線表與表之間的條件

注意:left join 會查詢出left join左邊的表所有的資料,即使右表沒有匹配

語法:select 字段,欄位1,... from table_name1 left join table_name2  on table_name1.column_name=table_name2.column_name

2.2 右外連線

左外連線使用關鍵字right join,然後通過on連線表與表之間的條件

注意: 即使左表中沒有匹配,也從右表返回所有的行

語法: select 字段,欄位1,.... from table_name1 

right join table_name2  

on table_name1.column_name=table_name2.column_name

4、注意

1. 子查詢先執行裡面的sql語句,再執行外面sql語句。

2. 子查詢的效率比較低,一般建議使用join替換子查詢

3. 子查詢時,mysql需要為內層查詢語句的查詢結果建立乙個臨時表。然後外層查詢語句再臨時表中查詢記錄。查詢完畢後,mysql需要撤銷這些臨時表。因此,子查詢的速度會受到一定的影響。如果查詢的資料量比較大,這種影響就會隨之增大。

5、 使用子查詢原則

1. 乙個子查詢必須放在圓括號中

2. 將子查詢放在比較條件的右邊,這樣可以增加sql可讀性

子查詢分類

1. where 型子查詢(重點掌握) ,where型子查詢把內層查詢結果當作外層查詢的比較條件

例如:select * from user where id in (select uid from user_detail );

2. exists/not exists型子查詢

exists關鍵字表示存在。使用exists關鍵字時,內層查詢語句不返回查詢的記錄,而是返回乙個真假值,如果內層查詢語句查詢到滿足條件的記錄,只要子查詢中至少返回乙個值,則exists語句的值就為true。就返回true,否則返回false。當返回的值為true時,外層查詢語句將進行查詢,否則不進行查詢

3. 使用in/not in的子查詢

select * from user where id not in (select uid from user_detail );

4. 使用比較運算子的子查詢 ( = > < >= <= != )

select * from user where id = (select uid from user_detail limit 1 );

mysql 3 多表查詢 子查詢 關聯查詢

1.子查詢 2.關聯查詢 1.子查詢兩種情況 1.1 where 後面跟了一堆的語句 1.2from 後面兩表做了拼接 先建兩張表 create table dept id int 10 not null primary key auto increment,deptname varchar 50 ...

MySQL 多表關聯查詢

對多張具有一定關係的表中的資料進行查詢。直接查詢 select from emp,dept 關聯查詢 查詢多張表中都有的資料 select from emp,dept where emp.dept id dept.id 子查詢子查詢通俗來講,就是查詢中有查詢。1 單行子查詢 查詢結果為單個 sele...

mysql 多表聯查 MySQL的多表聯查

今天是周二,我們一起來研究下mysql的多表聯查啊。或許你也知道,表之間的關係有 1對1 1對多 多對多。然後.1.巢狀查詢 乙個查詢的結果是另外sql查詢的條件 如 查詢stu表中年齡最大的是誰?mysql select from stu where age select max age from...