6. SQL—操作数据
Posted 江湖@小小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6. SQL—操作数据相关的知识,希望对你有一定的参考价值。
数据操作语句 - INSERT 语句
INSERT 语句允许你向数据库中输入数据 它有两种写法:INSERT VALUES 和 INSERT SELECT
插入一条数据(数据量不大)
INSERT INTO
table_name
(
col1, col2...
)
VALUES
(
value1, value2...
)
注意:
该语句的作用是向表中加以一个新的记录,
其数值为你所指定的数值 ,
使用该语句向表中插入数据时,
你必须遵循以下三条规则:
1. 你所要插入的数值与它所对应的字段
必须具有相同的数据类型
2. 数据的长度必须小于字段的长度
例如
你不能向一个长 40 个字符的字段中插入
一个长 80 个字符的字符串
3. 插入的数值列表必须与字段的列表相对应
(也就是说第一个数值在第一个字段,
第二个数值在第二个字段)
INSERT
INTO
COLLECTION
(
ITEM, WORTH, REMARKS
)
VALUES
(
'SUPERMANS CAPE', 250.00, 'TUGGED ON IT'
)
分析:
INSERT 语句并不需要列的名字,
如果列的名字没有给出,
SQL 会把数据添入对应的列号中.
也就是说,
SQL 会把第一个值插入到第一列中,
会把第二个值插入到第二个列中,
以此类推.
1. 插入空值
当一个列被创建以后,
它可能一定的规则限制,
其中之一就是它应该或不应该
包含空值的存在.
空值的意思就是该处数值为空,但不是零 — 这属于整数范畴,
或是空格 — 这属于字符串范畴,
而是说在空值处根本就没有数据存在,
如果列被定义为 NOT NULL,
这时列中不允许有空值存在 ,
则当你使用 INSERT 语句时必须在此列插入一个数值,
如果你违反了这个规则,
那么你将收到一个错误的信息.
2. 插入唯一值
INSERT INTO
COLLECTION
VALUES
('STRING', 50, 'MORE STRING');
IF NOT EXISTS
(
SELECT * FROM
COLLECTION
WHERE
NAME = 'STRING'
)
INSERT INTO
COLLECTION
VALUES
(
'STRING', 50, 'MORE STRING'
)
3. INSERT SELECT 语句
INSERT VALUE 语句在向表中插入几个数据的时候非常有用,但显然这是不够的,如果你想向表中插入 25,000 行数据时怎么办?
在这种情况下 INSERT SELECT 语句就非常有效, 它允许程序员拷贝一个或一组表的信息到另外一个表中。
insert into
tmp_tbl
select * from table;
可以将所有的数据都插入到一个临时表中
注意:
并不是所有的数据库管理系统都支持临时表。
语法:
INSERT INTO table_name
(col1, col2...)
SELECT
col1, col2...
FROM tablename
WHERE search_condition
分析:
本质上说它是一个 SELECT 语句的输出结果
再输入到另外一个表格中去,
在 INSERT VALUE 中的规则也适用于 INSERT SELECT 语句.
如果想把表 COLLECTION 中的内容复制到
另一个叫 INVENTORY 的表中去.
语句如下:
INSERT INTO
INVENTORY
(
ITEM, COST, REMARKS
)
SELECT
ITEM, WORTH, REMARKS
FROM
COLLECTION;
INSERT SELECT 语句要求你遵循如下规则:
1.SELECT 语句不能从被插入数据的表中选择行.
2.INSERT INTO 中的列数必须与 SELECT 语句返回的列数相等.
3.INSERT INTO中的数据类型要与 SELECT 语句返回的数据类型相同.
INSERT SELECT 语句的另外一个用处是:
当你需要对表进行重新定义时对表进行备份,
这时需要你通过选择原始表中的所有数据,
并将其插入到一个临时表中来完成.
UPDATE 语句
该语句的作用是将已存在的记录的内容改变。
语法格式:
UPDATE table_name SET
columnname1 = value1 [, columname2 = value2]...
WHERE search_condition
UPDATE 语句首先要检查 WHERE 子句,
对于符合 WHERE 子句条件的记录
将会用给定的数据进行更新.
UPDATE
COLLECTION
SET
WORTH = 900
WHERE ITEM = 'STRING';
对多个记录进行更新操作:
update
collection
set
worth = 900,
item = ball
where
item = 'STRING';
注:
如果你在 UPDATE 语句中没有使用 WHERE 子句,
那么所有给定表中的记录都会被更新.
一些数据库管理系统对标准的 UPDATE 语句进行了扩展,
SQL SERVER 的 Transact-SQL
就是它们中的一个例子,
它允许使用 FROM 子句,
实现对给定表的记录用其它表中的数据来进行更新操作.
UPDATE table_name SET
columnname1 = value1 [, columname2 = value2]...
FROM
table_list
WHERE search_condition
UPDATE
COLLECTION
SET
WORTH = WORTH * 0.005;
分析:
该语法在当给定表需要更新的内容
源自于其它多个表的时候非常有用,
切记该语法不是标准语法,
在使用它之前请先查看一下你所使用的数据库的文档,
看一看它是否为你的数据库系统所支持.
UPDATE 语句也可以用一个数学运算式的结果
来对给定数据进行更新操作,
当使用这项技术时,
必须注意你所使用的表达式结果
与需要更新的数据字段为同一种数据类型.
而且其长度也要与被更新字段的定义长度相符.
当使用计算值时可能会有两个问题产生:
截断和溢出
eg:
例如当将一个小数转换为整数时,
可能会有截断的情况产生;
而当计算的结果超过了该字段的定义数据长度时,
会导致溢出,
这会使你的数据库返回一个错误.
DELETE 语句
与向数据库中加入数据相对应,你可能需要删除数据库中的数据 。
语法格式:
DELETE FROM
tablename
WHERE
condition;
注:
对于 DELETE 命令你需要注意的第一件事
就是它不会出现确认提示;
当你用 SQL 的 DELETE 命令删除记录时,
它确实已经执行了删除操作.
通过 DELETE 语句和 WHERE 子句
DELETE 语句可以完成下边的工作:
1.删除单一的行
2.删除多个行
3.删除多个行
4.什么也不删除
在使用 DELETE 语句时需要注意以下几点:
1.DELETE 不能删除个别的字段,它对于给定表只能整个记录整个记录地删除.
2.与 INSERT 和 UPDATE 一样,删除一个表中的记录可能会导致与其它表的引
用完整性问题,当对数据库进行修改时一定在头脑中有这个概念.
3.DELETE 语句只会删除记录,不会删除表,如果要删除表需使用 DROP TABLE
命令.
eg:
如何删除 COLLECTION 表中的 WORTH小于 275 的所有记录.
DELETE FROM
COLLECTION
WHERE
WORTH < 275;
注:
与 UPDATE 语句一样,
如果你省略了 WHERE 子句,
那么表中的所有记录都会被删除.
eg:
使用三种数据操作语句来完成一个数据操作过程
INSERT INTO
COLLECTION
VALUES
(
'CHIA PET', 5,'WEDDING GIFT'
);
INSERT INTO
COLLECTION
VALUES
(
'TRS MODEL III', 50, 'FIRST COMPUTER'
);
建立一个新表并向其中复制数据:
CREATE TABLE
TEMP
(
NAME CHAR(20), VALUE NUMBER, REMARKS CHAR(40)
);
INSERT INTO
TEMP(NAME, VALUE, REMARKS)
SELECT
ITEM, WORTH, REMARKS
FROM
COLLECTION;
改变其中的数值:
UPDATE
TEMP
SET
VALUE = 100
WHERE
NAME = 'TRS MODEL III';
UPDATE
TEMP
SET
VALUE = 8
WHERE
NAME = 'CHIA PET';
然后将这些数据更新回原始表中:
INSERT
COLLECTION
SELECT * FROM
TEMP
DROP TABLE
TEMP;
分析:
CREATE TABLE 会按照你给的格式建立一个新表,
而 DROP TABLE 则会删除表,
切记 DROP TABLE 会删除表,
而 DELETE 只会删除表中的记录.
总结
SQL 对于操作数据提供了三条语句。
INSERT 语句有二个变体 INSERT VALUES 可以插入一个记录;而 INSERT SELECT,则可以根据给定的一个或多个表来插入一个或多个记录 SELECT 语句可以归并多个表,并把归并的结果加入到另外一个表中。
UPDATE 语句可以改变符合条件列的值 UPDATE 语句可以用计算或表达式的结果作为需要更新的内容;
DELETE 语句是这三个语句中最简单的,它会删除符合 WHERE 条件的所有记录,如果没有 WHERE 子句,它会删除表中的所有记录。
现代的数据库系统提供了许多的数据库操作的工具,其中一些工具可以让开发人员从外部数据源中导入或导出数据,这在当数据库向大系统或小系统上移植时非常有用 Microsoft Access Microsoft 和 Sybase 的 SQL Server 以及 Personal Oracle7 都提供了这样的移植工具。
以上是关于6. SQL—操作数据的主要内容,如果未能解决你的问题,请参考以下文章
spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段