该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动!
Head First SQL;对我来说算是一个比较陌生的命题,开始吧!
《MySQL中文文档》
熟悉了书中的学习方法和内容的目录结构;
《深入浅出SQL》——《Head First SQL》
目标:理解它,然后确定不会忘记它;
1.慢慢来,理解越多,需要强记的就越少;
2.勤做练习,写下你的心得笔记;
3.当你错过某些重点时,放慢脚步,否则你将失去更多;
我们从SQL基础语法开始,然后是SQL数据库设计概念,接下来是高级查询;
这不是一本参考书,而是一本学习SQL的书;
学习相关的语句、函数、关键字;
市面上有Standart SQL、MySQL、Oracle、MS SQL Server、PostgreSQL、DB2等众多RDBMS,我们只利用MySQL表达Standard SQL语法;
重复是刻意且有必要的;
参考网址:http://www.headfirstlabs.com/books/hfsql/
1 数据和表:保存所有东西的地方;
2 SELECT语句:取得精美包装里的数据;
3 DELETE和UPDATE:改变是件好事;
4 聪明的表设计:为什么要规范化;
5 ALERT:改变历史;
6 SELECT进阶:以新视角看你的数据;
7 多张表的数据库设计:拓展你的表;
8 联接与多张表的操作:不能单独存在吗;
9 子查询:查询中的查询;
10 外联接、自联接与联合:新策略;
11 约束、视图与事务:人多手杂,数据库受不了;
12 安全性:保护你的资产;
定义数据;
从分类的角度看数据;
什么是数据库;
数据库包含关联数据;
设定表:CREATE TABLE语句;
创建更复杂的表;
认识下其他数据类型;
不可以重建已存在的表或数据库;
把数据添加进表里,你需要INSERT语句;
各种INSERT语句;
没有值的列;
以SELECT语句窥探表;
NULL的真情告白;
NOT NULL出现在DESC的结果中;
用DEFAULT填补空白;
SQL工具包;
*究竟是什么;
如何查询数据类型;
更多标点问题;
不成对的单引号;
单引号是特殊字符;
INSERT包含单引号的数据;
SELECT特定列来限制结果数量;
SELECT特定列来加快结果呈现;
运用比较运算符;
OR,只要符合一项条件;
AND与OR的差异;
用IS NULL找到NULL;
节省时间就用关键字:LIKE;
调用通配符;
利用AND和比较运算符选取一个范围;
BETWEEN更好;
你的评价是IN;
不然就是NOT IN;
更多的NOT;
SQL工具包;
有了UPDATE,我们可以改变数据,而DELETE则可删除不需要的数据;
用DELETE删除记录;
DELETE的规则;
INSERT-DELETE双步运作;
慎用DELETE;
DELETE不精确的麻烦;
以UPDATE改变数据;
UPDATE的规则;
UPDATE是我们的新INSERT-DELETE;
SQL工具包;
表都是关于关系的;
原子性数据;
原子性数据和你的表;
原子性数据的规则;
规范化的原因;
规范化表的优点;
达成1NF的半路上;
主键规则;
朝规范化前进;
修理Greg的表;
我们设计的CREATE TABLE;
加上主键的CREATE TABLE;
1、2、3……自动递增;
为现有的表添加主键;
ALERT TABLE并添加PRIMARY KEY;
SQL工具包;
使用ALERT命令,能将之前设计的表套用新学到的设计方法;更好的是,套用不会影响现有数据;
本章还会学到规范化的真正意义,并且能让你的所有表都符合规范化,无论他是过去的还是未来的产物;
修改表;
表的改名换姓;
重新装备列;
结构上的修改;
ALERT和CHANGE;
以一条SQL语句改变两个列;
仔细研究不具有原子性的location列;
一些便利的字符串函数;
以现有列的内容填充新列;
UPDATE和SET搭档的成功之道;
SQL工具包;
有时候需要比SELECT加上WHERE子句更精确的选取工具;本章将学习如何给数据排序和归纳,还会学习如何对查询结果套用数据运算;
产生新列;
使用CASE表达式来UPDATE;
有点秩序吧:OREDER BY;
按单列排序;
按两列排序;
按多列排序;
以DESC反转排序;
SUM能为我们加总;
利用GROUP BY完成分组加总;
AVG搭配GROUP BY;
MIN和MAX;
COUNT,计算天数;
LIMIT查询结果的数量;
LIMIT,只限第二名出现;
SQL工具包;
跳出一张表的思考框框;
clown_tracking数据库模式;
如何从一张表变成两张表;
连接你的表;
外键约束;
创建带有外键的表;
表间的关系;
数据模式:一对一;
数据模式:使用一对一的时机;
数据模式:一对多;
数据模式:认清多对多;
数据模式:我们需要junction table;
数据模式:多对多;
终于符合1NF;
组合键使用了多个列;
速记符号;
部分函数依赖;
传递函数依赖;
第二范式;
第三范式;
SQL工具包;
需要一些操作多张表的新技术和工具;混乱状态与多张表一起出现,所以需要别名来让表更清楚简单;
联接则有助于联系表,取得分布在各张表里的内容;
预填充表;
UPDATE所有兴趣列;
AS到底是怎么一回事;
列的别名;
表的别名,谁会需要;
关于内联接的二三事;
交叉联接;
释放你的内联接;
内联接上场了:相等联接(equijoin);
内联接上场了:不等联接(non-equijoin);
最后一种内联接:自然联接(natural join)
联合查询;
表与列的别名篇;
SQL工具包;
有了联接的确好,但是有时需要问数据库多个问题,或 把甲查询的结果作为乙查询的输入,此时就需要子查询出场了;
子查询有助于避免数据重复,让查询更加动态灵活,甚至引入高端概念;
子查询;
在单一查询不够用的时候:请用子查询;
子查询示范;
子查询规则;
子查询的构造流程;
子查询搭配自然联接;
非关联子查询;
有多个值的非关联子查询:IN、NOT IN;
关联子查询;
一个搭配NOT EXISTS的关联子查询;
EXISTS与NOT EXISTS;
SQL工具包;
新策略:关于链接,我们只认识了一半,我们已经看过返回每个可能行的交叉联接,返回两张表中相符记录的内连接;现在要接触外联接,它可以在表中没有匹配记录的情况下返回记录;
自联接,它可以联接表本身,还有联合,它可以合并查询结果;
学习完这些技巧之后,就可以用自己需要的方式取得所有数据;
一切都跟左右相关;
请看左外联接;
外联接与多个相符结果;
右外联接;
自引用外键;
我们需要自联接;
可以利用UNION;
UNION的使用限制;
UNION规则的运作;
UNION ALL;
从联合创建表;
INTERSECT和EXCEPT;
子查询和联接的比较;
把子查询转换为联接;
把自联接变成子查询;
SQL工具包;
如需防止其他人输入错误数据,或只让其他人看到部分数据,防止大家同时输入数据等;
要对数据进行保护,以免其他人对数据进行错误的操作;
尽力避免NULL;
检查约束:加入CHECK;
创建视图;
何为视图;
利用视图进行插入、更新与删除;
假装视图是真正的表;
带有CHECK OPTION的视图;
SQL帮助你管理事务;
如何让事务在MySQL下运作;
SQL工具包;
如何把数据库和其中的对象变得更安全,以及如何全面控制谁对数据进行什么操作;
保护用户账号:root;
添加新用户;
简单的GRANT语句;
GRANT的各种变化;
撤销权限:REVOKE;
撤销权限许可(GRANT OPTION);
具精确度的撤销操作;
共享账号问题;
使用角色;
卸除角色;
加上WITH ADMIN OPTION的角色;
SQL工具包;
请把SQL应用到你的项目中,只要有心,你也会是Greg!
作者:充满挑战的SQL、让人感兴趣的SQL;