SQL

Проработать

  1. Внешний ключ и виды связей
  2. Реляционная база данных и ее особенности.
  3. Топ-65 вопросов по SQL
  4. Объяснение SQL объединений JOIN: LEFT/RIGHT/INNER/OUTER
  5. SQL HowTo: наперегонки со временем

Основные разделы

Общее

Базы данных

Ограничения в SQL

Планирование схемы таблицы

  1. Имя таблицы - lowercase единичном или множественно числе: user_admin, users.
  2. Необходимые колонки данных
  3. Типы данных
  4. Ограничения на колонки - UNIQUE, NOT NULL, MAX, MIN
  5. PRIMARY KEY - может быть только один. Нельзя null. По умолчанию имеет кластерный индекс.
  6. FOREIGN KEYS - можно применять как к PK, так и к обычным полям.
  7. UNIQUE поле/поля/связки полей - можно несколько, можно null. Также можно указать при создании NOT NULL.
  8. INDEXES

Основные понятия

Дамп

Дамп(Dump) - файл, включающий в себя содержимое памяти базы данных.

Используется для

  1. Перенос данных на другой хостинг.
  2. Резервное копирование.

DDL(Data Definition Language)

DQL(Data Query Language)

SELECT

SELECT * FROM table1;
        

DML(Data Manipulation Language)

DCL(Data Control Language)

TCL(Transaction Control Language)

Команды

  1. WHERE - ограничивающее команда для SELECT, UPDATE, DELETE. Оно выполняется до того, как будет получен результат операции.
  2. GROUP BY - используется для группировки данных.
  3. SELECT country, COUNT(*) AS n_companies
    FROM companies
    GROUP BY country
                
  4. HAVING - фильтрующее выражение. Работает с командой GROUP BY(для результатов агрегированных функций).
  5. SELECT
        product_line,
        AVG(unit_price) AS avg_price,
        SUM(quantity) AS tot_pieces,
        SUM(total) AS total_gain
    FROM sales
    WHERE SUM(total) > 40000
    GROUP BY product_line
    ORDER BY total_gain DESC
                
  6. Виды Joins:
    • INNER JOIN - общее
    • LEFT JOIN - левое и общее. Если не будет совпадения, правая часть будет null.
    • RIGHT JOIN - правое и общее. Если не будет совпадения, левая часть будет null.
    • OUTER - не общее
    • CROSS(декартова произведения) - не общее
  7. UNION - объединяет таблицы с одинаковыми полями и значением.
  8. UNION ALL - как UNION, но включает дубликаты.

Оптимизация запросов

  1. Проверить план запроса
  2. Можно отключить планировщик запросов
  3. Использовать индексы
  4. Скрипт должен идти по мере увеличения размера таблиц.
  5. Select *
    From A a --100 записей
    INNER JOIN B b ON a.c = b.c --1000 записей
    INNER JOIN C c ON b.d = c.d --10000 записей
                
  6. Фильтровать как можно раньше для уменьшения размеров обрабатываемых данных.

Советы

Создание таблицы:

Если есть хоть одно unique поле - оно будет гарантировать что вся запись уникальна.

SQL-инъекции

SQL-инъекция — это попытка изменить запрос к базе данных. Ввести ее можно через форму или ссылку, которая передает параметры методом GET.

Как защититься

В JAVA EE нужно использовать "PreparedStatement".

Вопросы на собеседование

DELETE vs TRUNCATE:

Рекомендуемые типы данных

CHAR()

CHAR() - символьная переменная ТОЛЬКО(не больше, не меньше) заданного размера.

VARCHAR()

VARCHAR() - символьная переменная до(можно меньше) заданного размера.

Рекомендуемые типы данных

Email

VARCHAR(256)

Phone number

VARCHAR(15)

Bcrypt hashed

VARCHAR(60)