【数据库原理】关系数据库标准语言SQL与关系数据库管理系统SQL Server(六)

查询拾遗.

合并查询.

合并查询是使用操作符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='刘伟')

猜你喜欢

转载自blog.csdn.net/weixin_44246009/article/details/108062684