《SQL in 10 minutes》简单笔记
2 检索数据
SELECT row_name
FROM table_name
- SELECT DISTINCT row_name 作用于所有的列
- 限制返回结果行数的关键字由数据库决定, 例如TOP, ROWNUM, LIMIT, 这一操作是0-index
3 排序检索数据
SELECT row_name
FROM table_name
ORDER BY row_name
- ORDER BY必须为SELECT语句的最后一条子句
- ORDER BY可以按列位置排序,1-index
- DESC关键字只作用于直接位于其前面的列名
4 过滤数据
SELECT row_name
FROM table_name
WHERE condition
- 过滤选择不包含指定值的所有行时, 返回结果不含有NULL值的行
5 高级数据过滤
SELECT row_name
FROM table_name
WHERE condition a
AND condition b
OR condition c...
- AND的优先级比OR高, 因此组合使用的时候要用圆括号明确分组.
SELECT row_name
FROM table_name
WHERE row_name IN ('name1', 'name2')
- IN取一组括号中的所有合法值, 逻辑和OR相似, 但执行速度一般更快.
6 通配符
SELECT row_name
FROM table_name
WHERE table_name LIKE 'wildcard'
- 用LIKE操作符指示DBMS, 后跟的搜索模式使用通配符匹配
- %表示任何字符出现任何次数, 包括0
- _表示单个字符
- [ ]用来指定一个字符集, 匹配指定位置的一个字符, 例如[ABC]匹配A或B或C
- 通配符搜索较慢, 只在必要的时候使用, 且尽量放在搜索模式的末尾
7 计算字段
- +或||或CONCAT()可以把多个列或字符串拼接起来
- 许多数据库保存填充为列宽的数据值, TRIM(), RTRIM()和LTRIM()可以去掉返回数据中的空格
SELECT row_name AS alias_name
FROM table_name
- 用AS关键字赋予别名, 使得查询结果可以被引用
SELECT row_name1,
row_name2*row_name3 AS alias_name
FROM table_name
- 还可以对检索出的数据进行算术计算
8 函数
每个DBMS的函数用法都不相同, 可以查询具体手册
9 汇总数据
- 聚集函数是指用于检索汇总数据的函数, 它对某些行运行并返回一个值, 例如AVG(), COUNT(), MAX(), MIN(), SUM()
- 如果COUNT指定列名会忽略为NULL的行, 如果用*则不会忽略, 会统计所有行.
SELECT AVG(DISTINCT row_name1)
FROM table_name
- 所有的聚集函数都可以用DISTINCT参数指定只考虑不同值
第10课 分组数据
- 分组可以将数据分为多个逻辑组, 对每个组进行聚焦计算
SELECT row_name1,
COUNT(*) AS row_name2
FROM table_name
GROUP BY row_name1
- 使用GROUP BY子句可以建立分组, 就可以对每个分组计算一次而不是对整个表进行计算
SELECT row_name1,
COUNT(*) AS row_name2
FROM table_name
GROUP BY row_name1
HAVING row_name2 condition...
- HAVING语句和WHERE语句的语法相同, 但是HAVING过滤分组, WHERE过滤行.
11 子查询
- 子查询就是将一个查询的结果作为另一个查询的条件语句, 嵌套地使用SELECT.
- 作为子查询的SELECT语句只能查询单个列.
12 联结表
-
联结是关系型数据表的一种重要机制, 用于在SELECT语句中关联表.
SELECT row_name1, row_name2, row_name3 FROM table1, table2 WHERE table1.key_row = table2.key_row
-
这种基于两个表之间的相等测试叫内联结, 它和以下语句等价:
SELECT row_name1, row_name2, row_name3
FROM table1
INNER JOIN table2
ON table1.key_row = table2.key_row
- 如果不用WHERE作为过滤条件来匹配联结行, 两个表的每一行将于每一行配对, 返回结果为笛卡尔积.
13 高级联结
- 可以用AS给表起别名
SELECT c1.row_name1, c1.row_name2, c1.row_name3
FROM table1 AS c1, table1 AS c2
WHERE c1.row_name1 = c2.row_name1
AND c2.row_name2 = 'key'
- 自联结是指作为外部语句, 替代从相同表中检索数据的子查询语句
SELECT table1.row_name1, table2.row_name2
FROM table1 LEFT OUTER JOIN table2
ON table1.row_name1 = table2.row_name1
- 外联结是指包含那些在相关表中没有关联行的行, 即左表的所有值都会被返回, 及时在右表中没有值.
14 组合查询
- UNION将多个SELECT的查询结果组合列出 并且会自动去重, 而UNION ALL不会.
15 插入数据
- INSERT INTO用于将行插入到数据库表
- SELECT INTO可以将一个表的所有内容复制到另一个表
16 更新和删除数据
UPDATE table_name
SET row_name1 = 'value1',
row_name2 = 'value2'
WHERE condition;
- UPDATE语句由三部分组成, 注意UPDATE的使用要小心, 如果不用WHERE指定条件那么会更新表中所有的表
DELETE FROM table_name
WHERE condition;
- DELETE语句同样很容易使用, 一定要注意限定条件.
- DELET删除整行而不是列, 要删除指定的列应该使用UPDATE.