第一篇:SQL練習(xí)題及答案1
SQL練習(xí)題:商品銷售數(shù)據(jù)庫
商品銷售數(shù)據(jù)庫
Article(商品號(hào) char(4),商品名char(16),單價(jià) Numeric(8,2),庫存量 int)Customer(顧客號(hào)char(4),顧客名 char(8),性別 char(2),年齡 int)OrderItem(顧客號(hào) char(4),商品號(hào) char(4),數(shù)量 int, 日期 date)
1.用SQL建立三個(gè)表,須指出該表的實(shí)體完整性和參照完整性,對(duì)性別和年齡指出用戶自定義的約束條件。(性別分成男女,年齡從10到100)。顧客表的數(shù)據(jù)用插入語句輸入數(shù)據(jù),其它兩表可用任意方式輸入數(shù)據(jù)。
create table OrderItem(顧客號(hào) char(4),商品號(hào) char(4),日期 datetime,數(shù)量 smallint,primary key(顧客號(hào),商品號(hào),日期),foreign key(商品號(hào))references Article(商品號(hào)), foreign key(顧客號(hào))references Custommer(顧客號(hào)));
2.檢索定購商品號(hào)為?0001?的顧客號(hào)和顧客名。
select distinct 顧客號(hào),顧客名from OrderItem where 商品號(hào)='0001'
3.檢索定購商品號(hào)為?0001?或?0002?的顧客號(hào)。
select distinct 顧客號(hào) from OrderItem where 商品號(hào)='0001' or 商品號(hào)='0002';
4.檢索至少定購商品號(hào)為?0001?和?0002?的顧客號(hào)。
select 顧客號(hào) from OrderItem where 商品號(hào)='0001' and 顧客號(hào) in(select 顧客號(hào) from OrderItem where 商品號(hào)='0002');
5.檢索至少定購商品號(hào)為?0001?和?0002?的顧客號(hào)。(用自表連接方法)
select X.顧客號(hào) from OrderItem X,OrderItem Y
where X.顧客號(hào)=Y.顧客號(hào) and X.商品號(hào)='0001' and Y.商品號(hào)='0002';
6.檢索沒定購商品的顧客號(hào)和顧客名。
select 顧客號(hào),顧客名 from Custommer where 顧客號(hào) not in(select 顧客號(hào) from OrderItem);
7.檢索一次定購商品號(hào)?0001?商品數(shù)量最多的顧客號(hào)和顧客名。
select 顧客號(hào),顧客名 from Custommer where 顧客號(hào) in(select 顧客號(hào) from OrderItem where 商品號(hào)='0001'and 數(shù)量=(select MAX(數(shù)量)from OrderItem where 商品號(hào)='0001'));
8.檢索男顧客的人數(shù)和平均年齡。
select count(*)人數(shù),avg(年齡)平均年齡 from Custommer where 性別='男';
9.檢索至少訂購了一種商品的顧客數(shù)。
select count(distinct 顧客號(hào))from OrderItem;
10.檢索訂購了商品的人次數(shù)。select count(顧客號(hào))from OrderItem;select count(distinct 顧客號(hào))from OrderItem;11.檢索顧客張三訂購商品的總數(shù)量及每次購買最多數(shù)量和最少數(shù)量之差。
select sum(數(shù)量),MAX(數(shù)量)-MIN(數(shù)量)from OrderItem,Custommer where OrderItem.顧客號(hào)=Custommer.顧客號(hào) and 顧客名='張三';.檢索至少訂購了3單商品的顧客號(hào)和顧客名及他們定購的商品次數(shù)和商品總數(shù)量,并按商品總數(shù)量降序排序。
select Custommer.顧客號(hào),顧客名,count(*),Sum(數(shù)量)from OrderItem,Custommer where OrderItem.顧客號(hào)=Custommer.顧客號(hào) group by Custommer.顧客號(hào),顧客名 having count(*)>3 order by 4 desc;
13.檢索年齡在30至40歲的顧客所購買的商品名及商品單價(jià)。
select 商品名,單價(jià) from Custommer,Article,OrderItem where Custommer.顧客號(hào)=OrderItem.顧客號(hào) and Article.商品號(hào)=OrderItem.商品號(hào) and 年齡 between 30 and 40;
14.創(chuàng)建一個(gè)視圖GM,字段包括:顧客號(hào),顧客名和定購的商品名,日期和金額(金額=數(shù)量*單價(jià))。指定用內(nèi)連接方式做。
create view GM as select Custommer.顧客號(hào),顧客名,商品名,日期,單價(jià)*數(shù)量 as 金額 from Custommer,Article,OrderItem where Custommer.顧客號(hào)=OrderItem.顧客號(hào) and Article.商品號(hào)=OrderItem.商品號(hào)
create view GM1 as select Custommer.顧客號(hào),顧客名,商品名,日期,單價(jià)*數(shù)量 as 金額
from(Custommer inner join OrderItem on Custommer.顧客號(hào)=OrderItem.顧客號(hào))inner join Article on Article.商品號(hào)=OrderItem.商品號(hào)
15.檢索購買的商品的單價(jià)至少有一次高于或等于1000元的顧客號(hào)和顧客名。
select Custommer.顧客號(hào),顧客名 from Custommer,OrderItem,Article
where Custommer.顧客號(hào)=OrderItem.顧客號(hào) and Article.商品號(hào)=OrderItem.商品號(hào) and 單價(jià)>1000
16.檢索購買的購買價(jià)都高于或等于1000元的顧客號(hào)和顧客名。
select Custommer.顧客號(hào),顧客名 from Custommer where 顧客號(hào) in(select 顧客號(hào) from OrderItem where 顧客號(hào) not in(select 顧客號(hào) from OrderItem,Article
where OrderItem.商品號(hào)=Article.商品號(hào) and 單價(jià)<=1000))
17.檢索女顧客購買的商品號(hào),商品名和數(shù)量合計(jì)。
select Article.商品號(hào),商品名,sum(數(shù)量)from Custommer,Article,OrderItem where OrderItem.顧客號(hào)=Custommer.顧客號(hào) and OrderItem.商品號(hào)=Article.商品號(hào)
and 性別='女' group by Article.商品號(hào),商品名
18.檢索所有的顧客號(hào)和顧客名以及它們所購買的商品號(hào)。(包括沒買商品的顧客)
select Custommer.顧客號(hào),顧客名,商品號(hào)
from Custommer left join OrderItem on Custommer.顧客號(hào)=OrderItem.顧客號(hào) 18.檢索所有的顧客號(hào)和顧客名以及它們所購買的商品號(hào)。(包括沒買商品的顧客)
select Custommer.顧客號(hào),顧客名 from Custommer where not exists(select * from Article where not exists(select * from OrderItem
where OrderItem.顧客號(hào)=Custommer.顧客號(hào) and OrderItem.商品號(hào)=Article.商品號(hào)))
20.檢索這樣的顧客號(hào),他們至少訂購了顧客號(hào)為“0002”所訂購的所有商品(除法)
select distinct 顧客號(hào) from OrderItem X where not exists(select * from OrderItem Y where 顧客號(hào)='0002' and not exists(select * from OrderItem Z where Z.顧客號(hào)=X.顧客號(hào) and Z.商品號(hào)=Y.商品號(hào)))
21.向Article表插入一條紀(jì)錄。刪除無人購買的商品。(檢驗(yàn)一下剛插入的記錄是否已被刪除)
delete from Article where 商品號(hào) not in(select 商品號(hào) from OrderItem)
22.降低已售出的數(shù)量總合超過10件的商品單價(jià)為原價(jià)的95%。
update Article set 單價(jià)=單價(jià)*0.95 where 商品號(hào) in
(select 商品號(hào) from OrderItem group by 商品號(hào) having sum(數(shù)量)>10)
23.建立斷言:顧客的年齡必須大于18歲。
Create ASSERTION A1 check(not exists(select * from Custommer where 年齡<=18))
24.把修改商品單價(jià)的權(quán)限授給用戶Wang, 用戶Wang可以轉(zhuǎn)授該權(quán)限。
Grant update(單價(jià))on Article to Wang with grant option
25.把修改商品單價(jià)的權(quán)限用戶Wang收回,轉(zhuǎn)授出去的也級(jí)聯(lián)收回。
revoke update(單價(jià))on Article from Wang cascade
第二篇:數(shù)據(jù)庫sql課后練習(xí)題及答案解析
先創(chuàng)建下面三個(gè)表:
(book表)
(borrow表)
(reader表)
1)找出姓李的讀者姓名(NAME)和所在單位(COMPANY)。
2)列出圖書庫中所有藏書的書名(BOOK_NAME)及出版單位(OUTPUT)。3)查找“高等教育出版社”的所有圖書名稱(BOOK_NAME)及單價(jià)(PRICE),結(jié)果按單價(jià)降序排序。
4)查找價(jià)格介于10元和20元之間的圖書種類(SORT),結(jié)果按出版單位(OUTPUT)和單價(jià)(PRICE)升序排序。
5)查找書名以”計(jì)算機(jī)”開頭的所有圖書和作者(WRITER)。
6)檢索同時(shí)借閱了總編號(hào)(BOOK_ID)為112266和449901兩本書的借書證號(hào)(READER_ID)。
##7)* 查找所有借了書的讀者的姓名(NAME)及所在單位(COMPANY)。8)* 找出李某所借所有圖書的書名及借書日期(BORROW_DATE)。
9)* 無重復(fù)地查詢2006年10月以后借書的讀者借書證號(hào)(READER_ID)、姓名和單位。
##10)* 找出借閱了
11)找出與”趙正義”在同一天借書的讀者姓名、所在單位及借書日期。12)查詢2006年7月以后沒有借書的讀者借書證號(hào)、姓名及單位。#13)求”科學(xué)出版社”圖書的最高單價(jià)、最低單價(jià)、平均單價(jià)。##14)* 求”信息系”當(dāng)前借閱圖書的讀者人次數(shù)。
#15)求出各個(gè)出版社圖書的最高價(jià)格、最低價(jià)格和總冊(cè)數(shù)。#16)分別找出各單位當(dāng)前借閱圖書的讀者人數(shù)及所在單位。
17)* 找出當(dāng)前至少借閱了2本圖書(大于等于2本)的讀者姓名及其所在單位。18)分別找出借書人次數(shù)多于1人次的單位及人次數(shù)。
19)找出藏書中各個(gè)出版單位的名稱、每個(gè)出版社的書籍的總冊(cè)數(shù)(每種可能有多冊(cè))、書的價(jià)值總額。
20)查詢經(jīng)濟(jì)系是否還清所有圖書。如果已經(jīng)還清,顯示該系所有讀者的姓名、所在單位和職稱。
附錄:建表語句
創(chuàng)建圖書管理庫的圖書、讀者和借閱三個(gè)基本表的表結(jié)構(gòu): 創(chuàng)建BOOK:(圖書表)
CREATE TABLE BOOK(BOOK_ID int, SORT VARCHAR(10), BOOK_NAME VARCHAR(50), WRITER VARCHAR(10), OUTPUT VARCHAR(50), PRICE int);
創(chuàng)建READER:(讀者表)
CREATE TABLE READER(READER_ID int, COMPANY VARCHAR(10), NAME VARCHAR(10), SEX VARCHAR(2), GRADE VARCHAR(10), ADDR VARCHAR(50));
創(chuàng)建BORROW:(借閱表)
CREATE TABLE BORROW(READER_ID int, BOOK_ID int, BORROW_DATE datetime)
插入數(shù)據(jù): BOOK表: insert into BOOK values(445501,'TP3/12','數(shù)據(jù)庫導(dǎo)論','王強(qiáng)','科學(xué)出版社',17.90);insert into BOOK values(445502,'TP3/12','數(shù)據(jù)庫導(dǎo)論','王強(qiáng)','科學(xué)出版社',17.90);insert into BOOK values(445503,'TP3/12','數(shù)據(jù)庫導(dǎo)論','王強(qiáng)','科學(xué)出版社',17.90);insert into BOOK values(332211,'TP5/10','計(jì)算機(jī)基礎(chǔ)','李偉','高等教育出版社',18.00);insert into BOOK values(112266,'TP3/12','FoxBASE','張三','電子工業(yè)出版社',23.60);insert into BOOK values(665544,'TS7/21','高等數(shù)學(xué)','劉明','高等教育出版社',20.00);insert into BOOK values(114455,'TR9/12','線性代數(shù)','孫業(yè)','北京大學(xué)出版社',20.80);insert into BOOK values(113388,'TR7/90','大學(xué)英語','胡玲','清華大學(xué)出版社',12.50);insert into BOOK values(446601,'TP4/13','數(shù)據(jù)庫基礎(chǔ)','馬凌云','人民郵電出版社',22.50);insert into BOOK values(446602,'TP4/13','數(shù)據(jù)庫基礎(chǔ)','馬凌云','人民郵電出版社',22.50);insert into BOOK values(446603,'TP4/13','數(shù)據(jù)庫基礎(chǔ)','馬凌云','人民郵電出版社',22.50);insert into BOOK values(449901,'TP4/14','FoxPro大全','周虹','科學(xué)出版社',32.70);insert into BOOK values(449902,'TP4/14','FoxPro大全','周虹','科學(xué)出版社',32.70);insert into BOOK values(118801,'TP4/15','計(jì)算機(jī)網(wǎng)絡(luò)','黃力鈞','高等教育出版社',21.80);insert into BOOK values(118802,'TP4/15','計(jì)算機(jī)網(wǎng)絡(luò)','黃力鈞','高等教育出版社',21.80);
READER表: insert into reader values(111,'信息系','王維利','女','教授','1號(hào)樓424');insert into reader values(112,'財(cái)會(huì)系','李 立','男','副教授','2號(hào)樓316');insert into reader values(113,'經(jīng)濟(jì)系','張 三','男','講師','3號(hào)樓105');insert into reader values(114,'信息系','周華發(fā)','男','講師','1號(hào)樓316');insert into reader values(115,'信息系','趙正義','男','工程師','1號(hào)樓224');insert into reader values(116,'信息系','李 明','男','副教授','1號(hào)樓318');insert into reader values(117,'計(jì)算機(jī)系','李小峰','男','助教','1號(hào)樓214');insert into reader values(118,'計(jì)算機(jī)系','許鵬飛','男','助工','1號(hào)樓216');insert into reader values(119,'計(jì)算機(jī)系','劉大龍','男','教授','1號(hào)樓318');insert into reader values(120,'國際貿(mào)易','李 雪','男','副教授','4號(hào)樓506');insert into reader values(121,'國際貿(mào)易','李 爽','女','講師','4號(hào)樓510');insert into reader values(122,'國際貿(mào)易','王 純','女','講師','4號(hào)樓512');insert into reader values(123,'財(cái)會(huì)系','沈小霞','女','助教','2號(hào)樓202');insert into reader values(124,'財(cái)會(huì)系','朱 海','男','講師','2號(hào)樓210');insert into reader values(125,'財(cái)會(huì)系','馬英明','男','副教授','2號(hào)樓212');
BORROW表: insert into borrow values(112,445501,'3-19-2006');insert into borrow values(125,332211,'2-12-2006');insert into borrow values(111,445503,'8-21-2006');insert into borrow values(112,112266,'3-14-2006');insert into borrow values(114,665544,'10-21-2006');insert into borrow values(120,114455,'11-2-2006');insert into borrow values(120,118801,'10-18-2006');insert into borrow values(119,446603,'11-12-2006');insert into borrow values(112,449901,'10-23-2006');insert into borrow values(115,449902,'8-21-2006');insert into borrow values(118,118801,'9-10-2006');
現(xiàn)有關(guān)系數(shù)據(jù)庫如下:
數(shù)據(jù)庫名:圖書借閱管理系統(tǒng)
讀者表(讀者編號(hào) char(6),姓名,性別,年齡,單位,身份證號(hào),職稱)圖書表(圖書編號(hào)char(6),圖書名稱,出版社,作者)借閱表(讀者編號(hào),圖書編號(hào),借閱時(shí)間)用SQL語言實(shí)現(xiàn)下列功能的sql語句代碼。(1)創(chuàng)建數(shù)據(jù)表book;
book表(圖書編號(hào) char(6),圖書名稱,出版社,作者)要求使用:主鍵(圖書編號(hào))、非空(圖書名稱),非空(作者)(2)創(chuàng)建數(shù)據(jù)表reader表;
學(xué)生信息表(reader編號(hào) char(8),姓名,性別,年齡,工作單位,身份證號(hào),職稱)要求使用:主鍵(reader編號(hào))、默認(rèn)(職稱)、非空(工作單位,姓名)、唯一(身份證號(hào))、檢查(性別),檢查(年齡)(3)創(chuàng)建借書表borrow;
borrow(ID,讀者編號(hào),圖書編號(hào),借書日期)要求使用:外鍵(學(xué)號(hào),課號(hào))(4)將下列課程信息添加到book表的代碼
圖書編號(hào) 名稱
100101 數(shù)據(jù)庫原理 100102 數(shù)據(jù)結(jié)構(gòu)
修改 課號(hào)為100102的圖書名稱:數(shù)據(jù)結(jié)構(gòu)與算法 刪除 課號(hào)為100101的圖書信息(5)創(chuàng)建視圖讀者借書信息的代碼;
讀者借書信息視圖(讀者編號(hào),姓名,圖書編號(hào),圖書名稱,借書日期)(6)從讀者表book中查詢姓李的女讀者的情況:姓名、性別、工作單位。(7)查詢統(tǒng)計(jì)出借書量超過5本的單位平均年齡
(8)創(chuàng)建帶參數(shù)的存儲(chǔ)過程[借某圖書的讀者高低均年齡]、執(zhí)行該過程的代碼
存儲(chǔ)過程功能:查詢借閱某圖書的的讀者最高年齡、最低年齡、平均年齡;
執(zhí)行該過程,查詢所有借閱’數(shù)據(jù)庫基礎(chǔ)’這本書的讀者的最高年齡、最低年齡、平均年齡;
1)找出姓李的讀者姓名(NAME)和所在單位(COMPANY)。
SELECT NAME,COMPANY FROM READER WHERE NAME LIKE '李%'
2)列出圖書庫中所有藏書的書名(BOOK_NAME)及出版單位(OUTPUT)。
SELECT BOOK_NAME, OUTPUT FROM BOOK
3)查找“高等教育出版社”的所有圖書名稱(BOOK_NAME)及單價(jià)(PRICE),結(jié)果按單價(jià)降序排序。
SELECT BOOK_NAME,PRICE FROM BOOK WHERE OUTPUT='高等教育出版社' ORDER BY PRICE DESC 4)查找價(jià)格介于10元和20元之間的圖書種類(SORT),結(jié)果按出版單位(OUTPUT)和單價(jià)(PRICE)升序排序。
SELECT SORT,OUTPUT,PRICE FROM BOOK WHERE PRICE BETWEEN 10 AND 20 ORDER BY OUTPUT ,PRICE
5)查找書名以”計(jì)算機(jī)”開頭的所有圖書和作者(WRITER)。
SELECT BOOK_NAME,WRITER FROM BOOK WHERE BOOK_NAME LIKE '計(jì)算機(jī)%' 6)檢索同時(shí)借閱了總編號(hào)(BOOK_ID)為112266和449901兩本書的借書證號(hào)(READER_ID)。
SELECT A.READER_ID FROM BORROW A,BORROW B WHERE A.BOOK_ID='112266' AND B.BOOK_ID='449901' AND A.READER_ID=B.READER_ID
##7)* 查找所有借了書的讀者的姓名(NAME)及所在單位(COMPANY)。
SELECT DISTINCT NAME,COMPANY FROM READER,BORROW WHERE BORROW.READER_ID=READER.READER_ID
8)* 找出李某所借所有圖書的書名及借書日期(BORROW_DATE)。
SELECT BOOK.BOOK_NAME,BORROW.BORROW_DATE FROM BOOK,BORROW,READER WHERE BOOK.BOOK_ID=BORROW.BOOK_ID AND
READER.READER_ID=BORROW.READER_ID AND READER.NAME LIKE '李%'
9)* 無重復(fù)地查詢2006年10月以后借書的讀者借書證號(hào)(READER_ID)、姓名和單位。
SELECT READER_ID,NAME,COMPANY FROM READER WHERE READER_ID IN(SELECT READER_ID FROM BORROW WHERE BORROW_DATE >='2006-10-1')
##10)* 找出借閱了
SELECT DISTINCT READER_ID FROM BORROW,BOOK WHERE BORROW.BOOK_ID=BOOK.BOOK_ID AND BOOK.BOOK_NAME LIKE 'FoxPro大全'
11)找出與”趙正義”在同一天借書的讀者姓名、所在單位及借書日期。
SELECT NAME,COMPANY,BORROW_DATE FROM READER,BORROW WHERE BORROW.READER_ID=READER.READER_ID AND BORROW_DATE IN(SELECT BORROW_DATE FROM BORROW,READER WHERE BORROW.READER_ID=READER.READER_ID AND NAME='趙正義')
12)查詢2006年7月以后沒有借書的讀者借書證號(hào)、姓名及單位。
SELECT READER_ID,NAME,COMPANY FROM READER WHERE READER_ID NOT IN(SELECT READER_ID FROM BORROW WHERE BORROW_DATE>='2006-7-1')
#13)求”科學(xué)出版社”圖書的最高單價(jià)、最低單價(jià)、平均單價(jià)。
SELECT MAX(PRICE)最高單價(jià),MIN(PRICE)最低單價(jià),AVG(PRICE)平均單價(jià) FROM BOOK WHERE OUTPUT='科學(xué)出版社'
##14)* 求”信息系”當(dāng)前借閱圖書的讀者人次數(shù)。
SELECT COUNT(DISTINCT READER_ID)當(dāng)前借閱圖書的讀者人次數(shù)FROM BORROW WHERE READER_ID IN(SELECT READER_ID FROM READER WHERE COMPANY IN('信息系'))
#15)求出各個(gè)出版社圖書的最高價(jià)格、最低價(jià)格和總冊(cè)數(shù)。
SELECT MAX(PRICE)最高價(jià)格,MIN(PRICE)最低價(jià)格,COUNT(PRICE)總冊(cè)數(shù)FROM BOOK GROUP BY OUTPUT
#16)分別找出各單位當(dāng)前借閱圖書的讀者人數(shù)及所在單位。
SELECT COUNT(COMPANY)讀者人數(shù),COMPANY FROM BORROW,READER WHERE BORROW.READER_ID=READER.READER_ID GROUP BY COMPANY
17)* 找出當(dāng)前至少借閱了2本圖書(大于等于2本)的讀者姓名及其所在單位。
SELECT NAME 讀者姓名,COMPANY 單位FROM READER WHERE READER_ID IN(SELECT READER_ID FROM BORROW GROUP BY READER_ID HAVING COUNT(*)>=2)
18)分別找出借書人次數(shù)多于1人次的單位及人次數(shù)。
SELECT COMPANY,COUNT(*)人次數(shù) FROM READER,BORROW WHERE BORROW.READER_ID=READER.READER_ID GROUP BY COMPANY HAVING COUNT(*)>1
19)找出藏書中各個(gè)出版單位的名稱、每個(gè)出版社的書籍的總冊(cè)數(shù)(每種可能有多冊(cè))、書的價(jià)值總額。
SELECT OUTPUT,COUNT(*)書籍的總冊(cè)數(shù),SUM(PRICE)書的價(jià)值總額 FROM BOOK GROUP BY OUTPUT
20)查詢經(jīng)濟(jì)系是否還清所有圖書。如果已經(jīng)還清,顯示該系所有讀者的姓名、所在單位和職稱。
SELECT NAME,COMPANY FROM READER WHERE NOT EXISTS(SELECT* FROM READER,BORROW WHERE READER.READER_ID=BORROW.READER_ID AND COMPANY='經(jīng)濟(jì)系')
第三篇:SQL練習(xí)題3
1查詢陳剛和高宏的完整的銷售記錄,要求按照銷售員分類匯總,有商品名稱,賣出總價(jià)格,賣出總數(shù)量,商品庫存量,篩選出賣出總價(jià)格大于10000的數(shù)據(jù),按照銷售員排序。
2在商品一覽表中按貨名分類統(tǒng)計(jì)同類商品的總數(shù)量及平均價(jià)格。
SELECT 總數(shù)量=SUM(庫存量),平均價(jià)格=AVG(參考價(jià)格),貨名 FROM 商品一覽表 GROUP BY 貨名
3在“進(jìn)貨表”中按“供貨商ID”分類統(tǒng)計(jì)從各廠家進(jìn)貨的次數(shù)、總數(shù)量及進(jìn)貨總價(jià)格。SELECT 供貨商ID,COUNT(供貨商ID),SUM(數(shù)量),SUM(數(shù)量*進(jìn)價(jià))FROM 進(jìn)貨表 GROUP BY 供貨商ID
4按貨號(hào)分類統(tǒng)計(jì)“銷售表”中各種商品的銷售總數(shù)量、平均價(jià)格、最高價(jià)、最低價(jià)以及銷售總金額。
SELECT 銷售總數(shù)量=SUM(數(shù)量),平均價(jià)格=AVG(單價(jià)),最高價(jià)=MAX(單價(jià)),最低價(jià)=MIN(單價(jià)),銷售總金額=SUM(金額),貨號(hào) FROM 銷售表 GROUP BY 貨號(hào)
5按貨名分類統(tǒng)計(jì)“銷售表”中不包括計(jì)算機(jī)整機(jī)的各種商品的銷售總數(shù)量、平均價(jià)格以及銷售總金額。
SELECT銷售總數(shù)量=SUM(數(shù)量),平均價(jià)格=AVG(單價(jià)),銷售總金額=SUM(金額),貨名 FROM 銷售表WHERE 貨名 <>計(jì)算機(jī) GROUP BY 貨名
6按貨號(hào)分類統(tǒng)計(jì)“銷售表”中銷售總量大于10的商品銷售總數(shù)量、平均價(jià)格以及銷售總金額。
7在“銷售表”中按客戶名稱分類統(tǒng)計(jì)各客戶的購貨總數(shù)量、單筆最大量、單筆最小量、平均價(jià)格及購貨總金額。
8在“銷售表”中按客戶名稱和所購商品種類組合分類,統(tǒng)計(jì)各客戶同一類商品的購貨總數(shù)量、平均價(jià)、最高價(jià)、最低價(jià)及購貨總金額。
9在“銷售表”中按日期分類統(tǒng)計(jì)每天的商品日銷售量、單筆最大金額、單筆最小金額和每日總銷售額
10在“銷售表”中分類統(tǒng)計(jì)各銷售員的業(yè)績:銷售數(shù)量、單筆最大數(shù)量、單筆最大金額、三個(gè)月平均日 營業(yè)額、總營業(yè)額,并按總營業(yè)額降序排序。
11在“進(jìn)貨表”中按“貨號(hào)”“進(jìn)價(jià)”分類統(tǒng)計(jì)相同貨號(hào)不同價(jià)格的進(jìn)貨次數(shù)和進(jìn)貨數(shù)量。
12求所賣出商品的毛利潤。(銷售總金額-總成本),成本可以理解為平均進(jìn)價(jià)*數(shù)量。
13求每個(gè)銷售員所創(chuàng)造的利潤.14查詢每種貨物的進(jìn)價(jià)小于平均進(jìn)價(jià)的供貨商信息。
SELECT * FROM 供貨商表 WHERE 供貨商ID=(SELECT 供貨商ID FROM 進(jìn)貨表 S JOIN 商品一覽表 XON S.貨號(hào)=X.貨號(hào) WHERE 進(jìn)價(jià)<平均進(jìn)價(jià))
第四篇:sql查詢練習(xí)題含答案
--(1)查詢20號(hào)部門的所有員工信息。select * from emp e where e.deptno=20;
--(2)查詢獎(jiǎng)金(COMM)高于工資(SAL)的員工信息。select * from emp where comm>sal;--(3)查詢獎(jiǎng)金高于工資的20%的員工信息。select * from emp where comm>sal*0.2;--(4)查詢10號(hào)部門中工種為MANAGER和20號(hào)部門中工種為CLERK的員工的信息。select * from emp e
where(e.deptno=10 and e.job='MANAGER')or(e.deptno=20 and e.job='CLERK')--(5)查詢所有工種不是MANAGER和CLERK,--且工資大于或等于2000的員工的詳細(xì)信息。select * from emp
where job not in('MANAGER','CLERK')and sal>=2000;
--(6)查詢有獎(jiǎng)金的員工的不同工種。select * from emp where comm is not null;--(7)查詢所有員工工資和獎(jiǎng)金的和。select(e.sal+nvl(e.comm,0))from emp e;--(8)查詢沒有獎(jiǎng)金或獎(jiǎng)金低于100的員工信息。select * from emp where comm is null or comm<100;--(9)查詢員工工齡大于或等于10年的員工信息。
select * from emp where(sysdate-hiredate)/365>=10;
--(10)查詢員工信息,要求以首字母大寫的方式顯示所有員工的姓名。select initcap(ename)from emp;select upper(substr(ename,1,1))||lower(substr(ename,2))from emp;
--(11)顯示所有員工的姓名、入職的年份和月份,按入職日期所在的月份排序,--若月份相同則按入職的年份排序。
select ename,to_char(hiredate,'yyyy')year,to_char(hiredate,'MM')month from emp order by month,year;--(12)查詢?cè)?月份入職的所有員工信息。select * from emp where to_char(hiredate,'MM')='02'--(13)查詢所有員工入職以來的工作期限,用“**年**月**日”的形式表示。
select e.ename,floor((sysdate-e.hiredate)/365)||'年' ||floor(mod((sysdate-e.hiredate),365)/30)||'月' ||floor(mod(mod((sysdate-e.hiredate),365),30))||'日' from emp e;--(14)查詢從事同一種工作但不屬于同一部門的員工信息。select a.ename,a.job,a.deptno,b.ename,b.job,b.deptno from emp a,emp b where a.job=b.job and a.deptno<>b.deptno;
--(15)查詢各個(gè)部門的詳細(xì)信息以及部門人數(shù)、部門平均工資。select d.deptno,count(e.empno),avg(e.sal),d.dname,d.loc from emp e ,dept d where e.deptno=d.deptno group by d.deptno,d.dname,d.loc
--(16)查詢10號(hào)部門員工以及領(lǐng)導(dǎo)的信息。select * from emp where empno in(select mgr from emp where deptno=10)or deptno=10;
--(17)查詢工資為某個(gè)部門平均工資的員工信息。select * from emp where sal in(select avg(sal)from emp group by deptno);
--(18)查詢工資高于本部門平均工資的員工的信息。select * from emp e1
where sal >(select avg(sal)from emp e2 where e2.deptno=e1.deptno);
--(19)查詢工資高于本部門平均工資的員工的信息及其部門的平均工資。select e.*,a.avgsal from emp e,(select deptno,avg(sal)as avgsal from emp group by deptno)a where a.deptno=e.deptno and e.sal>a.avgsal;
--(20)統(tǒng)計(jì)各個(gè)工種的人數(shù)與平均工資。
select count(*),e.job,avg(e.sal)from emp e group by e.job
--(21)統(tǒng)計(jì)每個(gè)部門中各個(gè)工種的人數(shù)與平均工資。select deptno,job,count(empno),avg(sal)from emp e group by e.deptno,e.job--(22)查詢所有員工工資都大于1000的部門的信息。select * from dept where deptno in(select deptno from emp where deptno not in
(select distinct deptno from emp where sal<1000));
--(23)查詢所有員工工資都大于1000的部門的信息及其員工信息。select * from emp e join dept d on d.deptno in(select deptno from emp where deptno not in
(select distinct deptno from emp where sal<1000))and d.deptno=e.deptno;
--(24)查詢所有員工工資都在900~3000之間的部門的信息。select * from dept where deptno not in(select deptno from emp
where sal not between 900 and 3000);--(25)查詢所有工資都在900~3000之間的員工所在部門的員工信息。select * from emp a where a.deptno in(select distinct e.deptno from emp e where e.sal between 900 and 3000);
--(26)查詢每個(gè)員工的領(lǐng)導(dǎo)所在部門的信息。select d.* from dept d where d.deptno in(select distinct e2.deptno from emp e1,emp e2 where e1.empno=e2.mgr);--(27)查詢?nèi)藬?shù)最多的部門信息。select * from dept where deptno in(select deptno from(select count(*)count,deptno from emp group by deptno)where count in(select max(count)
from(select count(*)count ,deptno from emp group by deptno)));
--(28)查詢30號(hào)部門中工資排序前3名的員工信息。
select * from
(select sal from emp where deptno=30 order by sal desc)e where rownum<4
--(29)查詢'JONES'員工及所有其直接、間接下屬員工的信息。select e.* from emp e start with ename='JONES' connect by prior empno=mgr;
---(30)查詢SCOTT員工及其直接、間接上級(jí)員工的信息。select e.* from emp e start with ename='SCOTT' connect by prior mgr=empno;
--(31)以樹狀結(jié)構(gòu)查詢所有員工與領(lǐng)導(dǎo)之間的層次關(guān)系。select substr(sys_connect_by_path(ename,'->'),3),level from emp start with mgr is null connect by prior empno=mgr;
--(32)向emp表中插入一條記錄,員工號(hào)為1357,員工名字為oracle,--工資為2050元,部門號(hào)為20,入職日期為2002年5月10日。
--(33)將各部門員工的工資修改為該員工所在部門平均工資加1000。update emp e set sal= 1000+(select avg(sal)from emp where deptno=e.deptno);
--(34)查詢工作等級(jí)為2級(jí),1985年以后入職的工作地點(diǎn)為DALLAS的員工編號(hào)、--姓名和工資。
select e.ename,e.empno,e.sal from emp e,salgrade s,dept d where(e.sal between s.losal and s.hisal)and(s.grade=2)
and to_char(e.hiredate,'yyyy')>1985 and e.deptno=d.deptno and d.loc='DALLAS';
--35.部門平均薪水最高的部門編號(hào)
select * from(select avg(sal)avgsal,deptno
from emp group by deptno order by avgsal desc)
where rownum=1;
select deptno,avg(sal)from emp group by deptno having avg(sal)=(select max(avg(sal))avgsal
from emp group by deptno)
--36,部門平均薪水最高的部門名稱
select d.* from dept d where deptno in(select deptno from emp group by deptno having avg(sal)=(select max(avg(sal))avgsal
from emp group by deptno))
--37.平均薪水最低的部門的部門名稱
select d.* from dept d where deptno in(select deptno from emp group by deptno having avg(sal)=(select min(avg(sal))avgsal
from emp group by deptno))
--38.平均薪水等級(jí)最低的部門的部門名稱 select d.dname from dept d where d.deptno in(select a.deptno from
(select e.deptno from emp e,salgrade s where(e.sal between s.losal and s.hisal)group by e.deptno order by avg(s.grade))a where rownum=1);
--39.部門經(jīng)理人中,薪水最低的部門名稱 select dname from dept where deptno=(select deptno from
(select deptno from emp where job='MANAGER' group by deptno order by min(sal))where rownum=1)
--40.比普通員工的最高薪水還要高的經(jīng)理人名稱 select ename from emp where sal>(select max(sal)from emp where job not in('MANAGER','PRESIDENT'))and job='MANAGER' or job='PRESIDENT'
--41.刪除重復(fù)部門,但是留下一項(xiàng)
insert into dept values(70,'RESEARCH','DALLAS')select deptno,dname,rowid from dept
delete from dept d where rowid<>(select min(rowid)from dept where dname=d.dname and d.loc=loc)
--42.更新員工工資為他的主管的工資,獎(jiǎng)金
update emp e set sal=(select sal from emp where empno=e.mgr), comm=(select comm from emp where empno=e.mgr)
update emp e set(sal,comm)=(select sal,comm from emp where empno=e.mgr)rollback;select * from emp;
第五篇:sql作業(yè)題答案
1.檢索報(bào)名人數(shù)大于平均報(bào)名人數(shù)的課程名稱和教師
selectcouname,teacher from course where willnum<(select avg(willnum)from course)2.檢索班級(jí)號(hào)為20000003的學(xué)生的學(xué)號(hào)、姓名、班級(jí)代碼、班級(jí)名稱 selectstuno,stuname,student.classno,classname from student join class on class.classno=student.classno wherestudent.classno='20000003' 3.檢索學(xué)生選課為第1志愿(WILLORDER)的學(xué)號(hào)、姓名、課程號(hào)、課程名稱 selectstucou.stuno,stuname,stucou.couno,couname from student join stucou on student.stuno=stucou.stuno join course on stucou.couno=course.couno wherewillorder=1 4.按班級(jí)顯示學(xué)生信息,并計(jì)算每班學(xué)生人數(shù)。顯示要求格式如下:
select '班級(jí)編碼'=student.classno,'班級(jí)名稱'=classname,'學(xué)號(hào)'=stuno,'姓名'=stuname,'密碼'=pwd from student join class on student.classno=class.classno order by student.classno compute count(student.classno)by student.classno 5.顯示“00建筑管理”班級(jí)的系部、班級(jí)和學(xué)生信息,并計(jì)算班級(jí)人數(shù)。要求顯示格式如下:
select class.departno as '系部編碼',departname as '系部名稱',student.classno as '班級(jí)編碼',classname as '班級(jí)名稱', student.stuno as '學(xué)號(hào)',stuname as '姓名',pwd as '選課密碼' from student join class on class.classno=student.classno join department on department.departno=class.departno where class.classname='00建筑管理' compute count(student.classno)6.檢索陳金菊的個(gè)人信息,包括她選修的課程。select student.*,course.*
from student join stucou on student.stuno=stucou.stuno join course on course.couno=stucou.couno where stuname='陳金菊' 7.檢索“00建筑管理”班有哪些學(xué)生。select student.*,classname from student join class on student.classno=class.classno where classname='00建筑管理' 8.顯示計(jì)算機(jī)應(yīng)用工程系的學(xué)生信息和系別名稱,并統(tǒng)計(jì)計(jì)算機(jī)應(yīng)用工程系有多少學(xué)生。select student.*,departname from student join class on student.classno=class.classno join department on department.departno=class.departno where departname='計(jì)算機(jī)應(yīng)用工程系' compute count(stuno)