學生、老師、課程、選課表常用sql示例


  1、建表與准備數據

  (1)學生表 student

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `sid` int(11) DEFAULT NULL,
  `sname` varchar(20) DEFAULT NULL,
  `sage` int(11) DEFAULT NULL,
  `ssex` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '劉一', '18', '男');
INSERT INTO `student` VALUES ('2', '錢二', '19', '女');
INSERT INTO `student` VALUES ('3', '張三', '17', '男');
INSERT INTO `student` VALUES ('4', '李四', '18', '女');
INSERT INTO `student` VALUES ('5', '王五', '17', '男');
INSERT INTO `student` VALUES ('6', '趙六', '19', '女');

  (2)老師表 teacher

DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `tid` int(11) DEFAULT NULL,
  `tname` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('1', '葉平');
INSERT INTO `teacher` VALUES ('2', '賀高');
INSERT INTO `teacher` VALUES ('3', '楊艷');
INSERT INTO `teacher` VALUES ('4', '周磊');

  (3)課程表 course

DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
  `cid` int(11) DEFAULT NULL,
  `cname` varchar(255) DEFAULT NULL,
  `tid` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES ('1', '語文', '1');
INSERT INTO `course` VALUES ('2', '數學', '2');
INSERT INTO `course` VALUES ('3', '英語', '3');
INSERT INTO `course` VALUES ('4', '物理', '4');

  (4)選課表 sc

DROP TABLE IF EXISTS `sc`;
CREATE TABLE `sc` (
  `sid` int(11) DEFAULT NULL,
  `cid` int(20) DEFAULT NULL,
  `score` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of sc
-- ----------------------------
INSERT INTO `sc` VALUES ('1', '1', '60');
INSERT INTO `sc` VALUES ('1', '2', '78');
INSERT INTO `sc` VALUES ('1', '3', '67');
INSERT INTO `sc` VALUES ('1', '4', '58');
INSERT INTO `sc` VALUES ('2', '1', '79');
INSERT INTO `sc` VALUES ('2', '2', '81');
INSERT INTO `sc` VALUES ('2', '3', '92');
INSERT INTO `sc` VALUES ('2', '4', '68');
INSERT INTO `sc` VALUES ('3', '1', '91');
INSERT INTO `sc` VALUES ('3', '2', '47');
INSERT INTO `sc` VALUES ('3', '3', '88');
INSERT INTO `sc` VALUES ('3', '4', '56');
INSERT INTO `sc` VALUES ('4', '2', '88');
INSERT INTO `sc` VALUES ('4', '3', '90');
INSERT INTO `sc` VALUES ('4', '4', '93');
INSERT INTO `sc` VALUES ('5', '1', '46');
INSERT INTO `sc` VALUES ('5', '3', '78');
INSERT INTO `sc` VALUES ('5', '4', '53');
INSERT INTO `sc` VALUES ('6', '1', '35');
INSERT INTO `sc` VALUES ('6', '2', '68');
INSERT INTO `sc` VALUES ('6', '4', '71');

  2、sql示例

  (01)查詢“1”課程比“2”課程成績高的所有學生的學號;

SELECT  a.sid FROM 
(SELECT * FROM sc WHERE cid='1') a,
(SELECT * FROM sc WHERE cid='2') b
WHERE a.sid = b.sid AND a.score>b.score
SELECT a.sid FROM sc a,sc b WHERE a.sid = b.sid AND a.cid='1' AND b.cid='2' AND a.score > b.score

  (02)查詢平均成績大於60分的同學的學號和平均成績;

SELECT sid,AVG(score) FROM sc GROUP BY sid HAVING AVG(score) > 60

  (03)查詢所有同學的學號、姓名、選課數、總成績;

SELECT a.sid,a.sname,b.num,b.total FROM student a,
(SELECT sid,COUNT(1) num,SUM(score) total FROM sc GROUP BY sid) b
WHERE a.sid = b.sid;
SELECT a.sid,a.sname,COUNT(sc.cid),SUM(score) FROM student a LEFT JOIN sc ON a.sid = sc.sid GROUP BY a.sid,a.sname

  (04)查詢沒學過“葉平”老師課的同學的學號、姓名;

SELECT student.sid,student.sname FROM student WHERE student.sid  not in 
(SELECT sid FROM sc,course,teacher WHERE sc.cid = course.cid and course.tid = teacher.tid and teacher.tname ='葉平');

  (05)查詢學過編號“1”並且也學過編號“2”課程的同學的學號、姓名;

SELECT s.sid,s.sname FROM student s,sc a,sc b WHERE a.sid = b.sid AND a.sid = s.sid AND a.cid = '1' and b.cid = '2'
SELECT student.sid,student.sname FROM sc,student WHERE sc.sid = student.sid and sc.cid = '1' AND EXISTS
(SELECT * FROM sc sc2 WHERE sc2.sid = sc.sid and sc2.cid = '2')

  (06)查詢學過“葉平”老師所教的所有課的同學的學號、姓名;

SELECT sid,sname FROM student WHERE sid in (
SELECT sc.sid FROM teacher t,course c,sc WHERE t.tid = c.tid AND c.cid = sc.cid AND t.tname = '葉平' 
GROUP BY sc.sid HAVING COUNT(sc.cid) = (SELECT COUNT(1) FROM course c,teacher t WHERE c.tid = t.tid AND t.tname = '葉平')
)

  (07)查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名;

SELECT s.sid,s.sname FROM sc a,sc b,student s WHERE a.sid = b.sid AND a.sid = s.sid 
AND a.cid='2' AND b.cid = '1' AND a.score < b.score
SELECT s.sid,s.sname FROM sc,student s WHERE sc.cid = '2' AND sc.sid = s.sid AND EXISTS 
(SELECT * FROM sc sc2 WHERE sc.sid = sc2.sid AND sc2.cid = '1' AND sc.score < sc2.score)

  (08)查詢所有課程成績小於60分的同學的學號、姓名;

SELECT * FROM student WHERE sid not in (
SELECT sc.sid FROM sc WHERE sc.score >=60
)

  (09)查詢沒有學全所有課的同學的學號、姓名;

SELECT sid,sname FROM student WHERE sid in (
SELECT sc.sid FROM sc GROUP BY sc.sid HAVING COUNT(1)<(SELECT count(1) from course)
)
SELECT sc.sid,sname FROM sc,student WHERE sc.sid = student.sid GROUP BY sc.sid,sname 
HAVING COUNT(1)<(SELECT count(1) from course)

  (10)查詢至少有一門課與學號為“1001”的同學所學相同的同學的學號和姓名;

SELECT sid,sname from student WHERE sid in (
SELECT sc.sid FROM sc WHERE sc.sid !='1' AND sc.cid in (
SELECT sc.cid FROM sc WHERE sc.sid = '1'
)
)
SELECT distinct s.sid,s.sname from student s,sc WHERE s.sid = sc.sid AND s.sid != '1' 
AND sc.cid in (SELECT cid FROM sc WHERE sc.sid = '1')

  (11)#查詢和“1”號的同學學習的課程完全相同的其他同學學號和姓名;

SELECT sid,sname from student WHERE sid in (
SELECT sid from (
SELECT * from sc WHERE sc.sid != '1' AND EXISTS
(SELECT * FROM sc sc2 WHERE sc.cid = sc2.cid AND sc2.sid = '1')
) a GROUP BY sid HAVING COUNT(1)=(SELECT count(1) FROM sc WHERE sid = '1' )
)

  (12)

  (13)

  (14)

  (15)

  (16)

  (17)

  (18)

  (19)

  (20)

  (21)

  (22)

  (23)

  (24)

  (25)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM