简介

  • 书名:《SQL必知必会(第5版)》
  • 作者: 本·福达
  • 分类: 计算机-数据库
  • ISBN:9787115539168
  • 出版社:人民邮电出版社

概述

SQL是使用最为广泛的数据库语言,几乎所有重要的DBMS都支持SQL。本书是麻省理工学院、伊利诺伊大学等众多大学的参考教材,由浅入深地讲解了SQL的基本概念和语法,涉及数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容,实例丰富,便于查阅。与其他同类图书不同,本书没有过多阐述数据库基础理论,而是专门针对一线软件开发人员,直接从SQLSELECT开始,讲述实际工作环境中最常用和最必需的SQL知识,实用性极强。新版对书中的案例进行了全面的更新,并增加了章后挑战题,便于读者巩固所学知识。

划线

SQL是使用最为广泛的数据库语言。

数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件)。

数据库软件应称为数据库管理系统(DBMS)。数据库是通过DBMS创建和操纵的容器

SQL(发音为字母S-Q-L或sequel)是Structured Query Language(结构化查询语言)的缩写

Windows用户可以使用Microsoft SQL Server Express。这是强大的SQL Server的一个免费版本,它还包括一个用户友好的客户端叫SQL Server Management Studio。

办法就是使用DISTINCT关键字,顾名思义,它指示数据库只返回不同的值。

LIMIT 5 OFFSET 5

重要的是理解在按多个列排序时,排序的顺序完全按规定进行。

如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。

提示:按非选择列排序显然,当根据不出现在SELECT清单中的列进行排序时,不能采用这项技术。但是,如果有必要,可以混合使用实际列名和相对列位置。

在很多DBMS中,AS关键字是可选的,不过最好使用它,这被视为一条最佳实践。

WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤

使用HAVING时应该结合GROUP BY子句,而WHERE子句用于标准的行级过滤。

在SELECT语句中,子查询总是从内向外处理。

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

将数据分解为多个表能更有效地存储,更方便地处理,并且可伸缩性更好。但这些好处是有代价的。

由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。

目前为止使用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内联结(inner join)

不要联结不必要的表。联结的表越多,性能下降越厉害。

自联结(self-join)、自然联结(natural join)和外联结(outer join)。

联结包含了那些在相关表中没有关联行的行。这种联结称为外联结。

UNION几乎总是完成与多个WHERE条件相同的工作。UNION ALL为UNION的一种形式,它完成WHERE子句完成不了的工作。如果确实需要每个条件的匹配行全部出现(包括重复行),就必须使用UNION ALL,而不是WHERE。

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

事务处理是一种机制,用来管理必须成批执行的SQL操作,保证数据库不包含不完整的操作结果。

管理事务的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。

一般的SQL语句都是针对数据库表直接执行和编写的。这就是所谓的隐式提交(implicit commit),即提交(写或保存)操作是自动进行的。

笔记

书评

点评