20210815sqlLX

建表語句

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ù)據(jù)

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','助教','電子工程系');

題目

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

2、 查詢教師所有的單位即不重復(fù)的Depart列。

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

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

5、 查詢Score表中成績?yōu)?5,86或88的記錄。

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

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

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

9、 查詢“95031”班的學(xué)生人數(shù)。

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

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

12、查詢Score表中至少有5名學(xué)生選修的并以3開頭的課程的平均分?jǐn)?shù)。

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

14、查詢所有學(xué)生的Sname、Cno和Degree列。

15、查詢所有學(xué)生的Sno、Cname和Degree列。

16、查詢所有學(xué)生的Sname、Cname和Degree列。

17、查詢“95033”班所選課程的平均分。

18、假設(shè)使用如下命令建立了一個grade表:

create table grade(low? number(3,0),upp? number(3),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');

commit;

現(xiàn)查詢所有同學(xué)的Sno、Cno和rank列。

19、查詢選修“3-105”課程的成績高于“109”號同學(xué)成績的所有同學(xué)的記錄。

20、查詢score中選學(xué)一門以上課程的同學(xué)中分?jǐn)?shù)為非最高分成績的記錄。

21、查詢成績高于學(xué)號為“109”、課程號為“3-105”的成績的所有記錄。

22、查詢和學(xué)號為108的同學(xué)同年出生的所有學(xué)生的Sno、Sname和Sbirthday列。

23、查詢“張旭“教師任課的學(xué)生成績。

24、查詢選修某課程的同學(xué)人數(shù)多于5人的教師姓名。

25、查詢95033班和95031班全體學(xué)生的記錄。

26、查詢存在有85分以上成績的課程Cno.

27、查詢出“計算機(jī)系“教師所教課程的成績表。

28、查詢“計算機(jī)系”與“電子工程系“不同職稱的教師的Tname和Prof。

29、查詢選修編號為“3-105“課程且成績至少高于選修編號為“3-245”的同學(xué)的Cno、Sno和Degree,并按Degree從高到低次序排序。

30、查詢選修編號為“3-105”且成績高于選修編號為“3-245”課程的同學(xué)的Cno、Sno和Degree.

31、查詢所有教師和同學(xué)的name、sex和birthday.

32、查詢所有“女”教師和“女”同學(xué)的name、sex和birthday.

33、查詢成績比該課程平均成績低的同學(xué)的成績表。

34、查詢所有任課教師的Tname和Depart.

35? 查詢所有未講課的教師的Tname和Depart.

36、查詢至少有2名男生的班號。

37、查詢Student表中不姓“王”的同學(xué)記錄。

38、查詢Student表中每個學(xué)生的姓名和年齡。

39、查詢Student表中最大和最小的Sbirthday日期值。

40、以班號和年齡從大到小的順序查詢Student表中的全部記錄。

41、查詢“男”教師及其所上的課程。

42、查詢最高分同學(xué)的Sno、Cno和Degree列。

43、查詢和“李軍”同性別的所有同學(xué)的Sname.

44、查詢和“李軍”同性別并同班的同學(xué)Sname.

45、查詢所有選修“計算機(jī)導(dǎo)論”課程的“男”同學(xué)的成績表

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

SELECT Sname,Ssex,Class

FROM Student;

2.查詢教師所有的單位即不重復(fù)的Depart列。

SELECT DISTINCT Depart

FROM teachers;

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

SELECT *

FROM students;

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

SELECT *

FROM scores

WHERE Degree BETWEEN 60 AND 80;

5.查詢Score表中成績?yōu)?5,86或88的記錄。

SELECT *

FROM scores

WHERE Degree IN (85,86,88);

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

SELECT *

FROM students

WHERE Class='95031' OR Ssex='女';

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

SELECT *

FROM students

ORDER BY Class DESC;

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

SELECT *

FROM scores

ORDER BY Cno,Degree DESC;

9.查詢“95031”班的學(xué)生人數(shù)。

SELECT COUNT(1) AS StuNum

FROM students

WHERE Class='95031';

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

SELECT Sno,Cno

FROM scores

ORDER BY Degree DESC

LIMIT 1;

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

SELECT AVG(Degree)

FROM scores

WHERE Cno='3-105';

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;

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

SELECT Sname,Cno,Degree

FROM students INNER JOIN scores

ON(students.Sno=scores.Sno)

ORDER BY Sname;

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

SELECT Sno,Cname,Degree

FROM scores INNER JOIN courses

ON(scores.Cno=courses.Cno)

ORDER BY Sno;

16.查詢所有學(xué)生的Sname、Cname和Degree列。

