数据库实验7

编程入门 行业动态 更新时间:2024-10-26 23:28:12

<a href=https://www.elefans.com/category/jswz/34/1771350.html style=数据库实验7"/>

数据库实验7

2021011203

针对stu数据库中的student、course和sc三个表实现以下查询:

1、查询’CS’系的学生的成绩信息,包括学号,课程号,成绩。

SELECT sno,cno,gradeFROM scfcyWHERE sno in(SELECT snoFROM studentfcyWHERE sdept='CS')

 

 真的很奇怪,语句不有什么问题,但就是错误?

可能是复制过程中的奇怪符号?

SELECT Sno,Cno,Grade
FROM scfcy
WHERE Sno IN
(SELECT SnoFROM studentfcyWHERE Sdept='cs')

 sql中所有字段都不区分大小写

select sno,cno,grade
from scfcy
WHERE sno IN
(SELECT snofrom studentfcywhere sdept='CS'
)

 

2、查询李勇所选修的课程的课程名。

select cname
from coursefcy    //确定好是那个表from scfcy
where sno IN    //只能找表中有的
(SELECT snoFROM studentfcyWHERE sname='李勇'
)
//SELECT DISTINCT Cname,加上DISTINCT,慢0.00002sselect cname
from coursefcy
where cno IN
(SELECT cnofrom scfcywhere sno IN(SELECT snoFROM studentfcyWHERE sname='李勇' )
)

 嵌套查询时,上面的where 和下面的select 是对应相同的的

3、查询既选了1号课程又选了2号课程的学生学号。

SELECT Sno
FROM scfcy
WHERE Cno='1' AND Sno IN
(SELECT SnoFROM scfcyWHERE Cno='2')

错误实例: 

SELECT sno
FROM scfcy
where cno="1" and cno="2"
SELECT snoFROM scfcyWHERE cno='1000' and sno in(SELECT snoFROM scfcy WHERE cno='1022')

代码相同:不报错,也没有结果

4、查询没有选修课程的学生的名单。    (提示:使用谓词NOT IN引导)

SELECT sname,sno
FROM studentfcy
WHERE sno not in
(SELECT DISTINCT snoFROM scfcy
)

没有选修课的情况:在studentfcy的表中,不在scfcy表中

exists:

5、查询选修“course {1}”课的全部学生的总成绩。

SELECT SUM(Grade) as 'course {1}总成绩'
FROM scfcy
WHERE cno IN
(SELECT CnoFROM coursefcyWHERE Cname='CoursE {1}')

 

6、统计学生选修表,显示学号为“200800003"的学生在其各科成绩中,最高分成绩所对应的课程号和成绩。

SELECT Cno,Grade
FROM scfcy
WHERE Sno='2008000003'
AND Grade=
(SELECT MAX(Grade)FROM scfcyWHERE Sno='2008000003')

思考:如果该学号学生有两个课程分数都为最高的100分,查询会有什么结果?如图

7、查询arrt系选修"course {1}"课的所有学生的成绩之和。

SELECT SUM(Grade) as 'Course {1}总成绩'
FROM scfcy 
WHERE Cno IN
(SELECT CnoFROM coursefcyWHERE Cname='Course {1}')AND Sno IN(SELECT SnoFROM studentfcy WHERE Sdept='art')

8、查询IS系"王红梅"同学的"Course {1000}"成绩。

SELECT Grade
FROM scfcy
WHERE Cno IN
(SELECT CnoFROM coursefcyWHERE Cname='Course {1000}')AND Sno IN(SELECT SnoFROM studentfcyWHERE Sdept='IS'AND Sname='王红梅')

9、查询学号为’200800004’的学生没选的课程的课程号和课程名。

SELECT DISTINCT Cno,Cname
FROM coursefcy
WHERE Cno NOT IN
(SELECT CnoFROM scfcyWHERE Sno='2008000004')

10、检索至少选修了两门课程的学生的信息,包括学号,姓名和所在系。      (提示:having)

SELECT Sno,Sname,Sdept
FROM studentfcy
WHERE Sno IN
(SELECT SnoFROM scfcyGROUP BY SnoHAVING COUNT(Cno)>=2)

   使用EXISTS实现以下查询:

  1. 查询选修了课程的学生的名单。
#共2003人
SELECT sno,sname
FROM studentfcy
WHERE EXISTS
(SELECT snoFROM scfcyWHERE sno=studentfcy.sno )#错误示范:这肯定是所有人啊
SELECT sno,sname
FROM studentfcy
WHERE EXISTS
(SELECT snoFROM scfcyWHERE sno=scfcy.sno )

