SQL必知必会要点记录(5/6)
发布日期:2021-05-20 09:14:42 浏览次数:23 分类:精选文章

本文共 2140 字,大约阅读时间需要 7 分钟。

数据库操作指南

表的创建与修改

默认情况下,旨在创建一个基本的PRODUCTS表。该表的主要字段包括prod_idvend_idprod_nameprod_price。注意vend_idprod_id均为NOT NULL列。至于prod_desc字段,设置为NULL,意味着可以为空。

CREATE TABLE PRODUCTS(    prod_id CHAR(10) NOT NULL,    vend_id CHAR(10) NOT NULL,    prod_name CHAR(254) NOT NULL,    prod_price DECIMAL(8,2) NOT NULL,    prod_desc VARCHAR(1000) NULL);

对于OrderItems表,默认情况下quantity字段设置为默认值1

CREATE TABLE OrderItems(    order_name INTEGER NOT NULL,    order_item INTEGER NOT NULL,    prod_id CHAR(10) NOT NULL,    quantity INTEGER NOT NULL DEFAULT 1,    item_price DECIMAL(8,2) NOT NULL);

表的更新

为了扩展Vendors表,可以使用ALTER TABLE命令添加新的字段vend_phone

ALTER TABLE VendorsADD vend_phone CHAR(20);

如果需要删除某个字段,可以使用DROP COLUMN命令。

ALTER TABLE VendorsDROP COLUMN vend_phone;

数据库删除

删除 permanently可以使用DROP TABLE命令。

DROP TABLE CustCopy;

视图的创建与应用

创建一个名为ProductCustomers的视图,用于查询多个表之间的关系。该视图会从CustomersOrdersOrderItems中获取数据。

CREATE VIEW ProductCustomers ASSELECT cust_name, cust_contact, prod_idFROM Customers, Orders, OrderItemsWHERE Customers.cust_id = Orders.cust_id  AND OrderItems.order_num = Orders.order_num;

数据格式化

为了方便展示,可以使用函数对数据进行格式化。例如,可以使用RTRIM函数 去除前后空格,并结合括号信息生成格式化结果。

SELECT RTRIM(vend_name) + '(' + RTRIM(vend_country) + ')' AS vend_titleFROM VendorsORDER BY vend_name;

视图与计算字段结合

创建一个名为OrderItemsExpanded的视图,计算扩展后的价格。该视图会展示订单中的所有详细信息。

CREATE VIEW OrderItemsExpanded ASSELECT order_num,       prod_id,       quantity,       item_price,       quantity * item_price AS expanded_priceFROM OrderItems;

存储过程的执行

创建一个名为MailingListCount的存储过程,用于统计电子邮件地址的数量。该存储过程会返回符合条件的记录数。

CREATE PROCEDURE MailingListCount(ListCount OUT INTEGER)ISv_rows INTEGER;BEGIN    SELECT COUNT(*) INTO v_rows    FROM Customers    WHERE NOT cust_email IS NULL;    ListCount := v_rows;END;

事务处理

使用事务可以确保数据库操作的 Atomic性、Consistency和 Durability。在进行数据删除操作后,记得使用COMMIT命令保存更改。

SET TRANSACTIONDELETE OrderItems WHERE order_num = 12345;DELETE Orders WHERE order_num = 12345;COMMIT;

游标的使用

数据库游标可以帮助实现复杂的数据操作。例如,可以逐行处理订单详细信息。

DECLARE cursor_order_details CURSOR FORSELECT order_num, order_DATE, order_totalFROM Orders;OPEN cursor_order_details;BEGIN    GET LAST;    FETCH NEXT;    ...CLOSE cursor_order_details;
上一篇:SQL必知必会要点记录(6/6)
下一篇:网络资料附表: oracle 常用函数 与mysql 的对照表

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年05月17日 18时34分34秒