4-1 数据的插入(INSERT语句的使用方法)
1、VALUES子句指定具体的数据
--INSERT语句
INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
--向表中插入一行数据
INSERT INTO ProductIns (product_id, product_name, product_type,
sale_price, purchase_price, regist_date) VALUES ('0001', 'T恤衫',
'衣服', 1000, 500, '2009-09-20');
-- 多行INSERT (Oracle以外)
INSERT INTO ProductIns VALUES ('0002', '打孔器',
'办公用品', 500, 320, '2009-09-11'),
('0003', '运动T恤',
'衣服', 4000, 2800, NULL),
('0004', '菜刀',
'厨房用具', 3000, 2800, '2009-09-20');
清单:将列名和值用逗号隔开,分别括在()内
列清单→ (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
值清单→ ('0001', 'T恤衫', '衣服', 1000, 500,'2009-09-20')
对表进行全列 INSERT 时,可以省略表名后的列清单。这时 VALUES 子句的值会默认按照从左到右的顺序赋给每一列。
插入NULL:INSERT 语句中想给某一列赋予 NULL 值时,可以直接在 VALUES 子句的值清单中写入 NULL。(前提:插入 NULL 的列不能设置 NOT NULL 约束,否则会出错,导致数据插入失败。)
插入默认值:DEFAULT 约束
--显式插入(推荐)
INSERT INTO ProductIns (product_id, product_name, product_type,
sale_price, purchase_price, regist_date) VALUES ('0007',
'擦菜板', '厨房用具', DEFAULT, 790, '2009-04-28');
--隐式方法
INSERT INTO ProductIns (product_id, product_name, product_type,
purchase_price, regist_date) VALUES ('0007', '擦菜板', '厨房用具',
790, '2009-04-28');
注:如果省略了没有设定默认值的列,该列的值就会被设定为 NULL。因此,如果省略的是设置了 NOT NULL 约束的列,INSERT 语句就会出错。
省略INSERT语句中的列名,就会自动设定为该列的默认值(没有默认值时会设定 为NULL)。
2、从其他表中复制数据:INSERT … SELECT 语句,可以在需要进行数据备份时使用
-- 将商品表中的数据复制到商品复制表中
INSERT INTO ProductCopy (product_id, product_name, product_type,
sale_price, purchase_price, regist_date)
SELECT product_id, product_name, product_type, sale_price,
purchase_price, regist_date
FROM Product;
注:INSERT语句的SELECT语句中,可以使用WHERE子句或者GROUP BY子句等任何 SQL语法(但使用ORDER BY子句并不会产生任何效果)。
4-2 数据的删除(DELETE语句的使用方法)
DROP TABLE 语句:将表完全删除
DELETE 语句:会留下表(容器),而删除表中的全部数据
DELETE语句的删除对象并不是表或者列,而是记录(行)。
--保留数据表,仅删除全部数据行
DELETE FROM <表名>;
--指定删除对象(搜索型DELETE)
DELETE FROM Product
WHERE sale_price >= 4000;
注:
1、DELETE 语句中不能使用 GROUP BY、 HAVING 和 ORDER BY 三类子句,而只能使用WHERE 子句(原因:GROUP BY 和 HAVING 是从表中选取数据时用来改变抽取数据形式的, 而 ORDER BY 是用来指定取得结果显示顺序的)
2、TRUNCATE
--只能删除表中全部数据
TRUNCATE <表名>;
TRUNCATE 只能删除表中的全部数据,而不能通过 WHERE 子句指定条件来删除部分数据。由于不能具体地控制删除对象, 所以其处理速度比 DELETE 要快得多。
4-3 数据的更新(UPDATE语句的使用方法)
-- 改变表中数据的UPDATE语句
UPDATE <表名>
SET <列名> = <表达式>;
-- 更新部分数据行的搜索型UPDATE
UPDATE <表名>
SET <列名> = <表达式>
WHERE <条件>;
UPDATE Product
SET regist_date = NULL
WHERE product_id = '0008';
-- 多列更新
-- 使用逗号对列进行分隔排列
UPDATE Product
SET sale_price = sale_price * 10,
purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';
注:
1、可以将列更新为 NULL( NULL 清 空):将赋值表达式右边的值直接写为 NULL,但只限于未设置NOT NULL约束的列