常見的學(xué)生老師課程分?jǐn)?shù):
建表:
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)
插數(shù):
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' ,'計算機(jī)導(dǎo)論',825);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('3-245' ,'操作系統(tǒng)' ,804);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('6-166' ,'數(shù)據(jù)電路' ,856);
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('9-888' ,'高等數(shù)學(xué)' ,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','副教授','計算機(jī)系');
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','助教','計算機(jī)系');
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (831,'劉冰','女','1977-08-14','助教','電子工程系');
---------------------
12.查詢Score表中至少有5名學(xué)生選修的并以3開頭的課程的平均分?jǐn)?shù)知押。
SELECT Cno,AVG(Degree)
FROM Scores
WHERE Cno LIKE '3%'
GROUP BY Cno
HAVING COUNT(Sno) >= 5;
13.查詢最低分大于70,最高分小于90的Sno列。
SELECT Sno
FROM Scores
GROUP BY Sno
HAVING MAX(Degree)<90 AND MIN(Degree)>70;
18.假設(shè)使用如下命令建立了一個grade表:
CREATE TABLE grade(low TINYINT,upp TINYINT,rank CHAR(1));
INSERT INTO grade VALUES(90,100,'A');
INSERT INTO grade VALUES(80,89,'B');
INSERT INTO grade VALUES(70,79,'C');
INSERT INTO grade VALUES(60,69,'D');
INSERT INTO grade VALUES(0,59,'E');
現(xiàn)查詢所有同學(xué)的Sno、Cno和rank列。
解法1:
SELECT SNO,CNO,RANK FROM scores,GRADE WHERE DEGREE BETWEEN LOW AND UPP
ORDER BY Sno;
解法2:
SELECT Sno,Cno,rank
FROM Scores INNER JOIN grade
ON(Scores.Degree>=grade.low AND Scores.Degree<=grade.upp)
ORDER BY Sno;
19.查詢選修“3-105”課程的成績高于“109”號同學(xué)成績的所有同學(xué)的記錄。
SELECT s1.Sno,s1.Degree
FROM Scores AS s1 INNER JOIN Scores AS s2
ON(s1.Cno=s2.Cno AND s1.Degree>s2.Degree)
WHERE s1.Cno='3-105' AND s2.Sno='109'
ORDER BY s1.Sno;
另外兩種解法:
1.
SELECT A.* FROM SCOREs A JOIN SCOREs B WHERE A.CNO='3-105' AND A.DEGREE>B.DEGREE AND
B.SNO='109' AND B.CNO='3-105';
2.
SELECT A.* FROM SCOREs A? WHERE A.CNO='3-105' AND A.DEGREE>ALL(SELECT DEGREE FROM
SCOREs B WHERE B.SNO='109' AND B.CNO='3-105');
20.查詢score中選學(xué)一門以上課程的同學(xué)中分?jǐn)?shù)為非最高分成績的記錄。
SELECT * FROM Scores?
GROUP BY Sno?
HAVING COUNT(cno)>1?
AND?
Degree!=MAX(Degree);
21.查詢成績高于學(xué)號為“109”凶朗、課程號為“3-105”的成績的所有記錄。
SELECT s1.Sno,s1.Degree
FROM Scores AS s1 INNER JOIN Scores AS s2
ON(s1.Cno=s2.Cno AND s1.Degree>s2.Degree)
WHERE s1.Cno='3-105' AND s2.Sno='109'
ORDER BY s1.Sno;
22.查詢和學(xué)號為108的同學(xué)同年出生的所有學(xué)生的Sno显拳、Sname和Sbirthday列棚愤。
解法1:
SELECT SNO,SNAME,SBIRTHDAY
FROM STUDENTs WHERE YEAR(SBIRTHDAY)=(SELECT YEAR(SBIRTHDAY) FROM STUDENTs WHERE SNO='108');
解法2:
SELECT s1.Sno,s1.Sname,s1.Sbirthday
FROM Students AS s1 INNER JOIN Students AS s2
ON(YEAR(s1.Sbirthday)=YEAR(s2.Sbirthday))
WHERE s2.Sno='108';
23.查詢“張旭“教師任課的學(xué)生成績。
解法1:
SELECT Sno,Degree
FROM Scores INNER JOIN Courses
ON(Scores.Cno=Courses.Cno) INNER JOIN Teachers
ON(Courses.Tno=Teachers.Tno)
WHERE Teachers.Tname='張旭';
解法2:
SELECT A.SNO,A.DEGREE?
FROM scores A JOIN (TEACHERs B,COURSEs C)
ON A.CNO=C.CNO AND B.TNO=C.TNO
WHERE B.TNAME='張旭';
24.查詢選修某課程的同學(xué)人數(shù)多于5人的教師姓名。
SELECT DISTINCT Tname
FROM Scores INNER JOIN Courses
ON(Scores.Cno=Courses.Cno) INNER JOIN Teachers
ON(Courses.Tno=Teachers.Tno)
WHERE Courses.Cno IN(SELECT Cno FROM Scores GROUP BY(Cno) HAVING COUNT(Sno)>5);
27.查詢出“計算機(jī)系“教師所教課程的成績表宛畦。
SELECT Tname,Cname,SName,Degree
FROM Teachers INNER JOIN Courses
ON(Teachers.Tno=Courses.Tno) INNER JOIN Scores
ON(Courses.Cno=Scores.Cno) INNER JOIN Students
ON(Scores.Sno=Students.Sno)
WHERE Teachers.Depart='計算機(jī)系'
ORDER BY Tname,Cname,Degree DESC;
28.查詢“計算機(jī)系”與“電子工程系“不同職稱的教師的Tname和Prof瘸洛。
SELECT Tname,Prof
FROM Teachers
WHERE Depart='計算機(jī)系' AND Prof NOT IN(
? ? SELECT DISTINCT Prof
? ? FROM Teachers
? ? WHERE Depart='電子工程系');
29.查詢選修編號為“3-105“課程且成績至少高于任意選修編號為“3-245”的同學(xué)的成績的Cno、Sno和Degree,并按Degree從高到低次序排序次和。
SELECT Cno,Sno,Degree
FROM Scores
WHERE Cno='3-105' AND Degree > ANY(
? ? SELECT Degree
? ? FROM Scores
? ? WHERE Cno='3-245')
ORDER BY Degree DESC;
30.查詢選修編號為“3-105”且成績高于所有選修編號為“3-245”課程的同學(xué)的Cno反肋、Sno和Degree.
SELECT Cno,Sno,Degree
FROM Scores
WHERE Cno='3-105' AND Degree > ALL(
? ? SELECT Degree
? ? FROM Scores
? ? WHERE Cno='3-245')
ORDER BY Degree DESC;
32.查詢所有“女”教師和“女”同學(xué)的name、sex和birthday.
SELECT Sname,Ssex,Sbirthday
FROM Students
WHERE Ssex='女'
UNION
SELECT Tname,Tsex,Tbirthday
FROM Teachers
WHERE Tsex='女';
33.查詢成績比該課程平均成績低的同學(xué)的成績表踏施。
SELECT s1.*
FROM Scores AS s1 INNER JOIN (
? ? SELECT Cno,AVG(Degree) AS aDegree
? ? FROM Scores
? ? GROUP BY Cno) s2
ON(s1.Cno=s2.Cno AND s1.Degree<s2.aDegree);
34.查詢所有任課教師的Tname和Depart.
SELECT Tname,Depart
FROM Teachers
WHERE Tno IN(
? ? SELECT Tno
? ? FROM Courses
);
35.查詢所有未講課的教師的Tname和Depart.
SELECT Tname,Depart
FROM Teachers
WHERE Tno NOT IN(
? ? SELECT Tno
? ? FROM Courses
);
36.查詢至少有2名男生的班號石蔗。
SELECT Class,COUNT(1) AS boyCount
FROM Students
WHERE Ssex='男'
GROUP BY Class
HAVING boyCount>=2;
38.查詢Student表中每個學(xué)生的姓名和年齡。
SELECT Sname,YEAR(NOW())-YEAR(Sbirthday) AS Sage
FROM Students;
39.查詢Student表中最大和最小的Sbirthday日期值畅形。
SELECT MIN(Sbirthday),MAX(Sbirthday)
FROM Students;
41.查詢“男”教師及其所上的課程养距。
SELECT Teachers.Tname,Courses.Cname
FROM Teachers INNER JOIN Courses
ON(Teachers.Tno=Courses.Tno)
WHERE Teachers.Tsex='男';
42.查詢最高分同學(xué)的Sno、Cno和Degree列日熬。
SELECT *
FROM Scores
GROUP BY Cno
HAVING Degree=Max(Degree);
44.查詢和“李軍”同性別并同班的同學(xué)Sname.
SELECT s1.Sname
FROM Students AS s1 INNER JOIN Students AS s2
ON(s1.Ssex=s2.Ssex AND s1.Class=s2.Class)
WHERE s2.Sname='李軍';
45.查詢所有選修“計算機(jī)導(dǎo)論”課程的“男”同學(xué)的成績表
SELECT *
FROM Scores
WHERE Sno IN (
? ? SELECT Sno
? ? FROM Students
? ? WHERE Ssex='男') AND
? ? Cno IN (
? ? SELECT Cno
? ? FROM Courses
? ? WHERE Cname='計算機(jī)導(dǎo)論');
遞歸查詢:
CREATE TABLE `digui` (
? `id` int(11) NOT NULL AUTO_INCREMENT,
? `parent_id` int(255) DEFAULT NULL,
? `name` varchar(255) DEFAULT NULL,
? PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
SELECT t1.name 城市,t2.name 街區(qū),t3.name 道路
FROM digui t1
LEFT JOIN digui t2 ON t1.id = t2.parent_id
LEFT JOIN digui t3 ON t2.id = t3.parent_id
WHERE t1.id = '1';
參考鏈接:https://blog.csdn.net/mrbcy/article/details/68965271