2、查询学号为2008000000的学生没选的课程的课程号和课程名。

SELECT cno,cname
FROM coursefcy
WHERE NOT EXISTS
(SELECT 1FROM scfcyWHERE cno=coursefcyo AND sno='2008000000')

 

 

         EXISTS 是 SQL 中的一种条件判断语句,用于判断一个子查询是否返回了结果。如果子查询返回了一条或多条记录,则 EXITS 条件返回 true,否则返回 false。

在 SQL 查询中,我们可以使用 EXISTS 关键字来测试一个结果集是否不为空。EXISTS 后面需要跟一个子查询,该子查询用于返回一个结果集。如果子查询中存在至少一行,则 EXISTS 返回 true。如果子查询中没有任何行,则 EXISTS 返回 false。

        通常,EXISTS 关键字常常和子查询或关联子查询一起使用。在这种情况下,子查询通常返回选定行或行集的行数,而 EXISTS 通常用来测试这些行是否存在。

下面是一个使用 EXISTS 和子查询的例子:

假设我们有两个表,一个是名为 Employees 的表,另一个是名为 Orders 的表。我们想要找出所有至少完成了一次订单的员工。可以使用以下 SQL 查询语句实现:

```sql
SELECT LastName, FirstName
FROM Employees
WHERE EXISTS (
    SELECT *
    FROM Orders
    WHERE Orders.EmployeeID = Employees.EmployeeID
)
```

在上述语句中,主查询用于从 Employees 表中选择所有的员工。子查询用于从 Orders 表中选择所有至少有一条记录的订单。如果能够找到与主查询中的 EmployeeID 相关联的 EmployeeID,则返回 true。如果
找不到匹配的 EmployeeID,则返回 false。最后,仅返回在子查询中返回的任何记录。因此,查询返回了所有至少完成了一次订单的员工。
 

EXISTS 和嵌套查询都是 SQL 中用于检索数据的方法。它们之间的主要区别如下:

1. 返回结果集的方式不同:嵌套查询返回查询语句的结果集,而 EXISTS 返回一个布尔值(true 或 false)。

2. 效率不同:EXISTS 操作通常比嵌套查询更高效,尤其是在处理大量数据时。这是因为 EXISTS 可以在找到匹配记录后立即停止搜索,而嵌套查询需要执行完整的查询语句并返回结果集。

3. 语法不同:EXISTS 使用子查询来确定是否存在记录或满足特定条件的记录,而嵌套查询通常使用子查询来检索信息,并将其嵌套到另一个查询中,以进一步限制返回的结果。

下面是一个例子来比较嵌套查询和 EXISTS 的使用:

假设我们有两个表,一个是名为 Employee 的表,另一个是名为 Orders 的表。我们想要检索所有从未完成任何订单的员工信息。可以使用以下 SQL 查询语句实现:

- 使用 EXISTS:

```sql
SELECT EmployeeID, LastName, FirstName
FROM Employee E
WHERE NOT EXISTS (
    SELECT O.EmployeeID
    FROM Orders O
    WHERE O.EmployeeID = E.EmployeeID
);
```

只要有一个符号条件句会返回一个true,然后输出所有的true吗

在上述语句中,主查询用于从 Employee 表中选择所有的员工。子查询用于从 Orders 表中选择所有已经完成了订单的订单。如果能够找到与主查询中的 EmployeeID 相关联的 Empl
oyeeID,则返回 true,否则返回 false。在本例中,我们使用 NOT EXISTS 操作符来找到从未完成任何订单的员工。

- 使用嵌套查询:

```sql
SELECT EmployeeID, LastName, FirstName
FROM Employee
WHERE EmployeeID NOT IN (
    SELECT DISTINCT EmployeeID
    FROM Orders
);
```

在上述语句中,主查询用于从 Employee 表中选择所有的员工。子查询用于从 Orders 表中选择所有 EmployeeID。然后,主查询使用 NOT IN 操作符来查找不在子查询返回结果集中的 EmployeeID。与 EXISTS 不同的是,这个嵌套查询返回了一个结果集用于与 NOT IN 操作符进行比较,而不是返回一个布尔结果。

总之,虽然 EXISTS 和嵌套查询都可以用来检索数据,但它们的使用方式、效率和语法都有所不同。在实践中,根据实际情况选择合适的查询方式,以最大程度地提高检索效率。
 

更多推荐

数据库实验7

本文发布于:2024-02-08 21:57:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1675510.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据库

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!