├── 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 | --------------------------------------------------------------------------------