1. 程式人生 > >高級查詢練習題

高級查詢練習題

ges TE add PE int har 應付 nco table

/*
Navicat MySQL Data Transfer

Source Server : localhost
Source Server Version : 50617
Source Host : localhost:3306
Source Database : ceshi

Target Server Type : MYSQL
Target Server Version : 50617
File Encoding : 65001

Date: 2018-06-07 09:04:53
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `orders`
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
`Work_id` varchar(20) NOT NULL,
`supp_id` varchar(20) NOT NULL,
`Order_id` varchar(20) DEFAULT NULL,
`money` varchar(20) NOT NULL,
PRIMARY KEY (`Work_id`,`supp_id`),
KEY `supp_id` (`supp_id`),
CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`Work_id`) REFERENCES `worker` (`Work_id`),
CONSTRAINT `orders_ibfk_2` FOREIGN KEY (`supp_id`) REFERENCES `supply` (`supp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO `orders` VALUES (‘e1‘, ‘s4‘, ‘or73‘, ‘1000000.00‘);
INSERT INTO `orders` VALUES (‘e3‘, ‘s7‘, ‘or67‘, ‘5000000.00‘);
INSERT INTO `orders` VALUES (‘e6‘, ‘‘, ‘or77‘, ‘6000000.00‘);
INSERT INTO `orders` VALUES (‘e7‘, ‘s4‘, ‘or76‘, ‘8000000.00‘);

-- ----------------------------
-- Table structure for `supply`
-- ----------------------------
DROP TABLE IF EXISTS `supply`;
CREATE TABLE `supply` (
`supp_id` varchar(20) NOT NULL,
`supp_name` varchar(20) NOT NULL,
`supp_area` varchar(20) NOT NULL,
PRIMARY KEY (`supp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of supply
-- ----------------------------
INSERT INTO `supply` VALUES (‘‘, ‘‘, ‘‘);
INSERT INTO `supply` VALUES (‘s3‘, ‘振華電子廠‘, ‘西安‘);
INSERT INTO `supply` VALUES (‘s4‘, ‘華通電子公司‘, ‘北京‘);
INSERT INTO `supply` VALUES (‘s6‘, ‘607廠‘, ‘鄭州‘);
INSERT INTO `supply` VALUES (‘s7‘, ‘愛華電子廠‘, ‘北京‘);

-- ----------------------------
-- Table structure for `warehouse`
-- ----------------------------
DROP TABLE IF EXISTS `warehouse`;
CREATE TABLE `warehouse` (
`Ware_id` varchar(20) NOT NULL,
`city` varchar(20) NOT NULL,
`area` varchar(20) NOT NULL,
PRIMARY KEY (`Ware_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of warehouse
-- ----------------------------
INSERT INTO `warehouse` VALUES (‘wh1‘, ‘北京‘, ‘370‘);
INSERT INTO `warehouse` VALUES (‘wh2‘, ‘上海‘, ‘500‘);
INSERT INTO `warehouse` VALUES (‘wh3‘, ‘廣州‘, ‘200‘);
INSERT INTO `warehouse` VALUES (‘wh4‘, ‘武漢‘, ‘400‘);

-- ----------------------------
-- Table structure for `worker`
-- ----------------------------
DROP TABLE IF EXISTS `worker`;
CREATE TABLE `worker` (
`Work_id` varchar(20) NOT NULL,
`Ware_id` varchar(20) NOT NULL,
`wages` varchar(20) NOT NULL,
PRIMARY KEY (`Work_id`),
KEY `Ware_id` (`Ware_id`),
CONSTRAINT `worker_ibfk_1` FOREIGN KEY (`Ware_id`) REFERENCES `warehouse` (`Ware_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of worker
-- ----------------------------
INSERT INTO `worker` VALUES (‘e1‘, ‘wh2‘, ‘1220‘);
INSERT INTO `worker` VALUES (‘e3‘, ‘wh1‘, ‘1210‘);
INSERT INTO `worker` VALUES (‘e4‘, ‘wh2‘, ‘1250‘);
INSERT INTO `worker` VALUES (‘e6‘, ‘wh3‘, ‘1230‘);
INSERT INTO `worker` VALUES (‘e7‘, ‘wh1‘, ‘1250‘);

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

--1.從職工關系中檢索所有工資值。

select 工資 from 職工表;

--2.檢索倉庫關系中的所有記錄。

select *from 倉庫表;

--3.檢索工資多於1230元的職工號。

select 職工號 from 職工表 where 工資>‘1230‘;

--4.檢索哪些倉庫有工資多於1210元的職工。

select 倉庫號, 職工號 from 職工表 where 工資>‘1210‘;

--5.給出在倉庫“wh1”或“wh2”工作,並且工資少於1250元的職工號。

select 職工號 from 職工表 where 倉庫號 not like ‘wh3‘ and 工資<‘1250‘

--6.找出工資多於1230元的職工號和他們所在的城市。

select 城市,職工號 from 倉庫表 join 職工表 on 倉庫表.倉庫號=職工表.倉庫號 where 工資>‘1230‘

--7.找出工作在面積大於400的倉庫的職工號以及這些職工工作所在的城市。

select 城市,職工號 from 倉庫表 join 職工表 on 倉庫表.倉庫號=職工表.倉庫號 where 面積>‘400‘

--★8.哪些城市至少有一個倉庫的職工工資為1250元。

select 城市 from 倉庫表 where 倉庫號 in (select 倉庫號 from 職工表 where 工資=‘1250‘)

--9.查詢所有職工的工資都多於1210元的倉庫的信息。

select *from 倉庫表 where 倉庫號 in( select 倉庫號 from 職工表 where 1210< all(select 工資 from 職工表 where 倉庫表.倉庫號=職工表.倉庫號))

--10.找出和職工e4掙同樣工資的所有職工。

select 職工號 from 職工表 where 工資 = (select 工資 from 職工表 where 職工號=‘e4‘) and 職工號 !=‘e4‘

--11.檢索出工資在1220元到1240元範圍內的職工信息。

select*from 倉庫表 join 職工表 on 職工表.倉庫號=倉庫表.倉庫號 where 工資 between 1220 and 1240

--★12.從供應商關系中檢索出全部公司的信息,不要工廠或其他供應商的信息。

select *from 訂購單表 a join 職工表 b on a.職工號=b.職工號 and 供應商號=any(select 供應商號 from 供應商表)

--13.找出不在北京的全部供應商信息。

select * from 供應商表 where 地址 !=‘北京‘

--14.按職工的工資值升序檢索出全部職工信息。

SELECT *from 職工表 order by 工資 asc

--15.先按倉庫號排序,再按工資排序並輸出全部職工信息。

select *from 職工表 order by 倉庫號 asc , 工資 asc

--16.找出供應商所在地的數目。

select 地址,COUNT(*) from 供應商表 group by 地址
select COUNT(地址) from 供應商表

-17.求支付的工資總數。

select SUM(工資) from 職工表

--18.求北京和上海的倉庫職工的工資總和。

select SUM(工資) from 職工表 where 倉庫號 in (select 倉庫號 from 倉庫表 where 城市 in(‘北京‘,‘上海‘))

--19.求所有職工的工資都多於1210元的倉庫的平均面積。

select AVG(面積) from 倉庫表 where 倉庫號 in (select 倉庫號 from 職工表 where 工資>‘1210‘)

--20.求在wh2倉庫工作的職工的最高工資值。

select max(工資) from 職工表 where 倉庫號 like ‘wh2‘

--21.求每個倉庫的職工的平均工資。

select AVG(工資) from 職工表 group by 倉庫號

--22.求至少有兩個職工的每個倉庫的平均工資。

select AVG(工資) from 職工表 group by 倉庫號 having COUNT(倉庫號)>=2

--23.找出尚未確定供應商的訂購單。

select *from 訂購單表 where 供應商號 is null

--24.列出已經確定了供應商的訂購單信息。

select *from 訂購單表 where 供應商號 is not null

-25.查詢供應商名。

select *from 供應商表

--★26.在訂購單表中加入一個新字段總金額,說明完成該訂購單所應付出的總金額數。

alter table 訂購單表 add 訂購金額 varchar(max);

-27.列出每個職工經手的具有最高總金額的訂購單信息。

select MAX(訂購金額) from 訂購單表 group by 職工號

--28.檢索哪些倉庫中還沒有職工的倉庫的信息。

select *from 倉庫表 where 倉庫號 not in (select 倉庫號 from 職工表)

--29.檢索哪些倉庫中至少已經有一個職工的倉庫的信息。

select *from 倉庫表 where 倉庫號
in (select 倉庫號 from 職工表 group by 職工號 having COUNT(職工號)>=1)

--★30.檢索有職工的工資大於或等於wh1倉庫中任何一名職工工資的倉庫號。

select *from 倉庫表 where 倉庫號
in(select 倉庫號 from 職工表 where 職工號
in (select 職工號 from 職工表 where 工資
>(select MIN(工資) from 職工表 where 倉庫號 like ‘wh1‘)))

select distinct 倉庫號 from 職工表 where 工資>=any(select 工資 from 職工表 where 倉庫號=‘wh1‘) and 倉庫號!=‘wh1‘

--★31.檢索有職工的工資大於或等於wh1倉庫中所有職工工資的倉庫號。

select *from 倉庫表 where 倉庫號
in(select 倉庫號 from 職工表 where 職工號
in (select 職工號 from 職工表 where 工資
>=(select MAX(工資) from 職工表 where 倉庫號 like ‘wh1‘)))

select 倉庫號 from 職工表 where 工資>= all(select 工資 from 職工表 where 倉庫號=‘wh1‘) and 倉庫號!=‘wh1‘

================自己練習=============

--1.從職工關系中檢索所有工資值。
Select 工資 from 工資表;
--2.檢索倉庫關系中的所有記錄。
Select * from warehouse
--3.檢索工資多於1230元的職工號。
Select 職工號 from worker where 工資 > 1230;
--4.檢索哪些倉庫有工資多於1210元的職工。
Select 倉庫號 from worker where 工資 > 1210;
--5.給出在倉庫“wh1”或“wh2”工作,並且工資少於1250元的職工號。
Select 職工號 from worker where (倉庫號=‘wh1’ or 倉庫號=‘wh2’)and 工資 < 1250; 
--6.找出工資多於1230元的職工號和他們所在的城市。
select 城市,職工號 from 倉庫表 join 職工表 on 倉庫表.倉庫號=職工表.倉庫號 where 工資>‘1230‘
--7.找出工作在面積大於400的倉庫的職工號以及這些職工工作所在的城市。
select 城市,職工號 from 倉庫表 join 職工表 on 倉庫表.倉庫號=職工表.倉庫號 where 面積>‘400‘; 
--★8.哪些城市至少有一個倉庫的職工工資為1250元。 
Select 城市 from warehouse where 倉庫號 in (select 倉庫號 from worker where 工資 = 1250 );
--9.查詢所有職工的工資都多於1210元的倉庫的信息。
 select * from 倉庫表 where 倉庫號 in( select 倉庫號 from 職工表 where 1210< all(select 工資 from 職工表 where 倉庫表.倉庫號=職工表.倉庫號))
--10.找出和職工e4掙同樣工資的所有職工。
Select 職工號 from worker where 工資 = (selet 工資 from worker where 職工號 = ‘e4’);
--11.檢索出工資在1220元到1240元範圍內的職工信息1。
Select * from worker where 工資 between 1220 and 1240;
--★12.從供應商關系中檢索出全部公司的信息,不要工廠或其他供應商的信息。 
Select * from supply where 供應商 = ‘%公司’; 
--13.找出不在北京的全部供應商信息。
Select * from supply where 地址 != 北京;
--14.按職工的工資值升序檢索出全部職工信息。
Select * from worker order by 工資 asc; 
--15.先按倉庫號排序,再按工資排序並輸出全部職工信息。
 select *from 職工表 order by 倉庫號 asc , 工資 asc
--16.找出供應商所在地的數目
Select count(地址) from supply
-17.求支付的工資總數。
Select sum(工資)from worker;
--18.求北京和上海的倉庫職工的工資總和。
Select sun(工資) from worker where 倉庫號 = (select 倉庫號 from warehouse where 城市=‘上海’ and 城市 = ‘北京’);
--19.求所有職工的工資都多於1210元的倉庫的平均面積。
select AVG(面積) from 倉庫表 where 倉庫號 in (select 倉庫號 from 職工表 where 工資>‘1210‘)
--20.求在wh2倉庫工作的職工的最高工資值。
Select max(工資) from worker where 倉庫號 =’wh2’ ;
--21.求每個倉庫的職工的平均工資。
Select avg(工資) from worker group by 倉庫號;
--22.求至少有兩個職工的每個倉庫的平均工資。
Select avg(工資) from worker group by 倉庫號 having count(*)>= 2;
--23.找出尚未確定供應商的訂購單。
Secect * from order where 供貨商號 = null;
--24.列出已經確定了供應商的訂購單信息。
select * from 訂購單表 where 供應商號 is not null
-25.查詢供應商名。
Select * from supply;
--★26.在訂購單表中加入一個新字段總金額,說明完成該訂購單所應付出的總金額數。
Alrter table 訂購單表 add 訂購金額 varchar(max)
-27.列出每個職工經手的具有最高總金額的訂購單信息。
select MAX(訂購金額) from 訂購單表 group by 職工號
--28.檢索哪些倉庫中還沒有職工的倉庫的信息。
select *from 倉庫表 where 倉庫號 not in (select 倉庫號 from 職工表)
--29.檢索哪些倉庫中至少已經有一個職工的倉庫的信息。
Select * from warehouse where 倉庫號 = (select 倉庫號 from worker group by 倉庫號 having count(倉庫號)>= 1);
--★30.檢索有職工的工資大於或等於wh1倉庫中任何一名職工工資的倉庫號。
Select 倉庫號 from worker where工資 > any (select 工資 from worker where 倉庫號 = ‘wh1’);
--★31.檢索有職工的工資大於或等於wh1倉庫中所有職工工資的倉庫號。
Select 倉庫號 from worker where工資 >= all (select 工資 from worker where 倉庫號 = ‘wh1’);

高級查詢練習題