├── LICENSE
├── README.md
└── README_zh-hans.md
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Enoch Tang
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Quick SQL Cheatsheet
2 |
3 | A quick reminder of all relevant SQL queries and examples on how to use them.
4 |
5 | This repository is constantly being updated and added to by the community.
6 | Pull requests are welcome. Enjoy!
7 |
8 | # Table of Contents
9 | 1. [ Finding Data Queries. ](#find)
10 | 2. [ Data Modification Queries. ](#modify)
11 | 3. [ Reporting Queries. ](#report)
12 | 4. [ Join Queries. ](#joins)
13 | 5. [ View Queries. ](#view)
14 | 6. [ Altering Table Queries.](#alter)
15 | 7. [ Creating Table Query.](#create)
16 |
17 |
18 | # 1. Finding Data Queries
19 |
20 | ### **SELECT**: used to select data from a database
21 | * `SELECT` * `FROM` table_name;
22 |
23 | ### **DISTINCT**: filters away duplicate values and returns rows of specified column
24 | * `SELECT DISTINCT` column_name;
25 |
26 | ### **WHERE**: used to filter records/rows
27 | * `SELECT` column1, column2 `FROM` table_name `WHERE` condition;
28 | * `SELECT` * `FROM` table_name `WHERE` condition1 `AND` condition2;
29 | * `SELECT` * `FROM` table_name `WHERE` condition1 `OR` condition2;
30 | * `SELECT` * `FROM` table_name `WHERE NOT` condition;
31 | * `SELECT` * `FROM` table_name `WHERE` condition1 `AND` (condition2 `OR` condition3);
32 | * `SELECT` * `FROM` table_name `WHERE EXISTS` (`SELECT` column_name `FROM` table_name `WHERE` condition);
33 |
34 | ### **ORDER BY**: used to sort the result-set in ascending or descending order
35 | * `SELECT` * `FROM` table_name `ORDER BY` column;
36 | * `SELECT` * `FROM` table_name `ORDER BY` column `DESC`;
37 | * `SELECT` * `FROM` table_name `ORDER BY` column1 `ASC`, column2 `DESC`;
38 |
39 | ### **SELECT TOP**: used to specify the number of records to return from top of table
40 | * `SELECT TOP` number columns_names `FROM` table_name `WHERE` condition;
41 | * `SELECT TOP` percent columns_names `FROM` table_name `WHERE` condition;
42 | * Not all database systems support `SELECT TOP`. The MySQL equivalent is the `LIMIT` clause
43 | * `SELECT` column_names `FROM` table_name `LIMIT` offset, count;
44 |
45 | ### **LIKE**: operator used in a WHERE clause to search for a specific pattern in a column
46 | * % (percent sign) is a wildcard character that represents zero, one, or multiple characters
47 | * _ (underscore) is a wildcard character that represents a single character
48 | * `SELECT` column_names `FROM` table_name `WHERE` column_name `LIKE` pattern;
49 | * `LIKE` ‘a%’ (find any values that start with “a”)
50 | * `LIKE` ‘%a’ (find any values that end with “a”)
51 | * `LIKE` ‘%or%’ (find any values that have “or” in any position)
52 | * `LIKE` ‘_r%’ (find any values that have “r” in the second position)
53 | * `LIKE` ‘a_%_%’ (find any values that start with “a” and are at least 3 characters in length)
54 | * `LIKE` ‘[a-c]%’ (find any values starting with “a”, “b”, or “c”
55 |
56 | ### **IN**: operator that allows you to specify multiple values in a WHERE clause
57 | * essentially the IN operator is shorthand for multiple OR conditions
58 | * `SELECT` column_names `FROM` table_name `WHERE` column_name `IN` (value1, value2, …);
59 | * `SELECT` column_names `FROM` table_name `WHERE` column_name `IN` (`SELECT STATEMENT`);
60 |
61 | ### **BETWEEN**: operator selects values within a given range inclusive
62 | * `SELECT` column_names `FROM` table_name `WHERE` column_name `BETWEEN` value1 `AND` value2;
63 | * `SELECT` * `FROM` Products `WHERE` (column_name `BETWEEN` value1 `AND` value2) `AND NOT` column_name2 `IN` (value3, value4);
64 | * `SELECT` * `FROM` Products `WHERE` column_name `BETWEEN` #01/07/1999# AND #03/12/1999#;
65 |
66 | ### **NULL**: values in a field with no value
67 | * `SELECT` * `FROM` table_name `WHERE` column_name `IS NULL`;
68 | * `SELECT` * `FROM` table_name `WHERE` column_name `IS NOT NULL`;
69 |
70 | ### **AS**: aliases are used to assign a temporary name to a table or column
71 | * `SELECT` column_name `AS` alias_name `FROM` table_name;
72 | * `SELECT` column_name `FROM` table_name `AS` alias_name;
73 | * `SELECT` column_name `AS` alias_name1, column_name2 `AS` alias_name2;
74 | * `SELECT` column_name1, column_name2 + ‘, ‘ + column_name3 `AS` alias_name;
75 |
76 | ### **UNION**: set operator used to combine the result-set of two or more SELECT statements
77 | * Each SELECT statement within UNION must have the same number of columns
78 | * The columns must have similar data types
79 | * The columns in each SELECT statement must also be in the same order
80 | * `SELECT` columns_names `FROM` table1 `UNION SELECT` column_name `FROM` table2;
81 | * `UNION` operator only selects distinct values, `UNION ALL` will allow duplicates
82 |
83 | ### **INTERSECT**: set operator which is used to return the records that two SELECT statements have in common
84 | * Generally used the same way as **UNION** above
85 | * `SELECT` columns_names `FROM` table1 `INTERSECT SELECT` column_name `FROM` table2;
86 |
87 | ### **EXCEPT**: set operator used to return all the records in the first SELECT statement that are not found in the second SELECT statement
88 | * Generally used the same way as **UNION** above
89 | * `SELECT` columns_names `FROM` table1 `EXCEPT SELECT` column_name `FROM` table2;
90 |
91 | ### **ANY|ALL**: operator used to check subquery conditions used within a WHERE or HAVING clauses
92 | * The `ANY` operator returns true if any subquery values meet the condition
93 | * The `ALL` operator returns true if all subquery values meet the condition
94 | * `SELECT` columns_names `FROM` table1 `WHERE` column_name operator (`ANY`|`ALL`) (`SELECT` column_name `FROM` table_name `WHERE` condition);
95 |
96 | ### **GROUP BY**: statement often used with aggregate functions (COUNT, MAX, MIN, SUM, AVG) to group the result-set by one or more columns
97 | * `SELECT` column_name1, COUNT(column_name2) `FROM` table_name `WHERE` condition `GROUP BY` column_name1 `ORDER BY` COUNT(column_name2) DESC;
98 |
99 | ### **HAVING**: this clause was added to SQL because the WHERE keyword could not be used with aggregate functions
100 | * `SELECT` `COUNT`(column_name1), column_name2 `FROM` table `GROUP BY` column_name2 `HAVING` `COUNT(`column_name1`)` > 5;
101 |
102 | ### **WITH**: often used for retrieving hierarchical data or re-using temp result set several times in a query. Also referred to as "Common Table Expression"
103 | * `WITH RECURSIVE` cte `AS` (
104 | `SELECT` c0.* `FROM` categories `AS` c0 `WHERE` id = 1 `# Starting point`
105 | `UNION ALL`
106 | `SELECT` c1.* `FROM` categories `AS` c1 `JOIN` cte `ON` c1.parent_category_id = cte.id
107 | )
108 | `SELECT` *
109 | `FROM` cte
110 |
111 |
112 |
113 | # 2. Data Modification Queries
114 |
115 | ### **INSERT INTO**: used to insert new records/rows in a table
116 | * `INSERT INTO` table_name (column1, column2) `VALUES` (value1, value2);
117 | * `INSERT INTO` table_name `VALUES` (value1, value2 …);
118 |
119 | ### **UPDATE**: used to modify the existing records in a table
120 | * `UPDATE` table_name `SET` column1 = value1, column2 = value2 `WHERE` condition;
121 | * `UPDATE` table_name `SET` column_name = value;
122 |
123 | ### **DELETE**: used to delete existing records/rows in a table
124 | * `DELETE FROM` table_name `WHERE` condition;
125 | * `DELETE` * `FROM` table_name;
126 |
127 |
128 | # 3. Reporting Queries
129 |
130 | ### **COUNT**: returns the # of occurrences
131 | * `SELECT COUNT (DISTINCT` column_name`)`;
132 |
133 | ### **MIN() and MAX()**: returns the smallest/largest value of the selected column
134 | * `SELECT MIN (`column_names`) FROM` table_name `WHERE` condition;
135 | * `SELECT MAX (`column_names`) FROM` table_name `WHERE` condition;
136 |
137 | ### **AVG()**: returns the average value of a numeric column
138 | * `SELECT AVG (`column_name`) FROM` table_name `WHERE` condition;
139 |
140 | ### **SUM()**: returns the total sum of a numeric column
141 | * `SELECT SUM (`column_name`) FROM` table_name `WHERE` condition;
142 |
143 |
144 | # 4. Join Queries
145 |
146 | ### **INNER JOIN**: returns records that have matching value in both tables
147 | * `SELECT` column_names `FROM` table1 `INNER JOIN` table2 `ON` table1.column_name=table2.column_name;
148 | * `SELECT` table1.column_name1, table2.column_name2, table3.column_name3 `FROM` ((table1 `INNER JOIN` table2 `ON` relationship) `INNER JOIN` table3 `ON` relationship);
149 |
150 | ### **LEFT (OUTER) JOIN**: returns all records from the left table (table1), and the matched records from the right table (table2)
151 | * `SELECT` column_names `FROM` table1 `LEFT JOIN` table2 `ON` table1.column_name=table2.column_name;
152 |
153 | ### **RIGHT (OUTER) JOIN**: returns all records from the right table (table2), and the matched records from the left table (table1)
154 | * `SELECT` column_names `FROM` table1 `RIGHT JOIN` table2 `ON` table1.column_name=table2.column_name;
155 |
156 | ### **FULL (OUTER) JOIN**: returns all records when there is a match in either left or right table
157 | * `SELECT` column_names `FROM` table1 ``FULL OUTER JOIN`` table2 `ON` table1.column_name=table2.column_name;
158 |
159 | ### **Self JOIN**: a regular join, but the table is joined with itself
160 | * `SELECT` column_names `FROM` table1 T1, table1 T2 `WHERE` condition;
161 |
162 |
163 | # 5. View Queries
164 |
165 | ### **CREATE**: create a view
166 | * `CREATE VIEW` view_name `AS SELECT` column1, column2 `FROM` table_name `WHERE` condition;
167 |
168 | ### **SELECT**: retrieve a view
169 | * `SELECT` * `FROM` view_name;
170 |
171 | ### **DROP**: drop a view
172 | * `DROP VIEW` view_name;
173 |
174 |
175 | # 6. Altering Table Queries
176 |
177 | ### **ADD**: add a column
178 | * `ALTER TABLE` table_name `ADD` column_name column_definition;
179 |
180 | ### **MODIFY**: change data type of column
181 | * `ALTER TABLE` table_name `MODIFY` column_name column_type;
182 |
183 | ### **DROP**: delete a column
184 | * `ALTER TABLE` table_name `DROP COLUMN` column_name;
185 |
186 |
187 | # 7. Creating Table Query
188 |
189 | ### **CREATE**: create a table
190 | * `CREATE TABLE` table_name `(`
191 | `column1` `datatype`,
192 | `column2` `datatype`,
193 | `column3` `datatype`,
194 | `column4` `datatype`,
195 | `);`
196 |
--------------------------------------------------------------------------------
/README_zh-hans.md:
--------------------------------------------------------------------------------
1 | # SQL 速查表
2 |
3 | 一个所有 SQL 语句用法的速查表。
4 |
5 | 这个仓库被社区不断添加和更新,欢迎提交 PR 👏。
6 |
7 | # 内容
8 | 1. [ 查找数据的查询 ](#find)
9 | 2. [ 修改数据的查询 ](#modify)
10 | 3. [ 聚合查询 ](#report)
11 | 4. [ 连接查询 ](#joins)
12 | 5. [ 视图查询 ](#view)
13 | 6. [ 修改表的查询 ](#alter)
14 |
15 |
16 | # 1. 查找数据的查询
17 |
18 | ### **SELECT**: 用于从数据库中选择数据
19 | * `SELECT` * `FROM` table_name;
20 |
21 | ### **DISTINCT**: 用于过滤掉重复的值并返回指定列的行
22 | * `SELECT DISTINCT` column_name;
23 |
24 | ### **WHERE**: 用于过滤记录/行
25 | * `SELECT` column1, column2 `FROM` table_name `WHERE` condition;
26 | * `SELECT` * `FROM` table_name `WHERE` condition1 `AND` condition2;
27 | * `SELECT` * `FROM` table_name `WHERE` condition1 `OR` condition2;
28 | * `SELECT` * `FROM` table_name `WHERE NOT` condition;
29 | * `SELECT` * `FROM` table_name `WHERE` condition1 `AND` (condition2 `OR` condition3);
30 | * `SELECT` * `FROM` table_name `WHERE EXISTS` (`SELECT` column_name `FROM` table_name `WHERE` condition);
31 |
32 | ### **ORDER BY**: 用于结果集的排序,升序(ASC)或者降序(DESC)
33 | * `SELECT` * `FROM` table_name `ORDER BY` column;
34 | * `SELECT` * `FROM` table_name `ORDER BY` column `DESC`;
35 | * `SELECT` * `FROM` table_name `ORDER BY` column1 `ASC`, column2 `DESC`;
36 |
37 | ### **SELECT TOP**: 用于指定从表顶部返回的记录数
38 | * `SELECT TOP` number columns_names `FROM` table_name `WHERE` condition;
39 | * `SELECT TOP` percent columns_names `FROM` table_name `WHERE` condition;
40 | * 并非所有数据库系统都支持`SELECT TOP`。 MySQL 中是`LIMIT`子句
41 | * `SELECT` column_names `FROM` table_name `LIMIT` offset, count;
42 |
43 | ### **LIKE**: 用于搜索列中的特定模式,WHERE 子句中使用的运算符
44 | * % (percent sign) 是一个表示零个,一个或多个字符的通配符
45 | * _ (underscore) 是一个表示单个字符通配符
46 | * `SELECT` column_names `FROM` table_name `WHERE` column_name `LIKE` pattern;
47 | * `LIKE` ‘a%’ (查找任何以“a”开头的值)
48 | * `LIKE` ‘%a’ (查找任何以“a”结尾的值)
49 | * `LIKE` ‘%or%’ (查找任何包含“or”的值)
50 | * `LIKE` ‘_r%’ (查找任何第二位是“r”的值)
51 | * `LIKE` ‘a_%_%’ (查找任何以“a”开头且长度至少为3的值)
52 | * `LIKE` ‘[a-c]%’(查找任何以“a”或“b”或“c”开头的值)
53 |
54 | ### **IN**: 用于在 WHERE 子句中指定多个值的运算符
55 | * 本质上,IN运算符是多个OR条件的简写
56 | * `SELECT` column_names `FROM` table_name `WHERE` column_name `IN` (value1, value2, …);
57 | * `SELECT` column_names `FROM` table_name `WHERE` column_name `IN` (`SELECT STATEMENT`);
58 |
59 | ### **BETWEEN**: 用于过滤给定范围的值的运算符
60 | * `SELECT` column_names `FROM` table_name `WHERE` column_name `BETWEEN` value1 `AND` value2;
61 | * `SELECT` * `FROM` Products `WHERE` (column_name `BETWEEN` value1 `AND` value2) `AND NOT` column_name2 `IN` (value3, value4);
62 | * `SELECT` * `FROM` Products `WHERE` column_name `BETWEEN` #01/07/1999# AND #03/12/1999#;
63 |
64 | ### **NULL**: 代表一个字段没有值
65 | * `SELECT` * `FROM` table_name `WHERE` column_name `IS NULL`;
66 | * `SELECT` * `FROM` table_name `WHERE` column_name `IS NOT NULL`;
67 |
68 | ### **AS**: 用于给表或者列分配别名
69 | * `SELECT` column_name `AS` alias_name `FROM` table_name;
70 | * `SELECT` column_name `FROM` table_name `AS` alias_name;
71 | * `SELECT` column_name `AS` alias_name1, column_name2 `AS` alias_name2;
72 | * `SELECT` column_name1, column_name2 + ‘, ‘ + column_name3 `AS` alias_name;
73 |
74 | ### **UNION**: 用于组合两个或者多个 SELECT 语句的结果集的运算符
75 | * 每个 SELECT 语句必须拥有相同的列数
76 | * 列必须拥有相似的数据类型
77 | * 每个 SELECT 语句中的列也必须具有相同的顺序
78 | * `SELECT` columns_names `FROM` table1 `UNION SELECT` column_name `FROM` table2;
79 | * `UNION` 仅允许选择不同的值, `UNION ALL` 允许重复
80 |
81 | ### **ANY|ALL**: 用于检查 WHERE 或 HAVING 子句中使用的子查询条件的运算符
82 | * `ANY` 如果任何子查询值满足条件,则返回 true。
83 | * `ALL` 如果所有子查询值都满足条件,则返回 true。
84 | * `SELECT` columns_names `FROM` table1 `WHERE` column_name operator (`ANY`|`ALL`) (`SELECT` column_name `FROM` table_name `WHERE` condition);
85 |
86 | ### **GROUP BY**: 通常与聚合函数(COUNT,MAX,MIN,SUM,AVG)一起使用,用于将结果集分组为一列或多列
87 | * `SELECT` column_name1, COUNT(column_name2) `FROM` table_name `WHERE` condition `GROUP BY` column_name1 `ORDER BY` COUNT(column_name2) DESC;
88 |
89 | ### **HAVING**: HAVING 子句指定 SELECT 语句应仅返回聚合值满足指定条件的行。它被添加到 SQL 语言中,因为WHERE关键字不能与聚合函数一起使用。
90 | * `SELECT` `COUNT`(column_name1), column_name2 `FROM` table `GROUP BY` column_name2 `HAVING` `COUNT(`column_name1`)` > 5;
91 |
92 |
93 |
94 | # 2. 修改数据的查询
95 |
96 | ### **INSERT INTO**: 用于在表中插入新记录/行
97 | * `INSERT INTO` table_name (column1, column2) `VALUES` (value1, value2);
98 | * `INSERT INTO` table_name `VALUES` (value1, value2 …);
99 |
100 | ### **UPDATE**: 用于修改表中的现有记录/行
101 | * `UPDATE` table_name `SET` column1 = value1, column2 = value2 `WHERE` condition;
102 | * `UPDATE` table_name `SET` column_name = value;
103 |
104 | ### **DELETE**: 用于删除表中的现有记录/行
105 | * `DELETE FROM` table_name `WHERE` condition;
106 | * `DELETE` * `FROM` table_name;
107 |
108 |
109 | # 3. 聚合查询
110 |
111 | ### **COUNT**: 返回出现次数
112 | * `SELECT COUNT (DISTINCT` column_name`)`;
113 |
114 | ### **MIN() and MAX()**: 返回所选列的最小/最大值
115 | * `SELECT MIN (`column_names`) FROM` table_name `WHERE` condition;
116 | * `SELECT MAX (`column_names`) FROM` table_name `WHERE` condition;
117 |
118 | ### **AVG()**: 返回数字列的平均值
119 | * `SELECT AVG (`column_name`) FROM` table_name `WHERE` condition;
120 |
121 | ### **SUM()**: 返回数值列的总和
122 | * `SELECT SUM (`column_name`) FROM` table_name `WHERE` condition;
123 |
124 |
125 | # 4. 连接查询
126 |
127 | ### **INNER JOIN**: 内连接,返回在两张表中具有匹配值的记录
128 | * `SELECT` column_names `FROM` table1 `INNER JOIN` table2 `ON` table1.column_name=table2.column_name;
129 | * `SELECT` table1.column_name1, table2.column_name2, table3.column_name3 `FROM` ((table1 `INNER JOIN` table2 `ON` relationship) `INNER JOIN` table3 `ON` relationship);
130 |
131 | ### **LEFT (OUTER) JOIN**: 左外连接,返回左表(table1)中的所有记录,以及右表中的匹配记录(table2)
132 | * `SELECT` column_names `FROM` table1 `LEFT JOIN` table2 `ON` table1.column_name=table2.column_name;
133 |
134 | ### **RIGHT (OUTER) JOIN**: 右外连接,返回右表(table2)中的所有记录,以及左表(table1)中匹配的记录
135 | * `SELECT` column_names `FROM` table1 `RIGHT JOIN` table2 `ON` table1.column_name=table2.column_name;
136 |
137 | ### **FULL (OUTER) JOIN**: 全外连接,全连接是左右外连接的并集. 连接表包含被连接的表的所有记录, 如果缺少匹配的记录, 以 NULL 填充。
138 | * `SELECT` column_names `FROM` table1 ``FULL OUTER JOIN`` table2 `ON` table1.column_name=table2.column_name;
139 |
140 | ### **Self JOIN**: 自连接,表自身连接
141 | * `SELECT` column_names `FROM` table1 T1, table1 T2 `WHERE` condition;
142 |
143 |
144 | # 5. 视图查询
145 |
146 | ### **CREATE**: 创建视图
147 | * `CREATE VIEW` view_name `AS SELECT` column1, column2 `FROM` table_name `WHERE` condition;
148 |
149 | ### **SELECT**: 检索视图
150 | * `SELECT` * `FROM` view_name;
151 |
152 | ### **DROP**: 删除视图
153 | * `DROP VIEW` view_name;
154 |
155 |
156 | # 6. 修改表的查询
157 |
158 | ### **ADD**: 添加字段
159 | * `ALTER TABLE` table_name `ADD` column_name column_definition;
160 |
161 | ### **MODIFY**: 修改字段数据类型
162 | * `ALTER TABLE` table_name `MODIFY` column_name column_type;
163 |
164 | ### **DROP**: 删除字段
165 | * `ALTER TABLE` table_name `DROP COLUMN` column_name;
166 |
167 |
168 |
169 |
170 |
171 |
172 |
--------------------------------------------------------------------------------