## **單表查詢**
## <blockquote class="danger"><p>表創建</p></blockquote>
```
#建表
create table dep(
id int,
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
);
#插入數據
insert into dep values
(200,'技術'),
(201,'人力資源'),
(202,'銷售'),
(203,'運營');
insert into emp(name,sex,age,dep_id) values
('jason','male',18,200),
('egon','female',48,201),
('kevin','male',38,201),
('nick','female',28,202),
('owen','male',18,200),
('jerry','female',18,204)
;
# 當初為什么我們要分表,就是為了方便管理,在硬盤上確實是多張表,但是到了內存中我們應該把他們再拼成一張表進行查詢才合理
```
## <blockquote class="danger"><p>表查詢</p></blockquote>
select * from emp,dep; # 左表一條記錄與右表所有記錄都對應一遍>>>笛卡爾積
# 將所有的數據都對應了一遍,雖然不合理但是其中有合理的數據,現在我們需要做的就是找出合理的數據
# 查詢員工及所在部門的信息
select * from emp,dep where emp.dep_id = dep.id;
# 查詢部門為技術部的員工及部門信息
select * from emp,dep where emp.dep_id = dep.id and dep.name = '技術';
# 將兩張表關聯到一起的操作,有專門對應的方法
# 1、內連接:只取兩張表有對應關系的記錄
select * from emp inner join dep on emp.dep_id = dep.id;
select * from emp inner join dep on emp.dep_id = dep.id
where dep.name = "技術";
# 2、左連接: 在內連接的基礎上保留左表沒有對應關系的記錄
select * from emp left join dep on emp.dep_id = dep.id;
# 3、右連接: 在內連接的基礎上保留右表沒有對應關系的記錄
select * from emp right join dep on emp.dep_id = dep.id;
# 4、全連接:在內連接的基礎上保留左、右面表沒有對應關系的的記錄
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;
## <blockquote class="danger"><p>### 子查詢</p></blockquote>
## 就是將一個查詢語句的結果用括號括起來當作另外一個查詢語句的條件去用
## 1.查詢部門是技術或者人力資源的員工信息
"""
先獲取技術部和人力資源部的id號,再去員工表里面根據前面的id篩選出符合要求的員工信息
"""
select * from emp where dep_id in (select id from dep where name = "技術" or name = "人力資源");
## 2.每個部門最新入職的員工 思路:先查每個部門最新入職的員工,再按部門對應上聯表查詢
select t1.id,t1.name,t1.hire_date,t1.post,t2.* from emp as t1
inner join
(select post,max(hire_date) as max_date from emp group by post) as t2
on t1.post = t2.post
where t1.hire_date = t2.max_date
;
記住一個規律,表的查詢結果可以作為其他表的查詢條件,也可以通過其別名的方式把它作為一張虛擬表去跟其他表做關聯查詢
``` select * from emp inner join dep on emp.dep_id = dep.id;```