內連接查詢(使用的關鍵字 inner join -- inner可以省略)
隱式內連接:select *from A,B where 條件;
顯示內連接:select *from A inner join B on 條件;
外連接查詢(使用的關鍵字 outer join -- outer可以省略)
左外連接:left outer join
select * from A left outer join B on 條件;
右外連接:right outerjoin
select * from A right outer join B on 條件;
有兩張表,一張員工表,一張部門表。建表和數據的代碼如下:
1. 創建部門表(id,name)
# 創建部門表
create table dept(
idint primary key auto_increment,
namevarchar(20)
)
insert into dept (name) values ('開發部'),('市場部'),('財務部');
2. 員工表,員工表(id, 姓名,性別,工資,入職日期,部門ID)
# 創建員工表
create table employee (
idint primary key auto_increment,
namevarchar(10),
genderchar(1), -- 性別
salarydouble, -- 工資
join_datedate, -- 入職日期
dept_idint,
foreignkey (dept_id) references dept(id) -- 外鍵,關聯部門表(部門表的主鍵)
)
insert intoemployee(name,gender,salary,join_date,dept_id) values('孫悟空','男',7200,'2013-02-24',1);
insert intoemployee(name,gender,salary,join_date,dept_id) values('豬八戒','男',3600,'2010-12-02',2);
insert intoemployee(name,gender,salary,join_date,dept_id) values('唐僧','男',9000,'2008-08-08',2);
insert intoemployee(name,gender,salary,join_date,dept_id) values('白骨精','女',5000,'2015-10-07',3);
insert intoemployee(name,gender,salary,join_date,dept_id) values('蜘蛛精','女',4500,'2011-03-14',1);
按要求實現下面的查詢功能。
操作步驟描述
查詢工資最高的員工是誰?
查詢工資小於平均工資的員工有哪些?
查詢大於5000的員工,來至於哪些部門,輸出部門的名字
查詢開發部與財務部所有的員工信息,分別使用子查詢和表連接實現
查詢2011年以後入職的員工信息和部門信息,分別使用子查詢和表連接實現
1) 查詢工資最高的員工是誰?
select * fromemployee where salary = (select max(salary) from employee);
2) 查詢工資小於平均工資的員工有哪些?
2.1) 查詢平均工資
selectavg(salary) from employee;
2.2) 小於平均工資的員工
select* from employee where salary < (select avg(salary) from employee);
3) 查詢大於5000的員工,來至於哪些部門,輸出部門的名字
3.1) 查詢大於5000的員工,來至於哪些部門的id
select dept_idfrom employee where salary >5000;
3.2) 外查詢 Subquery returns more than 1row
select * from deptd where d.id in (select dept_id fromemployee where salary >5000);
4) 查詢開發部與財務部所有的員工信息
4.1) 子查詢
select * from employee where dept_id in(select d.id from dept d where d.name='開發部' or d.name='財務部');
4.2) 表連接
select e.* from employee e inner join deptd on e.dept_id = d.id where d.name='開發部' or d.name='財務部';
5) 查詢2011年以後入職的員工信息和部門信息
● 使用子查詢:
5.1) 查詢出2011年以後入職的員工信息
select * from employee where join_date >='2011-1-1';
5.2) 查詢所有的部門信息,與上面的虛擬表中的信息比對,找出所有部門ID相等的員工。
select * from dept d ,(select * from employee where join_date>='2011-1-1') e where d.id =e.dept_id;
● 使用表連接:
select d.*, e.* from employee einner join dept d on e.dept_id = d.id where e.join_date >= '2011-1-1';