SQL Cheatsheet
Quick SQL Cheatsheet
A quick reminder of all relevant SQL queries and examples on how to use them.
This repository is constantly being updated and added to by the community. Pull requests are welcome. Enjoy!
Table of Contents
- Finding Data Queries.
- Data Modification Queries.
- Reporting Queries.
- Join Queries.
- View Queries.
- Altering Table Queries.
- Creating Table Query.
1. Finding Data Queries
SELECT: used to select data from a database
SELECT*FROMtable_name;
DISTINCT: filters away duplicate values and returns rows of specified column
SELECT DISTINCTcolumn_name;
WHERE: used to filter records/rows
SELECTcolumn1, column2FROMtable_nameWHEREcondition;SELECT*FROMtable_nameWHEREcondition1ANDcondition2;SELECT*FROMtable_nameWHEREcondition1ORcondition2;SELECT*FROMtable_nameWHERE NOTcondition;SELECT*FROMtable_nameWHEREcondition1AND(condition2ORcondition3);SELECT*FROMtable_nameWHERE EXISTS(SELECTcolumn_nameFROMtable_nameWHEREcondition);
ORDER BY: used to sort the result-set in ascending or descending order
SELECT*FROMtable_nameORDER BYcolumn;SELECT*FROMtable_nameORDER BYcolumnDESC;SELECT*FROMtable_nameORDER BYcolumn1ASC, column2DESC;
SELECT TOP: used to specify the number of records to return from top of table
SELECT TOPnumber columns_namesFROMtable_nameWHEREcondition;SELECT TOPpercent columns_namesFROMtable_nameWHEREcondition;- Not all database systems support
SELECT TOP. The MySQL equivalent is theLIMITclause SELECTcolumn_namesFROMtable_nameLIMIToffset, count;
LIKE: operator used in a WHERE clause to search for a specific pattern in a column
- % (percent sign) is a wildcard character that represents zero, one, or multiple characters
- _ (underscore) is a wildcard character that represents a single character
SELECTcolumn_namesFROMtable_nameWHEREcolumn_nameLIKEpattern;LIKE‘a%’ (find any values that start with “a”)LIKE‘%a’ (find any values that end with “a”)LIKE‘%or%’ (find any values that have “or” in any position)LIKE‘_r%’ (find any values that have “r” in the second position)LIKE‘a_%_%’ (find any values that start with “a” and are at least 3 characters in length)LIKE‘[a-c]%’ (find any values starting with “a”, “b”, or “c”
IN: operator that allows you to specify multiple values in a WHERE clause
- essentially the IN operator is shorthand for multiple OR conditions
SELECTcolumn_namesFROMtable_nameWHEREcolumn_nameIN(value1, value2, …);SELECTcolumn_namesFROMtable_nameWHEREcolumn_nameIN(SELECT STATEMENT);
BETWEEN: operator selects values within a given range inclusive
SELECTcolumn_namesFROMtable_nameWHEREcolumn_nameBETWEENvalue1ANDvalue2;SELECT*FROMProductsWHERE(column_nameBETWEENvalue1ANDvalue2)AND NOTcolumn_name2IN(value3, value4);SELECT*FROMProductsWHEREcolumn_nameBETWEEN#01/07/1999# AND #03/12/1999#;
NULL: values in a field with no value
SELECT*FROMtable_nameWHEREcolumn_nameIS NULL;SELECT*FROMtable_nameWHEREcolumn_nameIS NOT NULL;
AS: aliases are used to assign a temporary name to a table or column
SELECTcolumn_nameASalias_nameFROMtable_name;SELECTcolumn_nameFROMtable_nameASalias_name;SELECTcolumn_nameASalias_name1, column_name2ASalias_name2;SELECTcolumn_name1, column_name2 + ‘, ‘ + column_name3ASalias_name;
UNION: set operator used to combine the result-set of two or more SELECT statements
- Each SELECT statement within UNION must have the same number of columns
- The columns must have similar data types
- The columns in each SELECT statement must also be in the same order
SELECTcolumns_namesFROMtable1UNION SELECTcolumn_nameFROMtable2;UNIONoperator only selects distinct values,UNION ALLwill allow duplicates
INTERSECT: set operator which is used to return the records that two SELECT statements have in common
- Generally used the same way as UNION above
SELECTcolumns_namesFROMtable1INTERSECT SELECTcolumn_nameFROMtable2;
EXCEPT: set operator used to return all the records in the first SELECT statement that are not found in the second SELECT statement
- Generally used the same way as UNION above
SELECTcolumns_namesFROMtable1EXCEPT SELECTcolumn_nameFROMtable2;
ANY|ALL: operator used to check subquery conditions used within a WHERE or HAVING clauses
- The
ANYoperator returns true if any subquery values meet the condition - The
ALLoperator returns true if all subquery values meet the condition SELECTcolumns_namesFROMtable1WHEREcolumn_name operator (ANY|ALL) (SELECTcolumn_nameFROMtable_nameWHEREcondition);
GROUP BY: statement often used with aggregate functions (COUNT, MAX, MIN, SUM, AVG) to group the result-set by one or more columns
SELECTcolumn_name1, COUNT(column_name2)FROMtable_nameWHEREconditionGROUP BYcolumn_name1ORDER BYCOUNT(column_name2) DESC;
HAVING: this clause was added to SQL because the WHERE keyword could not be used with aggregate functions
SELECTCOUNT(column_name1), column_name2FROMtableGROUP BYcolumn_name2HAVINGCOUNT(column_name1)> 5;
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"
WITH RECURSIVEcteAS(
SELECTc0.*FROMcategoriesASc0WHEREid = 1# Starting point
UNION ALL
SELECTc1.*FROMcategoriesASc1JOINcteONc1.parent_category_id = cte.id
)
SELECT*
FROMcte
2. Data Modification Queries
INSERT INTO: used to insert new records/rows in a table
INSERT INTOtable_name (column1, column2)VALUES(value1, value2);INSERT INTOtable_nameVALUES(value1, value2 …);
UPDATE: used to modify the existing records in a table
UPDATEtable_nameSETcolumn1 = value1, column2 = value2WHEREcondition;UPDATEtable_nameSETcolumn_name = value;
DELETE: used to delete existing records/rows in a table
DELETE FROMtable_nameWHEREcondition;DELETE*FROMtable_name;
3. Reporting Queries
COUNT: returns the # of occurrences
SELECT COUNT (DISTINCTcolumn_name);
MIN() and MAX(): returns the smallest/largest value of the selected column
SELECT MIN (column_names) FROMtable_nameWHEREcondition;SELECT MAX (column_names) FROMtable_nameWHEREcondition;
AVG(): returns the average value of a numeric column
SELECT AVG (column_name) FROMtable_nameWHEREcondition;
SUM(): returns the total sum of a numeric column
SELECT SUM (column_name) FROMtable_nameWHEREcondition;
4. Join Queries
INNER JOIN: returns records that have matching value in both tables
SELECTcolumn_namesFROMtable1INNER JOINtable2ONtable1.column_name=table2.column_name;SELECTtable1.column_name1, table2.column_name2, table3.column_name3FROM((table1INNER JOINtable2ONrelationship)INNER JOINtable3ONrelationship);
LEFT (OUTER) JOIN: returns all records from the left table (table1), and the matched records from the right table (table2)
SELECTcolumn_namesFROMtable1LEFT JOINtable2ONtable1.column_name=table2.column_name;
RIGHT (OUTER) JOIN: returns all records from the right table (table2), and the matched records from the left table (table1)
SELECTcolumn_namesFROMtable1RIGHT JOINtable2ONtable1.column_name=table2.column_name;
FULL (OUTER) JOIN: returns all records when there is a match in either left or right table
SELECTcolumn_namesFROMtable1FULL OUTER JOINtable2ONtable1.column_name=table2.column_name;
Self JOIN: a regular join, but the table is joined with itself
SELECTcolumn_namesFROMtable1 T1, table1 T2WHEREcondition;
5. View Queries
CREATE: create a view
CREATE VIEWview_nameAS SELECTcolumn1, column2FROMtable_nameWHEREcondition;
SELECT: retrieve a view
SELECT*FROMview_name;
DROP: drop a view
DROP VIEWview_name;
6. Altering Table Queries
ADD: add a column
ALTER TABLEtable_nameADDcolumn_name column_definition;
MODIFY: change data type of column
ALTER TABLEtable_nameMODIFYcolumn_name column_type;
DROP: delete a column
ALTER TABLEtable_nameDROP COLUMNcolumn_name;
7. Creating Table Query
CREATE: create a table
CREATE TABLEtable_name(
column1datatype,
column2datatype,
column3datatype,
column4datatype,
);:q :q