数据操作语句

1、insert语句

1.1 insert values语句

向表中插入数据时必须遵循以下三条规则:

(1)所要插入的数值与它所对应的字段必须具有相同的数据类型。

(2)数据的长度必须小于字段的长度。

(3) 插入的数值列表必须与字段的列表相对应。

(一)正常插入

        假定你有一个 COLLECTION 的表中存储着你所收集的材料,你可以用下边的语句来 查看其中的内容:

select *from COLLECTION;

输出为:

ITEM

WORTH

REMARKS

NBA ALL STAR CARDS

300

SOME STILL IN BIKE SPOKES

MALIBU BARBIE

150

TAN NEEDS WORK

STAR WARS GLASS

5.5

HANDLE CHIPPED

LOCK OF SPOUSES HAIR

1

HASN'T NOTICED BALD SPOT YET

 如果想插入一行数据,输入:

INSERT INTO COLLECTION (ITEM, WORTH, REMARKS)
VALUES('SUPERMANS CAPE', 250.00, 'TUGGED ON IT');

输入select *from COLLECTION;验证是否插入成功。

执行成功后表数据为:

ITEM

WORTH

REMARKS

NBA ALL STAR CARDS

300

SOME STILL IN BIKE SPOKES

MALIBU BARBIE

150

TAN NEEDS WORK

STAR WARS GLASS

5.5

HANDLE CHIPPED

LOCK OF SPOUSES HAIR

1

HASN'T NOTICED BALD SPOT YET

SUPERMANS CAPE 

250

TUGGED ON IT

        INSERT 语句并不需要列的名字 ,如果列的名字没有给出, SQL 会把数据添入对应的列号中。 也就是说 SQL 会把第一个值插入到第一列中 ,把第二个值插入到第二列中 ,依此类推。

执行:

INSERT INTO COLLECTION VALUES
('STRING',1000.00,'SOME DAY IT WILL BE VALUABLE');

输入select *from COLLECTION;验证是否插入成功。

执行成功后表数据为:

ITEM

WORTH

REMARKS

NBA ALL STAR CARDS

300

SOME STILL IN BIKE SPOKES

MALIBU BARBIE

150

TAN NEEDS WORK

STAR WARS GLASS

5.5

HANDLE CHIPPED

LOCK OF SPOUSES HAIR

1

HASN'T NOTICED BALD SPOT YET

SUPERMANS CAPE 

250

TUGGED ON IT

STRING

1000

SOME DAY IT WILL BE VALUABLE

(二)插入空值

insert into COLLECTION values
('SPORES MILDEW FUNGUS', 50.00, ' ');
--也可以使用
insert into COLLECTION values
('SPORES MILDEW FUNGUS',50.00,NULL);

输入select * from collection where remarks = ' ';查询结果为:

ITEM

WORTH

REMARKS

SPORES MILDEW FUNGUS

50

当remarks列不允许为空的时候,则以上插入不成功。

注意:数字和空值不需要引号,而字符型的则需要引号。

(三)插入唯一值

        在许多数据库管理系统中都允许你建立一个具有唯一值属性的列,在当向一个已有的表中插入或更新数据时可能会导致问题的产生。

例如输入:INSERT INTO COLLECTION VALUES('STRING', 50, 'MORE STRING');

由于 ITEM 列已经被定义为一个唯一的值,所以在已经存在STRING列,在再次插入时则返回了一个错误结果。

解决方法:使用if not exists,会先判断COLLECTION列中是否存在STRING这一字段,如果没有的话,进行插入STRING这一行数字。

IF NOT EXISTS (SELECT * FROM COLLECTION WHERE NAME = 'STRING'
INSERT INTO COLLECTION VALUES('STRING', 50, 'MORE STRING');

1.2 insert select语句(允许程序员拷贝一个或一组表的信息到另一个表中)。

(一)将一个 SELECT 语句的输出结果在输入到另一个表格中去。

INSERT INTO table_name (col1, col2...)
SELECT col1, col2... FROM tablename WHERE search_condition;

(二)把表 COLLECTION 中的内容复制到另一个叫 INVENTORY 的表中去。

创建一个叫 INVENTORY的表:

CREATE TABLE INVENTORY
(ITEM CHAR(20),
 COST NUMBER,
 ROOM CHAR(20),
 REMARKS CHAR(40));

向表中插入 COLLECTION 表中的数据:

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 语句的另外一个用处是当你需要对表进行重新定义时对表进行备份,这时需要你通过选择原始表中的所有数据并将其插入到一个临时表中来完成。insert into copy_table  select * from original_table;之后可以对原始表进行修改,不会影响复制的表数据。

2、update语句(用于将已存在的记录的内容进行修改)

        UPDATE 语句首先要检查 WHERE 子句,对于符合 WHERE子句条件的记录将会用给定的数据进行更新。例如输入:

UPDATE COLLECTION SET WORTH = 900 WHERE ITEM = 'STRING';

则使用SELECT * FROM COLLECTION WHERE ITEM = 'STRING';查询表数据为:

ITEM

WORTH

REMARKS

STRING

900

SOME DAY IT WILL BE VALUABLE

如果在 UPDATE 语句中省略了 WHERE 子句,那么给定表中的所有记录都会被更新。

UPDATE COLLECTION SET WORTH = 555;

使用select * from COLLECTION;查询结果为:

ITEM

WORTH

REMARKS

NBA ALL STAR CARDS

555

SOME STILL IN BIKE SPOKES

MALIBU BARBIE

555

TAN NEEDS WORK

STAR WARS GLASS

555

HANDLE CHIPPED

LOCK OF SPOUSES HAIR

555

HASN'T NOTICED BALD SPOT YET

SUPERMANS CAPE 

555

TUGGED ON IT

STRING

555

SOME DAY IT WILL BE VALUABLE

        UPDATE 语句也可以用一个数学运算式的结果来对给定数据进行更新操作,当使用这项技术时,必须注意你所使用的表达式结果与需要更新的数据字段为同一种数据类型。而且其长度也要与被更新字段的定义长度相符。

        当使用计算值时可能会有两个问题产生:截断和溢出。例如:当将一个小数转换为整数时可能会有截断的情况产生,而当计算的结果超过了该字段的定义数据长度时会导致溢出。这会使你的数据库返回一个错误。

3、delete语句

        DELETE 语句可以进行:删除单一的行 、删除多个行、删除所有的行、以及什么也不删除等删除操作。

使用 DELETE 语句时需要注意以下几点:

(1)DELETE 不能删除个别的字段,它对于给定表只能整个记录整个记录地删除。

(2)与 INSERT 和 UPDATE 一样,删除一个表中的记录可能会导致与其它表的引用完整性问题。

(3)DELETE 语句只会删除记录 不会删除表 如果要删除表需使用 DROP TABLE 命令。

例如:删除 COLLECTION 表中的 WORTH小于 275 的所有记录。

delete from COLLECTION where WORTH<275;

执行成功后输入select * from COLLECTION;查看表数据为:

ITEM

WORTH

REMARKS

NBA ALL STAR CARDS

300

SOME STILL IN BIKE SPOKES

STRING

1000

SOME DAY IT WILL BE VALUABLE

注:delete与 update语句一样,如果你省略了 WHERE 子句,那么表中的所有记录都会被删除。

4、从外部数据源中导入和导出数据。

(1)Microsoft Access

        Access 允许你从其他的数据库系统中导入和导出数据。这些数据库系统包括dBASE、FoxPro、SQL 数据库,其中 SQL 数据库是通过ODBC 数据链接。

        在打开 Access 数据库以后(使用文件|打开),选择导出,此时将会出现一个对话框,选择文本文件(宽度固定)选项 ,Access 将会把数据库中的表导出到一个每一个数据类型都有固定宽度的文本文件中。

(2)Microsoft and Sybase SQL Servr

SQL Server 提供的数据导入和导出的工具叫 BCP,BCP 是“ BULK COPY” 的缩写。它的主要内容与 ACCESS 的相同,BCP 需要你在提示符下输入命令而不是在窗口中使用对话框。

(3)Personal Oracle7

Personal Oracle7 允许你导出文本文件,文本文件的字段宽度与源库定义的字段宽度相同。使用的工具是 SQL*Loader 。