查询拾遗.
合并查询.
合并查询是使用操作符UNION
将来自不同查询的数据组合起来,形成一个具有综合信息的查询结果。UNION
操作会自动删除重复的数据行,但需要注意的是,参与合并查询的各个子查询使用的表结构应该相同,即各个子查询中的数据数目和对应的数据类型都必须相同。
【例】从SC
数据表中查询出学号为S1的学生的学号和总分,再从SC
表中查询出学号为S5的学生的学号和总分,然后将两个查询结果合并成一个结果集。
SELECT SNo AS 学号,SUM(Score) AS 总分
FROM SC
WHERE SNo='S1'
GROUP BY SNo
UNION
SELECT SNo AS 学号,SUM(Score) AS 总分
FROM SC
WHERE SNo='S5'
GROUP BY SNo
将查询结果存储为一个数据表.
使用语句SELECT ...INTO
可以将查询结果存储到一个新建的数据表或临时表中。
【例】从数据表SC
中查询出所有同学的学号和总分,并将查询结果存放到一个新建的数据表Cal_Table
中。
SELECT SNo AS 学号,SUM(Score) AS 总分
INTO Cal_Table
FROM SC
GROUP BY SNo
在这个例子中,查询的结果会被存放到新建的数据表Cal_Table中,如果我们将第二行的语句修改为INTO #Cal_Table
,那么查询的结果会被存放到一个临时表中,临时表只存储在内存中,并不存储在数据库中,所以其存在时间非常短暂。
向数据表中添加数据.
SQL提供的数据操纵功能主要包括以下3种功能:
- 添加数据
- 修改数据
- 删除数据
首先,添加数据使用的SQL命令是INSERT INTO
,并且可以分为以下的几种情况。
- 【添加一行数据】其语法格式如下所示:
INSERT INTO NAME_OF_TABLE (Col_1,Col_2,...,Col_n)
VALUES (Val_1,Val_2,...,Val_n)
其中NAME_OF_TABLE
是指将要添加新纪录的表,后面的n个列是可选项,指定待添加数据的n个字段,VALUES
子句给出待添加数据的具体值。注意,n个列名的出现顺序不一定要和数据表定义时的顺序完全一样,但VALUES
子句中的具体值必须和前面出现的n个列的顺序一致,数据类型一一对应。
【例】向S
表中添加一条学生记录,学号:S7;姓名:郑东;性别:女;年龄:21;系别:计算机。
INSERT INTO S (SNo,SN,Sex,Age,Dept)
VALUES ('S7','郑东',21,'女','计算机')
注意!必须用逗号将VALUES
子句中的数据隔开,字符型的数据要用单引号括起。如果INTO
子句中没有指定列名的顺序,则新添加的记录必须在每个定义好的属性列上均有值,且VALUES
子句中值的排列顺序要和表中各个属性列的排列顺序一致。
【例】在选课关系表中添加一条记录(S7,C1).
INSERT INTO SC (SNo,CNo)
VALUES ('S7','C1')
将VALUES
子句中的值按照INTO
子句中指定列名的顺序添加到表中,对于INTO
子句中没有出现的列,例如本题中的Score属性
,则系统会将新数据记录在该列上的值赋为NULL。但有一些表中的属性列,在定义时添加了NOT NULL
约束,插入时就必须给这样的列赋值。
- 【添加多行数据】这一操作多用于表间的复制,即将一个表中的数据抽取数行添加到另一个表中,可以通过子查询来实现。
【例】求出各系教师的平均工资,并且将结果置于新建立的表AvgSal
中。
//First,construct the table AvgSal.
CREATE TABLE AvgSal
(Department VARCHAR(20),
Average SMALLINT)
//Second,append data into AvgSal.
INSERT INTO AvgSal
SELECT Dept,AVG(Sal)
FROM T
GROUP BY Dept
修改数据表中的数据.
SQL提供UPDATE
语句来对数据表中的一行或多行记录的某些属性值进行修改,其完整的语法格式如下:
UPDATE NAME_OF_TABLE
SET NAME_OF_COLUMN=EXPRESSION
WHERE EXPRESSION
显然地,NAME_OF_TABLE
是要修改的表,SET
子句给出要修改的属性列以及修改后的属性值,WHERE
子句指定待修改记录应当满足的条件。
【例】将刘伟老师转到信息系。
UPDATE T
SET Dept='信息'
WHERE TN='刘伟'
【例】将所有学生的年龄增加一岁。
UPDATE S
SET Age=Age+1
【例】将工资小于等于1000元的那些职称为讲师
的教师的工资提高20%.
UPDATE T
SET Sal=1.2*Sal
WHERE Sal<=1000 AND Prof='讲师'
【例】将讲授C5课程的教师的津贴提高100元。
UPDATE T
SET Comm=Comm+100
WHERE TNo IN (
SELECT TNo
FROM T,TC
WHERE T.TNo=TC.TNo AND CNo='C5'
)
【例】将所有教师的工资修改为平均工资的1.2倍。
UPDATE T
SET Sal=(SELECT 1.2*AVG(Sal) FROM T)
从数据表中删除数据.
SQL提供了DELETE
语句来进行数据的删除,注意要区别于删除数据库和删除基本表时的DROP
语句。DELETE
语句的基本语法格式如下:
DELETE
FROM NAME_OF_TABLE
WHERE CONDITION
其中NAME_OF_TABLE
是指进行删除操作的数据表,WHERE
子句指定待删除记录应当满足的条件。
【例】删除刘伟老师的记录。
DELETE
FROM T
WHERE TN='刘伟'
【例】删除所有老师的授课记录。
DELETE
FROM TC
注意此时虽然TC已经是一个空表,但它的定义依旧存在,也就是TC表并未被删除,我们还可以向其中添加数据。
【例】删除刘伟老师的授课记录。
DELETE
FROM TC
WHERE TNo=(SELECT TNo FROM T WHERE TN='刘伟')