O`Reilly Media,Inc.介绍
《深入浅出SQL》的作者
序
这本书适合谁?
我们知道你在想什么
元认知
让你的大脑顺从你的方法
读我
技术审阅团队
1 数据和表:保存所有东西的地方
定义数据
从分类的角度看数据
什么是数据库?
戴上X光眼镜,看穿数据库……
数据库包含关联数据
放大表
接受命令!
设定表:CREATE TABLE语句
创建更复杂的表
看,设计SQL是多么简单
创建my—contacts表(终于!)
您的表已经准备好了
认识一下其他数据类型
请看您的表
不可以重建已存在的表或数据库!
辞旧迎新
为了把数据添加进表里,您需要INSERT语句
各种INSERT语句
没有值的列
以SELECT语句窥探表
SQL真情指数:NULL的真情告白
控制内心的NULL
NOT NULL出现在DESC的结果中
用DEFAULT填补空白
你的SQL工具包
2 SELECT语句:取得精美包装里的数据
要约会吗?
更好的SELECT
究竟是什么?
如何查询数据类型
更多标点问题
不成对的单引号
单引号是特殊字符
INSERT包含单引号的数据
SELECT特定列来限制结果数量
SELECT特定列以加快结果呈现
结合查询
查找数值
顺利运用比较运算符
利用比较运算符取得数字数据
对文本数据套用比较运算符
OR,只要符合一项条件
AND与OR的差异
用IS NULL找到NULL
节省时间就用关键字:LIKE
调用通配符
利用AND和比较运算符选取一个范围
偷偷告诉你……BETWEEN更好
约会后,你的评价是IN……
……不然就是NOT IN
更多NOT
你的SQL工具包
3 DELETE和UPDATE:改变是件好事
小丑真恐怖
追踪小丑
小丑的行踪飘忽不定
如何输入小丑数据
Bonzo,我们出问题了
用DELETE删除记录
运用新学会的DELETE语句
DELETE的规则
INSERT-DELETE双步运作
慎用DELETE
DELETE不精确的麻烦
以UPDATE改变数据
UPDATE的规则
UPDATE是我们的新INSERT-DELETE
UPDATE在行动
更新小丑的活动
UPDATE定价
只需要一次UPDATE
你的SQL工具包
4 聪明的表设计:为什么要规范化?
两张鱼的表
表都是关于关系的
原子性数据
原子性数据和你的表
原子性数据的规则
规范化的原因
规范化表的优点
小丑不太标准
达成1NF的半路上
主键规则
朝规范化前进
修理Greg的表
我们设计的CREATE TABLE
给我有内容的表
节省时间的命令
加上主键的CREATE TABLE
1、2、3……自动递增
为现有的表添加主键
ALTER TABLE并添加PRIMARY KEY
你的SQL工具包
5 ALTER:改写历史
我们需要一些改变
修改表
终极表美容沙龙
表的改名换姓
需要好好地计划一下
重新装备列
结构上的修改
ALTER和CHANGE
以一条SQL语句改变两个列
快!卸除那一列
仔细研究不具原子性的location列
寻找模式
一些便利的字符串函数
以现有列的内容填入新列
UPDATE和SET搭档的成功之道
你的SQL工具包
6 SELECT进阶:以新视角看你的数据
Dataville Video影片出租店要改装升级
当前表的问题
比对现有数据
产生新列
使用CASE表达式来UPDATE
看来我们遇到问题了
表可能会变得乱七八糟
我们需要一种方式组织我们SELECT出的数据
有点秩序吧:ORDER BY
按单列排序
按两列排序
按多列排序
有秩序的movie_table
以DESC反转排序
Girl Sprout®的饼干销售冠军问题
SUM能为我们加总
利用GROUP BY完成分组加总
AVG搭配GROUP BY
MIN和MAX
COUNT,计算天数
选出与众不同的值
LIMIT查询结果的数量
LIMIT,只限第二名出现
你的SQL工具包
7 多张表的数据库设计:拓展你的表
Nigel需要一点爱
一切都失败了……等一下
跳出一张表的思考框框
小丑追踪数据库中的多张表
clown_tracking数据库模式
如何从一张表变成两张
链接你的表
外键约束
为什么要找外键的麻烦?
创建带外键的表
表间的关系
数据模式:一对一
数据模式:使用一对一的时机
数据模式:一对多
数据模式:认清多对多
数据模式:我们需要junction table
数据模式:多对多
终于符合INF
组合键使用了多个列
速记符号
部分函数依赖
传递函数依赖
第二范式
第三范式(终于到了这一步)
终于,Regis(还有gregs_list)从此过着幸福美满的日子
你的SQL工具包
8 联接与多张表的操作:不能单独存在吗?
自我重复、自我重复……
与填充表
我得了“表难以规范化”的忧郁症
特殊的兴趣列
保存兴趣
UPDATE所有兴趣列
取得所有兴趣
条条大路通罗马
同时(几乎同时啦)CREATE、SELECT、INSERT
同一时间CREATE、SELECT、INSERT
AS到底是怎么一回事?
列的别名
表的别名,谁会需要?
关于内联接的二三事
交叉联接
释放你的内联接
内联接上场了:相等联接(equijoin)
内联接上场了:不等联接(non-equijoin)
最后一种内联接:自然联接(natural join)
联合查询?
SQL真情指数:表与列的别名篇:你们在隐藏什么?
你的SQL工具包
9 子查询:查询中的查询
Greg踏入招聘服务行列
Greg加入了更多表
Greg使用内联接
但是他想试试其他查询
子查询
以子查询合二为一
在单一查询不够用的时候:请用子查询
子查询示范
子查询规则
子查询的构造流程
作为欲选取列的子查询
范例:子查询搭配自然联接
非关联子查询
SQL真情指数:在众多选择中,挑选最好的查询方式
有多个值的非关联子查询:IN、NOT IN
关联子查询
一个搭配NOT EXISTS的(好用)关联子查询
EXISTS与NOT EXISTS
Greg的Recruiting Service正式开业
前往派对的路上
你的SQL工具包
10 外联接、自联接与联合:新策略
清理旧数据
一切都跟左、右有关
请看左外联接
外联接与多个相符结果
右外联接
利用外联接……
可以创建新表
新表的位置
自引用外键
联接表与它自己
我们需要自联接
另一种取得多张表内容的方式
可以利用UNION
UNION的使用限制
UNION规则的运作
UNION ALL
从联合创建表
INTERSECT和EXCEPT
我们已经解决了联接,应该进入……
应该进入子查询与联接的比较了
把子查询转换为联接
把自联接变成子查询
Greg的公司正在成长
你的SQL工具包
11 约束、视图与事务:人多手杂,数据库受不了
Greg雇用了帮手
Jim的第一天:插入新客户的数据
Jim尽力避免NULL
三个月后
检查约束:加入CHECK
为性别列设定检查约束
Frank的工作很无聊
创建视图
查看你的视图
视图的实际行动
何为视图
利用视图进行插入、更新与删除
秘密在于假装视图是真正的表
带有CHECK OPTION的视图
视图有可能更新,如果……
当试图使用完毕
当乖乖的数据库发生了人间惨剧
ATM里发生了什么事
ATM发生更多麻烦
并非痴人说梦,而是事务
经典ACID测试
SQL帮助你管理事务
ATM里应该发生什么事
如何让事务在MySQL下运作
现在动手试试看
你的SQL工具包
12 安全性:保护你的资产
用户的问题
避免小丑追踪数据库的错误
保护用户账号:root
添加新用户
判断用户的确切需求
简单的GRANT语句
GRANT的各种变化
撤销权限:REVOKE
撤销授权许可(GRANT OPTION)
具精确度的撤消操作
共享账号的问题
使用角色
卸除角色
加上WITH ADMIN OPTION的角色
结合CREATE USER与GRANT
Greg`s List已经成为跨国企业了
你的SQL工具包
Greg`s List在你的城市发展得好不好?
请把SQL应用到你的项目中,只要有心,你也会是Greg!
附录1 十大遗珠
#1.为RDBMS取得图形用户界面
#2.保留字与特殊字符
#3.ANY、ALL和SOME
#4.再谈数据类型
#5.临时表
#6.转换数据类型
#7.你是谁?现在几点?
#8.有用的数字函数
#10.给我两分钟,我给你PHP/MySQL
附录2 安装MySQL:自己动手试
开始了,冲吧!
安装说明与疑难排除
在Windows上安装MySQL
在Mac OS X上安装MySQL
附录3 SQL工具总整理:崭新的SQL工具包
符号
A-B
C-D
E-I
L-N
O-S
T-W