SELECT * FROM ProductType;
product_type | sum_sale_price | sum_purchase_price |
---|---|---|
衣服 | 5000 | 3300 |
办公用品 | 600 | 320 |
厨房用具 | 11180 | 8590 |
Rui
November 15, 2022
一些未知的原因导致我不能使用 SQL 代码块创建表,但可以可以查询。所以我事先使用以下代码把示例数据在 PostgreSQL 中创建好,之后再通过 SQL 代码块查询。
-- 创建表
CREATE TABLE ProductIns
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(20) NOT NULL,
sale_price INTEGER DEFAULT 0,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));
CREATE TABLE 创建的是一个空表格,如何往其中输入数据?
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');
列清单:(product_id, product_name, product_type, sale_price, purchase_price, regist_date)
值清单:(‘0001’, ‘T恤衫’, ‘衣服’, 1000, 500, ‘2009-09-20’)
若对表进行全列的 INSERT 时,可以省略表名后的列清单。比如:
INSERT INTO ProductIns VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15')
前面讲过:原则上,执行一次 INSERT 语句只会插入一行数据。但实际上很多 RDBMS 支持多行 INSERT
-- 多行INSERT(Oracle以外)
INSERT INTO ProductIns
VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11'),
('003', '运动T恤', '衣服', 4000, 2800, NULL),
('004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
要时刻对 NULL 保持警惕。一般来说将某个值赋值为 NULL 没有问题,但如果所在的列已经设置了 NOT NULL 约束,插入 NULL 就会报错。
之前在创建表 ProductIns 时设置列 sale_price INTEGER DEFAULT 0,就是设置了售价的默认值为 0。
在 VALUES 子句中使用 DEFAULT 关键字指定某一列的值为其对应的默认值。
INSERT INTO ProductIns
VALUES ('0006', '叉子', '厨房用具', DEFAULT, 320, '2009-09-11');
在列清单和值清单中将要使用默认值的列省略,比如以下省略了 sale_price 列:
INSERT INTO ProductIns (product_id, product_name, product_type, purchase_price, regist_date)
VALUES ('0007', '擦菜板', '厨房用具', 790, '2009-04-28');
首先创建一张空表 ProductCopy,这个表中的的结构与表 Product 一样:
CREATE TABLE ProductIns
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(20) NOT NULL,
sale_price INTEGER DEFAULT 0,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));
再将 Product 中的数据复制到空表 ProductCopy 中,具体方法是用 SELECT 和 FROM 子句替代 VALUES 子句:
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 等。
创建一个用于存储商品种类的空的表:
CREATE TABLE ProductType
(product_type VARCHAR(20) NOT NULL,
sum_sale_price INTEGER ,
sum_purchase_price INTEGER ,
PRIMARY KEY (product_type));
向其中复制数据:
INSERT INTO ProductType (product_type, sum_sale_price, sum_purchase_price)
SELECT product_type, SUM(sale_price), SUM(purchase_price)
FROM Product
GROUP BY product_type;