SQL——8、对数据进行增改删
1、插入行
上半部分数据库中查询数据,接下来学习一些关于 SQL 模式以及如何添加新数据。数据库模式描述了每个表的结构,以及表的每一列可以包含的数据类型。
插入新数据INSERT语句
插入包含所有列值的语句
INSERT INTO mytable
VALUES (value_or_expr, another_value_or_expr, …),
(value_or_expr_2, another_value_or_expr_2, …),
…;
如果您有不完整的数据并且表包含支持默认值的列,您可以通过显式指定它们来插入仅包含您拥有的数据列的行。
插入带有特定列的语句
INSERT INTO mytable (column, another_column, …)
VALUES (value_or_expr, another_value_or_expr, …),
(value_or_expr_2, another_value_or_expr_2, …),
…;
此外,您可以对要插入的值使用数学和字符串表达式。这对于确保插入的所有数据都以某种方式格式化很有用。
带有表达式的示例插入语句
INSERT INTO boxoffice (movie_id, rating, sales_in_millions)
VALUES (1, 9.9, 283742034 / 1000000);
2、更新行
UPDATE语句:准确指定要更新的表、列和行,数据类型相匹配。
使用值更新语句
UPDATE mytable
SET column = value_or_expr, other_column = another_value_or_expr, …
WHERE condition;
小贴士?
WHERE该语句通过采用多个列/值对,并将这些更改应用于满足子句中的约束的每一行来工作。一个有用的提示是始终先编写约束并在SELECT查询中对其进行测试,以确保您正在更新正确的行,然后才编写要更新的列/值对。
3、删除行
DELETE语句,WHERE子句描述要操作的表,以及要删除的表的行。
带条件的删除语句
DELETE FROM mytable
WHERE condition;
小贴士?
如果您决定省略WHERE约束,则所有行都将被删除,这是一种彻底清除表的快速简便的方法。
文章后半部分内容
————————————————
版权声明:本文为CSDN博主「风中凌乱的小精灵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shujian_tianya/article/details/81067457
4、实例
1 1.插入一条顾客记录,要求每列都给出一个合理的数值 2 SELECT * 3 FROM customer;/*先查询已经存在的customer表*/ 4 INSERT 5 INTO customer 6 VALUES(1,'llllll','中国',40,'17823331233',0.00,'Northeast','VIP Customer'); 7 2.插入一条订单记录,给出必要的几个字段 8 INSERT 9 INTO lineitem(orderkey,partkey,suppkey,linenumber,quantity,shipdate,receiptdate) 10 VALUES(22025,13724,13139,1,100,'2017-10-31','2017-11-1'); 11 SELECT* 12 FROM lineitem; 13 3. 创建一个新的顾客表,把所有中国国籍顾客插入到新的顾客表中 14 CREATE TABLE newcustomer 15 ( 16 ncustkey INTEGER PRIMARY KEY,/*顾客编号*/ 17 nname VARCHAR(25), 18 naddress VARCHAR(40), 19 nphone CHAR(15), 20 nacctbal REAL, 21 nmktsegment CHAR(10), 22 ncomment VARCHAR(117) 23 ); 24 INSERT 25 INTO newcustomer 26 SELECT custkey,name,address,phone,acctbal,mksegment,comment 27 FROM customer 28 WHERE nationkey= 29 ( 30 SELECT nationkey 31 FROM nation 32 WHERE name='中国' 33 ); 34 SELECT * 35 FROM newcustomer; 36 4.创建一个顾客购物统计表,记录每个顾客以及其购物总数和总价等信息 37 CREATE TABLE custshop 38 ( 39 custkey INTEGER, 40 totalquantity REAL, 41 totalprice REAL 42 ); 43 44 INSERT 45 INTO custshop 46 SELECT customer.custkey,SUM(quantity),SUM(totalprice) 47 FROM customer,orders,lineitem 48 WHERE customer.custkey=orders.orderkey 49 AND orders.orderkey=lineitem.orderkey 50 GROUP BY customer.custkey; 51 SELECT * 52 FROM custshop; 53 5. 倍增零件表的数据,多次重复执行,直到总记录数达到50万; 54 INSERT 55 INTO part 56 SELECT partkey+(SELECT MAX(partkey)FROM part),name, 57 mfgr,brand,type,size,container,retailprice,comment 58 FROM part ; 59 6.上海黎顺服装经营部供应的所有零件的供应成本下降10% 60 UPDATE partsupp 61 SET supplycost=supplycost*0.9 62 WHERE suppkey= 63 ( 64 SELECT suppkey 65 FROM supplier 66 WHERE name='上海黎顺服装经营部' 67 ); 68 7.利用part表中的零售价来修改lineitem表中的extendedprice 69 UPDATE lineitem 70 SET extendedprice=retailprice*quantity 71 FROM part 72 WHERE part.partkey=lineitem.partkey; 73 8.删除顾客“阿波罗”的所有订单记录 74 SELECT COUNT(linenumber)/*先查询顾客阿波罗有多少订单,然后进行删除*/ 75 FROM lineitem 76 WHERE orderkey IN 77 ( 78 SELECT orderkey 79 FROM orders 80 WHERE custkey = 81 ( 82 SELECT custkey 83 FROM customer 84 WHERE name='阿波罗' 85 ) 86 ) 87 DELETE 88 FROM lineitem 89 WHERE orderkey IN 90 ( 91 SELECT orderkey 92 FROM orders 93 WHERE custkey = 94 ( 95 SELECT custkey 96 FROM customer 97 WHERE name='阿波罗' 98 ) 99 ) 100 DELETE 101 FROM orders 102 WHERE custkey= 103 ( 104 SELECT custkey 105 FROM customer 106 WHERE name='阿波罗' 107 );
5、注意
1.在插入记录的时候,经常会发生错误,一个原因是插入的数据类型或个数与表格定义的列的类型和个数不一致,另一个原因是违背了完整性约束,原本输入的第一个属性值为15,运行错误,系统提示不能重复插入主键。因此我认为在更新数据之前最好先查询一下已经存在的数据,这样做能够减少之后更新的错误。
2.关于删除操作,DELETE语句删除的是表中的数据,而不是表格的定义;删除操作的时候要格外注意参照完整性,在题目“删除顾客‘阿波罗’的所有订单记录”中,因为订单明细表参照了订单表,此时若先删除订单表,则订单明细表的订单编号一列没有可以参照的列,违反了参照完整性,因此应该先删除参照表中的数据,再删除被参照表中的数据。