詳解【SQL練習】-- 第一部分

概述

因為sql練習方面的網上內容比較多,整理了下分成三部分做介紹,大家可以跟著測試一下,看是不是能用多種方式來實現。


建表語句

CREATE TABLE students
(sno VARCHAR(3) NOT NULL,
sname VARCHAR(4) NOT NULL,
ssex VARCHAR(2) NOT NULL,
sbirthday DATETIME,
class VARCHAR(5))
CREATE TABLE courses
(cno VARCHAR(5) NOT NULL,
cname VARCHAR(10) NOT NULL,
tno VARCHAR(10) NOT NULL)
CREATE TABLE scores
(sno VARCHAR(3) NOT NULL,
cno VARCHAR(5) NOT NULL,
degree NUMERIC(10, 1) NOT NULL)
CREATE TABLE teachers
(tno VARCHAR(3) NOT NULL,
tname VARCHAR(4) NOT NULL, tsex VARCHAR(2) NOT NULL,
tbirthday DATETIME NOT NULL, prof VARCHAR(6),
depart VARCHAR(10) NOT NULL)
詳解【SQL練習】-- 第一部分


插入數據

INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,'曾華' ,'男' ,'1977-09-01',95033);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,'匡明' ,'男' ,'1975-10-02',95031);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,'王麗' ,'女' ,'1976-01-23',95033);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,'李軍' ,'男' ,'1976-02-20',95033);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,'王芳' ,'女' ,'1975-02-10',95031);
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,'陸君' ,'男' ,'1974-06-03',95031);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('3-105' ,'計算機導論',825);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('3-245' ,'操作系統' ,804);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('6-166' ,'數據電路' ,856);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('9-888' ,'高等數學' ,100);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (103,'3-245',86);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (105,'3-245',75);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (109,'3-245',68);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (103,'3-105',92);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (105,'3-105',88);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (109,'3-105',76);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (101,'3-105',64);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (107,'3-105',91);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (108,'3-105',78);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (101,'6-166',85);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (107,'6-106',79);
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (108,'6-166',81);
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (804,'李誠','男','1958-12-02','副教授','計算機系');
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (856,'張旭','男','1969-03-12','講師','電子工程系');
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (825,'王萍','女','1972-05-05','助教','計算機系');
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (831,'劉冰','女','1977-08-14','助教','電子工程系');
commit;
詳解【SQL練習】-- 第一部分

詳解【SQL練習】-- 第一部分

詳解【SQL練習】-- 第一部分


題目(大家可以先思考下怎麼寫)

1、 查詢Student表中的所有記錄的Sname、Ssex和Class列。

2、 查詢教師所有的單位即不重複的Depart列。

3、 查詢Student表的所有記錄。

4、 查詢Score表中成績在60到80之間的所有記錄。

5、 查詢Score表中成績為85,86或88的記錄。

6、 查詢Student表中“95031”班或性別為“女”的同學記錄。

7、 以Class降序查詢Student表的所有記錄。

8、 以Cno升序、Degree降序查詢Score表的所有記錄。

9、 查詢“95031”班的學生人數。

10、查詢Score表中的最高分的學生學號和課程號。

11、查詢‘3-105’號課程的平均分。

12、查詢Score表中至少有5名學生選修的並以3開頭的課程的平均分數。

13、查詢最低分大於70,最高分小於90的Sno列。

14、查詢所有學生的Sname、Cno和Degree列。

15、查詢所有學生的Sno、Cname和Degree列。


答案

1.查詢Student表中的所有記錄的Sname、Ssex和Class列。

SELECT Sname,Ssex,Class FROM Students;
詳解【SQL練習】-- 第一部分

2.查詢教師所有的單位即不重複的Depart列。

SELECT DISTINCT Depart FROM Teachers;
詳解【SQL練習】-- 第一部分

3.查詢Student表的所有記錄。

SELECT * FROM Students;
詳解【SQL練習】-- 第一部分

4.查詢Score表中成績在60到80之間的所有記錄。

SELECT * FROM Scores WHERE Degree BETWEEN 60 AND 80;
詳解【SQL練習】-- 第一部分

5.查詢Score表中成績為85,86或88的記錄。

SELECT * FROM Scores WHERE Degree IN (85,86,88);
詳解【SQL練習】-- 第一部分

6.查詢Student表中“95031”班或性別為“女”的同學記錄。

SELECT * FROM Students WHERE Class='95031' OR Ssex='女';
詳解【SQL練習】-- 第一部分

7.以Class降序查詢Student表的所有記錄。

SELECT * FROM Students ORDER BY Class DESC;
詳解【SQL練習】-- 第一部分

8.以Cno升序、Degree降序查詢Score表的所有記錄。

SELECT * FROM Scores ORDER BY Cno,Degree DESC;
詳解【SQL練習】-- 第一部分

9.查詢“95031”班的學生人數。

SELECT COUNT(1) AS StuNum
FROM Students
WHERE Class='95031';
詳解【SQL練習】-- 第一部分

10.查詢Score表中的最高分的學生學號和課程號。

SELECT Sno,Cno FROM Scores ORDER BY Degree DESC LIMIT 1;
詳解【SQL練習】-- 第一部分

11.查詢‘3-105’號課程的平均分。

SELECT AVG(Degree)
FROM Scores
WHERE Cno='3-105';
詳解【SQL練習】-- 第一部分

12.查詢Score表中至少有5名學生選修的並以3開頭的課程的平均分數。

SELECT Cno,AVG(Degree)
FROM Scores
WHERE Cno LIKE '3%'
GROUP BY Cno
HAVING COUNT(Sno) >= 5;
詳解【SQL練習】-- 第一部分

13.查詢最低分大於70,最高分小於90的Sno列。

SELECT Sno
FROM Scores
GROUP BY Sno

HAVING MAX(Degree)<90 AND MIN(Degree)>70;
詳解【SQL練習】-- 第一部分

14.查詢所有學生的Sname、Cno和Degree列。

SELECT Sname,Cno,Degree
FROM Students INNER JOIN Scores
ON(Students.Sno=Scores.Sno)
ORDER BY Sname;
詳解【SQL練習】-- 第一部分

15.查詢所有學生的Sno、Cname和Degree列。

SELECT Sno,Cname,Degree
FROM Scores INNER JOIN Courses
ON(Scores.Cno=Courses.Cno)
ORDER BY Sno;
詳解【SQL練習】-- 第一部分


大家有空的話可以先去思考下怎麼實現,然後對著答案測試下,還是很有幫助的。後面小編會分享更多DBA方面內容,感興趣的朋友可以關注一下~

詳解【SQL練習】-- 第一部分


分享到:


相關文章: