元数据

SQL必知必会(第5版)

  •  SQL必知必会(第5版)|200
  • 书名: SQL必知必会(第5版)
  • 作者: 本·福达
  • 简介: SQL是使用最为广泛的数据库语言,几乎所有重要的DBMS都支持SQL。本书是麻省理工学院、伊利诺伊大学等众多大学的参考教材,由浅入深地讲解了SQL的基本概念和语法,涉及数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容,实例丰富,便于查阅。与其他同类图书不同,本书没有过多阐述数据库基础理论,而是专门针对一线软件开发人员,直接从SQLSELECT开始,讲述实际工作环境中最常用和最必需的SQL知识,实用性极强。新版对书中的案例进行了全面的更新,并增加了章后挑战题,便于读者巩固所学知识。
  • 出版时间: 2020-07-30 00:00:00
  • ISBN: 9787115539168
  • 分类: 计算机-数据库
  • 出版社: 人民邮电出版社
  • PC地址:https://weread.qq.com/web/reader/f7632a30720befadf7636bb

高亮划线

1.1 数据库基础

📌 数据库是以某种有组织的方式存储的数据集合 ⏱ 2022-05-04 09:00:21

📌 数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件)。 ⏱ 2022-05-04 09:00:43

📌 表(table)某种特定类型数据的结构化清单。 ⏱ 2022-05-04 09:01:06

📌 模式关于数据库和表的布局及特性的信息。 ⏱ 2022-05-04 09:01:44

📌 列(column)表中的一个字段。所有表都是由一个或多个列组成的。 ⏱ 2022-05-04 09:01:53

📌 数据类型允许什么类型的数据。每个表列都有相应的数据类型,它限制(或允许)该列中存储的数据。 ⏱ 2022-05-04 09:04:42

📌 数据类型及其名称是SQL不兼容的一个主要原因。虽然大多数基本数据类型得到了一致的支持,但许多高级的数据类型却没有。更糟的是,偶然会有相同的数据类型在不同的DBMS中具有不同的名称。对此用户毫无办法,重要的是在创建表结构时要记住这些差异。 ⏱ 2022-05-04 09:05:10

📌 行(row)表中的一个记录。 ⏱ 2022-05-04 09:05:23

📌 主键(primary key)一列(或几列),其值能够唯一标识表中每一行。 ⏱ 2022-05-04 09:05:37

📌 表中的任何列都可以作为主键,只要它满足以下条件:❑ 任意两行都不具有相同的主键值;❑ 每一行都必须具有一个主键值(主键列不允许空值NULL);❑ 主键列中的值不允许修改或更新;❑ 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。 ⏱ 2022-05-04 09:06:13

1.2 什么是SQL

📌 SQL(发音为字母S-Q-L或sequel)是Structured Query Language(结构化查询语言)的缩写。SQL是一种专门用来与数据库沟通的语言。 ⏱ 2022-05-05 13:20:50

2.1 SELECT语句

📌 关键字(keyword)作为SQL组成部分的保留字。关键字不能用作表或列的名字。 ⏱ 2022-05-04 10:09:24

2.2 检索单个列

📌 多条SQL语句必须以分号(;)分隔。 ⏱ 2022-05-04 10:17:11

📌 SQL语句不区分大小写 ⏱ 2022-05-04 10:17:32

📌 在处理SQL语句时,其中所有空格都被忽略。SQL语句可以写成长长的一行,也可以分写在多行。 ⏱ 2022-05-04 10:17:56

2.5 检索不同的值

📌 办法就是使用DISTINCT关键字,顾名思义,它指示数据库只返回不同的值。 ⏱ 2022-05-04 10:20:06

📌 DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列。 ⏱ 2022-05-05 13:58:06

2.6 限制结果

📌 MySQL、MariaDB和SQLite可以把LIMIT 4 OFFSET 3语句简化为LIMIT 3,4。使用这个语法,逗号之前的值对应OFFSET,逗号之后的值对应LIMIT(反着的,要小心)。 ⏱ 2022-05-05 14:00:02

2.7 使用注释

📌 注释使用—(两个连字符)嵌在行内。 ⏱ 2022-05-05 14:00:32

📌 在一行的开始处使用#,这一整行都将作为注释。 ⏱ 2022-05-05 14:00:43

📌 注释从/*开始,到*/结束,/*和*/之间的任何内容都是注释。 ⏱ 2022-05-05 14:00:54

3.1 排序数据

📌 关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有任何意义。 ⏱ 2022-05-05 18:59:48

📌 子句(clause)SQL语句由子句构成,有些子句是必需的,有些则是可选的。一个子句通常由一个关键字加上所提供的数据组成。子句的例子有我们在前一课看到的SELECT语句的FROM子句。 ⏱ 2022-05-05 18:59:57

📌 在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。如果它不是最后的子句,将会出错。 ⏱ 2022-05-05 19:01:26

3.2 按多个列排序

📌 要按多个列排序,只须指定这些列名,列名之间用逗号分开即可(就像选择多个列时那样)。 ⏱ 2022-05-05 19:01:58

3.4 指定排序方向

📌 DESC关键字只应用到直接位于其前面的列名。 ⏱ 2022-05-05 19:09:58

📌 如果想在多个列上进行降序排序,必须对每一列指定DESC关键字。 ⏱ 2022-05-05 19:10:03

4.1 使用WHERE子句

📌 在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出 ⏱ 2022-05-05 19:18:01

📌 在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误 ⏱ 2022-05-05 19:22:07

4.2 WHERE子句操作符

📌 。单引号用来限定字符串。如果将值与字符串类型的列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。 ⏱ 2022-05-05 19:25:05

📌 !=和<>通常可以互换。但是,并非所有DBMS都支持这两种不等于操作符。 ⏱ 2022-05-05 19:25:24

📌 要检查某个范围的值,可以使用BETWEEN操作符。 ⏱ 2022-05-05 19:25:34

📌 在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。 ⏱ 2022-05-05 19:26:16

📌 确定值是否为NULL,不能简单地检查是否等于NULL。SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。 ⏱ 2022-05-05 19:26:54

5.1 组合WHERE子句

📌 操作符(operator)用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logical operator)。 ⏱ 2022-05-05 19:42:23

📌 要通过不止一个列进行过滤,可以使用AND操作符给WHERE子句附加条件 ⏱ 2022-05-05 19:42:10

📌 AND用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。 ⏱ 2022-05-05 19:42:33

📌 OR操作符与AND操作符正好相反,它指示DBMS检索匹配任一条件的行。 ⏱ 2022-05-05 19:42:46

📌 WHERE子句可以包含任意数目的AND和OR操作符。允许两者结合以进行复杂、高级的过滤。 ⏱ 2022-05-05 19:43:19

📌 AND在求值过程中优先级更高 ⏱ 2022-05-05 19:44:45

📌 在WHERE子句中使用圆括号任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认求值顺序,即使它确实如你希望的那样。使用圆括号没有什么坏处,它能消除歧义。 ⏱ 2022-05-05 19:44:53

5.2 IN操作符

📌 IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分隔、括在圆括号中的合法值。 ⏱ 2022-05-05 19:45:02

📌 为什么要使用IN操作符?其优点如下。❑ 在有很多合法选项时,IN操作符的语法更清楚,更直观。❑ 在与其他AND和OR操作符组合使用IN时,求值顺序更容易管理。❑ IN操作符一般比一组OR操作符执行得更快(在上面这个合法选项很少的例子中,你看不出性能差异)。❑ IN的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE子句。第11课会对此进行详细介绍。 ⏱ 2022-05-05 19:59:12

5.3 NOT操作符

📌 WHERE子句中的NOT操作符有且只有一个功能,那就是否定其后所跟的任何条件。 ⏱ 2022-05-05 19:59:20

📌 MariaDB支持使用NOT否定IN、BETWEEN和EXISTS子句。大多数DBMS允许使用NOT否定任何条件。 ⏱ 2022-05-05 19:59:49

6.1 LIKE操作符

📌 利用通配符,可以创建比较特定数据的搜索模式。 ⏱ 2022-05-05 20:18:01

📌 通配符(wildcard)用来匹配值的一部分的特殊字符。搜索模式(search pattern)由字面值、通配符或两者组合构成的搜索条件。 ⏱ 2022-05-05 20:18:07

📌 SQL支持几种通配符。为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较。 ⏱ 2022-05-05 20:18:52

📌 谓词(predicate)操作符何时不是操作符?答案是,它作为谓词时。从技术上说,LIKE是谓词而不是操作符。 ⏱ 2022-05-05 20:22:34

📌 通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。 ⏱ 2022-05-05 20:22:19

