SQL表示StructuredQueryLanguage,即结构化查询语言,它已经成为数据库应用的标准语言,因此,也是最重要的计算机语言之一。 对于计算机专业人士来说,SQL是必须掌握的语言之一,而对于想要高效率地使用商业数据库的一般读者来讲,掌握SQL可以在应用数据库的时候达到事半功倍的效果。
本书根据John Patrick在美国加州大学伯克利分校讲授的SQL课程编写,详细介绍与SQL相关的概念和技术。读者不需要任何数据库语言的应用经验,就可以通过本书详细的介绍和丰富的实例,熟练地掌握和使用SQL。
和其他的SQL相关图书相比,本书具有以下特色:
■ 不仅介绍基本概念,而且对每个概念都用了一个SQL范例进行说明。在大多数情况下都设置了一个任务,然后给出了完成这项任务的SQL代码。
■ 展示了数据的原表和结果表。这样,读者可以清晰地看到每一个SQL范例执行前后的变化,了解SQL语句的具体功能。
■ 提供Oracle SQL和Access SQL两个版本的代码。Oracle和Access分别是应用最广泛的企业级数据库和个人业务数据库。它们很好地覆盖了读者和用户的需求。
■ 每个小节的最后提出“检查理解”的练习,供读者实践本节学习到的知识,巩固对相关知识点的掌握。
■ 配套网站(http://groupsgooglecom/group/sqlfun)有丰富的辅助学习资源,包括创建数据库的代码(针对Oracle和Access的多个版本)、各章的范例代码、“检查理解”的解决方案、开放的学习讨论论坛。
封面图
目录
- 译者序
- 前言
- 第1章在表中存储信息
- 简介
- 11什么是SQL
- 12什么是关系数据库?为什么要
- 使用它
- 13为什么学习SQL
- 14本书内容简介
- 表的组成部分
- 15数据存储于表中
- 16一行表示一个对象及其相关信息
- 17一列表示一类信息
- 18单元格是表的最小部分
- 19每个单元格应该只表示一样东西
- 110使用主键列标识每一个行
- 111大部分表都很“瘦长”
- 表的示例
- 112Oracle和Access中表的示例
- 113l_employees表的一些设计决策
- 114Lunches数据库
- 小结
- 第2章从表中获取信息
- select语句
- 21目标:从表中获取几个列和行
- 22select语句概述
- select子句
- 23select子句概述
- 24使用select子句获取若干列
- 25使用select子句获取所有的列
- 26使用select语句获取某个列中的
- 不同值
- 27使用select子句获得几个列中的
- 不同值
- where子句
- 28where子句概览
- 29在where子句中使用等于条件
- 210在where子句中使用小于条件
- 211在where子句中使用不等于条件
- 212在where子句中使用in条件
- 213在where子句中使用between
- 条件
- 214在where子句中使用like条件
- 215在where子句中使用is null条件
- order by子句
- 216orderby子句概述
- 217通过一列升序排列行
- 218通过若干列升序排列行
- 219根据若干列以各种顺序排序各行
- 220整个过程
- 小结
- 第3章where子句中的复合条件
- where子句中的复合条件
- 31在where子句中使用复合条件
- 32将not与in、between、like和is
- null条件一起使用
- 33where子句中复杂条件的标准形式
- 34一个常见错误
- 常数值
- 35在select子句中使用常数值
- 36使用常数表
- 标点符号问题
- 37现在需要知道的标点符号
- 38标点符号参考
- 区分大小写
- 39Oracle中的区分大小写
- 310关于SQL中区分大小写的争论
- 311有一个选择
- 312在Oracle SQL Command Line
- 环境中关闭区分大小写
- 313Access中区分大小写
- 三值逻辑
- 314使用三值逻辑的SQL
- 错误消息
- 315错误消息常常是错的
- 练习
- 316练习1
- 317练习2
- 318练习3
- 小结
- 第4章保存结果
- 在新表或者视图中保存结果
- 41从select语句的结果中创建
- 一个新表
- 42从select语句的结果创建
- 一个新的视图
- 43表和视图的相似之处
- 44表和视图的不同之处
- 45删除表
- 46删除视图
- 47一个视图可以建立在另一个
- 视图之上
- 48预防性删除
- 修改表中的数据
- 49添加新行到表中
- 410添加若干新行到一个表中
- 411更改已经存在于表的行中的数据
- 412从表中删除行
- 使用GUI修改表中的数据
- 413使用Oracle GUI来修改表中的
- 数据
- 414使用Access GUI来修改表中的
- 数据
- 修改表中数据的限制
- 415使用insert、update和delete的
- 约束条件
- 416安全限制
- 小结
- 第5章数据字典和其他Oracle主题
- 提交、回滚和事务
- 51commit和rollback命令
- 52Autocommit选项
- 53事务
- 通过视图修改数据
- 54通过视图更改数据
- 55通过视图更改数据的例子
- 56使用With Check Option的视图
- Oracle中的SQL Commands页面
- 57SQL Commands页面概览
- 58Autocommit选项
- 59Explain选项
- 使用Oracle数据字典:第一部分
- 510数据字典概述
- 511如何查找所有表的名字
- 512如何查找所有视图的名字
- 513如何查找定义视图的select语句
- 514如何查找表或者视图中的列名
- 515如何查找表的主键
- 小结
- 第6章创建自己的表
- 创建表
- 61create table命令
- 62Oracle和Access中的数据类型
- 63文本数据类型
- 64数字数据类型
- 65日期/时间数据类型
- 66其他数据类型
- 67将数据放入新表中
- 68在Oracle中创建l_employees表
- 更改表
- 69为表添加主键
- 610更改表的主键
- 611向表中添加一个新列
- 612扩展列的长度
- 613从表中删除一个列
- 614对表进行其他更改
- 带有重复行的表
- 615重复行的问题
- 616如何删除重复行
- 617如何区别重复行
- 小结
- 第7章格式、序列和索引
- 格式
- 71日期格式
- 72显示已经格式化的日期
- 73输入已格式化的日期
- 74Oracle中的其他格式
- 75Access中的格式
- 序列
- 76在Oracle中创建序列
- 77在Oracle中使用序列
- 78在Access中使用序列
- 索引
- 79创建索引
- 710优化器
- 711索引如何工作的示例
- 在数据字典中查找更多的信息:第二部分
- 712如何查找有关列的数据类型的
- 信息
- 713如何查找有关序列的信息
- 714如何找到有关索引的信息
- 715如何找到所有数据库对象的
- 相关信息
- 716如何使用Oracle中的数据
- 字典表
- 717如何使用数据字典列的索引
- 练习
- 718创建一个想要庆祝的
- 节日的表
- 小结
- 第8章数据完整性
- 表上的约束条件
- 81约束条件使数据保持一致
- 82check约束条件
- 83unique约束条件
- 84not null约束条件
- 85primary key约束条件
- 86对字段数据类型和长度的限制
- 参照完整性
- 87参照完整性的概念
- 88参照完整性的示例
- 89对RI保护的数据表使用insert
- 和update
- 810通过RI允许对数据表使用insert
- 和update
- 811RI防止对查找表使用update
- 和delete
- 812如何从查找表中删除编码
- 813如何在查找表中更改编码
- 814RI作为表之间的关系
- 815在Access GUI中建立RI
- RI的delete选项和update选项
- 816删除和更新查找表的三个选项
- 817删除规则:set null
- 818删除规则:cascade
- 819更新规则:cascade
- 验证参照完整性
- 820主键的两种含义
- 821使用两个或者更多的列作为主键
- 822查找表和数据表可以是同一个表
- 如何在create table语句中编写约束条件
- 823约束条件常常在create table
- 语句中编写
- 小结
- 第9章行函数
- 行函数简介
- 91直接从初始表中获得数据
- 92什么是行函数
- 93select子句中行函数的例子
- 94select语句的所有子句中使用
- 行函数的例子
- 95定义行函数作为第一步
- 数字函数
- 96数字函数
- 97如何测试行函数
- 98测试数字行函数的另一种方法
- 文本函数
- 99文本函数
- 910组合名和姓
- 911分隔名和姓
- 912设计电话号码的格式
- 日期函数
- 913日期函数
- 914日期函数的一个例子
- 915从日期中删除时间
- 小结
- 第10章使用行函数
- 特殊行函数
- 101其他行函数
- 102使用函数识别用户和日期
- 103使用函数把null改为其他值
- 104使用函数更改数据类型
- 使用行函数的文档
- 105使用Oracle文档
- 106使用Access文档
- 107使用Access Expression Builder
- 查看行函数
- 创建数字和日期模式
- 108创建一个简单的数字模式
- 109创建一个复杂的数字模式
- 1010列出一个星期的所有星期数
- 1011创建一个工作日日历
- 1012如何计算从出生到现在的天数
- 1013如何查找出生后满10 000天的
- 日期
- 1014给Oracle和Access中的报表
- 编行号
- 1015可选内容:解代数方程的一种
- 简单方法
- 小结
- 第11章汇总数据
- 列函数简介
- 111汇总一个列中的所有数据
- 112列函数列表
- 最大值和最小值
- 113找出最大值和最小值
- 114列函数和where子句一起使用
- 115找出拥有最大值和最小值的行
- 计数
- 116对行和数据计数
- 117零计数:第一部分
- 118对列中相异值计数
- 119计算两个或多个列中相异值的
- 数目
- 求和与平均
- 1110求和函数与平均函数
- 1111加法存在的问题以及如何解决
- 其他主题
- 1112并不总将null更改为零
- 1113计算列中null的数目
- 1114对相异值计数
- 小结
- 第12章控制汇总级别
- 将表划分为行的组并汇总每个组
- 121列中数据组的汇总
- 122group by子句
- 123由两个或更多列形成的组
- 124有多个分组列时的null组
- 125在同一条select语句中,已汇总的
- 数据不能与没有汇总的数据混在
- 一起
- 126解决方案1:将更多的列添加到
- group by子句中
- 127解决方案2:将查询划分为两条
- 单独的select语句
- 128如何创建有多个小计和一个总计
- 的报表
- 129零计数:第二部分
- 1210零计数:第三部分
- 删除某些已汇总的数据
- 1211having子句
- 1212比较having子句与where子句
- 1213在一个表上使用select语句的
- 全过程
- 1214having子句没有增加select语
- 句的功能
- 1215使用where子句来删除原始
- 数据
- 1216如何对一个列函数应用另一个列
- 函数并且绕开其他限制
- 小结
- 第13章内连接
- 连接简介
- 131一个查询可以使用几个表中的
- 数据
- 132最佳方法是一次连接两个表
- 两个表的内连接
- 133一对一关系
- 134多对一关系
- 135一对多关系
- 136多对多关系
- 137删除不匹配的行
- 138删除匹配列中带有null的行
- 139编写SQL语句进行内连接的
- 5种方式
- 连接条件的变体
- 1310用两个或多个匹配列连接
- 1311用between匹配一系列值的
- 连接
- 1312使用大于条件的连接
- 1313用行函数进行连接
- 1314在from子句中编写连接条件
- 连接应用
- 1315查找表
- 1316组合连接和数据的选取
- 1317联合使用连接
- 1318如何从数据字典中找出主键列
- 1319用内连接组合三个或更多的表
- 小结
- 第14章外连接
- 外连接简介
- 141外连接派生于内连接
- 142外连接的3种类型
- 143左外连接
- 144右外连接
- 145全外连接
- 146union简介
- 147带有匹配列的两个表的union的
- 例子
- 外连接的应用
- 148零计数:第四部分
- 149组合外连接与数据选取
- 1410按排序顺序的全外连接
- 1411找出模式中的缺陷
- 1412用两列或多列进行比较
- 1413比较两个不同的全外连接
- 1414问题:左外连接和右外连接
- 可能很难处理
- 小结
- 第15章union和union all
- union的基础知识
- 151union与连接之间的区别
- 152union和union all的区别
- 153union中的select语句
- 154union中的order by子句
- 155创建一个包含union的表或者
- 视图
- 156union中的自动数据类型转换
- 非常规的union
- 157不同数据类型表的union
- 158不同列数的两个表的union
- union的应用
- 159确定两个表是否相同
- 1510在union中使用直接量确定
- 数据的来源
- 1511给异常、警告和错误的标志
- 附加消息
- 1512将数据从一个列中分到两个
- 不同的列中
- 1513将两个函数应用到数据的
- 不同部分
- 1514三个表或更多表的union
- Oracle中的交集和差集
- 1515交集
- 1516差集
- 小结
- 第16章交叉连接和自连接
- 交叉连接
- 161交叉连接的定义
- 162交叉连接重要的原因
- 163内连接源自交叉连接
- 164内连接的属性
- 165连接条件中的错误可以显示为
- 一个交叉连接
- 166使用交叉连接列出所有可能
- 的组合
- 167三维或多维时的其他布局
- 168避免对大型表使用交叉连接
- 自连接
- 169表为什么与自己连接
- 1610自连接的例子
- 1611处理事件序列
- 1612生成从0到999的数字
- Access中的CrossTab查询
- 1613当有两维时的交叉表查询
- 1614增加到四维的CrossTab查询
- 1615更多维的CrossTab查询
- 1616显示谁参加每次午餐的
- CrossTab
- 1617显示每次午餐的食物
- Oracle中的CrossTab查询
- 1618Oracle中的CrossTab查询——
- 第一部分
- 1619Oracle中的CrossTab查询——
- 第二部分
- 小结
- 第17章在产品数据库中组合表
- 连接三个或者更多表的方法
- 171使用一系列步骤连接几个表
- 172在where子句中一次连接几个表
- 173在from子句中一次连接几个表
- 丢失信息
- 174小心使用内连接
- 175小心使用左外连接和右外连接
- 176全外连接保留了所有的信息
- 177几个表的全外连接
- 注意计算机的效率
- 178监视查询
- 179使用索引
- 1710尽早在过程中选择想要的数据
- 1711使用表保存总结数据
- 1712使用几种方法编写SQL
- 标准化连接表的方式
- 1713连接是数据库设计的一部分
- 1714视图可以标准化表的连接方式
- 1715临时报表
- 小结
- 第18章ifthenelse、参数查询和
- 子查询
- ifthenelse逻辑
- 181Oracle中的case函数和decode
- 函数
- 182Access中的Immediate If (iif)
- 函数
- 183给行附加消息
- 184将一个列的数据划分为两个
- 不同的列
- 185对数据的不同部分应用两个
- 函数
- 参数查询
- 186Oracle中的参数查询
- 187Oracle中多次使用参数
- 188在Oracle中定义参数的更多方法
- 189Access中的参数查询
- 1810Access中带有两个参数的查询
- 1811Access中的参数限制
- 子查询
- 1812子查询简介
- 1813产生一系列值的子查询
- 1814产生一个值的子查询
- 1815存在null值时避免使用not in
- 子查询的应用
- 1816用于update命令中的子查询
- 1817找出两个表之间的不同之处
- 1818使用最新数据
- 子查询的原有特性
- 1819相关子查询
- 1820使用exists的子查询
- 1821使用子查询编写外连接
- 1822嵌套子查询
- 1823子查询的使用限制
- 1824许多子查询也可以写作连接
- 小结
- 第19章多用户环境
- 数据库配置
- 191单用户环境
- 192多用户环境
- 193分布式环境
- 194通过Internet连接
- 多用户环境中的操作
- 195如何使用别人拥有的表
- 196代名
- 197快照
- 安全性和特权
- 198识别用户
- 199特权
- 1910角色
- 1911几个人同时使用相同的表
- Oracle数据字典和多用户环境
- 1912ALL和USER
- 1913如何在数据字典中找到所需
- 的表
- 1914如何找到列的含义
- 小结
- 第20章SQL设计
- SQL的最初设计目标
- 201做一件事并且做好它
- 202关注信息
- 203保持SQL语言的简单性
- 204协调人们一起工作
- 新的界面
- 205窗体
- 206报表
- 207Web工具
- 208更小的数据库
- 209OLTP
- 2010数据仓库
- 小结
- 附录A获取和安装Oracle
- 附录BOracle快速入门
- 附录CAccess快速入门
- 附录DLunches数据库的图
- 〖=A(