手写SQL

建表语句及原始数据

CREATE TABLE student
(
sid int PRIMARY KEY,
sname VARCHAR(20),
sage DATETIME,
ssex CHAR(4)
)
insert into student values('01' , '赵雷' , '1990-01-01' , '男');
insert into student values('02' , '钱电' , '1990-12-21' , '男');
insert into student values('03' , '孙风' , '1990-05-20' , '男');
insert into student values('04' , '李云' , '1990-08-06' , '男');
insert into student values('05' , '周梅' , '1991-12-01' , '女');
insert into student values('06' , '吴兰' , '1992-03-01' , '女');
insert into student values('07' , '郑竹' , '1989-07-01' , '女');
insert into student values('08' , '王菊' , '1990-01-20' , '女');
SELECT * FROM student
drop TABLE student
create table teacher(
tid int PRIMARY KEY,
tname VARCHAR(20)
)
INSERT INTO teacher VALUES(1,'张老师');
INSERT INTO teacher VALUES(2,'李老师');
INSERT INTO teacher VALUES(3,'王老师');
INSERT INTO teacher VALUES(4,'赵老师');
INSERT INTO teacher VALUES(5,'于老师');
SELECT * from teacher
CREATE TABLE course(
cid int PRIMARY KEY ,
cname VARCHAR(20),
tid int,
CONSTRAINT fk_tid FOREIGN KEY (tid) REFERENCES teacher(tid)
)
insert INTO course VALUES(1,'语文',5);
insert INTO course VALUES(2,'数学',2);
insert INTO course VALUES(3,'英语',1);
insert INTO course VALUES(4,'物理',3);
insert INTO course VALUES(5,'化学',4);
SELECT * FROM course
DROP TABLE score
create TABLE score(
sid int ,
cid int ,
score int,
CONSTRAINT fk_cid FOREIGN KEY (cid) REFERENCES course(cid),
CONSTRAINT fk_sid FOREIGN KEY (sid) REFERENCES student(sid)
)
INSERT INTO score VALUES(1,1,94);
INSERT INTO score VALUES(1,2,54);
INSERT INTO score VALUES(1,3,81);
INSERT INTO score VALUES(1,4,79);
INSERT INTO score VALUES(1,5,78);
INSERT INTO score VALUES(2,1,36);
INSERT INTO score VALUES(2,2,60);
INSERT INTO score VALUES(2,3,99);
INSERT INTO score VALUES(2,4,83);
INSERT INTO score VALUES(2,5,53);
INSERT INTO score VALUES(3,1,67);
INSERT INTO score VALUES(3,2,49);
INSERT INTO score VALUES(3,3,63);
INSERT INTO score VALUES(3,4,92);
INSERT INTO score VALUES(3,5,29);
INSERT INTO score VALUES(4,1,38);
INSERT INTO score VALUES(4,2,58);
INSERT INTO score VALUES(4,3,69);
INSERT INTO score VALUES(4,4,93);
INSERT INTO score VALUES(4,5,79);
INSERT INTO score VALUES(5,1,18);
INSERT INTO score VALUES(5,2,68);
INSERT INTO score VALUES(5,3,73);
INSERT INTO score VALUES(5,4,84);
INSERT INTO score VALUES(5,5,57);
SELECT * FROM score

查询“语文”课程成绩比“数学”课程成绩高的学生的ID

# 嵌套查询
SELECT a.sid
FROM
(SELECT sid,score FROM score WHERE cid=(SELECT cid FROM course WHERE cname='语文'))a,
(SELECT sid,score FROM score WHERE cid=(SELECT cid FROM course WHERE cname='数学'))b
WHERE a.sid = b.sid and a.score>b.score;
# 验证结果的正确性
SELECT student.sid,score,course.cid FROM student,course,score
WHERE student.sid=score.sid
AND course.cid = score.cid
AND course.cname IN ('语文','数学')

INNER JOIN写法

# 先找出课程1所有的学生成绩信息
SELECT student.sid ,sc1.score as '语文',sc2.score as '数学' FROM student INNER JOIN score sc1 ON (student.sid = sc1.sid)AND sc1.cid=(SELECT cid FROM course WHERE cname='语文')
# 关联课程2的所有学生成绩信息
INNER JOIN score sc2 ON(student.sid = sc2.sid)and sc2.cid = (SELECT cid FROM course WHERE cname='数学')
# 最后判断成绩
WHERE sc1.score>sc2.score;

INNER JOIN和等值连接可以相互替换

SELECT * FROM teacher INNER JOIN course ON(teacher.tid=course.tid)
# 这两句的结果是一样的
SELECT * FROM teacher,course WHERE teacher.tid=course.tid

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/16646942.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(52)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起