本次MySQL的查詢語句是本人考試題目;html
全部題目都已經過;mysql
該查詢練習並無sql文件進行檢查;sql
若是有書寫以及其餘錯誤歡迎指出。數據庫
1.找出借書超過5本的借閱信息網絡
找出借書超過5本的借閱信息,輸出借書卡號及所借圖書數。函數
BORROW(借書記錄)表 :CNO 借書卡號,BNO 書號,RDATE 還書日期code
列含義 列名 類型 主鍵/外鍵htm
卡號 Cno Int 主鍵非空,參照card表的cnoblog
書號 bno Int 主鍵非空,參照book表的bno排序
借書日期 rdate Datetime
表名請用小寫。
select cno,count(*) from borrow group by cno having count(*)>5;
2.統計各專業的學生人數,要求輸出系名,專業名,總人數,按系名排序。
[注意:SQL表名請用小寫]表結構以下:
一、student(學生表):sno 學號 CHAR(9)
sname 姓名 CHAR(10)
ssex 性別 CHAR(2)
sage 年齡
SMALLINTjg 籍貫 VARCHAR(50)
zydh 專業代號 CHAR(4)
xdh 系代號 CHAR(2)
二、zy(專業表) zydh 專業代號 CHAR(4)
zymc 專業名稱 VARCHAR(20)
xz 學制 SMALLINT
三、xb(系表) xdh 系代號 CHAR(2)
xmc 系名稱 VARCHAR(20)
select xmc,zymc,count(*) from student s,xb,zy where s.zydh=zy.zydh and s.xdh=xb.xdh group by xmc,zymc order by xb.xmc;
3.SQL查詢:查詢各個部門人數大於10人的,輸出部門編號和人數,並按人數升序排序。
表結構以下:
select dept_id,COUNT(employee_id) as number from employee group by dept_id HAVING number>=10 order by number;
4.查詢選修未經過2門(包括2門)以上的學生的信息,輸出學號、姓名、選修未經過門數,按門數降序排序,若門數相同,按學號升序排序。
[注意:SQL表名請用小寫]
SELECT student.sno,sname,count(*) from student,sc where student.sno=sc.sno and grade<60 GROUP by sno HAVING count(*)>=2 ORDER BY count(*) desc ,sno ;
5.查詢每一個學生高於他本身選修平均分的那門課程的成績,輸出學號,課程號,課程成績,他全部課程的平均分(取整),並按學號升序排列。
[注意:SQL表名請用小寫]
學生數據庫db_student包括三個數據表student(學生表)、course(課程表)和sc(選課表)。表結構以下:
一、student(學生表):
SNO學號CHAR(7)
SNAME姓名CHAR(10)
SSEX性別CHAR(2)
SAGE年齡SMALLINT
SDEPT所在系 VARCHAR(20)
二、course(課程表)
CNO課程號CHAR(10)
CNAME課程名VARCHAR(20)
CCREDIT學分SMALLINT
SEMSTER學期SMALLINT
PERIOD學時SMALLINT
三、sc(選課表)
SNO 學號CHAR(7)
CNO 課程號CHAR(10)
GRADE 成績 SMALLINT
SELECT sc.sno,cno,grade,avggrade FROM sc,(SELECT sno,ROUND(AVG(grade)) AS avggrade FROM sc GROUP BY sno) AS avg_sc WHERE sc.sno=avg_sc.sno AND sc.grade>avg_sc.avggrade ORDER BY sc.sno;
6.SQL查詢:查詢哪些客戶從未有訂單,輸出客戶編號和客戶名稱。
表結構以下:【注意order表,語句中寫order
】
SELECT customer_id,customer_name FROM customer WHERE customer_id NOT IN(SELECT customer_id FROM `order`);
7.找出至今沒有人選修過的課程
有課程表,學生表,成績表以下,找出至今沒有人選修過的課程號、課程名稱。
course
列名 | 數據類型 | 約束 | 說明 |
---|---|---|---|
cno | char(4) | 主鍵非空 | 課程號 |
cname | varchar(40) | 非空 | 課程名 |
cpno | char(4) | 參照course(cno) | 先修課 |
ccredit | tinyint | 學分 |
student
列名 | 數據類型 | 約束 | 說明 |
---|---|---|---|
sno | char(7) | 主鍵非空 | 學號 |
sname | char(10) | 非空 | 學生姓名 |
ssex | enum('男','女') | 默認‘男’ | 性別 |
sage | tinyint | 年齡 | |
sdept | char(20) | 默認'計算機系' | 系別 |
sc
列名 | 數據類型 | 約束 | 說明 |
---|---|---|---|
sno | char(7) | 主鍵非空,參照student(sno) | 學號 |
cno | char(4) | 主鍵非空,參照course(cno) | 課程號 |
grade | decimal(5,1) | 成績 | |
ccredit | tinyint |
select cno AS 課程號,cname AS 課程名 FROM course WHERE cno NOT IN(SELECT DISTINCT sc.cno FROM sc);
8.查詢同時選修了c01,c02,c03課程學生,輸出學號,姓名
[注意:SQL表名請用小寫]
select distinct student.sno, sname from student,sc where student.sno = sc.sno and student.sno in ( select sno from sc where cno = 'c01' and sno in ( select sno from sc where cno = 'c02' and sno in ( select sno from sc where cno = 'c03' ) ) ) ;
9.查詢選課門數最多的學生的學號和姓名
有課程表,學生表,成績表以下,查詢選課門數最多的學生的學號和姓名,結果可能不僅一行。
course
列名 | 數據類型 | 約束 | 說明 |
---|---|---|---|
cno | char(4) | 主鍵非空 | 課程號 |
cname | varchar(40) | 非空 | 課程名 |
cpno | char(4) | 參照course(cno) | 先修課 |
ccredit | tinyint | 學分 |
student
列名 | 數據類型 | 約束 | 說明 |
---|---|---|---|
sno | char(7) | 主鍵非空 | 學號 |
sname | char(10) | 非空 | 學生姓名 |
ssex | enum('男','女') | 默認‘男’ | 性別 |
sage | tinyint | 年齡 | |
sdept | char(20) | 默認'計算機系' | 系別 |
sc
列名 | 數據類型 | 約束 | 說明 |
---|---|---|---|
sno | char(7) | 主鍵非空,參照student(sno) | 學號 |
cno | char(4) | 主鍵非空,參照course(cno) | 課程號 |
grade | decimal(5,1) | 成績 | |
ccredit | tinyint |
select student.sno,sname from sc,student where sc.sno=student.sno group by sno having (count(cno)>=all(select count(cno) from sc group by sno));
10 .查詢統計產品「17」的每單平均訂購數,和訂單總數
我的看來該語句有些歧義,表示不是很清楚;
表結構以下:
SELECT product_id, AVG(buy_number), COUNT(*) FROM order_detail WHERE product_id = 17;
11.輸出「高等數學」課程成績前2名的學生的學號,姓名,系名
[注意:SQL表名請用小寫]
學生數據庫db_student包括三個數據表student(學生表)、course(課程表)和sc(選課表)。表結構以下:
一、student(學生表):
SNO學號CHAR(7)
SNAME姓名CHAR(10)
SSEX性別CHAR(2)
SAGE年齡SMALLINT
SDEPT所在系 VARCHAR(20)
二、course(課程表)
CNO課程號CHAR(10)
CNAME課程名VARCHAR(20)
CCREDIT學分SMALLINT
SEMSTER學期SMALLINT
PERIOD學時SMALLINT
三、sc(選課表)
SNO 學號CHAR(7)
CNO 課程號CHAR(10)
GRADE 成績 SMALLINT
SELECT s.sno,sname,sdept from student s,sc,course c WHERE s.sno=sc.sno and sc.cno=c.cno AND cname='高等數學' ORDER BY grade DESC LIMIT 2;
12.查詢2015年的借閱信息,輸出讀者卡號、書號及借書日期。
borrow(借書記錄)表 :cno 借書卡號,bno 書號,rdate 還書日期
select cno,bno,rdate from borrow where year(rdate)=2015;
13.SQL查詢:查詢人員信息:包括員工和客戶
查詢人員信息:包括員工和客戶。(員工數據在前)
輸出「id」、「name」、「type」,若爲員工,type爲「員工」,若爲客戶,type爲「客戶」。
員工表:employee
客戶表:customer
查詢輸出形式以下:
SELECT employee_id AS id,employee_name AS 'name','員工'type FROM employee UNION SELECT customer_id AS id,customer_name AS 'name','客戶'type FROM customer;
14.查詢書名包括"網絡"關鍵詞的圖書信息
查詢書名包括"網絡"關鍵詞的圖書信息,輸出書號、書名、做者。
表結構以下:
book(圖書) 表:bno 書號,bname 書名,author 做者,price 單價,quantity 庫存數
select bno,bname,author from book where bname like '%網絡%';
15.成績表包括以下列(學號,課程代號,成績,教師工號),查詢查詢選課的學生總數。
SELECT count(DISTINCT xh) from cj;
16.查詢選修經過門數超過3門,且平均分在70以上的學生成績信息
查詢選修經過門數超過3門,且平均分在70以上的學生的學號,選修門數,平均成績,並按平均成績從高到低排序。
成績表包括以下列(學號,課程代號,成績,教師工號),表結構定義以下:
select xh,count(*),avg(cj) from cj where cj>60 group by xh having count(*)>3 and avg(cj)>70 order by 3 desc;
17.統計各門課程選修人數,要求輸出課程代號,課程名,有成績人數(grade不爲NULL),最高分,最低分,平均分(取整round函數),按課程號排序。
[注意:SQL表名請用小寫]
學生數據庫db_student包括三個數據表student(學生表)、course(課程表)和sc(選課表)。表結構以下:
一、student(學生表):
SNO學號CHAR(7)
SNAME姓名CHAR(10)
SSEX性別CHAR(2)
SAGE年齡SMALLINT
SDEPT所在系 VARCHAR(20)
二、course(課程表)
CNO課程號CHAR(10)
CNAME課程名VARCHAR(20)
CCREDIT學分SMALLINT
SEMSTER學期SMALLINT
PERIOD學時SMALLINT
三、sc(選課表)
SNO 學號CHAR(7)
CNO 課程號CHAR(10)
GRADE 成績 SMALLINT
select sc.cno,cname,count(grade),max(grade),min(grade),round(avg(grade)) from sc,course where sc.cno=course.cno group by cno order by cno;
18.查詢輸出平均成績在2-5名的學生,輸出學號、姓名和平均成績(取整),平均成績降序。【不用考慮空值】
[注意:SQL表名請用小寫]
學生數據庫db_student包括三個數據表student(學生表)、course(課程表)和sc(選課表)。表結構以下:
一、student(學生表):
SNO學號CHAR(7)
SNAME姓名CHAR(10)
SSEX性別CHAR(2)
SAGE年齡SMALLINT
SDEPT所在系 VARCHAR(20)
二、course(課程表)
CNO課程號CHAR(10)
CNAME課程名VARCHAR(20)
CCREDIT學分SMALLINT
SEMSTER學期SMALLINT
PERIOD學時SMALLINT
三、sc(選課表)
SNO 學號CHAR(7)
CNO 課程號CHAR(10)
GRADE 成績 SMALLINT
select sc.sno,sname,round(avg(grade)) from student,course,sc where student.sno=sc.sno and course.cno=sc.cno group by sc.sno order by round(avg(grade)) desc limit 1,4;
19.SQL查詢:查詢統計2016年訂單客戶總數
表結構以下:[注意表名請寫order
]
SELECT COUNT(DISTINCT customer_id) from `order` WHERE order_date LIKE '%2016%';
20.查詢借閱信息,要求輸出卡號,姓名,借閱書數,書名列表(按書名升序排列,用下劃線_分隔),按照卡號升序排序。
表結構以下:
card(借書卡) 表:cno 卡號,name 姓名,class 班級
book(圖書) 表:bno 書號,bname 書名,author 做者,price 單價,quantity 庫存數
borrow(借書記錄)表 :cno 借書卡號,bno 書號,rdate 還書日期
select card.cno,name,count(*), GROUP_CONCAT(bname order by bname separator '_') from card,borrow,book where card.cno=borrow.cno and borrow.bno=book.bno group by card.cno order by card.cno;
上述題目的解不是惟一,例題中的解是我所理解並運行成功的,若是有不對的地方,歡迎指出。
後面還會有數據更新部分的練習題;
MySQL查詢練習第一部分:http://www.javashuo.com/article/p-qiwfpgxl-nv.html
感謝各位看到最後!