美文网首页
SQL必知必会 14~18章

SQL必知必会 14~18章

作者: zuyuxia | 来源:发表于2017-12-12 17:10 被阅读0次

    注:这一系列的文章是《SQL必知必会》第四版的读书笔记。

    14.组合查询

    利用UNION操作符将多条SELECT语句组合成一个结果集。

    14.1 组合查询

    主要有两种情况需要使用组合查询:

    (1)在一个查询中从不同的表返回结构数据

    (2)对一个表执行多个查询,按一个查询返回数据

    14.2 创建组合查询

    14.2.1 使用UNION

    给出每条SELECT语句,在各条语句之间放上关键字UNION。

    输入:

    SELECT cust_name,cust_contact,cust_email

    FROM Customers

    WHERE cust_state IN ('IL','IN','MI')

    UNION

    SELECT cust_name,cust_contact,cust_email

    FROM Customers

    WHERE cust_name='Fun4All';

    14.2.2 UNION规则

    (1)UNION必须由两条及以上的SELECT语句组成,语句之间用关键字UNION分隔。

    (2)UNION中的每个查询必须包含相同的列、表达式或聚集函数。

    (3)列数据类型必须兼容。类型不必完全相同,但必须是DBMS可以隐含转换的类型。

    14.2.3 包含或取消重复的行

    UNION从查询结果集中自动去除了重复的行。若想返回所有的匹配行,可使用UNION ALL而不是UNION。

    输入:

    SELECT cust_name,cust_contact,cust_email

    FROM Customers

    WHERE cust_state IN ('IL','IN','MI')

    UNION ALL

    SELECT cust_name,cust_contact,cust_email

    FROM Customers

    WHERE cust_name='Fun4All';

    14.2.4 对组合查询结果排序

    在用UNION组合查询时,只能使用一条ORDER BY子句,必须位于最后一条SELECT语句之后。

    输入:

    SELECT cust_name,cust_contact,cust_email

    FROM Customers

    WHERE cust_state IN ('IL','IN','MI')

    UNION

    SELECT cust_name,cust_contact,cust_email

    FROM Customers

    WHERE cust_name='Fun4All'

    ORDER BY cust_name,cust_contact;

    15.插入数据

    利用SQL的INSERT语句将数据插入表中。

    15.1 数据插入

    15.1.1 插入完整的行

    输入:

    INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email)

    VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111','USA',NULL,NULL);

    使用列的列表更加安全。

    15.1.2 插入部分行

    输入:

    INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country)

    VALUES('1000000006','Toy Land','123 Any Street','New York','NY','11111');

    如果表的定义允许,可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件:

    (1)该列定义为允许NULL值

    (2)在表定义中给出默认值。

    15.1.3 插入检索出的数据

    输入:

    INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country)

    SELECT cust_id,cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country

    FROM CustNew;

    15.2 从一个表复制到另一个表

    以MySQL为例。

    输入:

    CREATE TABLE CustCopy AS

    SELECT * FROM Customers;

    16.更新和删除数据

    利用UPDATE和DELETE语句进一步操作表数据。

    16.1 更新数据

    有两种使用UPDATE的方式:

    (1)更新表中的特定行

    (2)更新表中的所有行

    要注意WHERE子句,避免错误的更新表中的所有行。

    输入:

    UPDATE Customers

    SET cust_contact='Sam Roberts',cust_email='sam@toyland.com'

    WHERE cust_id='1000000006';

    删除某个列的值,可设置它为NULL。

    输入:

    UPDATE Customers

    SET cust_email=NULL

    WHERE cust_id='1000000005';

    16.2 删除数据

    有两种使用DELETE的方式:

    (1)从表中删除特定的行

    (2)从表中删除所有行

    同样要注意WHERE子句,避免误删除所有行。

    输入:

    DELETE FROM Customers

    WHERE cust_id='1000000006';

    DELETE删除整行,而不是删除列。DELETE能删除表中的所有行,但是DELETE不删除表本身。

    16.3 更新和删除的指导原则

    (1)除非确实打算更新或删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。

    (2)保证每个表都有主键。

    (3)在UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。

    (4)使用强制实施引用完整性的数据库,这样DBMS将不允许删除其数据与其他表相关联的行。

    (5)如果DBMS允许数据库管理员施加约束,防止执行不带WHERE子句的UPDATE或DELETE语句,则应该使用它。

    17.创建和操纵表

    创建、更改和删除表的基本知识。

    17.1 创建表

    一般有两种创建表的方法:

    (1)多数DBMS都具有交互式创建和管理数据库表的工具。

    (2)表也可以直接用SQL语句操纵。

    输入:

    CREATE TABLE Products{

        prod_id        CHAR(10)        NOT NULL,

        vend_id        CHAR(10)        NOT NULL,

        prod_name  CHAR(10)        NOT NULL,

        prod_price   DECIMAL(8,2)  NOT NULL,

        prod_desc   TEXT(1000)      NULL

    } ;

    指定默认值:

    输入:

    CREATE TABLE OrderItems{

        prod_id        CHAR(10)         NOT NULL,

        order_num   INTEGER         NOT NULL,

        order_item   INTEGER         NOT NULL,

        quantity        INTEGER         NOT NULL        DEFAULT 1,

        item_price    DECIMAL(8,2)  NOT NULL

    } ;

    17.2 更新表

    输入:

    ALTER  TABLE  Vendors

    ADD  vend_phone  CHAR(20);

    17.3 删除表

    输入:

    DROP TABLE CustCopy;

    18.使用视图

    什么是视图,怎么工作,什么时候使用,利用视图简化SQL操作。

    18.1 视图

    视图是虚拟的表,只包含使用时动态检索数据的查询。

    18.1.1 为什么使用视图

    (1)重用SQL语句

    (2)简化复杂的SQL操作

    (3)使用表的一部分而不是整个表

    (4)保护数据。

    (5)更改数据格式和表示。

    18.1.2 视图的规则和限制

    (1)视图必须唯一命名

    (2)创建视图必须具有足够的访问权限

    (3)视图可以嵌套。

    (4)许多DBMS禁止在视图查询中使用ORDER BY子句。

    (5)有些DBMS要求对返回的所有列进行命名。

    (6)视图不能索引,也不能有关联的触发器或默认值。

    (7)有些DBMS把视图作为只读的查询。

    18.2 创建视图

    18.2.1 利用视图简化复杂的联结

    输入:

    CREATE VIEW ProductCustomers AS

    SELECT cust_name,cust_contact,prod_id

    FROM Customers,Orders,OrderItems

    WHERE Customers.cust_id=Orders.cust_id

    AND OrderItems.order_num=Orders.order_num;

    SELECT cust_name,cust_contact

    FROM ProductCustomers

    WHERE prod_id='RGAN01';

    18.2.2 用视图重新格式化检索出的数据

    18.2.3 用视图过滤不想要的数据

    输入:

    CREATE VIEW CustomerEmailList AS

    SELECT cust_id,cust_name,cust_email

    FROM Customers

    WHERE cust_email IS NOT NULL;

    SELECT *

    FROM CustomerEmailList;

    18.2.4 使用视图与计算字段

    输入:

    CREATE VIEW OrderItemsExpanded AS

    SELECT order_num,prod_id,quantity,item_price,quantity*item_price AS expanded_price

    FROM OrderItems;

    SELECT *

    FROM OrderItemsExpanded

    WHERE order_num=20008;

    相关文章

      网友评论

          本文标题:SQL必知必会 14~18章

          本文链接:https://www.haomeiwen.com/subject/vqhnixtx.html