SELECT Sname,Cname,Degree

FROM students INNER JOIN scores

ON(students.Sno=scores.Sno) INNER JOIN courses

ON(scores.Cno=courses.Cno)

ORDER BY Sname;

17.查詢“95033”班所選課程的平均分。

SELECT Cname,AVG(Degree)

FROM students INNER JOIN scores

ON(students.Sno=scores.Sno) INNER JOIN courses

ON(scores.Cno=courses.Cno)

WHERE Class='95033'

GROUP BY courses.Cno

ORDER BY Cname;

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列。

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;

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列。

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é)生成績。

SELECT Sno,Degree

FROM scores INNER JOIN courses

ON(scores.Cno=courses.Cno) INNER JOIN teachers

ON(courses.Tno=teachers.Tno)

WHERE teachers.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);

25.查詢95033班和95031班全體學(xué)生的記錄。

SELECT *

FROM students

WHERE Class IN ('95033','95031')

ORDER BY Class;

26.查詢存在有85分以上成績的課程Cno.

SELECT DISTINCT Cno

FROM scores

WHERE Degree>85;

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;

31.查詢所有教師和同學(xué)的name、sex和birthday.

SELECT Sname,Ssex,Sbirthday

FROM students

UNION

SELECT Tname,Tsex,Tbirthday

FROM teachers;

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;

37.查詢Student表中不姓“王”的同學(xué)記錄。

SELECT *

FROM students

WHERE Sname NOT LIKE '王%';

38.查詢Student表中每個學(xué)生的姓名和年齡。

SELECT Sname,YEAR(NOW())-YEAR(Sbirthday) AS Sage

FROM students;

39.查詢Student表中最大和最小的Sbirthday日期值。

SELECT MIN(Sbirthday),MAX(Sbirthday)

FROM students;

40.以班號和年齡從大到小的順序查詢Student表中的全部記錄。

SELECT *

FROM students

ORDER BY Class DESC,Sbirthday ASC;

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);

43.查詢和“李軍”同性別的所有同學(xué)的Sname.

SELECT s1.Sname

FROM students AS s1 INNER JOIN students AS s2

ON(s1.Ssex=s2.Ssex)

WHERE s2.Sname='李軍';

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)論');

查詢“3-105”課程比“3-245”課程成績高的學(xué)生的信息及課程分?jǐn)?shù)

SELECT * from

(SELECT sno,cno,degree dd FROM scores WHERE cno='3-105') t1

left join

(SELECT sno,cno,degree dx FROM scores WHERE cno='3-245') t2

ON

t1.sno=t2.sno

WHERE dd>dx

查詢平均成績大于等于60分的同學(xué)的學(xué)生編號和平均成績

SELECT avg(degree),sno from scores GROUP BY sno having avg(degree)>60

查詢和“103”號同學(xué)學(xué)習(xí)的課程完全相同的其他同學(xué)的學(xué)生編號

用hive實(shí)現(xiàn),先列轉(zhuǎn)行,將學(xué)生所學(xué)的所有課程按順序拼接起來,然后跟103的比較

查詢沒學(xué)過“張旭”老師講授的任一門課程的學(xué)生編號

SELECT DISTINCT sno from scores where sno not in(

SELECT? sno from scores

where cno in (

SELECT cno from courses C LEFT JOIN teachers T ON C.tno=T.tno WHERE T.tname='張旭'))

查詢所有同學(xué)的學(xué)生編號、選課總數(shù)、所有課程的總成績(沒成績的顯示為null)

SELECT sno,count(cno),sum(degree) from scores GROUP BY sno

查詢各科成績最高分、最低分和平均分

SELECT max(degree),min(degree),avg(degree),cno from scores GROUP BY cno

統(tǒng)計各科成績各分?jǐn)?shù)段人數(shù):課程編號,【100-85】,【85-70】,【70-60】,【60-0】及所占百分比

SELECT SC.cno as '課程ID'

,sum(CASE WHEN degree BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS '[100 - 85]'

,sum(CASE WHEN degree BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS '[85 - 70]'

,sum(CASE WHEN degree BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS '[70 - 60]'

,sum(CASE WHEN degree < 60 THEN 1 ELSE 0 END) AS '[60 -0]'

FROM scores SC

GROUP BY SC.cno;

查詢各科成績前三名的記錄

用hive窗口函數(shù)實(shí)現(xiàn)

成績有重復(fù)的情況下,查詢“3-105”課程的學(xué)生中,成績最高的學(xué)生信息及其成績

select sno,cno,degree from scores where degree= (select max(degree) from scores where cno='3-105')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容