查询成绩表中同时考了科目1和科目2,并且科1大于科2的学生

select * from sc;

在这里插入图片描述

-- 01~04号学生各考了01、02、03科,05号考了01、02科,06号考了01、03科,07号学生考了02、03科,
-- 那么会产生(1*3)*3*4+(1*2)*2*3=48条记录
-- 就是把左表中的一条和右表中与之相等条件下的每一条进行匹配,生成新的记录。
select s1.* , s2.*
from sc s1, sc s2
where s1.sid = s2.sid;

在这里插入图片描述

-- 这样查询左表只把考了科目一的查询出来,右表会把所有的查询出来
-- 然后左表中的每一条记录会和右表中符合连接条件下的每一条进行匹配生成一行
select s1.*,s2.*
from sc s1, sc s2
where 
s1.sid = s2.sid -- 把左右表中sid相等的连接起来生成新的纪录
and 
s1.cid='01' -- 约束左表值查出来考了科目一的

在这里插入图片描述

-- 这样查询出来的两个表没有连接关系了。
-- 会把左表中的每一条逐一和右表中的一条匹配(左表第1条会和右表每一条匹配),生成记录数的平方个记录
select s1.* , s2.*
from sc s1, sc s2
where 
s1.cid='01' 
and 
s2.cid='02'

在这里插入图片描述

select s1.* , s2.*
from sc s1, sc s2
where 
s1.sid=s2.sid -- 查询表中sid相等的连接起来生成新的记录
and 
s1.cid='01' -- 考了科目1
and 
s2.cid='02'-- 并且要考了科目2(因为左右表已经通过sid连接起来了,所以是在同一个id下既考了科1右考了科2)

在这里插入图片描述

select s1.* , s2.* 
from sc s1,sc s2
where 
s1.sid=s2.sid 
and 
s1.cid='01' 
and 
s2.cid='02' 
and 
s1.score > s2.score;

在这里插入图片描述

select sname,s3.*
from
(select s1.*
from sc s1, sc s2
where s1.sid=s2.sid 
and 
s1.cid='01' 
and 
s2.cid='02' 
and 
s1.score>s2.score) s3
inner join student on student.sid=s3.sid; 
-- 这里使用inner join和left join的效果相同,都能实现需要
发布了70 篇原创文章 · 获赞 2 · 访问量 2472
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览