|
@@ -291,7 +291,9 @@ SELECT count(*) FROM person;
|
|
```mysql
|
|
```mysql
|
|
SELECT * FROM person ORDER by id;
|
|
SELECT * FROM person ORDER by id;
|
|
SELECT * FROM person ORDER by date_of_birth;
|
|
SELECT * FROM person ORDER by date_of_birth;
|
|
-SELECT * FROM person ORDER by father_name desc;
|
|
|
|
|
|
+SELECT * FROM person ORDER by father_name DESC;
|
|
|
|
+SELECT id,name,surname,date_of_birth FROM person ORDER BY name;
|
|
|
|
+SELECT id,name,surname,date_of_birth FROM person ORDER BY name, id DESC;
|
|
```
|
|
```
|
|
**Не обязательно** использовать имена полей в `ORDER BY`; можно использовать разные конструкции и функции Mysql, например `RAND()` для случайной выборки.
|
|
**Не обязательно** использовать имена полей в `ORDER BY`; можно использовать разные конструкции и функции Mysql, например `RAND()` для случайной выборки.
|
|
|
|
|
|
@@ -317,12 +319,51 @@ SELECT * FROM person LIMIT 1,2
|
|
```
|
|
```
|
|
выдает две записи начиная со второй записи (пропуская 1 запись от начала) выборки согласно сортировке. Таким образом, `LIMIT N` аналогичен `LIMIT 0,N`
|
|
выдает две записи начиная со второй записи (пропуская 1 запись от начала) выборки согласно сортировке. Таким образом, `LIMIT N` аналогичен `LIMIT 0,N`
|
|
|
|
|
|
-### `GROUP BY` и агрегация
|
|
|
|
-
|
|
|
|
### `DISTINCT`
|
|
### `DISTINCT`
|
|
|
|
+Это слово применяется для удаления повторов в результирующем наборе:
|
|
|
|
+
|
|
|
|
+```mysql
|
|
|
|
+SELECT DISTINCT name FROM person;
|
|
|
|
+SELECT DISTINCT name, surname FROM person;
|
|
|
|
+```
|
|
|
|
+Под повтором понимается полное совпадение всех полей набора. Обычно используется для устранения повторов в выборке из нескольких таблиц.
|
|
|
|
|
|
-### Несколько таблиц и (`CROSS JOIN`)
|
|
|
|
|
|
+### Несколько таблиц (`CROSS JOIN`)
|
|
|
|
+
|
|
|
|
+Можно сделать выборку сразу из нескольких таблиц и получить *декартово произведение*
|
|
|
|
+```mysql
|
|
|
|
+SELECT * FROM person, phone;
|
|
|
|
+SELECT * FROM person CROSS JOIN phone
|
|
|
|
+```
|
|
|
|
+На каждую запись первой таблицы приходятся все записи второй таблицы. Если одна из таблиц пустая, то результирующий набор пуст. Количество записей
|
|
|
|
+в результате равно произведению количеств записей в каждой из таблиц.
|
|
|
|
|
|
### Несколько таблиц и `WHERE` (`INNER JOIN`)
|
|
### Несколько таблиц и `WHERE` (`INNER JOIN`)
|
|
|
|
+С помощью условия в `WHERE` можно сделать более осмысленный запрос. Например найти все телефоны пользователя с id = 1 через смежную таблицу связи
|
|
|
|
+**многие-ко-многим**:
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+```mysql
|
|
|
|
+SELECT *
|
|
|
|
+ FROM
|
|
|
|
+ person_to_phone,
|
|
|
|
+ phone
|
|
|
|
+ WHERE
|
|
|
|
+ person_id = 1 AND
|
|
|
|
+ person_to_phone.phone_id = phone.id;
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+Тоже самое через `INNER JOIN`:
|
|
|
|
+```mysql
|
|
|
|
+SELECT *
|
|
|
|
+ FROM
|
|
|
|
+ person_to_phone INNER JOIN phone ON (person_to_phone.phone_id = phone.id)
|
|
|
|
+ WHERE
|
|
|
|
+ person_id = 1;
|
|
|
|
+```
|
|
|
|
|
|
### Несколько таблиц, `RIGHT` и `LEFT` `JOIN` (`OUTER JOIN`)
|
|
### Несколько таблиц, `RIGHT` и `LEFT` `JOIN` (`OUTER JOIN`)
|
|
|
|
+
|
|
|
|
+### `GROUP BY` и агрегация
|
|
|
|
+
|
|
|
|
+### `AS` и древовидные структуры данных в реляционных СУБД.
|