第一篇:SQL練習(xí)題及答案1
SQL練習(xí)題:商品銷售數(shù)據(jù)庫
商品銷售數(shù)據(jù)庫
Article(商品號 char(4),商品名char(16),單價(jià) Numeric(8,2),庫存量 int)Customer(顧客號char(4),顧客名 char(8),性別 char(2),年齡 int)OrderItem(顧客號 char(4),商品號 char(4),數(shù)量 int, 日期 date)
1.用SQL建立三個表,須指出該表的實(shí)體完整性和參照完整性,對性別和年齡指出用戶自定義的約束條件。(性別分成男女,年齡從10到100)。顧客表的數(shù)據(jù)用插入語句輸入數(shù)據(jù),其它兩表可用任意方式輸入數(shù)據(jù)。
create table OrderItem(顧客號 char(4),商品號 char(4),日期 datetime,數(shù)量 smallint,primary key(顧客號,商品號,日期),foreign key(商品號)references Article(商品號), foreign key(顧客號)references Custommer(顧客號));
2.檢索定購商品號為?0001?的顧客號和顧客名。
select distinct 顧客號,顧客名from OrderItem where 商品號='0001'
3.檢索定購商品號為?0001?或?0002?的顧客號。
select distinct 顧客號 from OrderItem where 商品號='0001' or 商品號='0002';
4.檢索至少定購商品號為?0001?和?0002?的顧客號。
select 顧客號 from OrderItem where 商品號='0001' and 顧客號 in(select 顧客號 from OrderItem where 商品號='0002');
5.檢索至少定購商品號為?0001?和?0002?的顧客號。(用自表連接方法)
select X.顧客號 from OrderItem X,OrderItem Y
where X.顧客號=Y.顧客號 and X.商品號='0001' and Y.商品號='0002';
6.檢索沒定購商品的顧客號和顧客名。
select 顧客號,顧客名 from Custommer where 顧客號 not in(select 顧客號 from OrderItem);
7.檢索一次定購商品號?0001?商品數(shù)量最多的顧客號和顧客名。
select 顧客號,顧客名 from Custommer where 顧客號 in(select 顧客號 from OrderItem where 商品號='0001'and 數(shù)量=(select MAX(數(shù)量)from OrderItem where 商品號='0001'));
8.檢索男顧客的人數(shù)和平均年齡。
select count(*)人數(shù),avg(年齡)平均年齡 from Custommer where 性別='男';
9.檢索至少訂購了一種商品的顧客數(shù)。
select count(distinct 顧客號)from OrderItem;
10.檢索訂購了商品的人次數(shù)。select count(顧客號)from OrderItem;select count(distinct 顧客號)from OrderItem;11.檢索顧客張三訂購商品的總數(shù)量及每次購買最多數(shù)量和最少數(shù)量之差。
select sum(數(shù)量),MAX(數(shù)量)-MIN(數(shù)量)from OrderItem,Custommer where OrderItem.顧客號=Custommer.顧客號 and 顧客名='張三';.檢索至少訂購了3單商品的顧客號和顧客名及他們定購的商品次數(shù)和商品總數(shù)量,并按商品總數(shù)量降序排序。
select Custommer.顧客號,顧客名,count(*),Sum(數(shù)量)from OrderItem,Custommer where OrderItem.顧客號=Custommer.顧客號 group by Custommer.顧客號,顧客名 having count(*)>3 order by 4 desc;
13.檢索年齡在30至40歲的顧客所購買的商品名及商品單價(jià)。
select 商品名,單價(jià) from Custommer,Article,OrderItem where Custommer.顧客號=OrderItem.顧客號 and Article.商品號=OrderItem.商品號 and 年齡 between 30 and 40;
14.創(chuàng)建一個視圖GM,字段包括:顧客號,顧客名和定購的商品名,日期和金額(金額=數(shù)量*單價(jià))。指定用內(nèi)連接方式做。
create view GM as select Custommer.顧客號,顧客名,商品名,日期,單價(jià)*數(shù)量 as 金額 from Custommer,Article,OrderItem where Custommer.顧客號=OrderItem.顧客號 and Article.商品號=OrderItem.商品號
create view GM1 as select Custommer.顧客號,顧客名,商品名,日期,單價(jià)*數(shù)量 as 金額
from(Custommer inner join OrderItem on Custommer.顧客號=OrderItem.顧客號)inner join Article on Article.商品號=OrderItem.商品號
15.檢索購買的商品的單價(jià)至少有一次高于或等于1000元的顧客號和顧客名。
select Custommer.顧客號,顧客名 from Custommer,OrderItem,Article
where Custommer.顧客號=OrderItem.顧客號 and Article.商品號=OrderItem.商品號 and 單價(jià)>1000
16.檢索購買的購買價(jià)都高于或等于1000元的顧客號和顧客名。
select Custommer.顧客號,顧客名 from Custommer where 顧客號 in(select 顧客號 from OrderItem where 顧客號 not in(select 顧客號 from OrderItem,Article
where OrderItem.商品號=Article.商品號 and 單價(jià)<=1000))
17.檢索女顧客購買的商品號,商品名和數(shù)量合計(jì)。
select Article.商品號,商品名,sum(數(shù)量)from Custommer,Article,OrderItem where OrderItem.顧客號=Custommer.顧客號 and OrderItem.商品號=Article.商品號
and 性別='女' group by Article.商品號,商品名
18.檢索所有的顧客號和顧客名以及它們所購買的商品號。(包括沒買商品的顧客)
select Custommer.顧客號,顧客名,商品號
from Custommer left join OrderItem on Custommer.顧客號=OrderItem.顧客號 18.檢索所有的顧客號和顧客名以及它們所購買的商品號。(包括沒買商品的顧客)
select Custommer.顧客號,顧客名 from Custommer where not exists(select * from Article where not exists(select * from OrderItem
where OrderItem.顧客號=Custommer.顧客號 and OrderItem.商品號=Article.商品號))
20.檢索這樣的顧客號,他們至少訂購了顧客號為“0002”所訂購的所有商品(除法)
select distinct 顧客號 from OrderItem X where not exists(select * from OrderItem Y where 顧客號='0002' and not exists(select * from OrderItem Z where Z.顧客號=X.顧客號 and Z.商品號=Y.商品號))
21.向Article表插入一條紀(jì)錄。刪除無人購買的商品。(檢驗(yàn)一下剛插入的記錄是否已被刪除)
delete from Article where 商品號 not in(select 商品號 from OrderItem)
22.降低已售出的數(shù)量總合超過10件的商品單價(jià)為原價(jià)的95%。
update Article set 單價(jià)=單價(jià)*0.95 where 商品號 in
(select 商品號 from OrderItem group by 商品號 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)授出去的也級聯(lián)收回。
revoke update(單價(jià))on Article from Wang cascade
第二篇:數(shù)據(jù)庫sql課后練習(xí)題及答案解析
先創(chuàng)建下面三個表:
(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)檢索同時借閱了總編號(BOOK_ID)為112266和449901兩本書的借書證號(READER_ID)。
##7)* 查找所有借了書的讀者的姓名(NAME)及所在單位(COMPANY)。8)* 找出李某所借所有圖書的書名及借書日期(BORROW_DATE)。
9)* 無重復(fù)地查詢2006年10月以后借書的讀者借書證號(READER_ID)、姓名和單位。
##10)* 找出借閱了
11)找出與”趙正義”在同一天借書的讀者姓名、所在單位及借書日期。12)查詢2006年7月以后沒有借書的讀者借書證號、姓名及單位。#13)求”科學(xué)出版社”圖書的最高單價(jià)、最低單價(jià)、平均單價(jià)。##14)* 求”信息系”當(dāng)前借閱圖書的讀者人次數(shù)。
#15)求出各個出版社圖書的最高價(jià)格、最低價(jià)格和總冊數(shù)。#16)分別找出各單位當(dāng)前借閱圖書的讀者人數(shù)及所在單位。
17)* 找出當(dāng)前至少借閱了2本圖書(大于等于2本)的讀者姓名及其所在單位。18)分別找出借書人次數(shù)多于1人次的單位及人次數(shù)。
19)找出藏書中各個出版單位的名稱、每個出版社的書籍的總冊數(shù)(每種可能有多冊)、書的價(jià)值總額。
20)查詢經(jīng)濟(jì)系是否還清所有圖書。如果已經(jīng)還清,顯示該系所有讀者的姓名、所在單位和職稱。
附錄:建表語句
創(chuàng)建圖書管理庫的圖書、讀者和借閱三個基本表的表結(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號樓424');insert into reader values(112,'財(cái)會系','李 立','男','副教授','2號樓316');insert into reader values(113,'經(jīng)濟(jì)系','張 三','男','講師','3號樓105');insert into reader values(114,'信息系','周華發(fā)','男','講師','1號樓316');insert into reader values(115,'信息系','趙正義','男','工程師','1號樓224');insert into reader values(116,'信息系','李 明','男','副教授','1號樓318');insert into reader values(117,'計(jì)算機(jī)系','李小峰','男','助教','1號樓214');insert into reader values(118,'計(jì)算機(jī)系','許鵬飛','男','助工','1號樓216');insert into reader values(119,'計(jì)算機(jī)系','劉大龍','男','教授','1號樓318');insert into reader values(120,'國際貿(mào)易','李 雪','男','副教授','4號樓506');insert into reader values(121,'國際貿(mào)易','李 爽','女','講師','4號樓510');insert into reader values(122,'國際貿(mào)易','王 純','女','講師','4號樓512');insert into reader values(123,'財(cái)會系','沈小霞','女','助教','2號樓202');insert into reader values(124,'財(cái)會系','朱 海','男','講師','2號樓210');insert into reader values(125,'財(cái)會系','馬英明','男','副教授','2號樓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)
讀者表(讀者編號 char(6),姓名,性別,年齡,單位,身份證號,職稱)圖書表(圖書編號char(6),圖書名稱,出版社,作者)借閱表(讀者編號,圖書編號,借閱時間)用SQL語言實(shí)現(xiàn)下列功能的sql語句代碼。(1)創(chuàng)建數(shù)據(jù)表book;
book表(圖書編號 char(6),圖書名稱,出版社,作者)要求使用:主鍵(圖書編號)、非空(圖書名稱),非空(作者)(2)創(chuàng)建數(shù)據(jù)表reader表;
學(xué)生信息表(reader編號 char(8),姓名,性別,年齡,工作單位,身份證號,職稱)要求使用:主鍵(reader編號)、默認(rèn)(職稱)、非空(工作單位,姓名)、唯一(身份證號)、檢查(性別),檢查(年齡)(3)創(chuàng)建借書表borrow;
borrow(ID,讀者編號,圖書編號,借書日期)要求使用:外鍵(學(xué)號,課號)(4)將下列課程信息添加到book表的代碼
圖書編號 名稱
100101 數(shù)據(jù)庫原理 100102 數(shù)據(jù)結(jié)構(gòu)
修改 課號為100102的圖書名稱:數(shù)據(jù)結(jié)構(gòu)與算法 刪除 課號為100101的圖書信息(5)創(chuàng)建視圖讀者借書信息的代碼;
讀者借書信息視圖(讀者編號,姓名,圖書編號,圖書名稱,借書日期)(6)從讀者表book中查詢姓李的女讀者的情況:姓名、性別、工作單位。(7)查詢統(tǒng)計(jì)出借書量超過5本的單位平均年齡
(8)創(chuàng)建帶參數(shù)的存儲過程[借某圖書的讀者高低均年齡]、執(zhí)行該過程的代碼
存儲過程功能:查詢借閱某圖書的的讀者最高年齡、最低年齡、平均年齡;
執(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)檢索同時借閱了總編號(BOOK_ID)為112266和449901兩本書的借書證號(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月以后借書的讀者借書證號(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月以后沒有借書的讀者借書證號、姓名及單位。
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)求出各個出版社圖書的最高價(jià)格、最低價(jià)格和總冊數(shù)。
SELECT MAX(PRICE)最高價(jià)格,MIN(PRICE)最低價(jià)格,COUNT(PRICE)總冊數(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)找出藏書中各個出版單位的名稱、每個出版社的書籍的總冊數(shù)(每種可能有多冊)、書的價(jià)值總額。
SELECT OUTPUT,COUNT(*)書籍的總冊數(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按貨號分類統(tǒng)計(jì)“銷售表”中各種商品的銷售總數(shù)量、平均價(jià)格、最高價(jià)、最低價(jià)以及銷售總金額。
SELECT 銷售總數(shù)量=SUM(數(shù)量),平均價(jià)格=AVG(單價(jià)),最高價(jià)=MAX(單價(jià)),最低價(jià)=MIN(單價(jià)),銷售總金額=SUM(金額),貨號 FROM 銷售表 GROUP BY 貨號
5按貨名分類統(tǒng)計(jì)“銷售表”中不包括計(jì)算機(jī)整機(jī)的各種商品的銷售總數(shù)量、平均價(jià)格以及銷售總金額。
SELECT銷售總數(shù)量=SUM(數(shù)量),平均價(jià)格=AVG(單價(jià)),銷售總金額=SUM(金額),貨名 FROM 銷售表WHERE 貨名 <>計(jì)算機(jī) GROUP BY 貨名
6按貨號分類統(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ù)量、單筆最大金額、三個月平均日 營業(yè)額、總營業(yè)額,并按總營業(yè)額降序排序。
11在“進(jìn)貨表”中按“貨號”“進(jìn)價(jià)”分類統(tǒng)計(jì)相同貨號不同價(jià)格的進(jìn)貨次數(shù)和進(jìn)貨數(shù)量。
12求所賣出商品的毛利潤。(銷售總金額-總成本),成本可以理解為平均進(jìn)價(jià)*數(shù)量。
13求每個銷售員所創(chuàng)造的利潤.14查詢每種貨物的進(jìn)價(jià)小于平均進(jìn)價(jià)的供貨商信息。
SELECT * FROM 供貨商表 WHERE 供貨商ID=(SELECT 供貨商ID FROM 進(jìn)貨表 S JOIN 商品一覽表 XON S.貨號=X.貨號 WHERE 進(jìn)價(jià)<平均進(jìn)價(jià))
第四篇:sql查詢練習(xí)題含答案
--(1)查詢20號部門的所有員工信息。select * from emp e where e.deptno=20;
--(2)查詢獎金(COMM)高于工資(SAL)的員工信息。select * from emp where comm>sal;--(3)查詢獎金高于工資的20%的員工信息。select * from emp where comm>sal*0.2;--(4)查詢10號部門中工種為MANAGER和20號部門中工種為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)查詢有獎金的員工的不同工種。select * from emp where comm is not null;--(7)查詢所有員工工資和獎金的和。select(e.sal+nvl(e.comm,0))from emp e;--(8)查詢沒有獎金或獎金低于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)查詢在2月份入職的所有員工信息。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)查詢各個部門的詳細(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號部門員工以及領(lǐng)導(dǎo)的信息。select * from emp where empno in(select mgr from emp where deptno=10)or deptno=10;
--(17)查詢工資為某個部門平均工資的員工信息。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ì)各個工種的人數(shù)與平均工資。
select count(*),e.job,avg(e.sal)from emp e group by e.job
--(21)統(tǒng)計(jì)每個部門中各個工種的人數(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)查詢每個員工的領(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號部門中工資排序前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員工及其直接、間接上級員工的信息。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表中插入一條記錄,員工號為1357,員工名字為oracle,--工資為2050元,部門號為20,入職日期為2002年5月10日。
--(33)將各部門員工的工資修改為該員工所在部門平均工資加1000。update emp e set sal= 1000+(select avg(sal)from emp where deptno=e.deptno);
--(34)查詢工作等級為2級,1985年以后入職的工作地點(diǎn)為DALLAS的員工編號、--姓名和工資。
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.部門平均薪水最高的部門編號
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.平均薪水等級最低的部門的部門名稱 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.更新員工工資為他的主管的工資,獎金
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.檢索班級號為20000003的學(xué)生的學(xué)號、姓名、班級代碼、班級名稱 selectstuno,stuname,student.classno,classname from student join class on class.classno=student.classno wherestudent.classno='20000003' 3.檢索學(xué)生選課為第1志愿(WILLORDER)的學(xué)號、姓名、課程號、課程名稱 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.按班級顯示學(xué)生信息,并計(jì)算每班學(xué)生人數(shù)。顯示要求格式如下:
select '班級編碼'=student.classno,'班級名稱'=classname,'學(xué)號'=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建筑管理”班級的系部、班級和學(xué)生信息,并計(jì)算班級人數(shù)。要求顯示格式如下:
select class.departno as '系部編碼',departname as '系部名稱',student.classno as '班級編碼',classname as '班級名稱', student.stuno as '學(xué)號',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.檢索陳金菊的個人信息,包括她選修的課程。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)