为管理业务培训信息,建立 3 个表:
S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,
学员年龄
C(C#,CN)C#,CN分别代表课程编号,课程名称
SC(S#,C#,G) S#,C#,G 分别代表学号,所选的课程编号,学习成绩
(1)使用标准SQL语句查询选修课程名称为’税收基础’的学员学 号和姓名 ?
答案: select s# ,sn from s where S# in(select S# from c,sc where #=# and cn= '税收基础')
(2)使用标准SQL语句查询选修课程编号为’C2的学员姓名 和所属单位 ?
答: select sn,sd from s,sc where #=# and #= 'c2'
(3)使用标准SQL语句查询不选修课程编号为’C5的学员姓 名和所属单位 ?
答: select sn,sd from s where s# not in(select s# from sc where c#='c5')
(4)查询选修了课程的学员人数
答:select 学员人数=count(distinct s#) from sc
(5)查询选修课程超过 5 门的学员学号和所属单位 ?
答: select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)
标准SQL怎么理解??为什么不能使用join连接?求解惑谢谢!
温故知新:常用的SQL标准有哪些,在SQL92中是 如何使用连接的? - 来一杯卡布奇诺的文章 - 知乎
https://zhuanlan.zhihu.com/p/188717335
可以使用 bing.com 查询 标准官网。
标准SQL(Structured Query Language)是一种用于管理和查询关系数据库的标准化语言。它定义了数据库操作的标准方法,允许用户执行诸如查询、插入、更新和删除等操作。标准SQL通常被数据库管理系统(DBMS)厂商采用,以确保用户在不同系统之间能够以相似的方式进行数据库操作。
关于您提到的查询和为什么不能使用JOIN连接的问题,实际上,您的查询示例中已经使用了子查询,而不是使用JOIN。JOIN是一种SQL操作,用于将两个或多个表中的行结合在一起。子查询也是一种在SELECT语句中嵌套使用的查询,返回单一值或多个值的结果。
下面是对每个查询的解释:
查询选修课程名称为‘税收基础’的学员学号和姓名:
sql
Copy code
SELECT S#, SN FROM S WHERE S# IN (SELECT S# FROM C, SC WHERE S# = # AND CN = '税收基础')
这里使用了子查询,通过IN子句将外部查询与内部查询关联。
查询选修课程编号为‘C2’的学员姓名和所属单位:
sql
Copy code
SELECT SN, SD FROM S, SC WHERE # = # AND # = 'C2'
这里使用了传统的逗号(,)进行表连接,但没有明确指定连接条件,可能存在笛卡尔积的风险。
查询不选修课程编号为‘C5’的学员姓名和所属单位:
sql
Copy code
SELECT SN, SD FROM S WHERE S# NOT IN (SELECT S# FROM SC WHERE C# = 'C5')
这里同样使用了子查询,通过NOT IN子句排除选修了课程'C5'的学员。
查询选修了课程的学员人数:
sql
Copy code
SELECT 学员人数 = COUNT(DISTINCT S#) FROM SC
这里使用了COUNT和DISTINCT来计算选修了课程的学员人数。
查询选修课程超过5门的学员学号和所属单位:
sql
Copy code
SELECT SN, SD FROM S WHERE S# IN (SELECT S# FROM SC GROUP BY S# HAVING COUNT(DISTINCT C#) > 5)
这里同样使用了子查询,通过GROUP BY和HAVING来筛选选修课程超过5门的学员。
虽然这些查询使用了子查询,但在实际的SQL中,您也可以使用JOIN操作来完成类似的任务。JOIN通常用于将多个表中的相关行连接在一起,但在您的情况下,使用子查询也是一种有效的方法。JOIN和子查询之间的选择通常取决于查询的复杂性、性能需求以及个人或团队的偏好。