SQL必知必会(下)

*以下内容来自本人对于《SQL必知必会(第四版)》的笔记与总结*

第十二课 联结表

SQL最强大的功能之一就是能在数据查询的操作中联结(join)表。

关系表的设计就是要把信息分解成多个表,一个数据一个表,各个表通过某些共同的值互相关联。

这样做的好处是,信息不重复,不会浪费时间和空间;

改动更方便;数据自然会一致。

因此,关系型数据库的伸缩性远比非关系型数据库要好。

举例:

SELECT vend_name, prod_name, pord_price

FROM Vendors, Products

WHERE Vendors.vend_id = Products.vend_id

 在联结两个表时,实际要做的,是将一个表中的每一行和第二个表中的每一行配对。WHERE子句作为过滤条件。

没有联结条件的表关系返回的结果叫做笛卡尔积(cartiesian product)。

内联结(inner join)后面要接ON Vendors.vend_id = Products.vend_id

可以用AND语句联结多个表。

 

第十三课 创建高级联结

自联接(self join):使用表别名在一次查询中不止一次的引用相同的表。

举例:

SELECT c1.cust_id, c1.cust_name, c1.cust_contact

FROM Customers AS c1, Customers AS c2

WHERE c1.cust_name = c2.cust_name

AND c2.cust_constact = "Jim Jone";

许多DBMS处理联结远比处理子查询快得多

自然联结(natural join):排除多次出现,使每一列只返回一次

举例:

SELECT C.*, O.order_num, O.order_date, OI.prod_id, OI.quantity, OI.item_price

FROM Custmers AS C, Orders AS O, Orderitems AS OI

WHERE C.cust_id = O.cust_id

AND OI.order_num = O.order_num

AND prod_id = "RGAN01";

外联接(outer join):外联接还包括没有关联行的行

SELECT Customers.cust_id, Oders.order_num

FROM Customers RIGHT OUTER JOIN Oders

ON Oders.cust_id = Customers.cust_id

右联结是指从OUTER JOIN 右边的表选择所有行,左联结是指从OUTER JOIN 左边的表选择所有行。

全外联接包含两个表的不关联的行。

 

第十四课 组合查询

UNION :组合两条SELECT语句,用UNION关键词分隔,并且将输出组合成一个查询结果集

有时候相当于WHERE 过滤语句中把条件用OR联结

UNION从查询结果集中自动去除了重复的行;也可以使用UNION ALL,将不会自动取消重复的行。

 

第十五课 插入数据

INSERT INTO Customers(cust_id,

cust_name)

VALUES (“100006”,

“Toy Land”);

如果某列没有值,应该用NULL代替。不管使用哪种INSERT语法,VALUES的数目必须正确。

INSERT SELECT可以插入多行。把另一张表上的内容合并到一张表里。

SELECT INTO可以把一张表的内容完全复制到另一张表。

区别在于INSERT SELECT是插入数据,SELECT INTO是导出数据。

 

第十六课 更新和删除数据

举例:

UPDATE Customers

SET cust_email = "kim@thetoystore.com"

WHERE cust_id = "1000000005";

注意:UPDATE语句一定要加WHERE条件,否则就是更新所有行

使用DELETE可以删除整行

举例:

DELETE FROM Customers

WHERE cust_id = "100000006";

保证每个表都要有主键。

 

第十七课 创建和操纵表

CREATE TABLE Products

(

    prod_name       CHAR(10)        NOT NULL,

    prod_name        CHAR(254)     NOT NULL,

);

每个表列要么是NULL,要么是NOT NULL列。

NOT NULL列不允许接受没有列值的列。

更新表定义,可以使用ALTER TABLE 语句。

举例:

ALTER TABLE Vendors

ADD vend_phone CHAR(20);

或者
DROP COLUMN vend_phone;

可以使用DROP TABLE CustCopy语句删除一张表。

 

第十八课 使用视图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值