函数的定义。
- 函数以
def
关键词开头,后接函数名和圆括号()。 - 函数执行的代码以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回
None
。
def functionname (parameters):
"函数文档字符串"
functionsuite
视图是一个虚拟的表,不同于直接操作数据表,视图是依据SELECT语句来创建的(会在下面具体介绍)。
视图与表的最大区别即:是否保存了实际的数据。视图可以看作是一个窗口,通过这个窗口我们可以看到数据库表中真实存在的数据。
视图最主要的优势就是通过定义视图可以将频繁使用的SELECT语句保存以提高效率。
/*创建视图的基本语法如下: CREATE VIEW <视图名称>(<列名1>,<列名2>,...) AS <SELECT语句> */
视图不仅可以基于真实表,我们也可以在视图的基础上继续创建视图,但是这种操作应当避免,因为多重视图会降低效能。
定义视图时一般不能使用ORDER BY语句。因为视图和表一样,数据行都是没有顺序的。
CREATE VIEW productsum (product_type, cnt_product) AS SELECT product_type, COUNT(*) FROM product GROUP BY product_type ;
- 基于多表的视图
为了学习多表视图,我们再创建一张表,相关代码如下:
CREATE TABLE shop_product (shop_id CHAR(4) NOT NULL, shop_name VARCHAR(200) NOT NULL, product_id CHAR(4) NOT NULL, quantity INTEGER NOT NULL, PRIMARY KEY (shop_id, product_id)); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000A', '东京', '0001', 30); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000A', '东京', '0002', 50); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000A', '东京', '0003', 15); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000B', '名古屋', '0002', 30); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000B', '名古屋', '0003', 120); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000B', '名古屋', '0004', 20); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000B', '名古屋', '0006', 10); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000B', '名古屋', '0007', 40); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000C', '大阪', '0003', 20); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000C', '大阪', '0004', 50); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000C', '大阪', '0006', 90); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000C', '大阪', '0007', 70); INSERT INTO shop_product (shop_id, shop_name, product_id, quantity) VALUES ('000D', '福冈', '0001', 100);
我们在product表和shop_product表的基础上创建视图
CREATE VIEW view_shop_product(product_type, sale_price, shop_name) AS SELECT product_type, sale_price, shop_name FROM product, shop_product WHERE product.product_id = shop_product.product_id;
创建的视图如下图所示
我们可以在这个视图的基础上进行查询
![]()
视图的修改、更新、删除操作(一般皆不常用)如下:
/* 修改视图语句: ALTER VIEW <视图名> AS <SELECT语句> */ -- 其中视图名在数据库中需要是唯一的,不能与其他视图和表重名。 /*一般不建议更新视图(update),不允许通过视图来修改表,例如: UPDATE productsum SET sale_price = '5000' WHERE product_type = '办公用品'; 视图虽然更新,但原表可能未按预期结果修改。 */ /* 删除视图语句: DROP VIEW <视图名1> [ , <视图名2> …] */