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
查詢李姓兩字學生的姓名、學號、性別
查詢李姓李姓四字學生的姓名、學號、性別
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”課程的成績。