MySQL怎么完成多表查詢?MySQL多表查詢的語句
發(fā)表時間:2023-05-29 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]本篇文章給大家?guī)淼膬?nèi)容是介紹MySQL如何實現(xiàn)多表查詢?MySQL多表查詢的語句。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所幫助。創(chuàng)建表# 創(chuàng)建表
create table dep...
本篇文章給大家?guī)淼膬?nèi)容是介紹MySQL如何實現(xiàn)多表查詢?MySQL多表查詢的語句。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所幫助。
創(chuàng)建表
# 創(chuàng)建表
create table department(id int,name varchar(20));
create table employee1(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') not null default 'male',
age int,
dep_id int
);
# 插入數(shù)據(jù)
insert into department values(200,'技術(shù)'),(201,'人力資源'),(202,'銷售'),(203,'運營');
insert into employee1(name,sex,age,dep_id) values('egon','male',18,200),('alex','female',48,201),('tom','male',38,201),('yuanhao','female',28,202),('lidawei','male',18,200),('jinkezhou','female',18,204);
# 查看表
mysql> select * from employee1;
+----+-----------+--------+------+--------+
id name sex age dep_id
+----+-----------+--------+------+--------+
1 egon male 18 200
2 alex female 48 201
3 tom male 38 201
4 yuanhao female 28 202
5 lidawei male 18 200
6 jinkezhou female 18 204
+----+-----------+--------+------+--------+
6 rows in set (0.00 sec)
mysql> select * from department;
+------+--------------+
id name
+------+--------------+
200 技術(shù)
201 人力資源
202 銷售
203 運營
+------+--------------+
4 rows in set (0.00 sec)
多表連接查詢
交叉連接
交叉連接:不適用任何匹配條件。生成笛卡爾積
mysql> select * from employee1 ,department;
內(nèi)連接
內(nèi)連接:找兩張表共有的部分,相當于利用條件從笛卡爾積結(jié)果中篩選出了正確的結(jié)果。(只連接匹配的行)
# 找兩張表共有的部分,相當于利用條件從笛卡爾積結(jié)果中篩選出了正確的結(jié)果
#department沒有204這個部門,因而employee表中關(guān)于204這條員工信息沒有匹配出來
mysql> select * from employee1,department where employee1.dep_id=department.id;
#上面用where表示的可以用下面的內(nèi)連接表示,建議使用下面的那種方法
mysql> select * from employee1 inner join department on employee1.dep_id=department.id;
# 也可以這樣表示哈
mysql> select employee1.id,employee1.name,employee1.age,employee1.sex,department.name from employee1,department where employee1.dep_id=department.id;
左連接left
優(yōu)先顯示左表全部記錄。
#左鏈接:在按照on的條件取到兩張表共同部分的基礎(chǔ)上,保留左表的記錄
mysql> select * from employee1 left join department on department.id=employee1.dep_id;
mysql> select * from department left join employee1 on department.id=employee1.dep_id;
右連接right
優(yōu)先顯示右表全部記錄。
#右鏈接:在按照on的條件取到兩張表共同部分的基礎(chǔ)上,保留右表的記錄
mysql> select * from employee1 right join department on department.id=employee1.dep_id;
mysql> select * from department right join employee1 on department.id=employee1.dep_id;
全部連接join
mysql> select * from department full join employee1;
符合條件多表查詢
示例1:以內(nèi)連接的方式查詢employee和department表,并且employee表中的age字段值必須大于25,
即找出公司所有部門中年齡大于25歲的員工
mysql> select * from employee1 inner join department on employee1.dep_id=department.id and age>25;
示例2:以內(nèi)連接的方式查詢employee和department表,并且以age字段的升序方式顯示
mysql> select * from employee1 inner join department on employee1.dep_id=department.id and age>25 and age>25 order by age asc;
子查詢
#1:子查詢是將一個查詢語句嵌套在另一個查詢語句中。
#2:內(nèi)層查詢語句的查詢結(jié)果,可以為外層查詢語句提供查詢條件。
#3:子查詢中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等關(guān)鍵字
#4:還可以包含比較運算符:= 、 !=、> 、<等
示例:
# 查詢平均年齡在25歲以上的部門名
mysql> select name from department where id in ( select dep_id from employee1 group by dep_id having avg(age) > 25 );
# 查看技術(shù)部員工姓名
mysql> select name from employee1 where dep_id = (select id from department where name='技術(shù)');
# 查看小于2人的部門名
mysql> select name from department where id in (select dep_id from employee1 group by dep_id having count(id) < 2) union select name from department where id not in (select distinct dep_id from employee1);
# 提取空部門
#有人的部門
mysql> select * from department where id not in (select distinct dep_id from employee1);
以上就是MySQL如何實現(xiàn)多表查詢?MySQL多表查詢的語句的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習教程快速掌握從入門到精通的SQL知識。