me@helium 8 tahun lalu
induk
melakukan
c8896666f8
1 mengubah file dengan 45 tambahan dan 4 penghapusan
  1. 45 4
      SQL.md

+ 45 - 4
SQL.md

@@ -291,7 +291,9 @@ SELECT count(*) FROM person;
 ```mysql
 SELECT * FROM person ORDER by id;
 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()` для случайной выборки.
 
@@ -317,12 +319,51 @@ SELECT * FROM person LIMIT 1,2
 ```
 выдает две записи начиная со второй записи (пропуская 1 запись от начала) выборки согласно сортировке. Таким образом, `LIMIT N` аналогичен `LIMIT 0,N`
 
-### `GROUP BY` и агрегация
-
 ### `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` можно сделать более осмысленный запрос. Например найти все телефоны пользователя с 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`)
+
+### `GROUP BY` и агрегация
+
+### `AS` и древовидные структуры данных в реляционных СУБД.