作者:empty 页数:357 出版社:empty |
译者前序言
SQL是关系数据库编程的国际标准语言。本书系统、全面地介绍了标准SQL, 并讲解了MicrosoftAccess、Microsoft SQLServer、Oracle、IBM DB 2、MySQL、PostgreSQL等SQL实现及其与标准SQL之间的差异。数据库应用开发人员和最终用户的参考书。作为初学者, 可通过学习本书快速、全面地掌握SQL:而作为数据库应用开发人员和最终用户,可以通过本书提高开发和应用关系数据库的能力。本书结构严谨、内容丰富, 给出大量实例代码及经验技巧, 本书适合SQL初学者, 同时也可作为本书由冯宇晖、贾文峰翻译,其中文前、第1~6章、第7章前6节由贾文峰翻译,第7章7~9节及第8~15章由冯宇晖翻译,全书由冯宇晖负责统稿。限于译者的水平,译文中难免有错误与不足之处,敬请读者和同行批评指正。译者的邮箱:fengyh1999@163.com和jwf@litedu.cn.更多源我的新浪博客http:/blog.sina.com.cn/ckook更多源□我的新浪博客http:/blog.sina.com.cn/ckookSQL是一种标准的编程语言, 用于创建、更新和检索存储在数据库中的信息。使用SQL, 你可以将通常的问题(“我们的客户居住在何地?”) 转化为数据库系统能够理解的语句(SELECT DISTINCTcity, state FROM customers; ) 。你可能已经知道如何过图形化的查询或报表工具来检索此类信息,但对于复杂的问题, 或许你也意识到此类工具存在诸多限制和障碍——这时就需要SQL了。都支持SQL, 但不同产品的支持情况会有所不同。提示、细微变化和高级主题,以及其他零星知识。和其他形式语言一样, SQL由一系列语法和语义规则定义, 语法规则决定可以使用哪些单词和符可以使用SQL来增加、更新、删除数据和数据库对象, 所有现代关系型DBMS(数据库管理系统)本书涉及大多数流行DBMS的最新版本, 并专门新增一章来介绍SQL技巧, 包括最新的编程技巧关于SQLSQL可以如下表述:它是一种编程语言。SQL是一种可以用来编写程序, 实现创建、修改、查询数据库的形式语言。数据库系统执行SQL程序, 完成用户指定的任务, 并显示结果或错误信息。编程语言有别于自然语言,它是为了特殊用途而设计的,其词汇量小、语句书写呆板且必须明确无误。如果你没有得到希望的结果,只能怪你自己的程序包含某些错误,而不是计算机错误地执行了指令(程序测试是编程的一项重婴工作),号, 以及如何将它们结合在一起。语义规则决定着语法正确的语句的真实含义, 注意, SQL语句可能语法正确但语义错误。第3章会介绍SQL的语法和语义。是一种编程语言;容易学习:是说明性语言:是交互式或嵌入式语言:是标准化语言:用于改变数据和数据库对象:不是首字母缩写词。数据库与DBMS数据库并不等同于用户使用的数据库款件, “Oracle是数据库”是不正确的说法, 数据库软件被称作DBMS.数据库只是DBMS的一个组成部分, 是数据本身; 也就是说, 它是一个存储结构化信息的容器(由至少一个文件组成) , 除了控制数据库中数据的纽织、完整性和检索, DBMS还要负
本书中可以认为DBMS是RDBMS的简写, 在这里R代表关系型, 关系型DBMS依照关系模型(见第2章) 而不是层次模型或网状模型来组织数据, 本书只讲解关系型系统, 所以当书中出现DBMS时, 就是指RDBMS, 第一个字母R(关系型) 被省略了,它容易学习。同其他编程语言相比, SQL学起来更容易。如果以前没有写过任何程序, 你会觉得从自然语言转向形式语言是很难的。不过, SQL语句读起来很像句子, 容易学习。初学编程的人可能会理解SQL语句“SELECT au_fno me, au_lnaneFRCMouthorsORDERB You_Inane; ”的意思是“以姓氏为序列出作者的姓名”, 但他们会发现, 具有相同功能的C或Perl程序很难理解。它是说明性语言。如果你从未编写过程序,那么跳过本段也不会影响你学习后面的内容。如果你用C或者PHP语言编写过程序, 那意味着你有使用过程语言的经历, 在编写这样的程序时需要指明得出结果所需的每个步骤。使用SQL这种说明性语言, 只需描述想要的内容, 而无需去管该如何做, 数据库系统的优化器将决定“如何做”。因此, 标准的SQL没有传统的流程控制结构, 如if-then-else、while、for和goto语句。
为了说明这一点差异, 本书给出了功能等同的Microsoft Access VisualBasic程序(VB属于过程语言) 和SQL程序。代码0-1显示了从包含作者信息的表中检素作者姓名的VB程序, 你无需了解整个程序, 但要注意它如何使用Do Until循环来显式地定义如何提取数据。代码0-2显示了如何用一条SQL语句(与约20行的VB程序形成鲜明对比) 完成相同的功能, 使用SQL, 只需指明要完成什么工作, 数据库管理系统在内部决定并执行得出结果所需的具体操作。代码0-1这段Microsoft Access VisualBasic程序从一个包含作者信息的数据库表中获取姓名俏此外, 代码0-2是一个简单的SQL查询, 在对简单的SQL查询添加排序、过滤、联结等常见的操作后, 使用这样一条SELECT语句就可以完成的任务, 使用过程代码则可能需要100多行。代码0-2这条SQL语句完成的查询与代码0-1中VisualBasic程序完成的查询相同。Access内部的优统, 得到结果后立即显示。DBMS的服务器同时拥有图形和命令行工具, 用于接受用户输入的SQL语息,并将结果存放在一个数组中
第1章DBMS介绍…
1.1运行SQL程序-
1.2 Microsoft Access-.
1.3 Microsoft SQLServer--
1.4 Oracle…
2.6.4表titles_authors-
2.6.5表royalties..
2.7创建示例数据库.
第3章SQL基础-.--
3.1SQL语法.
3.2SQL标准和一致性..…
3.3标识符…
3.4数据类型…..
3.5字符串类型…
3.6二进制大型对象类型..
3.7精确数字类型…
3.8近似数字类型.….
3.9布尔类型…
3.10日期和时间类型.…
3.11时间间隔类型…
3.12唯一标识符…
.253.13其他数据类型…
263.14空值…h
27第4章从表中检索数据.
324.6.1 AND操作符-
978.4.1简单子查询
1.3.1 SQLServer 2000--
1.3.2 SQLServer 2005/2008…9
1.5IBMDB 2…..12
1.6 MySQL---16
1.7 PostgreSQL….17
第2章关系模型-.20
2.1表、列和行…-2
4.8使用BETWEEN进行范围筛选..81
2.1.1表-
2.1.2列…
2.1.3行.
2.2
主键…
2.3外键…
2.4联系-.
2.4.2一对多…
2.4.1
2.6.3
一对一
表titles…
4.1使用SELECT和FROM检索列…-..-.-
4.2使用AS创建列的别名…i..
4.3使用DISTINCT消除重复的行..62
4.4使用ORDER BY排序行….63
4.5使用WHERE箭选行…68
4.6使用AND, OR和NOT组合及求反条件…71
4.6.2CR操作特..72
4.6.3 NOT操作符-..73
4.7使用LIKE匹配模式--.77
7.5使用CROSS J0IN创建交叉联结.141
7.6
8.4.2相关子查询…..183
2.4.3多对多……
2.5规范化……-
小写..
2.5.1第一范式…
2.5.2
第二范式-
2.5.3第三范式…
2.5.4其他范式…
2.6示例数据库…
2.6.1表out hors….
2.6.2表publishers.
2目
4.9使用IN进行列表筛选……
4.10使用IS NULL测试空值..
第5章操作符和函数.
5.1创建派生列--
5.2执行算术运算-
5.3确定计算的顺序….
5.4使用11连接申…
5.5使用SUBSTRING O提取子串.…
5.6使用UPPER O和LOWER O更改串的大
5.7使用TRIM O修整字符…
5.8使用CHARACTER_LENGTH O得到串长度…101
5.9使用POSITION O查找子串.-
5.10执行日期及时间间隔运算……..105
5.11获得当前日期和时间…..
5.12获得用户信息….
5.13使用CASTO转换数据类型……….
5.14使用CASE计算条件值……
5.15使用COALESCE O检查空值…
5.16使用NULL IF O比较表达式…
第6章汇总和分组数据.
6.1使用聚合函数-
6.2创建聚合表达式….
6.3使用MINO查找最小值.
6.4使用MAX O查找最大.
6.5使用SUN O计算总和…
6.6使用AVG O计算平均..
6.7使用COUN TO统计行数…….124
6.8使用DISTINCT聚合不重复的值…125
6.9使用GROUP BY分组行…
6.10使用HAVING筛选分组….-
第7章联结..-..135
7.1限定列名………
7.2使用AS创建表的别名-.
7.3使用联结…
7.4使用JD IN或WHERE创建联结….139
4.6.4 AND, OR和NOT一起使用-------74
使用NATURAL JOIN创建自然联结.143
7.7
使用INNER JOIN创建内联结………146
7.8使用OUTER JOIN创建外联结……-165
79创建自联结…..173
第8章子查询.-177
8.1理解子查询..177
8.2子查询语法..179
8.3子查询和联结…179
8.4简单子查询和相关子查询……182
8.5在子查询中限定列名-----------186
8.6子查询中的空值….187
8.7使用子查询作为列表达式--..--------.--.---188
8.8使用比较操作符比较子查询的值…191
8.9使用IN测试集合成员资格……--194
8.10使用ALL比较所有子查询的值….-200
8.11使用ANY比较果些子查询的值…202
8.12使用EXISTS检测存在性……-205
8.13比较等价查询….209
第9章集合操作..212
9.1使用UNION合并行…
9.2使用INTERSECT查找相同行..…217
9.3使用EXCEPT查找不同行……
第0章插入、更新和删除行.-.220
10.1显示表结构…220
10.2使用INSERT插入行.223
10.3使用UPDATE更新行……228
10.4使用DELETE除行……
第1章创建、更改和删除表..-.-------235
11.1创建表….235
11.2理解约束
11.3使用CREATE TABLE创建新表……..-236
114使用NOT NULL禁止空值-238
11.5使用DEFAULT确定默认值.…..---240
11.6使用PRIMARYKEY指定主键.…..-242
11.7使用FOREIGNKEY指定外键.…..----244
11.8使用L NIQUE确保值唯-…--..248
11.9使用CHECK创建检查约束….-250
11.10使用CREATE TEH PORARY TABLE创建
11.11使用CREATE TABLE AS利用已存在表
11.12使用ALTER TABLE修改表….
11.13使用DROP TABLE删除表……
第12章索引…
12.1使用CREATE INDEX创建索引.261
12.2使用DROP INDEX删除索引.
第13章视图..
13.1使用CREATE VIEN创建视图.-..--..-..-----265
13.2通过视图检索数据…
13.3通过视图修改数据…
13.4使用DROP VIEW删除视图.-----
第14章事务…
第15章SQL技巧..
15.1动态统计.
15.2产生序列….283
15.3发现等差数列、递增数列和等值数列287
15.4限定返回行的数量…
15.4.2 Microsoft SQL Serve ..-.--293
15.4.3 Oracle.-294
15.4.4IBMDB 2…..295
15.4.5 MySQL.-296
15.4.6 PostgreSQL-----.297
15.10.1 Microsoft Access.…..305
15.10.2 Microsoft SQLServer….-.305
15.10.3 Oracle . .. 306
15.10.4IBMDB 2………
15.10.5 MySQL…
15.10.6 PostgreSQL------------
15.11.1 Microsoft Access-.-
15.11.2 Microsoft SQLServer --------310
15.11.3 Oracle…
15.11.4IBMDB 2-..
15.11.5 MySQL….
15.11.6 PostgreSQL.-------
格时表…
创建新表……
DBMS介绍
15.5分配排者…
15.6计算修整均值.
15.7随机选取行…
15.8处理重复值…
15.9创建电话列表…
15.10检索元数据……
15.11处理日期….-----.
15.13查询极值…
15.14改变动态统计的中流……
15.15旋转结果…
15.16处理层次结构…
索引…
13.3.1通过视图插入行…
13.3.2通过视图更新行.-.
13.3.3通过视图删除行…
15.4.1 Microsoft Access.