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!
- Finding Data Queries.
- Data Modification Queries.
- Reporting Queries.
- Join Queries.
- View Queries.
- Altering Table Queries.
- Creating Table Query.
SELECT*FROMtable_name;
SELECT DISTINCTcolumn_name;
SELECTcolumn1, column2FROMtable_nameWHEREcondition;SELECT*FROMtable_nameWHEREcondition1ANDcondition2;SELECT*FROMtable_nameWHEREcondition1ORcondition2;SELECT*FROMtable_nameWHERE NOTcondition;SELECT*FROMtable_nameWHEREcondition1AND(condition2ORcondition3);SELECT*FROMtable_nameWHERE EXISTS(SELECTcolumn_nameFROMtable_nameWHEREcondition);
SELECT*FROMtable_nameORDER BYcolumn;SELECT*FROMtable_nameORDER BYcolumnDESC;SELECT*FROMtable_nameORDER BYcolumn1ASC, column2DESC;
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;
- % (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”
- essentially the IN operator is shorthand for multiple OR conditions
SELECTcolumn_namesFROMtable_nameWHEREcolumn_nameIN(value1, value2, …);SELECTcolumn_namesFROMtable_nameWHEREcolumn_nameIN(SELECT STATEMENT);
SELECTcolumn_namesFROMtable_nameWHEREcolumn_nameBETWEENvalue1ANDvalue2;SELECT*FROMProductsWHERE(column_nameBETWEENvalue1ANDvalue2)AND NOTcolumn_name2IN(value3, value4);SELECT*FROMProductsWHEREcolumn_nameBETWEEN#01/07/1999# AND #03/12/1999#;
SELECT*FROMtable_nameWHEREcolumn_nameIS NULL;SELECT*FROMtable_nameWHEREcolumn_nameIS NOT NULL;
SELECTcolumn_nameASalias_nameFROMtable_name;SELECTcolumn_nameFROMtable_nameASalias_name;SELECTcolumn_nameASalias_name1, column_name2ASalias_name2;SELECTcolumn_name1, column_name2 + ‘, ‘ + column_name3ASalias_name;
- 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;
- 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
INSERT INTOtable_name (column1, column2)VALUES(value1, value2);INSERT INTOtable_nameVALUES(value1, value2 …);
UPDATEtable_nameSETcolumn1 = value1, column2 = value2WHEREcondition;UPDATEtable_nameSETcolumn_name = value;
DELETE FROMtable_nameWHEREcondition;DELETE*FROMtable_name;
SELECT COUNT (DISTINCTcolumn_name);
SELECT MIN (column_names) FROMtable_nameWHEREcondition;SELECT MAX (column_names) FROMtable_nameWHEREcondition;
SELECT AVG (column_name) FROMtable_nameWHEREcondition;
SELECT SUM (column_name) FROMtable_nameWHEREcondition;
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;
SELECTcolumn_namesFROMtable1FULL OUTER JOINtable2ONtable1.column_name=table2.column_name;
SELECTcolumn_namesFROMtable1 T1, table1 T2WHEREcondition;
CREATE VIEWview_nameAS SELECTcolumn1, column2FROMtable_nameWHEREcondition;
SELECT*FROMview_name;
DROP VIEWview_name;
ALTER TABLEtable_nameADDcolumn_name column_definition;
ALTER TABLEtable_nameMODIFYcolumn_name column_type;
ALTER TABLEtable_nameDROP COLUMNcolumn_name;
CREATE TABLEtable_name(
column1datatype,
column2datatype,
column3datatype,
column4datatype,
);