📌 最常使用的通配符是百分号(%)。在搜索串中,%表示任何字符出现任意次数。 ⏱ 2022-05-05 20:22:42

📌 根据DBMS的不同及其配置,搜索可以是区分大小写的。 ⏱ 2022-05-05 20:23:21

📌 通配符可在搜索模式中的任意位置使用,并且可以使用多个通配符。 ⏱ 2022-05-05 20:23:27

📌 需要特别注意,除了能匹配一个或多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符。 ⏱ 2022-05-05 20:24:22

📌 通配符%看起来像是可以匹配任何东西,但有个例外,这就是NULL。 ⏱ 2022-05-05 20:24:49

📌 有用的通配符是下划线(_)。下划线的用途与%一样,但它只匹配单个字符,而不是多个字符。 ⏱ 2022-05-05 20:24:55

📌 与%能匹配多个字符不同,_总是刚好匹配一个字符,不能多也不能少。 ⏱ 2022-05-05 20:25:52

6.2 使用通配符的技巧

📌 即通配符搜索一般比前面讨论的其他搜索要耗费更长的处理时间。 ⏱ 2022-05-05 20:26:29

📌 ❑ 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。❑ 在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。❑ 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。 ⏱ 2022-05-05 20:26:41

7.1 计算字段

📌 存储在数据库表中的数据一般不是应用程序所需要的格式 ⏱ 2022-05-05 20:29:35

📌 计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。 ⏱ 2022-05-05 20:30:52

📌 字段(field)基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为列,而字段这个术语通常在计算字段这种场合下使用。 ⏱ 2022-05-05 20:30:58

📌 只有数据库知道SELECT语句中哪些列是实际的表列,哪些列是计算字段。从客户端(如应用程序)来看,计算字段的数据与其他列的数据的返回方式相同。 ⏱ 2022-05-05 20:31:05

7.2 拼接字段

📌 拼接(concatenate)将值联结到一起(将一个值附加到另一个值)构成单个值。 ⏱ 2022-05-05 20:31:34

📌 许多数据库(不是所有)保存填充为列宽的文本值,而实际上你要的结果不需要这些空格。为正确返回格式化的数据,必须去掉这些空格。这可以使用SQL的RTRIM()函数来完成, ⏱ 2022-05-05 20:33:11

📌 TRIM函数大多数DBMS都支持RTRIM()(正如刚才所见,它去掉字符串右边的空格)、LTRIM()(去掉字符串左边的空格)以及TRIM()(去掉字符串左右两边的空格)。 ⏱ 2022-05-05 20:33:42

📌 为了解决这个问题,SQL支持列别名。别名(alias)是一个字段或值的替换名。别名用AS关键字赋予。 ⏱ 2022-05-05 20:33:59

📌 在很多DBMS中,AS关键字是可选的,不过最好使用它,这被视为一条最佳实践。 ⏱ 2022-05-05 20:34:30

📌 别名还有其他用途。常见的用途包括在实际的表列名包含不合法的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它。 ⏱ 2022-05-05 20:34:38

📌 别名的名字既可以是一个单词,也可以是一个字符串。如果是后者,字符串应该括在引号中。虽然这种做法是合法的,但不建议这么去做。多单词的名字可读性高,不过会给客户端应用带来各种问题。因此,别名最常见的使用是将多个单词的列名重命名为一个单词的名字。 ⏱ 2022-05-05 20:34:51

📌 别名有时也称为导出列(derived column),不管怎么叫,它们所代表的是相同的东西。 ⏱ 2022-05-05 20:34:56

7.3 执行算术计算

📌 ELECT语句为测试、检验函数和计算提供了很好的方法。虽然SELECT通常用于从表中检索数据,但是省略了FROM子句后就是简单地访问和处理表达式 ⏱ 2022-05-05 20:36:17

8.1 函数

📌 函数一般是在数据上执行的,为数据的转换和处理提供了方便。 ⏱ 2022-05-06 16:16:57

📌 与几乎所有DBMS都等同地支持SQL语句(如SELECT)不同,每一个DBMS都有特定的函数。事实上,只有少数几个函数被所有主要的DBMS等同地支持。虽然所有类型的函数一般都可以在每个DBMS中使用,但各个函数的名称和语法可能极其不同。 ⏱ 2022-05-06 16:17:09

读书笔记

本书评论