分享

数据分析人必掌握的数据库语言——SQL指南第七期

 excel05 2022-08-28 发布于福建

本篇重点为大家讲解组合数据、数据插入、更新和删除数据相关内容。

01 组合查询

多数SQL查询只包含从一个或多个表中返回数据的单条SELECT语句。但是,SQL也允许执行多个查询,并将结果作为一个查询结果集返回。这些组合查询通常称为并(union)或复合查询(compound query)。

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

❑ 在一个查询中从不同的表返回结构数据;

❑ 对一个表执行多个查询,按一个查询返回数据。

创建组合查询

利用UNION,可给出多条SELECT语句,将它们的结果组合成一个结果集。

使用方法:给出每条SELECT语句,在各条语句之间放上关键字UNION。

假如需要Illinois、Indiana和Michigan等美国几个州的所有顾客的报表,还想包括不管位于哪个州的所有的Fun4All。

示例:SELECT cust_name, cust_contact, cust_email FROM CustomersWHERE cust_state IN ('IL','IN','MI')UNIONSELECT cust_name, cust_contact, cust_email FROM CustomersWHERE cust_name = 'Fun4All'

分析:这条语句由两条SELECT语句组成,之间用UNION关键字分隔。UNION指示DBMS执行这两条SELECT语句,并把输出组合成一个查询结果集。

在简单的例子中,使用UNION可能比使用WHERE子句更为复杂。但对于较复杂的过滤条件,或者从多个表中检索数据的情形,使用UNION可能会使处理更简单。

1、UNION规则

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

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

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

2、包含或取消重复的行

使用UNION时,重复的行会被自动取消,这是UNION的默认行为,如果想返回所有的匹配行,可使用UNION ALL

示例:SELECT cust_name, cust_contact, cust_email FROM CustomersWHERE cust_state IN ('IL','IN','MI')UNION ALLSELECT cust_name, cust_contact, cust_email FROM CustomersWHERE cust_name = 'Fun4All'

3、对组合查询结果排序

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

示例:SELECT cust_name, cust_contact, cust_email FROM CustomersWHERE cust_state IN ('IL','IN','MI')UNIONSELECT cust_name, cust_contact, cust_email FROM CustomersWHERE cust_name = 'Fun4All'ORDER BY cust_name, cust_contact

TopBDA大数据分析师培训

除了SQL数据库学习,还有大量数据分析知识和实操等你探索!

02 数据插入

SELECT是最常用的SQL语句,还有其他3个常用的SQL语句需要学习,第一个就是INSERT,另外两个之后为大家介绍。

INSERT用来将行插入或添加到数据库表,插入有几种方式:

❑ 插入完整的行;

❑ 插入行的一部分;

❑ 插入某些查询的结果。

插入完整的行

把数据插入表中的最简单方法是使用基本的INSERT语法。

示例: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)

分析:在插入行时,DBMS将用VALUES列表中的相应值填入列表中的对应项。VALUES中的第一个值对应于第一个指定列名,第二个值对应于第二个列名,如此等等。

插入部分行

使用这种语法,还可以省略列,这表示可以只给某些列提供值,给其他列不提供值。

示例: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', 'USA')

分析:没有给cust_contactcust_email这两列提供值,这表示没必要在INSERT语句中包含它们。因此,这里的INSERT语句省略了这两列及其对应的值。

插入检索出的数据

INSERT一般用来给表插入具有指定列值的行。

INSERT还存在另一种形式,可以利用它将SELECT语句的结果插入表中,这就是所谓的INSERT SELECT

假如想把另一表中的顾客列合并到Customers表中,不需要每次读取一行再将它用INSERT插入,可以如下进行:

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

分析:使用INSERT SELECT从CustNew中将所有数据导入Customers。SELECT语句从CustNew检索出要插入的值,SELECT中列出的每一列对应于Customers表名后所跟的每一列。

从一个表复制到另一个表

可以使用CREATE SELECT语句(或者在SQL Server里也可用SELECT INTO语句)。

INSERT SELECT将数据添加到一个已经存在的表不同,CREATE SELECT将数据复制到一个新表。

CREATE TABLE CustCopy AS SELECT * FROM Customer s

使用SQL Server,可以这么写:

SELECT * INTO CustCopy FROM Customers

分析:创建一个名为CustCopy的新表,并把Customers表的整个内容复制到新表中。

在使用SELECT INTO时,任何SELECT选项和子句都可以使用,包括WHEREGROUP BY;可利用连接从多个表插入数据;不管从多少个表中检索数据,数据都只能插入到一个表中。

03 更新和删除数据

更新数据

更新表中的数据,可以使用UPDATE语句,使用UPDATE的方式有两种:

❑ 更新表中的特定行;

❑ 更新表中的所有行。

基本UPDATE语句由三部分组成,分别是:

❑ 要更新的表;

❑ 列名和它们的新值;

❑ 确定要更新哪些行的过滤条件。

举一个简单例子,客户1现在有了电子邮件地址,因此他的记录需要更新,语句如下:

UPDATE CustomersSET cust_email='kim@thetoystore.com'WHERE cust_id =1

分析:UPDATE语句以要更新的表名开始。要更新的表名为Customers。SET命令用来将新值赋给被更新的列。UPDATE语句以WHERE子句结束,它告诉DBMS更新哪一行。

更新多个列的语法稍有不同。

UPDATE CustomersSET cust_contact ='Sam Roberts',    cust_email ='sam@toyland.com'WHERE cust_id = 1

分析:在更新多个列时,只需要使用一条SET命令,每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)。

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

UPDATE CustomersSET cust_email = NULLWHERE cust_id = 1

分析:NULL用来去除cust_email列中的值。

删除数据

从一个表中删除数据,使用DELETE语句,使用DELETE的方式有两种:

❑ 从表中删除特定的行;

❑ 从表中删除所有行。

示例:DELETE FROM Customers WHERE cust_id =1

分析:DELETEFROM要求指定删除数据的表名,WHERE子句过滤要删除的行。如果省略WHERE子句,它将删除表中每个顾客。

DELETE不需要列名或通配符,DELETE删除整行而不是删除列,要删除指定的列,使用UPDATE语句。

使用UPDATE或DELETE时所遵循的重要原则:

❑ 除非更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。

❑ 保证每个表都有主键,尽可能像WHERE子句那样使用它。

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

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

❑ 有的DBMS允许数据库管理员施加约束,防止执行不带WHERE子句的UPDATE或DELETE语句。若是SQL没有撤销(undo)按钮,应该非常小心地使用UPDATE和DELETE。

以上就是今天分享的全部内容,下期重点为大家介绍使用视图和创建和操纵表,我们下期见!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多