SQL高级教程:EXISTS谓词与子查询深度解析

需积分: 0 0 下载量 102 浏览量 更新于2024-08-23 收藏 224KB PPT 举报
"这篇资料主要讲述了SQL语言中的高级特性,特别是与EXISTS谓词相关的子查询,以及数据定义、操纵和控制等方面的知识。通过实例展示了如何创建、修改和删除复杂表,同时也涉及到权限管理的GRANT和REVOKE操作。" 在SQL中,EXISTS谓词是用于判断子查询是否返回至少一行数据,它常用于优化查询性能,尤其是对比IN或NOT IN操作符时。EXISTS谓词的基本语法结构如下: ```sql SELECT column1, column2, ... FROM table1 WHERE EXISTS (SELECT 1 FROM table2 WHERE condition); ``` 在这个结构中,`table1`是外部表,而`table2`是包含EXISTS子查询的内部表。如果内部表的子查询满足条件,即存在匹配的行,那么外部表的每一行都将被返回。这通常用于关联查询,比如在学生(Student)和选课(SC)表之间查找某个课程(Cno)的所有学生(Sname): ```sql SELECT Sname FROM Student, SC WHERE Student.Sno = SC.Sno AND SC.Cno = '1'; ``` 这个查询将返回所有选修了课程编号为'1'的学生姓名。它使用了连接运算(JOIN)来结合两个表的数据,其中`Student.Sno = SC.Sno`是连接条件,确保了学生和选课记录的对应。 在SQL语言的高级部分,我们学习了数据定义(DDL)的命令,如CREATE、DROP和ALTER,用于创建、删除和修改数据库对象,如表。例如,创建一个名为`student1`的复杂表,包含自增ID、学号(Sno)、姓名(Sname)、年龄(Sage)、性别(Ssex)和系别(Dept)字段,并设置相应的约束: ```sql CREATE TABLE student1 ( id INT IDENTITY(1000,1), sno CHAR(5) PRIMARY KEY, sname CHAR(20) NOT NULL UNIQUE, sage INT CHECK(sage >= 16 AND sage <= 60), ssex CHAR(2) CHECK(ssex = '男' OR ssex = '女') DEFAULT '男', constraint NO_Format CHECK(sno LIKE '[0-9][0-9][0-9][0-9][0-9]') ); ``` 这里,`id`是自增主键,`sno`也有唯一性约束,`sage`的值需在16到60之间,`ssex`只能是'男'或'女',默认为'男',并且`sno`的格式必须符合特定的数字模式。 此外,我们还可以使用ALTER TABLE来添加或删除列,例如: ```sql ALTER TABLE student1 ADD sdept INT; DROP TABLE student1; ``` 第一行代码向`student1`表中添加了一个新的列`sdept`,第二行代码则删除了整个`student1`表。 在数据控制方面,SQL提供了GRANT和REVOKE命令来管理数据库对象的访问权限。例如,以下语句授予用户`david1`和角色`[huxiaoliang\david2]`创建数据库和表的权限: ```sql GRANT CREATE DATABASE, CREATE TABLE TO david1, [huxiaoliang\david2]; ``` 而`REVOKE`命令用于撤销这些权限: ```sql REVOKE CREATE DATABASE, CREATE TABLE FROM david1, [huxiaoliang\david2]; ``` 本资料涵盖了SQL中的高级查询技巧和数据库管理,对于理解和应用SQL有极大的帮助。