MySQL查詢練習2

MySQL查詢練習2

導讀:

本次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

感謝各位看到最後!

相關文章
相關標籤/搜索