Mysql Notes

RDMS Goals

  • Reduce redundancy
  • Efficient data retrieval
  • Intuitive data modification

Relations

  • Primary Key

    • Unique identifier of row
    • One per table
    • Does not allow NULL
    • Single or multiple columns (composite columns)
  • Unique Key

    • Ensures data is not duplicate
    • More than one per table
    • Allows one NULL
  • Foreign Key

    • Columns in a table that refer to a Primary Key of another table
    • Enforces referential integrity
    • One-to-one
    • One-to-many
    • Many-to-many

Data Retrieval

  • Selecting using mathematical functions
  • Distinct
  • DATE_FORMAT
  • AND, OR, NOT
  • LIMIT 15, 10; syntax
  • Update multiple

Joins

A SQL JOIN combines columns from two or more tables in a single result set.

You can use any operators for a JOIN.

CARTESIAN joins by default: http://www.databasejournal.com/features/mysql/article.php/3901221/Identifying-and-Eliminating-the-Dreaded-Cartesian-Product.htm

SELECT statements which contain a WHERE clause can easily hide a Cartesian Product because not all rows will appear in duplicate.


Don't use implicit inner join syntax

SELECT t1.*, t2.*
FROM Table1 t1, Table2 t2
WHERE t1.ID = t2.id

Use explicit syntax (SQL-92)

SELECT t1.*, t2.*
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.ID = t2.ID

Outer Join

  • Left Outer Join
  • Right Outer Join
  • Full Outer Join (MySql doesn't support this syntax)
  • Outer keyword is optional

Cross Join or Cartesian Join

The rows are multiplied. No join condition


Equi Join & Non-equi join

JOIN t2 ON t1.id = t2.t1_id

Natural Join & USING keyword

Don't use


Unions

  • Unions combine two or more SELECT statements into a single result set.

  • Each select must have the same number of columns

  • UNION removes duplicate rows. UNION ALL does not

  • can only use one order by


Subqueries

  • Nested query where the results of one query can be used in another query via a relational operator or aggregation function.

  • A subquery can have only one column in the SELECT clause if used in WHERE clause

  • ORDER BY not allowed

  • Subqueries can be used in WHERE, HAVING, FROM, and SELECT clauses.

Joins vs subqueries

  • Joins

    • can include columns from joining tables in the SELECT clause
    • easy to read and more intuitive
  • Subqueries

    • Can pass the aggregate values to the main query
    • can simplify long and complex queries

Correlated Subquery

  • Executed once per each row
  • Returns results based on the column of the main query