Mysql练习

数据表

CREATE TABLE STUDENT
(SNO VARCHAR(3) NOT NULL, 
SNAME VARCHAR(4) NOT NULL,
SSEX VARCHAR(2) NOT NULL, 
SBIRTHDAY DATE,
SCLASS VARCHAR(5));
 
CREATE TABLE TEACHER 
(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);
 
CREATE TABLE COURSE
(CNO VARCHAR(5) NOT NULL, 
CNAME VARCHAR(10) NOT NULL, 
TNO VARCHAR(10) NOT NULL);
 
CREATE TABLE SCORE 
(SNO VARCHAR(3) NOT NULL, 
CNO VARCHAR(5) NOT NULL, 
DEGREE NUMERIC(10, 0) NOT NULL); 
 
 
 
ALTER TABLE student
ADD CONSTRAINT primary key (sno);
ALTER TABLE course
ADD constraint primary key (cno);
ALTER TABLE score
ADD constraint primary key (sno, cno);
ALTER TABLE teacher
ADD constraint primary key (tno);
ALTER TABLE course
ADD constraint foreign key (tno) references teacher (tno);
ALTER TABLE score
ADD constraint foreign key (cno) references course (cno);
 
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,SCLASS) VALUES (108 ,'曾华' 
,'男' ,'1977-09-01',95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,SCLASS) VALUES (105 ,'匡明' 
,'男' ,'1975-10-02',95031);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,SCLASS) VALUES (107 ,'王丽' 
,'女' ,'1976-01-23',95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,SCLASS) VALUES (101 ,'李军' 
,'男' ,'1976-02-20',95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,SCLASS) VALUES (109 ,'王芳' 
,'女' ,'1975-02-10',95031);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,SCLASS) VALUES (103 ,'陆君' 
,'男' ,'1974-06-03',95031);
 
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) 
VALUES (804,'李诚','男','1958-12-02','副教授','计算机系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) 
VALUES (856,'张旭','男','1969-03-12','讲师','电子工程系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (825,'王萍','女','1972-05-05','助教','计算机系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) 
VALUES (831,'刘冰','女','1977-08-14','助教','电子工程系');
 
INSERT INTO COURSE(CNO,CNAME,TNO) VALUES ('3-105','计算机导论',825);
INSERT INTO COURSE(CNO,CNAME,TNO) VALUES ('3-245','操作系统',804);
INSERT INTO COURSE(CNO,CNAME,TNO) VALUES ('6-166','数据电路',856);
INSERT INTO COURSE(CNO,CNAME,TNO) VALUES ('9-888','高等数学',831);
 
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (103,'3-245',86);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (105,'3-245',75);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (109,'3-245',68);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (103,'3-105',92);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (105,'3-105',88);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (109,'3-105',76);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (101,'3-105',64);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (107,'3-105',91);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (108,'3-105',78);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (101,'6-166',85);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (107,'6-166',79);
INSERT INTO SCORE(SNO,CNO,DEGREE) VALUES (108,'6-166',81);

练习

1、 查询Student表中的所有记录的Sname、Ssex和Sclass列。
SELECT sname ,ssex,sclass
FROM student


2、 查询教师所有的单位即不重复的Depart列
SELECT  DISTINCT depart
FROM teacher

3、 查询Student表的所有记录。

SELECT *
FROM student

4、 查询Score表中成绩在6080之间的所有记录。
SELECT *
FROM score
WHERE degree BETWEEN 60 AND 80

5、 查询Score表中成绩为858688的记录。
SELECT *
FROM SCORE
WHERE degree IN(85,86,88)

6、 查询Student表中“95031”班或性别为“女”的同学记录。
SELECT *
FROM student
WHERE ssex='女' OR sclass='95031'


7、 以Class降序查询Student表的所有记录
SELECT *
FROM student
ORDER BY Sclass DESC

8、 以Cno升序、Degree降序查询Score表的所有记录。
SELECT *
FROM score
ORDER BY cno ASC ,degree DESC

9、 查询“95031”班的学生人数。
SELECT COUNT(*) 人数
FROM student
WHERE sclass='95031'
GROUP BY sclass


10、查询Score表中的最高分的学生学号和课程号。
SELECT sno,cno,MAX(degree)
FROM score

11、查询‘3-105’号课程的平均分
SELECT AVG(degree)
FROM score
WHERE cno='3-105'


12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
SELECT AVG(degree)
FROM score
GROUP BY cno
HAVING COUNT(*)>=5 AND cno LIKE '3%'


13、查询最低分大于70,最高分小于90的Sno列。
SELECT sno
FROM score
WHERE degree>=70 AND degree<=90

14、查询所有学生的Sname、Cno和Degree列。
SELECT sname ,cno,degree
FROM student ,score
WHERE score.`SNO`=student.`SNO`


16、查询所有学生的Sname、Cname和Degree列。
SELECT stu.sname,cou.cname,sco.degree
FROM student stu,course cou,score sco
WHERE stu.sno=sco.sno
AND sco.cno=cou.cno

#17、查询“95033”班所选课程的平均分。
SELECT AVG(s1.degree) 平均分
FROM (
	SELECT *
	FROM score sc,student st
	WHERE sc.sno=st.sno
	HAVING SCLASS='95033'

) s1



18、假设使用如下命令建立了一个grade表:
CREATE TABLE grade(
low   INTEGER,
upp   INTEGER,
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;
现查询所有同学的Sno、Cno和rank列。//非等值连接
SELECT sno,cno,rank
FROM score sc,grade gr
WHERE degree BETWEEN gr.low AND gr.upp

19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
SELECT sc.*
FROM student st,score sc
WHERE st.sno=sc.sno
AND sc.cno='3-105'
AND sc.degree>(

	SELECT degree
	FROM score
	WHERE sno=109
	AND cno='3-105'

)

20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
SELECT sc.*
FROM score sc

21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
SELECT sc.*
FROM score sc
WHERE sc.cno='3-105'	课程号为“3-105WHERE sc.degree>(
	SELECT DEGREES    学号为“109
	FROM score
	WHERE sno=109
	AND cno='3-105'

)
22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。//YEAR()函数
SELECT sno,sname, SBIRTHDAY
FROM student 
WHERE YEAR(SBIRTHDAY)=(

	SELECT YEAR(SBIRTHDAY)
	FROM student
	WHERE sno=108


)


23、查询“张旭“教师任课的学生成绩。//三表等值连接
SELECT sc.DEGREE
FROM teacher t INNER JOIN course c INNER JOIN score sc
ON (t.TNO=c.TNO AND c.CNO=sc.CNO)
WHERE t.TNAME='张旭';


24、查询选修某课程的同学人数多于5人的教师姓名。


SELECT t.TNAME
FROM teacher t
WHERE t.TNO=(
SELECT c.TNO
FROM course c,score sc
WHERE sc.CNO=c.CNO
GROUP BY sc.cno
HAVING COUNT(*)>5);

25、查询95033班和95031班全体学生的记录。
SELECT *
FROM student
WHERE sclass  IN (95033,95031)


26、查询存在有85分以上成绩的课程Cno.
SELECT cno
FROM score
WHERE degree >=85


27、查询出“计算机系“教师所教课程的成绩表。
SELECT sc.*
FROM score sc INNER JOIN teacher te INNER JOIN course co
ON (sc.cno=co.cno AND co.tno=te.tno)
WHERE `DEPART`='计算机系'


28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。

SELECT tea.tname ,tea.prof
FROM teacher te,teacher tea
WHERE te.depart=tea.depart AND te.prof<>tea.prof






29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,
并按Degree从高到低次序排序。

SELECT cno, sno, degree
FROM score a
WHERE cno='3-105'
AND degree>(SELECT degree FROM score b WHERE cno='3-245' AND a.sno=b.sno)
ORDER BY degree DESC;


31、查询所有教师和同学的NAME、sex和birthday. UNION 联合查询

SELECT st.sname,st.SSEX,st.SBIRTHDAY
FROM student st
UNION ALL
SELECT t.TNAME,t.TSEX,t.TBIRTHDAY
FROM teacher t;




32、查询所有“女”教师和“女”同学的NAME、sex和birthday. UNION 联合查询


SELECT st.sname,st.SSEX,st.SBIRTHDAY
FROM student st
WHERE st.SSEX='女'
UNION ALL
SELECT t.TNAME,t.TSEX,t.TBIRTHDAY
FROM teacher t
WHERE t.TSEX='女';


33、查询成绩比该课程平均成绩低的同学的成绩表。


SELECT *
FROM score sc
WHERE sc.DEGREE<(SELECT AVG( DEGREE) FROM score WHERE sc.CNO=score.CNO);
 



34、查询所有任课教师的Tname和Depart.
SELECT tname ,depart
FROM teacher
WHERE prof<>'助教'



35  查询所有未讲课的教师的Tname和Depart. 
SELECT tname ,depart
FROM teacher
WHERE prof<=>'助教'

36、查询至少有2名男生的班号。


SELECT DISTINCT s.SCLASS
FROM student s
WHERE s.SCLASS IN (
SELECT ss.SCLASS
FROM student ss
WHERE ss.SSEX='男'
GROUP BY ss.SCLASS
HAVING COUNT(*)>=2);


37、查询Student表中不姓“王”的同学记录。
SELECT*
FROM student 
WHERE sname NOT LIKE '王%'

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

SELECT MAX(SBIRTHDAY),MIN(SBIRTHDAY)
FROM student


40、以班号和年龄从大到小的顺序查询Student表中的全部记录

SELECT *
FROM student 
ORDER BY sclass DESC,SBIRTHDAY ASC


41、查询“男”教师及其所上的课程。

SELECT t.tname ,co.cname
FROM teacher t ,course co
WHERE t.tno=co.tno


43、查询和“李军”同性别的所有同学的Sname.
SELECT sname
FROM student
WHERE ssex LIKE (SELECT ssex FROM student WHERE sname='李军')



44、查询和“李军”同性别并同班的同学Sname.
SELECT sname
FROM student
WHERE ssex LIKE (SELECT ssex FROM student WHERE sname='李军')
AND sclass = (SELECT sclass FROM student WHERE sname='李军')



45、查询所有选修“计算机导论”课程的“男”同学的成绩表
SELECT sc.*
FROM score sc INNER JOIN student st INNER JOIN course co
ON( sc.cno=co.cno AND st.sno=sc.sno)
WHERE co.cname='计算机导论' AND st.ssex='男'

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值