SQL
Select
SELECT [DISTINCT]
column_names
salary * 1.05 AS new_salary -- gives this column the name new_salary
FROM
table
ORDER BY
colum [ASC|DESC] -- defaults to ASC
LIMIT 1 OFFSET 1 -- can be written as LIMIT 1,1
WHERE
salary BETWEEN 9000 AND 12000 AND
department_id IN (8, 9) AND
first_name LIKE 'jo%' AND -- % matches anything, _ matches one character
salary > ALL (SELECT salary FROM employees WHERE department_id = 8) AND
salary < ANY (subquery) -- equivalent to SOME
EXISTS(subquery) AND
year(date) BETWEEN 1999 AND 2005Condition Syntax
= for equality
column_name IS NULLFunctions
YEAR(date)CHAR_LENGTH(varchar)- number of characters
Table Management
Constraints
PRIMARY_KEY- only one exists, non nullUNIQUE,NOT NULLCHECK(boolean_expression)
Create
CREATE TABLE table_name (
column1 [CHAR,VARCHAR(max_length),INT,DATE] [constraints]
)Alter
ALTER TABLE table_name
ADD new_column data_type constraints [AFTER existing_column]
[DROP column_name]
[MODIFY column_name new_constraints]
ADD CONSTRAINT constraint_name constraint (column_name)Delete Table
DROP TABLE [IF EXISTS] table_nameDelete all Data
TRUNCATE TABLE tabl_nameForeign Key
- A linked key between two tables
CREATE TABLE project_milestones (
columns
FOREIGN KEY (key_name)
REFERENCES other_table (key_name)
);Case
SELECT
first_name,
last_name,
hire_date,
CASE (2000 - YEAR(hire_date))
WHEN 1 THEN '1 year'
WHEN 3 THEN '3 years'
WHEN 5 THEN '5 years'
WHEN 10 THEN '10 years'
WHEN 15 THEN '15 years'
WHEN 20 THEN '20 years'
WHEN 25 THEN '25 years'
WHEN 30 THEN '30 years'
END aniversary
FROM
employees
ORDER BY first_name;Joins
- Inner join - select values in both tables
- Left join - values in the first table and both
- Full outer join - all values
Syntax:
SELECT
A.n
FROM A
INNER JOIN B on B.n = A.n;SQL vs. NoSQL
- Aggregation is easier in SQL (ex. COUNT)
- Grouping-by requires application logic in NoSQL