新書推薦:
《
鸣沙丛书·鼎革:南北议和与清帝退位
》
售價:NT$
551.0
《
从康德到黑格尔的发展:兼论宗教哲学(英国观念论名著译丛)
》
售價:NT$
275.0
《
突破不可能:用特工思维提升领导力
》
售價:NT$
352.0
《
王阳明大传:知行合一的心学智慧(精装典藏版)
》
售價:NT$
1010.0
《
失衡与重塑——百年变局下的中国与世界经济
》
售價:NT$
602.0
《
不被定义的年龄:积极年龄观让我们更快乐、健康、长寿
》
售價:NT$
352.0
《
南方谈话:邓小平在1992
》
售價:NT$
367.0
《
纷纭万端 : 近代中国的思想与社会
》
售價:NT$
500.0
|
編輯推薦: |
SQL经典畅销书,内容丰富,简洁实用
麻省理工学院、伊利诺伊大学等众多大学的参考教材
|
內容簡介: |
SQL是使用最广泛的数据库语言,几乎所有重要的DBMS都支持SQL。《SQL必知必会第4版》由浅入深地讲解了SQL的基本概念和语法,涉及数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容,实例丰富,便于查阅。新版增加了针对Apache
Open Office Base、MariaDB、SQlite等DBMS的描述,并根据最新版本的Oracle、SQL
Server、MySQL 和Postgre SQL更新了相关示例。
《SQL必知必会第4版》适合SQL初学者,也可供广大开发及管理人员参考。
|
關於作者: |
Adobe公司开发者关系部总监,世界知名的技术作家,在计算机产品开发、支持、培训和营销等方面拥有20多年的丰富经验。多年来,他撰写了SQL、MySQL、正则表达式、JSP、WAP和Windows开发等方面的十多部技术图书,其中不少已被翻译为多种语言在世界各地出版发行并成为畅销经典。读者可以通过他的个人网站forta.com了解更多信息。
|
目錄:
|
第1课 了解SQL
1.1 数据库基础
1.2 什么是SQL
1.3 动手实践
1.4 小结
第2课 检索数据
2.1 SELECT语句
2.2 检索单个列
2.3 检索多个列
2.4 检索所有列
2.5 检索不同的值
2.6 限制结果
2.7 使用注释
2.8 小结
第3课 排序检索数据
3.1 排序数据
3.2 按多个列排序
3.3 按列位置排序
3.4 指定排序方向
3.5 小结
第4课 过滤数据
4.1 使用WHERE子句
4.2 WHERE子句操作符
4.3 小结
第5课 高级数据过滤
5.1 组合WHERE子句
5.2 IN操作符
5.3 NOT操作符
5.4 小结
第6课 用通配符进行过滤
6.1 LIKE操作符
6.2 使用通配符的技巧
6.3 小结
第7课 创建计算字段
7.1 计算字段
7.2 拼接字段
7.3 执行算术计算
7.4 小结
第8课 使用数据处理函数
8.1 函数
8.2 使用函数
8.3 小结
第9课 汇总数据
9.1 聚集函数
9.2 聚集不同值
9.3 组合聚集函数
9.4 小结
第10课 分组数据
10.1 数据分组
10.2 创建分组
10.3 过滤分组
10.4 分组和排序
10.5 SELECT子句顺序
10.6 小结
第11课 使用子查询
11.1 子查询
11.2 利用子查询进行过滤
11.3 作为计算字段使用子查询
11.4 小结
第12课 联结表
12.1 联结
12.2 创建联结
12.3 小结
第13课 创建高级联结
13.1 使用表别名
13.2 使用不同类型的联结
13.3 使用带聚集函数的联结
13.4 使用联结和联结条件
13.5 小结
第14课 组合查询
14.1 组合查询
14.2 创建组合查询
14.3 小结
第15课 插入数据
15.1 数据插入
15.2 从一个表复制到另一个表
15.3 小结
第16课 更新和删除数据
16.1 更新数据
16.2 删除数据
16.3 更新和删除的指导原则
16.4 小结
第17课 创建和操纵表
17.1 创建表
17.2 更新表
17.3 删除表
17.4 重命名表
17.5 小结
第18课 使用视图
18.1 视图
18.2 创建视图
18.3 小结
第19课 使用存储过程
19.1 存储过程
19.2 为什么要使用存储过程
19.3 执行存储过程
19.4 创建存储过程
19.5 小结
第20课 管理事务处理
20.1 事务处理
20.2 控制事务处理
20.3 小结
第21课 使用游标
21.1 游标
21.2 使用游标
21.3 小结
第22课 高级SQL特性
22.1 约束
22.2 索引
22.3 触发器
22.4 数据库安全
22.5 小结
附录A 样例表脚本
附录B 流行的应用程序
附录C SQL语句的语法
附录D SQL数据类型
附录E SQL保留字
常用SQL语句速查
索引
|
內容試閱:
|
"第1课 了解SQL
这一课介绍SQL究竟是什么,它能做什么事情。
1.1 数据库基础
你正在读这本SQL图书,这表明你需要以某种方式与数据库打交道。SQL正是用来实现这一任务的语言,因此在学习SQL之前,你应该对数据库及数据库技术的某些基本概念有所了解。
你可能还没有意识到,其实自己一直在使用数据库。每当你从电子邮件地址簿里查找名字时,就是在使用数据库。你在网站上进行搜索,也是在使用数据库。你在工作中登录网络,也需要依靠数据库验证用户名和密码。即使是在自动取款机上使用ATM卡,也要利用数据库进行密码验证和查询余额。
虽然我们一直都在使用数据库,但对究竟什么是数据库并不十分清楚。更何况人们可能会使用相同的数据库术语表示不同的事物,进一步加剧了这种混乱。因此,我们首先给出一些最重要的数据库术语,并加以说明。
提示:基本概念回顾
后面是一些基本数据库概念的简要介绍。如果你已经具有一定的数据库经验,可以借此复习巩固一下;如果你刚开始接触数据库,可以由此了解必需的基本知识。理解数据库概念是掌握SQL的重要前提,如果有必要,你或许还应该参阅其他一些有关数据库基础知识的书籍
。
1.1.1 数据库
数据库这个术语的用法很多,但就本书而言(从SQL的角度来看),数据库是一个以某种有组织的方式存储的数据集合。最简单的办法是将数据库想象为一个文件柜。这个文件柜是一个存放数据的物理位置,不管数据是什么,也不管数据是如何组织的。
数据库(database)
保存有组织的数据的容器(通常是一个文件或一组文件)。
注意:误用导致混淆
人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的,也因此产生了许多混淆。确切地说,数据库软件应称为数据库管理系统(DBMS)。数据库是通过DBMS创建和操纵的容器,而具体它究竟是什么,形式如何,各种数据库都不一样。
1.1.2 表
你往文件柜里放资料时,并不是随便将它们扔进某个抽屉就完事了,而是在文件柜中创建文件,然后将相关的资料放入特定的文件中。
在数据库领域中,这种文件称为表。表是一种结构化的文件,可用来存储某种特定类型的数据。表可以保存顾客清单、产品目录,或者其他信息清单。
表(table)
某种特定类型数据的结构化清单。
这里的关键一点在于,存储在表中的数据是同一种类型的数据或清单。决不应该将顾客的清单与订单的清单存储在同一个数据库表中,否则以后的检索和访问会很困难。应该创建两个表,每个清单一个表。
数据库中的每个表都有一个名字来标识自己。这个名字是唯一的,即数据库中没有其他表具有相同的名字。
说明:表名
使表名成为唯一的,实际上是数据库名和表名等的组合。有的数据库还使用数据库拥有者的名字作为唯一名的一部分。也就是说,虽然在相同数据库中不能两次使用相同的表名,但在不同的数据库中完全可以使用相同的表名。
表具有一些特性,这些特性定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。描述表的这组信息就是所谓的模式(schema),模式可以用来描述数据库中特定的表,也可以用来描述整个数据库(和其中表的关系)。
模式
关于数据库和表的布局及特性的信息。
1.1.3 列和数据类型
表由列组成。列存储表中某部分的信息。
列(column)
表中的一个字段。所有表都是由一个或多个列组成的。
理解列的最好办法是将数据库表想象为一个网格,就像个电子表格那样。网格中每一列存储着某种特定的信息。例如,在顾客表中,一列存储顾客编号,另一列存储顾客姓名,而地址、城市、州以及邮政编码全都存储在各自的列中。
提示:分解数据
正确地将数据分解为多个列极为重要。例如,城市、州、邮政编码应该总是彼此独立的列。通过分解这些数据,才有可能利用特定的列对数据进行分类和过滤(如找出特定州或特定城市的所有顾客)。如果城市和州组合在一个列中,则按州进行分类或过滤就会很
困难。
你可以根据自己的具体需求来决定把数据分解到何种程度。例如,一般可以把门牌号和街道名一起存储在地址里。这没有问题,除非你哪天想用街道名来排序,这时,最好将门牌号和街道名分开。
数据库中每个列都有相应的数据类型。数据类型(datatype)定义了列可以存储哪些数据种类。例如,如果列中存储的是数字(或许是订单中的物品数),则相应的数据类型应该为数值类型。如果列中存储的是日期、文本、注释、金额等,则应该规定好恰当的数据类型。
数据类型
所允许的数据的类型。每个表列都有相应的数据类型,它限制(或允许)该列中存储的数据。
数据类型限定了可存储在列中的数据种类(例如,防止在数值字段中录入字符值)。数据类型还帮助正确地分类数据,并在优化磁盘使用方面起重要的作用。因此,在创建表时必须特别关注所用的数据类型。
注意:数据类型兼容
数据类型及其名称是SQL不兼容的一个主要原因。虽然大多数基本数据类型得到了一致的支持,但许多高级的数据类型却没有。更糟的是,偶然会有相同的数据类型在不同的DBMS中具有不同的名称。对此用户毫无办法,重要的是在创建表结构时要记住这些差异。
1.1.4 行
表中的数据是按行存储的,所保存的每个记录存储在自己的行内。如果将表想象为网格,网格中垂直的列为表列,水平行为表行。
例如,顾客表可以每行存储一个顾客。表中的行编号为记录的编号。
行(row)
表中的一个记录。
说明:是记录还是行?
你可能听到用户在提到行时称其为数据库记录(record)。这两个术语多半是可以交替使用的,但从技术上说,行才是正确的术语。
1.1.5 主键
表中每一行都应该有一列(或几列)可以唯一标识自己。顾客表可以使用顾客编号,而订单表可以使用订单ID。雇员表可以使用雇员ID或雇员社会安全号。
主键(primary key)
一列(或一组列),其值能够唯一标识表中每一行。
唯一标识表中每行的这个列(或这几列)称为主键。主键用来表示一个特定的行。没有主键,更新或删除表中特定行就极为困难,因为你不能保证操作只涉及相关的行。
提示:应该总是定义主键
虽然并不总是需要主键,但多数数据库设计者都会保证他们创建的每个表具有一个主键,以便于以后的数据操作和管理。
表中的任何列都可以作为主键,只要它满足以下条件:
? 任意两行都不具有相同的主键值;
? 每一行都必须具有一个主键值(主键列不允许NULL值);
? 主键列中的值不允许修改或更新;
? 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。
主键通常定义在表的一列上,但并不是必需这么做,也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。
还有一种非常重要的键,称为外键,我们将在第12课中介绍。
1.2 什么是SQL
SQL(发音为字母S-Q-L或sequel)是Structured Query
Language(结构化查询语言)的缩写。SQL是一种专门用来与数据库沟通的语言。
与其他语言(如英语或Java、C、PHP这样的编程语言)不一样,SQL中只有很少的词,这是有意而为的。设计SQL的目的是很好地完成一项任务——提供一种从数据库中读写数据的简单有效的方法。
SQL有如下的优点。
?
SQL不是某个特定数据库供应商专有的语言。几乎所有重要的DBMS都支持SQL,所以学习此语言使你几乎能与所有数据库打交道。
? SQL简单易学。它的语句全都是由有很强描述性的英语单词组成,而且这些单词的数目不多。
? SQL虽然看上去很简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
下面我们将开始真正学习SQL。
说明:SQL的扩展
许多DBMS厂商通过增加语句或指令,对SQL进行了扩展。这种扩展的目的是提供执行特定操作的额外功能或简化方法。虽然这种扩展很有用,但一般都是针对个别DBMS的,很少有两个以上的供应商支持这种扩展。
标准SQL由ANSI标准委员会管理,从而称为ANSI SQL。所有主要的DBMS,即使有自己的扩展,也都支持ANSI
SQL。各个实现有自己的名称,如PLSQL、Transact-SQL 等。
本书讲授的SQL主要是ANSI SQL。在使用某种DBMS特定的SQL时,会特别说明。
1.3 动手实践
与其他任何语言一样,学习SQL的最好方法是自己动手实践。为此,需要一个数据库和用来测试SQL语句的应用系统。
本书中所有课程采用的都是真实的SQL语句和数据表。附录A给出了具体的样例表,并介绍了获得(或创建)它们的详细步骤,便于读者理解每一课讲授的内容。附录B介绍在各种应用程序中执行SQL所需的步骤。在进入下一课之前,强烈建议读者先阅读这两个附录的内容,为以后的学习做好准备。
1.4 小结
这一课介绍了什么是SQL,它为什么很有用。因为SQL是用来与数据库打交道的,所以,我们也复习了一些基本的数据库术语。
"
|
|