SQL Select

Ключевое слово **SELECT** используется для получения информации из таблиц.

Для примера возьмём следующие базы:

name (VARCHAR) - Имя
phone (VARCHAR) - Телефон
address (VARCHAR) - Адрес
 Products (Товары)
description (VARCHAR)
detail (TEXT)
 Orders (Заказы)
date (DATE) - Дата
product\_id (BIGINT) - Товар
qty(INT) - Количество
amount (DECIMAL (8,2)) - Сумма
customer\_id (BIGINT) - Клиент

# Выгрузка данных из одной таблицы

Выгрузка всех записей таблицы:

```
SELECT \* FROM Customers

```

Выгрузка определённых полей таблицы:

```
SELECT name,raiting FROM Customers

```

Также можно производить арифметические действия.

Данный код выведет все записи полей name и raiting таблицы Customers, причём все значения поля raiting будут разделены на 1000:

```
SELECT name,raiting/1000 FROM Customers

```

## Выгрузка уникальных значений

Для выгрузки уникальных значений используется ключевое слово **DISTINCT**.

Пример использования:

```
SELECT DISTINCT(name) FROM Customers

```

## Упорядочивание строк

Для сортировки таблицы используются ключевые слова **ORDER BY**.

Для определения направления сортировки указываются следующие значения:

* **ASC** - по возрастанию (от меньшего к большему);
* **DESC** - по убыванию (от большего к меньшему);
* параметр не указан - по возрастанию. (ASC можно опустить).

Пример: данный код говорит о том, что полученные данные будут отсортированы по полю raiting по убыванию, а при одинаковых значениях поля raiting дополнительно по полю name по возрастанию:

```
SELECT name,raiting FROM Customers
ORDER BY raiting DESC, name ASC

```

Также в операторе ORDER BY вместо имён полей можно указывать их номера.

Этот код аналогичен предыдущему

```
SELECT name,raiting FROM Customers
ORDER BY 2 DESC, 1

```

## Условия отбора

Для указания условий отбора используется зарезервированное слово **WHERE**, после которого указываются условия отбора.

Например:

```
SELECT \* FROM Customers WHERE name LIKE 'Текст%'
 или
SELECT \* FROM Customers WHERE raiting=10

```

Для задания условия по текстовому полю используется слово **LIKE**.
Знак **%** заменяет привычную **\***, что означает неопределённое количество знаков.
В нашем примере мы выбираем только те строки, в поле name которых содержимое начинается со слова 'Текст'. Если нужно искать фразу в любом месте, то писать нужно **%Текст%**.

Также в запросе можно применять логические операторы, например:

```
SELECT \* FROM Customers
WHERE name LIKE 'Текст%' AND raiting=10

```

# Выгрузка данных из нескольких таблиц

## Простое объединение

Объединение данных из нескольких таблиц выполняется запросом:

```
SELECT <Список столбцов>
FROM <Список таблиц>
WHERE <Условия отбора>

```

Например для вывода информации о всех заказанных товарах за определённую дату с указанием имён и адресов заказчиков:

```
SELECT name, address, product\_id, qty
FROM Customers, Orders
WHERE Customers.id = Customer\_id AND date='2017-12-12'

```

условие `Customers.id = Customer_id` говорит о том, что должны выводиться сведения только о заказах этого клиента. Иначе мы бы получили набор всевозможных комбинаций этих двух таблиц.

Также можно объединять данные таблиц с самой собой, например для выгрузки клиентов с одинаковым рейтингом используется следующий запрос:

```
SELECT L.name, R.name
FROM Customers L, Customers R
WHERE L.raiting = R.raiting

```

В данном запросе мы присвоили псевдонимы L и R таблице Customers и работали с ними как с разными таблицами.