為什麼要用多表查詢?
因為我們在涉及表的時候肯定不止一張表。
資料準備:
# 建表
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等操作時,之前的快取會無效並且刪除。這樣一定程度上也會影響我們資...