數據庫多表查詢____表連接,子查詢

內連接查詢(使用的關鍵字 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';

 

 

 

發佈了56 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章