2016.12.6
十七 修改数据
修改数据可能有3种情况
(1)插入新行到表中
(2)删除表中的行
(3)更新表中指定的行与列中已有的数据
17.1 修改数据
SQL提供INSERT来把数据插入到表中,有两种基本的INSERT方式:
(1)插入在INSERT语句中指定的数据
(2)插入用一条SELECT语句获取的数据
INSERT INTO table
(colunmnlist)
VALUES
(values1),
(values2)
在ORACLE中不允许在VALUES后面指定多个行,等价语句如下。
INSERT INTO table
(colunmnlist);
VALUES
(values1);
INSERT INTO table
(colunmnlist);
VALUES
(values2);
另外,VALUES后面值的顺序要和columnlist中的列的顺序相对应,但是列出列的顺序不需要和在数据库中的顺序一致。如果在INSERT语句中没有指定所有的列,那些没有指定的列会赋以NULL值。
INSERT INTO table1
(columnlist)
SELECT
Columnlist
FROM table2
WHERE condition
7.2 删除数据
DELETE
FROM table
WHERE condition
全部删除:
DELETE
FROM table
DELETE会删除整个行,而不是某一个列。
如果要删除一个表的全部数据,可以使用TRUNCATE TABLE。TRUNCATE TABLE删除的效率更高,因为它不记录事务的结果。
17.4 更新数据
更新数据的过程包括指定更新那个列,以及选中行的逻辑,UPDATE语句的一般格式:
UPDATE table
SET column1=Expression1,
Column2=Expression2
WHERE conditon
WHERE子句是必须的,否则会将所有的行都修改。
17.5 相关子查询的更新
通常,我们会根据一个表中的数据来更新另一个表中的数据。因为UPDATE语句只能指定修改单个的一个表,所以我们不能仅仅把多个表关联起来并让该语句工作,而是要使用相关的子查询。
UPDATE table1
SET column1=
(SELECT table2.column1
FROM table2
WHERE table1.column1=table2.column1)
Column2=
(SELECT table2.column2
FROM table2
WHERE table1.column1=table2.column1)
WHERE EXISTS
(SELECT *
FROM table2
WHERE table1.column1=table2.column1)
若没有WHERE EXISTS语句,会把不匹配的列也进行更新。