版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库技术与应用数据库技术与应用 袁宝库 SQL语言基础语言基础 o 基本概念 o SQL的数据类型 o 基本表的定义、删除及修改 o 数据查询功能 o 数据更改功能 o 建立与删除索引 SQL语言的发展语言的发展 o 1986年10月由美国ANSI 公布最早的SQL 标准。 o 1989年4月,ISO提出了具备完整性特征的 SQL,称为SQL-89 。 o 1992年11月,ISO又公布了新的SQL标准, 称为SQL-92。 o 1999年颁布SQL-99,是SQL92的扩展。 SQL语言的特点语言的特点 o 一体化。 o 高度非过程化。 o 简洁。 o 使用方式多样。 SQL语言功能概述语
2、言功能概述 o 四部分:数据定义功能、数据控制功能、数 据查询功能和数据操纵功能。 SQL功能功能命令动词命令动词 数据查询数据查询SELECT 数据定义数据定义CREATE、DROP、ALTER 数据操纵数据操纵INSERT、UPDATE、DELETE 数据控制数据控制GRANT、REVOKE SQL Server 2008 的数据类型的数据类型 o 数字数据类型 o 字符数据类型 o 二进制数据类型 o 日期和时间数据类型 o 货币型 o 特殊数据类型 数值型数值型 o 准确型 n 整数 Bigint: 8字节, Int:4字节 Smallint:2字节, Tinyint:1字节 Bit:
3、1位,存储1或0 n 小数 Numeric(p,q)或Decimal(p,q), n 近似型 Float:8字节 Real:4字节 字符串型字符串型 o 普通编码字符串类型 o 统一字符编码字符串类型 普通编码字符串类型普通编码字符串类型 o Char(n):定长存储,n=8000 o Varchar(n):不定长存储(按实际长度 存储),长度最大不超过n , n=8000 注:n 为字符个数 o Text:存储大于8000字节的文本 统一字符编码字符串类型统一字符编码字符串类型 o nchar(n):定长存储,n=4000 o nvarchar(n):不定长存储,长度最大不 超过n , n=
4、4000 o ntext:存储大于8000字节的文本 特点:每个字符占两个字节 二进制字数据二进制字数据 o Binary(n):固定长度,n = 8000。 o Varbinary(n):可变长度,n 8000 。 注:n为二进制数据的字节数 o image:大容量、可变长二进制字符数据, 可用于存储文件。 日期时间型日期时间型 o Datetime:8字节,年月日时分秒毫秒 (例:2001/08/03 10:30:00.000 ) o SmallDateTime:4字节,年月日时分 (例: 2001/08/03 10:30:00 ) o 日期、时间的输入格式 货币类型货币类型 o Mone
5、y: 8 个字节,精确到货币单位的万 分之一。 o Smallmoney: 4 个字节,精确到货币单 位的万分之一。 o 限制到小数点后 4 位。 o 可以带有适当的货币符号。例如,100 英镑 可表示为 100。 特殊数据类型特殊数据类型 o timestamp、uniqueidentifier和xml等。 基本表的定义、删除及修改基本表的定义、删除及修改 o 基本表的定义与删除 o 修改表结构 基本表的定义与删除基本表的定义与删除 o 定义基本表 使用SQL语言中的CREATE TABLE语句实现, 其一般格式为: CREATE TABLE ( 列级完整性约束定义 , 列级完整性约束定义
6、, 表级完整性约束定义 ) 在列级完整性约束定在列级完整性约束定 义处可以定义的约束义处可以定义的约束 o NOT NULL:限制列取值非空。 o DEFAULT:给定列的默认值。 o UNIQUE:限制列取值不重。 o CHECK:限制列的取值范围。 o PRIMARY KEY:指定本列为主码。 o FOREIGN KEY:定义本列为引用其他表的外 码。使用形式为: FOREIGN KEY() REFERENCES () 几点说明几点说明 o NOT NULL和DEFAULT只能是列级完整性约束; o 其他约束均可在表级完整性约束处定义。 o 注意以下几点: n 第一,如果CHECK约束是定
7、义多列之间的取值约束, 则只能在表级完整性约束处定义; n 第二,如果表的主码由多个列组成,则也只能在表级 完整性约束处定义,并将主码列用括号括起来,即: PRIMARY KEY(列1,列2 ); n 第三,如果在表级完整性约束处定义外码,则 “FOREIGN KEY ()”部分不能省。 约束定义约束定义 o 列取值非空约束 n NOT NULL 例:sname char(10) NOT NULL 约束定义约束定义 o 表主码约束 o 在定义列时定义主码(仅用于单列主码) 列定义 PRIMARY KEY 例: SNO char(7) PRIMARY KEY o 在定义完列时定义主码(用于单列或
8、多列主码) PRIMARY KEY () 例: PRIMARY KEY(SNO) PRIMARY KEY(SNO,CNO) 约束定义约束定义 o 外码引用约束 o 指明本表外码列引用的表及表中的主码列。 FOREIGN KEY () REFERENCES () 例: FOREIGN KEY (sno) REFERENCES 学生表(sno) 约束定义约束定义 o 默认值约束 格式:DEFAULT 默认值 例:定义系的默认值为“计算机系”。 DEFAULT 计算机系 约束定义约束定义 o CHECK约束 格式:CHECK (约束表达式) 例:定义成绩大于等于0。 CHECK ( grade =
9、0 ) 约束定义约束定义 o UNIQUE约束 o 在列级约束定义(仅用于单列约束) 列定义 UNIQUE 例: SNAME char(7) UNIQUE o 在表级约束定义(用于单列或多列组合约束) UNIQUE () 例: UNIQUE (SNO,CNO) 创建学生表 CREATE TABLE Student ( Sno char ( 7 ) PRIMARY KEY, Sname char ( 10 ) NOT NULL, Ssex char (2) CHECK (Ssex = 男 OR Ssex = 女), Sage tinyint CHECK (Sage = 15 AND Sage 0
10、), Semester tinyint CHECK (Semester 0), Period int CHECK (Period 0), PRIMARY KEY(Cno) ) 创建SC表 CREATE TABLE SC ( Sno char(7) NOT NULL, Cno char(10) NOT NULL, Grade tinyint, CHECK (Grade = 0 and Grade = 100), PRIMARY KEY ( Sno, Cno ), FOREIGN KEY ( Sno ) REFERENCES Student ( Sno ), FOREIGN KEY ( Cno )
11、 REFERENCES Course ( Cno ) ) 删除表删除表 o 当确信不再需要某个表时,可以将其删除 o 删除表时会将与表有关的所有对象一起删掉, 包括表中的数据。 o 删除表的语句格式为: DROP TABLE , 例:删除test表的语句为: DROP TABLE test 修改表结构修改表结构 o 在定义完表之后,如果需求有变化,比如 添加列、删除列或修改列定义,可以使用 ALTER TABLE语句实现。 o ALTER TABLE语句可以对表添加列、删除 列、修改列的定义、定义主码、外码,也 可以添加和删除约束。 修改表结构语法修改表结构语法 ALTER TABLE ALT
12、ER COLUMN | ADD COLUMN | DROP COLUMN | ADD PRIMARY KEY( , n ) | ADD FOREIGN KEY( ) REFERNECES 表名( ) 示例示例 o 为SC表添加“修课类别”列,此列的定义 为:XKLB char(4) ALTER TABLE SC ADD XKLB char(4) NULL o 将新添加的XKLB的类型改为 char(6)。 ALTER TABLE SC ALTER COLUMN XKLB char(6) 示例示例 o 删除Course表的Period列。 ALTER TABLE Course DROP COLU
13、MN Period 数据查询功能数据查询功能 o 查询语句的基本结构 o 简单查询 o 多表连接查询 o 子查询 查询语句基本格式查询语句基本格式 SELECT -需要哪些列 FROM -来自于哪些表 WHERE -根据什么条件 GROUP BY HAVING ORDER BY 简单查询简单查询-选择表中若干列 o 查询指定的列 n 查询表中用户感兴趣的部分属性列。 n 例5:查询全体学生的学号与姓名。 n 例6:查询全体学生的姓名、学号和所在系。 SELECT Sno,Sname FROM Student SELECT Sname,Sno,Sdept FROM Student 简单查询简单查
14、询-选择表中若干列 o 查询全部的列 n 例7查询全体学生的记录 n 等价于: SELECT Sno,Sname,Ssex, Sage, Sdept FROM Student SELECT * FROM Student 简单查询简单查询-选择表中若干列 o 查询经过计算的列 n 例8查询全体学生的姓名及其出生年份。 n 例9查询全体学生的姓名和出生年份所在系, 并在出生年份列前加入一个列,此列的每行数 据均为出生年份常量值。 SELECT Sname,2013 - Sage FROM Student SELECT Sname,出生年份, 2012-Sage FROM Student 简单查询简
15、单查询-选择表中若干列 o 改变列标题 n 语法: 列名 | 表达式 AS 列标题 n 或: 列标题 列名 | 表达式 n 例: SELECT Sname 姓名,Year of Birth 出生年份, 2006 - Sage 年份, FROM Student 简单查询简单查询-选择表中若干元组 o 例10在修课表中查询有哪些学生修了课程, 要求列出学生的学号。 o 消除取值相同的记录 n 结果中有重复的行。 n 用DISTINCT关键字可以去掉结果中的重复行。 n DISTINCT关键字放在SELECT词的后边、目标列 名序列的前边。 SELECT Sno FROM SC SELECT DIS
16、TINCT Sno FROM SC 简单查询简单查询-选择表中若干元组 o 查询满足条件的元组 查询条件查询条件谓谓 词词 比较运算符 =, , =, , =, (或!=) NOT+比较运算符 确定范围BETWEENAND, NOT BETWEENAND 确定集合IN, NOT IN 字符匹配LIKE, NOT LIKE 空值IS NULL, IS NOT NULL 逻辑谓词AND, OR 简单查询简单查询-选择表中若干元组 o 比较 n 例11查询计算机系全体学生的姓名。 n 例12查询年龄在20岁以下的学生的姓名及年龄。 n 例13查询考试成绩有不及格的学生的学号 SELECT Sname
17、 FROM Student WHERE Sdept = 计算机系 SELECT Sname, Sage FROM Student WHERE Sage 20 SELECT DISTINCT Sno FROM SC WHERE Grade 60 简单查询简单查询-选择表中若干元组 o 确定范围 n 用BETWEENAND和NOT BETWEENAND n 是逻辑运算符,可以用来查找属性值在或不在指定 范围内的元组,其中BETWEEN后边指定范围的下 限,AND后边指定范围的上限。 n BETWEENAND的格式为: 列名|表达式 NOT BETWEEN 下限值 AND 上限值 n 如果列或表达式
18、的值在不在下限值和上限值范围内, 则结果为True,表明此记录符合查询条件。 简单查询简单查询-选择表中若干元组 o 例14查询年龄在2023岁之间的学生的 姓名、所在系和年龄。 o 例15查询年龄不在2023之间的学生姓 名、所在系和年龄。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23 简单查询简单查询-选择表中若干元组 o 使用IN运算符 n 用来查找属性值属
19、于指定集合的元组。 n 格式为: 列名 NOT IN (常量1, 常量2, 常量n) n 当列中的值与IN中的某个常量值相等时,则结 果为True,表明此记录为符合查询条件的记录; n NOT IN:当列中的值与某个常量值相同时,则 结果为False,表明此记录为不符合查询条件的 记录 简单查询简单查询-选择表中若干元组 o 例16查询信息系、数学系和计算机系学生 的姓名和性别。 o 例17查询既不是信息系、数学系,也不是 计算机系学生的姓名和性别。 SELECT Sname, Ssex FROM Student WHERE Sdept IN (信息系, 数学系, 计算机系) SELECT S
20、name, Ssex FROM Student WHERE Sdept NOT IN (信息系, 数学系, 计算机系) 简单查询简单查询-选择表中若干元组 o 字符匹配 n 使用LIKE运算符 n 一般形式为: 列名 NOT LIKE n 匹配串中可包含如下四种通配符: o _:匹配任意一个字符; o %:匹配0个或多个字符; o :匹配 中的任意一个字符; o :不匹配 中的任意一个字符 简单查询简单查询-选择表中若干元组 o 例18查询姓张的学生的详细信息。 o 例19查询学生表中姓张、李和刘的学 生的情况。 o 例20查询名字中第2个字为小或大的学生的 姓名和学号 SELECT * FR
21、OM Student WHERE Sname LIKE 张% SELECT * FROM Student WHERE Sname LIKE 张李刘% SELECT Sname, Sno FROM Student WHERE Sname LIKE _小大% 简单查询简单查询-选择表中若干元组 o 例21查询所有不姓“刘”的学生。 o 例22查询学号的最后一位不是2、3、5的学 生情况。 SELECT Sname FROM Student WHERE Sname NOT LIKE 刘% SELECT * FROM Student WHERE Sno LIKE %235 简单查询简单查询-选择表中若
22、干元组 o 涉及空值的查询 n 空值(NULL)在数据库中表示不确定的值。 n 例如,学生选修课程后还没有考试时,这些学生有 选课记录,但没有考试成绩,因此考试成绩为空值。 n 判断某个值是否为NULL值,不能使用普通的比较运 算符。 n 判断取值为空的语句格式为: 列名 IS NULL n 判断取值不为空的语句格式为: 列名 IS NOT NULL 简单查询简单查询-选择表中若干元组 o 例23查询无考试成绩的学生的学号和相应的 课程号。 o 例24查询所有有考试成绩的学生的学号和课 程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NULL SELECT
23、 Sno, Cno FROM SC WHERE Grade IS NOT NULL 简单查询简单查询-选择表中若干元组 o 多重条件查询 n 在WHERE子句中可以使用逻辑运算符AND和OR来 组成多条件查询。 n 用AND连接的条件表示必须全部满足所有的条件的 结果才为True; n 用OR连接的条件表示只要满足其中一个条件结果即 为True。 n 例25查询计算机系年龄在20岁以下的学生姓名。 SELECT Sname FROM Student WHERE Sdept = CS AND Sage 20 简单查询简单查询-对查询结果进行排序 o 可对查询结果进行排序。 o 排序子句为: OR
24、DER BY ASC | DESC , o 说明:按进行升序(ASC)或降序 (DESC)排序。 o 例26将学生按年龄的升序排序。 SELECT * FROM Student ORDER BY Sage 简单查询简单查询-对查询结果进行排序 o 例27查询选修了c02号课程的学生的学号 及其成绩,查询结果按成绩降序排列。 o 例28查询全体学生的信息,查询结果按所在 系的系名升序排列,同一系的学生按年龄降序 排列。 SELECT Sno, Grade FROM SC WHERE Cno=c02 ORDER BY Grade DESC SELECT * FROM Student ORDER B
25、Y Sdept, Sage DESC 思考题思考题 o 查询所有年龄在20岁以下姓刘的学生姓名及其 年龄。 SELECT SNAME,SAGE FROM STUDENT WHERE SAGE20 AND SNAME LIKE 刘% 简单查询简单查询-使用计算函数汇总数据 o SQL提供的计算函数有: n COUNT( * ):统计表中元组个数; n COUNT(DISTINCT ):统计本列列 值个数; n SUM(DISTINCT ):计算列值总和; n AVG(DISTINCT ):计算列值平均值; n MAX(DISTINCT ):求列值最大值; n MIN(DISTINCT ):求列值
26、最小值。 o 上述函数中除COUNT(*)外,其他函数在计 算过程中均忽略NULL值。 简单查询简单查询-使用计算函数汇总数据 o 例29统计学生总人数。 o 例30统计选修了课程的学生的人数。 o 例31 计算9512101号学生的考试总成绩之和。 SELECT COUNT(*) FROM Student SELECT COUNT (DISTINCT Sno) FROM SC SELECT SUM(Grade) FROM SC WHERE Sno = 9512101 简单查询简单查询-使用计算函数汇总数据 o 例32计算C01号课程学生的考试平均成绩。 o 例33查询选修了C01号课程的学生
27、的最高 分和最低分。 o 注意:计算函数不能出现在WHERE子句中 SELECT AVG(Grade) FROM SC WHERE Cno=C01 SELECT MAX(Grade) , MIN(Grade) FROM SC WHERE Cno=C01 简单查询简单查询-对查询结果进行分组计算 o 作用:可以控制计算的级别:对全表还是对一 组。 o 目的:细化计算函数的作用对象。 o 分组语句的一般形式: GROUP BY HAVING 简单查询简单查询-使用计算函数汇总数据 o 使用GROUP BY n 例34统计每门课程的选课人数,列出课程 号和人数。 n 对查询结果按Cno的值分组,所有
28、具有相同 Cno值的元组为一组,然后再对每一组使用 COUNT计算,求得每组的学生人数。 SELECTCno as 课程号, COUNT(Sno) as 选课人数 FROM SC GROUP BY Cno 简单查询简单查询-使用计算函数汇总数据 SnoCnoGrade 951201C0180 951201C0278 951202C0190 952103C0288 952103C0185 952103C0391 952103C0474 SnoCnoGrade 951201C0180 951202C0190 952103C0185 951201C0278 952103C0288 952103C03
29、91 952103C0474 简单查询简单查询-使用计算函数汇总数据 Cno Count(Sno) C013 C022 C031 C041 简单查询简单查询-使用计算函数汇总数据 o 使用GROUP BY n 例35查询每名学生的选课门数和平均成绩 SELECTSno as 学号, COUNT(*) as 选课门数, AVG(Grade) as 平均成绩 FROMSC GROUP BY Sno 简单查询简单查询-使用计算函数汇总数据 o 使用HAVING n HAVING用于对分组自身进行限制,它有点 象WHERE子句,但它用于组而不是对单个 记录。 n 例36查询修了3门以上课程的学生的学号
30、 SELECTSno FROMSC GROUP BYSno HAVINGCOUNT(*) 3 简单查询简单查询-使用计算函数汇总数据 o 使用HAVING n 例37查询修课门数等于或大于4门的学生 的平均成绩和选课门数 SELECTSno, AVG(Grade) 平均成绩, COUNT(*) 修课门数 FROMSC GROUP BYSno HAVINGCOUNT(*) = 4 多表连接查询多表连接查询 o 若一个查询同时涉及两个或两个以上的表, 则称之为连接查询。 o 连接查询是关系数据库中最主要的查询 o 连接查询包括内连接、外连接和交叉连接等 多表连接查询多表连接查询 o 连接基础知识
31、n 连接查询中用于连接两个表的条件称为连接条 件或连接谓词。 n 一般格式为: 必须是可比的必须是可比的 多表连接查询多表连接查询 o 内连接 n SQL-92 内连接语法如下: SELECT FROM 表名 INNER JOIN 被连接表 ON 连接条件 多表连接查询多表连接查询 o 执行连接操作的过程: n 首先取表1中的第1个元组,然后从头开始扫描 表2,逐一查找满足连接条件的元组, n 找到后就将表1中的第1个元组与该元组拼接起 来,形成结果表中的一个元组。 n 表2全部查找完毕后,再取表1中的第2个元组, 然后再从头开始扫描表2, n 重复这个过程,直到表1中的全部元组都处理完 毕为
32、止。 多表连接查询多表连接查询 o 例38.查询每个学生的基本信息及其选课情况 o 例39.去掉上例中重复的列 SELECT * FROM Student INNER JOIN SC ON Student.Sno = SC.Sno SELECT Student.Sno, Sname, Ssex, Sage, Cno, Grade ,XKLB FROMStudentJOIN SC ONStudent.Sno = SC.Sno 多表连接查询多表连接查询 o 例40.查询计算机系学生的修课情况,要求 列出学生的名字、所修课的课程号和成绩。 SELECT Sname, Cno, Grade FROMS
33、tudent JOIN SC ONStudent.Sno = SC.Sno WHERESdept = 计算机系 多表连接查询多表连接查询 o 例41. 查询信息系修了VB课程的学生的修 课成绩,要求列出学生姓名、课程名和成绩。 SELECTSname, Cname, Grade FROMStudent s JOIN SC ONs.Sno = SC. Sno JOINCourse c ON c.Cno = SC.Cno WHERESdept = 信息系 ANDCname = VB 多表连接查询多表连接查询 o 自连接 n 为特殊的内连接 n 相互连接的表物理上为同一张表。 n 必须为两个表取别名
34、,使之在逻辑上成为两个 表。 多表连接查询多表连接查询 o 例43. 查询与刘晨在同一个系学习的学生的 姓名和所在的系。 SELECTS2.Sname, S2.Sdept FROMStudent S1 JOIN Student S2 ONS1.Sdept = S2.Sdept WHERES1.Sname = 刘晨 ANDS2.Sname != 刘晨 多表连接查询多表连接查询 o 外连接 n 只限制一张表中的数据必须满足连接条件,而 另一张表中数据可以不满足连接条件。 n ANSI方式的外连接的语法格式为: FROM 表1 LEFT | RIGHT OUTER JOIN 表2 ON 多表连接查询
35、多表连接查询 o 外连接 n theta方式的外连接的语法格式为: n 左外连接: FROM 表1, 表2 WHERE 表1.列名(+) 表2.列名 n 右外连接: FROM 表1, 表2 WHERE 表1.列名 表2.列名(+) 多表连接查询多表连接查询 o 例44. 查询学生的修课情况,包括修了课程 的学生和没有修课的学生。 SELECTStudent.Sno, Sname, Cno, Grade FROMStudent LEFT OUTER JOIN SC ONStudent.Sno = SC.Sno 子查询子查询 o 在SQL语言中,一个SELECTFROM WHERE语句称为一个查询
36、块。 o 子查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句的 WHERE 或 HAVING 子句内,或其 它子查询中 o 子查询的 SELECT 查询总是使用圆括号括 起来。 子查询子查询-使用子查询进行基于集合的测试使用子查询进行基于集合的测试 o 使用子查询进行基于集合的测试的语句的一 般格式为: n 列名 NOT IN (子查询) 子查询子查询 o 例45. 查询与刘晨在同一个系的学生。 SELECTSno, Sname, Sdept FROMStudent WHERE Sdept IN ( SELECT Sdept FROM St
37、udent WHERE Sname = 刘晨 ) AND Sname != 刘晨 子查询子查询 o 例46. 查询成绩为大于90分的学生的学 号、姓名。 SELECTSno, Sname FROMStudent WHERESno IN ( SELECT Sno FROM SC WHERE Grade 90 ) 子查询子查询 o 例47. 查询选修了“数据库”课程的学生 的学号、姓名。 SELECTSno, Sname FROMStudent WHERESno IN ( SELECTSno FROMSC WHERECno IN (SELECT Cno FROM Course WHERE Cnam
38、e = 数据库) 子查询子查询-使用子查询进行比较测试使用子查询进行比较测试 o 带比较运算符的子查询指父查询与子查询之 间用比较运算符连接, o 当用户能确切知道内层查询返回的是单值时, 可用、=、=、运算符。 子查询子查询 o 例48. 查询修了c02课程且成绩高于此 课程的平均成绩的学生的学号和成绩。 SELECTSno , Grade FROMSC WHERECno = c02 AND Grade (SELECT AVG(Grade) FROM SC WHERECno = c02) 子查询子查询-使用子查询进行存在性测试使用子查询进行存在性测试 o 一般使用EXISTS谓词。 o 带E
39、XISTS谓词的子查询不返回查询的数据, 只产生逻辑真值(有数据)和假值(没有数 据)。 子查询子查询 o 例49.查询选修了c01号课程的学生姓 名。 SELECTSname FROMStudent WHEREEXISTS (SELECT* FROMSC WHERESno = Student.Sno ANDCno = c01) 子查询子查询-使用子查询进行存在性测试使用子查询进行存在性测试 o 注1:处理过程为:先外后内;由外层的值 决定内层的结果;内层执行次数由外层结果 数决定。 o 注2: 由于EXISTS的子查询只能返回真或假 值,因此在这里给出列名无意义。所以在有 EXISTS的子查
40、询中,其目标列表达式通常 都用*。 子查询子查询-使用子查询进行存在性测试使用子查询进行存在性测试 o 例49的处理过程 n 找外层表Student表的第一行,根据其Sno值处 理内层查询 n 由外层的值与内层的结果比较,由此决定外层 条件的真、假 n 顺序处理外层表Student表中的第2、3、行。 子查询子查询 o 例50.查询没有选修c01号课程的学生 姓名和所在系。 SELECTSname, Sdept FROMStudent WHERENOT EXISTS (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = c01) 子查询子查询
41、o 查询选修了全部课程的学生姓名 SELECT sname FROMstudent WHERENOT EXISTS (SELECT* FROMcourse WHERENOT EXISTS (SELECT* FROMsc WHEREsno=student.sno AND cno= o) 思考题思考题 o 查询选课门数大于10门的学生的平均成绩和 选课门数。 o 查询没有选修课程2的学生姓名。 思考题思考题 o 查询选课门数大于10门的学生的平均成绩和 选课门数。 SELECTSNO, AVG(GRADE) 平均成绩, COUNT(*) 修课门数 FROMSC GROUP BYSNO HAVING
42、COUNT(*) 10 思考题思考题 o 查询没有选修课程2的学生姓名。 SELECTSNAME FROMSTUDENT WHERENOT EXISTS (SELECT* FROMSC WHERESNO = STUDENT.SNO AND CNO = 课程2) 数据更改功能数据更改功能 o 插入数据 o 更新数据 o 删除数据 插入数据插入数据 o 插入单行记录的INSERT语句的格式为: INSERT INTO () VALUES (值表) o 功能:新增一个符合表结构的数据行,将值表数据 按表中列定义顺序或列名表顺序赋给对应列名 n 值列表中的值与列名表中的列按位置顺序对应,它 们的数据类
43、型必须一致。 n 如果后边没有指明列名,则新插入记录的值 的顺序必须与表中列的定义顺序一致,且每一个列 均有值(可以为空)。 插入数据插入数据 o 例51将新生记录(9521105,陈冬,男,信 息系,18岁)插入到Student表中。 o 例52在SC表中插入一新记录,成绩暂缺。 INSERT INTO Student VALUES (9521105, 陈冬, 男, 18, 信息系) INSERT INTO SC(Sno, Cno, XKLB) VALUES(9521105, c01, 必修) 实际插入的值为: (9521105, c01 ,NULL ,必修) 更新数据更新数据 o 用UPD
44、ATE语句实现。 o 格式: UPDATE SET , n WHERE 更新更新数据数据-无条件更新 o 例53. 将所有学生的年龄加1。 UPDATEStudent SETSage = Sage + 1 更新更新数据数据-有有条件更新 o 基于本表条件的更新 o 例54. 将9512101学生的年龄改为21岁 UPDATEStudent SETSage = 21 WHERESno = 9512101 更新更新数据数据-有有条件更新 o 基于其他表条件的更新 o 例55:将计算机系全体学生的成绩加5分。 n 用子查询实现 UPDATESC SETGrade = Grade + 5 WHERES
45、no IN (SELECTSno FROMStudent WHERESdept = 计算机系 ) 更新更新数据数据-有有条件更新 o 基于其他表条件的更新 o 例55:将计算机系全体学生的成绩加5分。 n 用多表连接实现 UPDATESC SETGrade = Grade + 5 FROMSC JOIN Student ONSC.Sno = Student.Sno WHERESdept = 计算机系 删除数据删除数据 o 用DELETE语句实现 o 格式: DELETE FROM WHERE 删除删除数据数据-无条件删除 o 例56. 删除所有学生的选课记录。 DELETE FROMSC 删除删除数据数据-有有条件删除 o 基于本表条件的删除。 o 例57删除所有不及格学生的修课记录。 DELETEFROM SC WHERE Grade 60 删除删除数据数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2021学年辽宁省沈阳市郊联体高一下学期期末考试地理试题
- 小学四年级多位数乘除法400题
- 学校爱国卫生建设工作计划
- 儿童蛀牙伤害大
- 命题作文“释放”写作指导及佳作
- 《白血病的规范化疗》课件
- 《加油站HSE管理》课件
- 《龙蟠长城模板》课件
- 汽车工程师的工作总结
- 化工行业销售业绩总结
- 2024年南京市第一医院分院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 邓州市龙理乡第一初级中学-2025年春节寒假跨学科主题实践作业模板【课件】
- 电力改造电力安装施工合同
- (新疆一模)2025届高三高考适应性检测分学科第一次模拟考试 生物试卷(含答案解析)
- 【大学课件】文物数字化技术及数字化文物系统初探
- 高一数学上学期期末模拟试卷03-【中职专用】2024-2025学年高一数学上学期(高教版2023基础模块)(解析版)
- 2024年中央经济工作会议精神解读
- 2023-2024学年广东省深圳市福田区八年级(上)期末历史试卷
- 公司安全事故隐患内部举报、报告奖励制度
- 历史常识单选题100道及答案解析
- 2024年陕西榆林市神木市公共服务辅助人员招聘775人历年高频难、易错点500题模拟试题附带答案详解
评论
0/150
提交评论