當年忠貞為國酬,何曾怕斷頭? 如今天下紅遍,江山靠誰守? 業未就,身軀倦,鬢已秋。 你我之輩,忍將夙願,付與東流? 資料庫結構如下: 倉庫(倉庫號, 城市, 面積) 訂購單(職工號, 供應商號, 訂購單號, 訂購日期) 供應商(供應商號, 供應商名, 地址) 職工(倉庫號, 職工號, 工資) 具體數 ...
當年忠貞為國酬,何曾怕斷頭?
如今天下紅遍,江山靠誰守?
業未就,身軀倦,鬢已秋。
你我之輩,忍將夙願,付與東流?
資料庫結構如下:
倉庫(倉庫號, 城市, 面積)
訂購單(職工號, 供應商號, 訂購單號, 訂購日期)
供應商(供應商號, 供應商名, 地址)
職工(倉庫號, 職工號, 工資)
具體數據如下:
倉庫表:
倉庫號 城市 面積
WH1 北京 370
WH2 上海 500
WH3 廣州 200
WH4 武漢 400
訂購單表:
職工號 供應商號 訂購單號 訂購日期
E3 S7 OR67 06/23/01
E1 S4 OR73 07/28/01
E5 S4 OR76 05/25/01
E6 S6 OR77 05/26/01
E3 S4 OR79 06/13/01
E1 S2 OR80 08/29/01
E3 S3 OR90 09/01/01
E3 S3 OR91 07/13/01
供應商表:
供應商號 供應商名 地址
S2 名碩電子公司 蘇州
S3 振華電子廠 西安
S4 華通電子公司 北京
S6 607廠 鄭州
S7 愛華電子廠 北京
職工表:
倉庫號 職工號 工資
WH2 E1 1220
WH1 E3 1210
WH2 E4 1250
WH3 E5 1230
WH1 E6 1250
使用SQL語句完成:
DDL
1.寫出創建上述表的語句
命令:
create table 倉庫(倉庫號varchar(10) primary key,
城市varchar(10),
面積int);
create table 供應商(供應商號varchar(10) primary key,
供應商名varchar(30),
地址varchar(10));
create table 職工(倉庫號varchar(10),
職工號varchar(10) primary key,
工資int);
create table 訂購單(職工號varchar(10) references 職工(職工號),
供應商號varchar(10) references 供應商(供應商號),
訂購單號varchar(10) primary key,
訂購日期varchar(10));
DML
2.給出插入上述數據的insert語句
命令:
insert into 倉庫values('WH1', '北京', 370);
insert into 倉庫values('WH2', '上海', 500);
insert into 倉庫values('WH3', '廣州', 200);
insert into 倉庫values('WH4', '武漢', 400);
insert into 供應商values('S2', '名碩電子公司', '蘇州');
insert into 供應商values('S3', '振華電子廠','西安');
insert into 供應商values('S4', '華通電子公司', '北京');
insert into 供應商values('S6', '607廠', '鄭州');
insert into 供應商values('S7', '愛華電子廠', '北京');
insert into 職工values ('WH2', 'E1', 1220);
insert into 職工values ('WH1', 'E3', 1210);
insert into 職工values ('WH2', 'E4', 1250);
insert into 職工values ('WH3', 'E5', 1230);
insert into 職工values ('WH1', 'E6', 1250);
insert into 訂購單values ('E3', 'S7', 'OR67', '06/23/01');
insert into 訂購單values ('E1', 'S4', 'OR73', '07/28/01');
insert into 訂購單values ('E5', 'S4', 'OR76', '05/25/01');
insert into 訂購單values ('E6', 'S6', 'OR77', '05/26/01');
insert into 訂購單values ('E3', 'S4', 'OR79', '06/13/01');
insert into 訂購單values ('E1', 'S2', 'OR80', '08/29/01');
insert into 訂購單values ('E3', 'S3', 'OR90', '09/01/01');
insert into 訂購單values ('E3', 'S3', 'OR91', '07/13/01');
單表查詢
3.檢索職工關係中的所有信息
命令:
select * from 職工;
結果:
4.檢索供應商關係中的所有信息
命令:
select * from 供應商;
結果:
5.檢索六月之後的所有訂單
命令:
select * from 訂購單where 訂購日期like '06%' or 訂購日期like '07%'or 訂購日期like '08%'or 訂購日期like '09%'or 訂購日期like '10%'or 訂購日期like '11%'or 訂購日期like '12%';
結果:
6.檢索面積大於400的倉庫
命令:
select * from 倉庫where 面積> 400;
結果:
7.檢索哪些職工的工資多於1210
命令:
select * from 職工where 工資> 1210;
結果:
8.檢索倉庫是“WH1”或“WH2”並且面積大於400的城市
命令:
select 城市from 倉庫where (倉庫號= 'WH1' or 倉庫號= 'WH2') and 面積> 400;
結果:
9.找出倉庫面積在400到600的倉庫
命令:
select * from 倉庫where 面積between 400 and 600;
結果:
10.找出名中包含 “廠”的所有供應商的名
命令:
select 供應商名from 供應商where 供應商名like '%廠%';
結果:
11.找出不在西安的供應商
命令:
select * from 供應商where 地址!= '西安';
結果:
12.找出不在北京的倉庫
命令:
select * from 倉庫where 城市!= '北京';
結果:
13.按工資降序排列出所有職工的信息
命令:
select * from 職工order by 工資desc;
結果:
14.先按倉庫號升序排列,再按工資降序排列
命令:
select * from 職工order by 倉庫號asc, 工資desc;
結果:
15.在倉庫表中統計一下有幾個倉庫
命令:
select count(*) 倉庫數from 倉庫;
結果:
16.在職工表中統計一下有幾個倉庫
命令:
select count(distinct 倉庫號) 倉庫數from 職工;
結果:
17.求總的倉庫面積
命令:
select sum(面積) 總面積from 倉庫;
結果:
聚合查詢
18.每個職工的訂單數
命令:
select 職工號, count(訂購單號) 訂單數from 訂購單group by 職工號;
結果:
19.訂單數大於3的職工
命令:
select 職工號, count(訂購單號) 訂單數from 訂購單group by 職工號having count(訂購單號) > 3;
結果:
多表查詢
20.找出在面積大於400的倉庫中工作的職工
命令:select 職工號from 職工, 倉庫where 職工.倉庫號= 倉庫.倉庫號and 面積> 400;
結果:
21.找出在北京工作的職工和他們的工資情況
命令:select 職工號, 工資from 職工, 倉庫where 職工.倉庫號= 倉庫.倉庫號and 城市= '北京';
結果:
22.找出工資大於1215的職工和他們所在的城市
命令:select 職工號, 城市from 職工, 倉庫where 職工.倉庫號= 倉庫.倉庫號and 工資> 1215;
結果:
子查詢
23.哪些城市至少有一個訂單(從倉庫角度考慮)
命令:select 城市from 倉庫, 訂購單, 職工where 訂購單.職工號= 職工.職工號and 倉庫.倉庫號= 職工.倉庫號group by 城市having count(*) >= 1;
結果:
24.找出沒有任何訂單的城市
命令:select 城市from 倉庫where 倉庫號not in (select 倉庫號from 職工where 職工號in (select 職工號from 訂購單));
結果:
25.找出和E4有同樣工資的所有職工
命令:
select * from 職工where 工資= (select 工資from 職工where 職工號= 'E4');
結果:
26.找出倉庫面積大於400的倉庫的所有職工
命令:select * from 職工where 倉庫號in (select 倉庫號from 倉庫where 面積> 400);
結果:
27.找出供應商在西安的職工和他們的工資情況
命令:
結果:
28.找出不在北京倉庫里工作的職工
命令:select 職工號, 工資from 職工where 倉庫號not in (select 倉庫號from 倉庫where 城市= '北京');
結果:
29.找出在北京倉庫里工作的職工
命令:select 職工號, 工資from 職工where 倉庫號in (select 倉庫號from 倉庫where 城市= '北京');
結果:
30.求廣州和上海倉庫職工的總工資
命令:select sum(工資) 總工資from 職工where 倉庫號in (select 倉庫號from 倉庫where 城市in('廣州', '上海'));
結果:
31.求所有職工工資都大於1210的倉庫的平均面積
命令:select avg(面積) from 倉庫where 倉庫號in (select 倉庫號from 職工 group by 倉庫號having min(工資) > 1210);
結果:
32.求上海倉庫中職工的最高工資
命令:select max(工資) 最高工資from 職工where 倉庫號in (select 倉庫號from 倉庫where 城市= '上海');
結果:
33.訂單數大於或等於2的職工的工資
命令:select 工資from 職工where 職工號in (select 職工號from 訂購單group by 職工號having count(*) >= 2);
結果: