文章目录
数据更新
SQL的数据插入语句INSERT通常有两种形式,一种是插入一个元组,另一种是插入子查询结果。后者可以一次插入多个元组
插入元组
插入元组的INSERT语句格式为:
INSERT
INTO <表名> [(<属性列1> [,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]… );
插入子查询结果
子查询不仅可以嵌套在SELECT语句中用以构造父查询的条件,也可以嵌套在INSERT语句中用以生成要插入的批量数据
插入子查询的语句格式为:
INSERT
INTO <表名> [(属性列1) [,<属性列2>...]]
子查询;
修改数据
修改数据又称更新操作,一般格式为
UPDATE <表名>
SET <列名>=<表达式> [,<列名>=<表达式>]...
[WHERE <条件>];
删除数据
删除语句的一般格式为:
DELETE
FROM <表名>
[WHERE <条件>]
数据查询
单表查询
SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>] …
FROM <表名或视图名>[,<表名或视图名> ]…|(SELECT 语句)
[AS]<别名>
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ]
ORDER BY子句
例3.39:查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY Grade DESC;
GROUP BY子句
GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组
例3.46:求各个课程号及相应的选课人数
SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;
连接查询
等值与非等值查询
连接查询WHERE子句中用来连接两个表的条件称为连接条件或连接谓词
[<表名1>.] <列名1> <比较运算符> [<表名2>.] <列名2>
e.g. Student.Sno = SC.Sno
比较运算符主要有= > < >= <= != <>等
[<表名1>.] <列名1> BETWEEN [<表名2>.] <列名2> AND [<表名3>.] <列名3>
连接条件中的各连接字段类型必须是可比的,但名字不一定要相同
自身连接
顾名思义,就是一个表和自己相连
例3.52:查询每一门课的间接选修课(先修课的先修课)
SELECT FIRST.Cno SECOND.Cpno
FROM Course FIRST,Course SECOND
WHERE SECOND.Cno = FIRST.Cpno;
嵌套查询
IN谓词用于子查询结果是一个集合的情况
带有EXISTS谓词的子查询
EXISTS代表存在量词,带有EXISTS的子查询不返回任何数据,只产生true和false两个值
集合查询
集合操作主要包括:
并操作 UNION
交操作 INTERSECT
差操作 EXCEPT
视图
通过练习,其实我认为视图就是一种临时表,用来暂时将某一些想要的属性转移到一张表中
建立视图
建立视图的 CREATE VIEW 命令建立视图
CREATE VIEW <视图名> [(<列名> [,<列名>] ...)]
AS <子查询>
[WITH CHECK OPTION]
WITH CHECK OPTION表示对视图进行UPDATE、INSERT、DELETE操作时要保证更新、插入、删除的行满足视图定义中的谓词条件
删除视图
删除视图语句的一般格式是
DROP VIEW <视图名> [CASCADE]
CASCADE是级联(与其有关的全部删除)
查询视图
查询视图的用法与查询基本表的用法是一样的,可参照上面
更新视图
例3.95:将信息系学生视图IS_Student中学号为”201215122“的学生姓名改为”刘辰“
UPDATE IS_Student
SET Sname='刘辰'
WHERE Sno='201215122';
存储过程
修改存储过程的语法格式:
ALTER PROCEDURE <存储过程名称>
删除修改过程名称
DROP PROCEDURE <存储过程名称>