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语句删除的是表中的数据,而不是表格的定义;删除操作的时候要格外注意参照完整性,在题目“删除顾客‘阿波罗’的所有订单记录”中,因为订单明细表参照了订单表,此时若先删除订单表,则订单明细表的订单编号一列没有可以参照的列,违反了参照完整性,因此应该先删除参照表中的数据,再删除被参照表中的数据。

 

posted @ 2022-04-27 10:26  七月安生里  阅读(135)  评论(0编辑  收藏  举报