1. 程式人生 > >MYSQL基礎上機練習題(二)對資料指定列查詢、條件查詢、查詢結果排序、聚集函式查詢、分組統計查詢

MYSQL基礎上機練習題(二)對資料指定列查詢、條件查詢、查詢結果排序、聚集函式查詢、分組統計查詢

實驗目標:

1.掌握指定列或全部列查詢

2.掌握按條件查詢

3.掌握對查詢結果排序

4.掌握使用聚集函式的查詢

5.掌握分組統計查詢

一、請完成書中實驗7.1,並完成以下問題。

1.查詢所有學生的姓名及其出生年份回答以下問題:

SQL語句請截圖


① 觀察查詢的資料,若年齡不為空是否能求出出生年份,若年齡為空則出生年份顯示什麼?

能,若年齡為空,出生年份也顯示空

② 使用了哪些函式求出出生年份,AS的作用是什麼?

使用GETDATE()得到當前年份,再減去年齡得到出生年份。AS作用給列取別名

2.完成按條件查詢SC表考試成績不及格的學生的學號回答以下問題:

① 插入三行記錄,(s2,c7,45),(s3,c2,59),(s4,c3,50)(重複不能插進去),描述相應的SQL。

INSERT INTO SC(SNO,CNO,SCORE)

VALUES

('S2','C7',45),

('S3','C2',59),

('S4','C3',50)

② 查詢考試成績不及格的學生學號,會出現以下查詢結果嗎?如果沒出現,是什麼原因?如果出現了,如何解決出現重複的學號。


解決方法:在SELECT SNO FROM SC語句的 SNO 前加上 DISTINCT。

3.查詢年齡在20-23歲之間的學生的姓名、系名、年齡,試一試,再把between... And...換成in完成查詢,描述相應的SQL語句。


4.完成查詢姓李的學生的姓名、學號、性別,試一試再插入兩行資料(10,‘李思’,‘女’)(11

,‘李王睿安’,‘男’),能否使用like分別查詢李姓兩字、李姓四字學生的姓名、學號、性別,描述相應的SQL語句。

查詢李姓兩字學生的姓名、學號、性別

查詢李姓李姓四字學生的姓名、學號、性別


5.完成對查詢結果進行排序,回答排序是用什麼子句完成,其中升序、降序的關鍵字分別是什麼?可以按多個欄位進行排序嗎?

SELECT 欄位名 AS 排序名,n  FROM 表名

WHERE (條件)

ORDER BY 欄位名(升序),欄位名 DESC (降序)

升序:OREDER BY接升序的欄位;

降序:OREDER BY接降序的欄位DESC

可以按多個欄位進行排序

6.T表查詢教師的職稱及相應的人數,描述相應的SQL語句。

7.T表中查詢老師的姓名、職稱,工資,並按教師的SAL欄位進行降序排序。

8.在S表、SC表中查詢選課學生、及其選課的總成績,並根據總成績進行降序排列,查詢結果可參考如下。

9.查詢有多少個學生參加選課?


二、執行下面的SQL指令碼完成表的建立及資料的插入,並完成後面的問題

1. 資料表(4個表)

l 學生表(學號、姓名、年齡、性別)

create table student(

sno varchar(10) primary key,

sname varchar(20),

sage int,

ssex varchar(5)

)

l 教師表(教師工號、姓名)

create table teacher(

tno varchar(10) primary key,

tname varchar(20)

)

l 課程表(課程號、課程名、教師工號)

create table course(

cno varchar(10),

cname varchar(20),

tno varchar(10),

constraint pk_course primary key (cno,tno)

)

l 成績表(學號、課程號、分數)

create table sc(

sno varchar(10),

cno varchar(10),

score real,

constraint pk_sc primary key (sno,cno)

)

2. 初始化資料

l 學生表

insert into student values ('s001','張三',23,'');

insert into student values ('s002','李四',23,'');

insert into student values ('s003','吳鵬',25,'');

insert into student values ('s004','琴沁',20,'');

insert into student values ('s005','王麗',20,'');

insert into student values ('s006','李波',21,'');

insert into student values ('s007','劉玉',21,'');

insert into student values ('s008','蕭蓉',21,'');

insert into student values ('s009','陳蕭曉',23,'');

insert into student values ('s010','陳美',22,'');

l 教師表

insert into teacher values ('t001', '劉陽');

insert into teacher values ('t002', '諶燕');

insert into teacher values ('t003', '胡明星');

l 課程表

insert into course values ('c001','J2SE','t002');

insert into course values ('c002','Java Web','t002');

insert into course values ('c003','SSH','t001');

insert into course values ('c004','Oracle','t001');

insert into course values ('c005','SQL SERVER 2005','t003');

insert into course values ('c006','C#','t003');

insert into course values ('c007','JavaScript','t002');

insert into course values ('c008','DIV+CSS','t001');

insert into course values ('c009','PHP','t003');

insert into course values ('c010','EJB3.0','t002');

l 成績表

insert into sc values ('s001','c001',78.9);

insert into sc values ('s002','c001',80.9);

insert into sc values ('s003','c001',81.9);

insert into sc values ('s004','c001',60.9);

insert into sc values ('s001','c002',82.9);

insert into sc values ('s002','c002',72.9);

insert into sc values ('s003','c002',81.9);

insert into sc values ('s001','c003','59');

3. 完成下面的題目

1. 求選了課程的學生人數。

2.查詢姓“劉”的老師的個數

3. 查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分。

4.查詢平均成績大於60 分的同學的學號和平均成績(思路按學號分組計算學生的平均成績,用having子句篩選出平均成績大於60的學生)。

5. 按各科平均成績從低到高和及格率的百分數從高到低順序,效果如下。(思路:可以通過case when..then..else..end統計人數))

 


6.查詢每門課程被選修的學生數。


7.查詢男生、女生人數

8. 查詢姓“張”的學生名單。

9. 查詢1981 年出生的學生名單。


10. 查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列。

11. 查詢各個課程及相應的選修人數。

12. 統計每門課程的學生選修人數(超過2人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列。

13. 檢索至少選修兩門課程的學生學號。

14.檢索c004”課程分數小於60,按分數降序排列的同學學號。

15. 刪除s002”同學的“c001”課程的成績。