SQL 语句(三)--------------数据查询(连接查询)

/*若一个查询同时涉及两个以上的表,则称之为连接查询*/
/********************************等值与非等值连接查询********************************/
/*查询每个学生及其选修课程情况*/
SELECT 学生.*,选课.*
FROM 学生选课.学生,学生选课.选课
WHERE 学生.学号=选课.学号
ORDER BY 学生.学号 ASC;


/********************************自然连接********************************/
/*在等值连接中把目标列中重复的属性列去掉则为自然连接*/
SELECT 学生.学号,姓名,生日,院系号,年龄,课程号,成绩
FROM 学生选课.学生,学生选课.选课
WHERE 学生.学号=选课.学号
ORDER BY 学生.学号 ASC;


/*******************************自身连接********************************/
/*查询每一门课的间接先修课*/
/*需要为课程表取两个别名 FIRST SECOND*/
SELECT FIRST.课程号,SECOND.先修课
FROM 学生选课.课程 FIRST,学生选课.课程 SECOND
WHERE FIRST.先修课=SECOND.课程号 AND SECOND.先修课 IS NOT NULL;


/*******************************外连接********************************/
/*如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值,那么这种连接叫外连接*/
/*查询每个学生及其选修课程情况*/
SELECT 学生.学号,姓名,生日,院系号,年龄,课程号,成绩
--FROM 学生选课.学生 LEFT OUTER JOIN 学生选课.选课 ON(学生.学号=选课.学号);
FROM 学生选课.学生 LEFT OUTER JOIN 学生选课.选课 USING (学号);


--左外连接列出左边关系中的所有元组,右外连接列出右边关系中的所有元组;


/*******************************复合条件连接********************************/
--WHERE子句中可以有多个连接条件,称为复合条件连接


--查询选修0003号课程且成绩在90分以上的所有学生
SELECT 学生.*,课程号,成绩
FROM 学生选课.学生,学生选课.选课
--WHERE 学生.学号=选课.学号 AND 课程号 LIKE '0003' AND 成绩>=90;
--优化:先从选课表中挑选出课程号=0003并且成绩>90的元组形成中间关系,再和Student中满足连接条件的元组进行连接
WHERE 课程号 LIKE '0003' AND 成绩>=90 and 学生.学号=选课.学号;


--查询每个学生的学号,姓名,选修的课程名及成绩
SELECT 学生.学号,学生.姓名,课程.名称,选课.成绩
FROM 学生选课.学生,学生选课.课程,学生选课.选课
WHERE  课程.课程号=选课.课程号 AND 选课.学号=学生.学号
ORDER BY 学号 ASC;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值