[工学]3SQL-数据库原理
数据库原理 例50. 查询计算机系的学生与年龄不大于19岁的学生的交集。 SELECT * FROM Student WHERE Sdept = CS AND Sage =19; 标准SQL中没有直接提供集合交操作和集合差操作,可以用其他方法来实现。 例51. 查询选修了课程1的学生集合与选修课程2的学生集合的 交集。 SELECT Sno FROM SC WHERE Cno= 1 AND Sno IN (SELECT Sno FROM SC WHERE Cno= 2); 例52. 查询计算机系的学生与年龄不大于19岁的学生的差集。 SELECT * FROM Student WHERE Sdept = CS AND Sage 19; 例53. 查询选修课程1但没有选修课程2的学生。 SELECT Sno FROM SC WHERE Cno= 1 AND Sno NOT IN (SELECT Sno FROM SC WHERE Cno= 2); 3.3.5 SELECT语句的一般格式 SELECT [ALL|DISTINCT]目标列表达式[别名][,目标列表达式[别名]]…… FROM 表名或视图名[别名][,表名或视图名[别名]]…… [WHERE 条件表达式] [GROUP BY列名1[HAVING条件表达式]] [ORDER BY列名2[ASC|DESC]]; 3.4 数据更新 插入操作 INSERT 修改操作 UPDATE 删除操作 DELETE 3.4.1 插入数据 1.插入单个元组 格式:INSERT INTO 表名[(列名1[,列名2]…)] VALUES (常量1[,常量2]…); 插入一已知元组的全部列的常量 插入一已知元组的部分列的常量 表定义时说明了NOT NULL的属性列不能取空值 如果INTO子句没有指明任何列名,则新插入的记录必须在 每个属性列上均有值。 3.3.3 嵌套查询 在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。例如: SELECT Sname FROM Student WHERE Sno IN SELECT Sno FROM SC WHERE Cno = 2 ; 外层查询 内层查询 不能使用ORDER BY子句 带有IN谓词的子查询 带有比较运算符的子查询 带有ANY或ALL谓词的子查询 带有EXISTS谓词的子查询 3.3.3 嵌套查询 例38. 查询与“刘晨”在同一个系学习的学生。 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname=‘刘晨’); (1)首先在Student关系中找出刘晨所在的系,结果为‘IS’。 (2)其次在Student关系中找出‘IS’系的学生 1.带有IN谓词的子查询 或 SELECT S1.Sno, S1.Sname, S1.Sdept FROM Student S1, Student S2 WHERE S1.Sdept = S2.Sdept AND S2.Sname = 刘晨; 例39. 查询选修了课程名为“信息系统”的学生学号和姓名。 SELECT Sno, Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname = 信息系统)); (1)首先在Course关系中找出“信息系统的课程号”,结果为3。 (2)其次在SC关系中找出选修3号课程的学生 (3)最后在Student关系中取出学号和姓名。 或 SELECT Sno, Sname FROM Student, SC, Course WHERE St
原创力文档

文档评论(0)