多表查詢兩種方法


一:多表查詢的兩種方法

1.為什么要用多表查詢?
因為我們在涉及表的時候肯定不止一張表。
2.多表查詢的兩種方法:
連表操作	: 先將查詢涉及到的表拼接成一張大表 之后基於單表查詢
子查詢		 :其實就是分步操作,將一張表的查詢結果當做另外一條SQL語句的查詢條件

image

二:數據准備

1.建表
員工部門表
create table dep(
    id int primary key auto_increment,
    name varchar(20) 
);

員工詳細信息表
create table emp(
    id int primary key auto_increment,
    name varchar(20),
    sex enum('male','female') not null default 'male',
    age int,
    dep_id int
);
2.插入數據
員工部門表
insert into dep values
(200,'技術'),
(201,'人力資源'),
(202,'銷售'),
(203,'運營'),
(205,'安保');

員工詳細信息表
insert into emp(name,sex,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);

三:多表查詢方法之連表操作

連表操作:
	先將查詢涉及到的表拼接成一張大表 之后基於單表查詢
	
from emp,dep	: 后面可以跟多個表名,逗號隔開,使兩張表拼接起來		
1.笛卡爾積(以下組合方式)
將員工與部門拼接在了一起,但是出現了重復
select * from emp,dep;
篩選兩表id對應 錯誤(需要字段名前面加表名限制)
select * from emp,dep where dep_id=id;
查詢兩張表拼接 id之間的對應關系(只獲得姓名與部門)
select emp.name,dep.name from emp,dep where emp.dep_id=dep.id;

image

  • 上述操作並不是合理的連表操作
    """
    涉及到多表操作的時候 為了避免表字段重復
    需要在字段名的前面加上表名限制
    """
2.連表操作
3.inner join 內連接
inner join	內連接:只連接兩表中都存在(有對應關系)的數據
select * from emp inner join dep on emp.dep_id = dep.id;

image

4.left join 左連接
left join	左連a接:以左表為基准展示左表所有的數據沒有對應則NULL填充
select * from emp left join dep on emp.dep_id = dep.id;

image

5.right join 右連接
right join	右連接:以右表為基准展示右表所有的數據沒有對應則NULL填充
    select * from emp right join dep on emp.dep_id = dep.id;

image

6.union 全連接
union	    全連接:展示左右兩表中所有的數據沒有對應則NULL填充
    select * from emp left join dep on emp.dep_id = dep.id
    union
    select * from emp right join dep on emp.dep_id = dep.id;

image

四:多表查詢方法之子查詢

子查詢:其實就是分步操作
	將一張表的查詢結果當做另外一條SQL語句的查詢條件
1.子查詢
1.查詢部門是技術或者人力資源的員工信息

1.先查詢技術和人力資源的部門編號
select id from dep where name in ('技術','人力資源');

2.根據部門編號去員工表中篩選出對應的員工數據
select * from emp where dep_id in (200,201);

3.子查詢:將SQL語句括號括起來即可充當查詢條件  
select * from emp where dep_id in (select id from dep where name in ('技術','人力資源'));

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM