本周通过 SQLBolt网站 学习了经典数据库语言SQL,并将其基本指令进行了归类整理以便于与理解、记忆和调用。
归类的出发点来自于之前对区块链的了解,曾有人讲区块链就是“去掉了【更改】和【删除】功能,只保留【创建】和【读取】功能的数据库。”从这个定义出发,一方面能简单的理解区块链的本质,另一方面也能明白一般的数据库必然包含【创建】【读取】【更改】【删除】四个功能。从这四个功能出发,再来理解SQL指令会非常高效。下面就从这个框架出发,对SQL指令进行归类梳理。
Part I-【读取】
基本指令&语句结构
-
SELECT
- DISTINCT
-
聚合表达式
- COUNT(*)
默认根据GROUP BY进行计数 - COUNT(column) A common function used to counts the number of rows in the group if no column name is specified. Otherwise, count the number of rows in the group with non-NULL values in the specified column.
- MIN(column) Finds the smallest numerical value in the specified column for all rows in the group.
- MAX(column) Finds the largest numerical value in the specified column for all rows in the group.
- AVG(column) Finds the average numerical value in the specified column for all rows in the group.
- SUM(column)
- COUNT(*)
- AS
- FROM
-
JOIN(INNER/LEFT/RIGHT/FULL)
- ON
-
WHERE
-
表达式
-
= Case sensitive exact string comparison (notice the single equals) col_name = "abc"
-
!= or <> Case sensitive exact string inequality comparison col_name != "abcd"
-
LIKE Case insensitive exact string comparison col_name LIKE "ABC"
-
NOT LIKE Case insensitive exact string inequality comparison col_name NOT LIKE "ABCD"
-
% Used anywhere in a string to match a sequence of zero or more characters (only with LIKE or NOT LIKE) col_name LIKE "%AT%"(matches "AT", "ATTIC", "CAT" or even "BATS")
模糊查询示例 -
_ Used anywhere in a string to match a single character (only with LIKE or NOT LIKE) col_name LIKE "AN_"(matches "AND", but not "AN")
-
IN (…) String exists in a list col_name IN ("A", "B", "C")
-
NOT IN (…) String does not exist in a list col_name NOT IN ("D", "E", "F")
-
- IS (NOT) NULL
-
表达式
-
GROUP BY
- HAVING
-
ORDER BY..DESC
-
LIMIT/OFFSET
心得体悟
无论看起来多么复杂,以上这些指令,解决的都是读取什么数据的问题,SELECT之外的其它指令都是对要读取数据的进一步描述。联系之前学习的Tableau,这个过程颇有点像《数据分析学习记录W12——详细级别表达式带来的启发》中描述的切蛋糕的过程,再一辨析,这二者本就是一体两面,Tableau就是将数据库的指令语言变成了拖拽的操作,并将查询的结果可视化了。
理解了这一点,便能透过Tableau眼花缭乱的视觉效果,把握住其本质,同时也能借由设想期待得到的视觉效果,高效的实施SQL指令操作。
Part II-【创建】【更改】【删除】
基本指令&语句结构
-
表列级别
-
CREATE TABLE IF NOT EXISTS
- Data type
- Constraint Description
-
ALTER TABLE
- ADD
- DROP
- RENAME TO
-
DROP TABLE IF EXISTS
-
-
行格级别
-
INSERT INTO
- (column, another_column, …)
- VALUES (value_or_expr, another_value_or_expr, …)
-
UPDATE
- SET column = value_or_expr
- WHERE condition
-
DELETE FROM
- WHERE condition
-
心得体悟
在SQL语言中,作为数据库基本功能的【创建】【更改】【删除】(以下简称“建改删”)无论是指令数量还是复杂度都远远低于【读取】,故将其作为一个整体记忆,在了解了可实现建改删功能的指令后,可以明显的将其分为两类:
- 对表格、列进行建改删的
- 对行、单元格进行建改删的
进而,只需区分操作所在的级别,即可高效的记忆和调用这些指令。
结语
综上所诉,SQL指令,可以概括为为:
【读取】数据“切蛋糕”
【建】【改】【删除】行/列表
网友评论