《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

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/24856b3b-efc6-4dbe-9931-a9fccf94de1c/Untitled.png

  • 过滤选择不包含指定值的所有行时, 返回结果不含有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

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9f81f17e-c25d-4062-9307-90de1b46103f/Untitled.png

  • 还可以对检索出的数据进行算术计算

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过滤行.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8cfa526a-7a22-4026-a5ba-5ac90bac3935/Untitled.png

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.
posted @ 2021-07-30 15:18  Limitlessun  阅读(145)  评论(0编辑  收藏  举报