/*若一个查询同时涉及两个以上的表,则称之为连接查询*/
/********************************等值与非等值连接查询********************************/
/*查询每个学生及其选修课程情况*/
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;
/********************************等值与非等值连接查询********************************/
/*查询每个学生及其选修课程情况*/
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;