SQL语句(三) 更新语句(增 删 改)

一、插入

INSERT

INTO 表名(列名1,列名2……)//列名可以省略,省略情况下是表格的所有列

VALUES(常量1,常量2……)//与上句中的列对应

二、修改

UPDATE 表名

SET 列名=表达式,列名=表达式......

WHERE 条件//可以省略

三、删除

DELETE 

FROM 表名

WHERE 条件//可以省略

四、实例

1.插入一条顾客记录,要求每列都给出一个合理的数值
SELECT *
FROM customer;/*先查询已经存在的customer表*/
INSERT
INTO customer
VALUES(1,'刘惠','天津市',40,'18713978292',0.00,'Northeast','VIP Customer');
2.插入一条订单记录,给出必要的几个字段
INSERT
INTO lineitem(orderkey,partkey,suppkey,linenumber,quantity,shipdate,receiptdate)
VALUES(22025,13724,13139,1,100,'2017-10-31','2017-11-1');
SELECT*
FROM lineitem;
3. 创建一个新的顾客表,把所有中国国籍顾客插入到新的顾客表中
CREATE TABLE newcustomer
(
  ncustkey INTEGER PRIMARY KEY,/*顾客编号*/
  nname VARCHAR(25),
  naddress VARCHAR(40),
  nphone CHAR(15),
  nacctbal REAL,
  nmktsegment CHAR(10),
  ncomment VARCHAR(117)
);
INSERT
INTO newcustomer
SELECT custkey,name,address,phone,acctbal,mksegment,comment
FROM customer
WHERE nationkey=
               (
               SELECT nationkey
               FROM nation
               WHERE name='中国'
               );
SELECT *
FROM newcustomer;
4.创建一个顾客购物统计表,记录每个顾客以及其购物总数和总价等信息
CREATE TABLE custshop
(
custkey INTEGER,
totalquantity REAL,
totalprice REAL
);

INSERT 
INTO custshop
SELECT customer.custkey,SUM(quantity),SUM(totalprice)
FROM customer,orders,lineitem
WHERE customer.custkey=orders.orderkey
     AND orders.orderkey=lineitem.orderkey
GROUP BY customer.custkey;
SELECT *
FROM custshop;
5. 倍增零件表的数据,多次重复执行,直到总记录数达到50万;
INSERT 
INTO part
SELECT partkey+(SELECT MAX(partkey)FROM part),name,
        mfgr,brand,type,size,container,retailprice,comment
FROM part ;
6.上海黎顺服装经营部供应的所有零件的供应成本下降10%
UPDATE partsupp
SET supplycost=supplycost*0.9
WHERE suppkey=
(
SELECT suppkey
FROM supplier
WHERE name='上海黎顺服装经营部'
);
7.利用part表中的零售价来修改lineitem表中的extendedprice
UPDATE lineitem 
SET extendedprice=retailprice*quantity
FROM part
WHERE part.partkey=lineitem.partkey;
8.删除顾客“阿波罗”的所有订单记录
SELECT COUNT(linenumber)/*先查询顾客阿波罗有多少订单,然后进行删除*/
FROM lineitem
WHERE orderkey IN
                (
                 SELECT orderkey
                 FROM orders
                 WHERE custkey =
                               (
                                SELECT custkey
                                FROM customer
                                WHERE name='阿波罗'
                               )
                )
DELETE
FROM lineitem
WHERE orderkey IN
                (
                 SELECT orderkey
                 FROM orders
                 WHERE custkey =
                               (
                                SELECT custkey
                                FROM customer
                                WHERE name='阿波罗'
                               )
                )
DELETE 
FROM orders
WHERE custkey=
(
SELECT custkey
FROM customer
WHERE name='阿波罗'
);

五、参考结果

1.查询customer表以及插入一条顾客记录的结果

2.插入一条订单记录以及在插入后进行查询的结果

3.把中国国籍顾客放入新的顾客表以及插入后查询的结果

4.在顾客购物统计表中插入顾客信息、购物总数和总价等信息以及查询结果

5.倍增零件表数据时,执行第二次和第三次的结果

6.更新上海黎顺服装经营部所有零件供应成本的结果

7.修改lineitem表中的extendedprice结果显示

8.查询并删除顾客阿波罗订单记录的结果

六、注意

1.在插入记录的时候,经常会发生错误,一个原因是插入的数据类型或个数与表格定义的列的类型和个数不一致,另一个原因是违背了完整性约束,原本输入的第一个属性值为15,运行错误,系统提示不能重复插入主键。因此我认为在更新数据之前最好先查询一下已经存在的数据,这样做能够减少之后更新的错误。

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

猜你喜欢

转载自blog.csdn.net/shujian_tianya/article/details/81067457