dm 9 ore fa
parent
commit
08df845cfd

+ 47 - 17
.obsidian/workspace.json

@@ -13,12 +13,26 @@
             "state": {
               "type": "markdown",
               "state": {
-                "file": "English/Homework/Homework 5.md",
+                "file": "hardcore web development/11. SQL/JOIN/INNER JOIN.md",
                 "mode": "source",
                 "source": false
               },
               "icon": "lucide-file",
-              "title": "Homework 5"
+              "title": "INNER JOIN"
+            }
+          },
+          {
+            "id": "8431bd2ebe2a22be",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "hardcore web development/11. SQL/JOIN/LEFT и RIGHT OUTER JOIN.md",
+                "mode": "source",
+                "source": false
+              },
+              "icon": "lucide-file",
+              "title": "LEFT и RIGHT OUTER JOIN"
             }
           },
           {
@@ -27,15 +41,30 @@
             "state": {
               "type": "markdown",
               "state": {
-                "file": "ROTEK/allwinner 069 070.md",
+                "file": "hardcore web development/11. SQL/Дата и время.md",
+                "mode": "source",
+                "source": false
+              },
+              "icon": "lucide-file",
+              "title": "Дата и время"
+            }
+          },
+          {
+            "id": "6ffa63e5d29e1292",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "hardcore web development/11. SQL/Создание таблиц.md",
                 "mode": "source",
                 "source": false
               },
               "icon": "lucide-file",
-              "title": "allwinner 069 070"
+              "title": "Создание таблиц"
             }
           }
-        ]
+        ],
+        "currentTab": 1
       }
     ],
     "direction": "vertical"
@@ -58,7 +87,7 @@
                 "autoReveal": false
               },
               "icon": "lucide-folder-closed",
-              "title": "Файловый менеджер"
+              "title": "Files"
             }
           },
           {
@@ -106,7 +135,7 @@
       }
     ],
     "direction": "horizontal",
-    "width": 200
+    "width": 279.5
   },
   "right": {
     "id": "cf92ccf43e96a53d",
@@ -158,15 +187,20 @@
   },
   "left-ribbon": {
     "hiddenItems": {
-      "switcher:Меню быстрого перехода": false,
-      "graph:Граф": false,
-      "canvas:Создать новый холст": false,
-      "command-palette:Открыть палитру команд": false,
-      "markdown-importer:Импорт Markdown-файлов": false
+      "switcher:Open quick switcher": false,
+      "graph:Open graph view": false,
+      "canvas:Create new canvas": false,
+      "command-palette:Open command palette": false,
+      "markdown-importer:Open format converter": false
     }
   },
-  "active": "0f1109505357e2ce",
+  "active": "8431bd2ebe2a22be",
   "lastOpenFiles": [
+    "hardcore web development/11. SQL/JOIN/INNER JOIN.md",
+    "hardcore web development/11. SQL/Создание таблиц.md",
+    "hardcore web development/11. SQL/Дата и время.md",
+    "hardcore web development/11. SQL/Задание.md",
+    "hardcore web development/11. SQL/JOIN/LEFT и RIGHT OUTER JOIN.md",
     "ROTEK/allwinner 069 070.md",
     "English/Homework/Homework 5.md",
     "English/img/24-2.jpg.~tmp",
@@ -180,11 +214,8 @@
     "Комментарии.md",
     "common.md",
     "todo/Тренировки и занятия.md",
-    "hardcore web development/11. SQL/JOIN/INNER JOIN.md",
-    "hardcore web development/11. SQL/JOIN/LEFT и RIGHT OUTER JOIN.md",
     "hardcore web development/11. SQL/Псевдонимы.md",
     "hardcore web development/11. SQL/SQL настройка.md",
-    "hardcore web development/11. SQL/Дата и время.md",
     "hardcore web development/11. SQL/JOIN",
     "linux/server.md",
     "linux/linux common.md",
@@ -198,7 +229,6 @@
     "English/Texts/Text 8.md",
     "English/Homework/Homework 1.md",
     "English/Homework",
-    "English/words.md",
     "English/Texts",
     "configs/gl_wg.conf",
     "configs/Текстовый документ.txt",

+ 110 - 0
hardcore web development/11. SQL/JOIN/LEFT и RIGHT OUTER JOIN.md

@@ -0,0 +1,110 @@
+Итак, `LEFT JOIN` это соединение, при котором возвращаются все строки из левой таблицы и соответствующие им строки из правой таблицы, а если соответствующих строк в правой таблице нет, то данные дополнятся `NULL`.
+
+```sql
+select b.name as book_name, a.name as author_name
+from book b
+left join author a using(author_id)
+order by author_name, book_name;
+
+|book_name                    |author_name     |
+|-----------------------------|----------------|
+|Голова профессора Доуэля     |Александр Беляев|
+|Остров погибших кораблей     |Александр Беляев|
+|Капитанская дочка            |Александр Пушкин|
+|Сказка о рыбаке и рыбке      |Александр Пушкин|
+|Дети капитана Гранта         |Жюль Верн       |
+|Путешествие к центру Земли   |Жюль Верн       |
+|Python. К вершинам мастерства|Лусиану Рамальо |
+|Судьба человека              |Михаил Шолохов  |
+|Тихий Дон                    |Михаил Шолохов  |
+|Тихий Дон. Том 1             |Михаил Шолохов  |
+|Тихий Дон. Том 2             |Михаил Шолохов  |
+|Простой Python               |                |
+```
+
+# FULL OUTER JOIN
+Такой запрос объединяет запросы left и right join.
+
+# CROSS JOIN
+Выполняет декартово произведение двух таблиц, то есть каждая строка из первой таблицы соединяется с каждой строкой из второй таблицы.
+
+# SELF JOIN
+Это объединение таблицы с самой собой.
+
+Давайте предположим, что у нас книги могут ссылаться друг на друга. Например, в книге «Тихий Дон» два тома. Допустим, что мы хотим, чтобы каждый том был представлен в таблице отдельно, со своей обложкой, описанием и так далее. Это можно сделать вот так:
+```sql
+alter table book add column parent_book_id bigint references book(book_id);
+
+insert into book (name, author_id, category_id, parent_book_id)
+select
+    'Тихий Дон. Том 1',
+    author_id,
+    category_id,
+    book_id
+from book where name='Тихий Дон';
+
+insert into book (name, author_id, category_id, parent_book_id)
+select
+    'Тихий Дон. Том 2',
+    author_id,
+    category_id,
+    book_id
+from book where name='Тихий Дон';
+```
+
+Тогда запрос с `SELF JOIN` выглядит так:
+
+```sql
+select b.name as book_name, p.name as parent_book_name
+from book b
+join book p on b.parent_book_id = p.book_id;
+
+|book_name       |parent_book_name|
+|----------------|----------------|
+|Тихий Дон. Том 1|Тихий Дон       |
+|Тихий Дон. Том 2|Тихий Дон       |
+```
+
+Можно использовать и `LEFT JOIN` или `RIGHT JOIN`, зависит от нашей задачи:
+
+```sql
+select b.name as book_name, p.name as parent_book_name
+from book b
+left join book p on b.parent_book_id = p.book_id;
+
+|book_name                    |parent_book_name|
+|-----------------------------|----------------|
+|Тихий Дон                    |                |
+|Python. К вершинам мастерства|                |
+|Судьба человека              |                |
+|Капитанская дочка            |                |
+|Сказка о рыбаке и рыбке      |                |
+|Голова профессора Доуэля     |                |
+|Остров погибших кораблей     |                |
+|Путешествие к центру Земли   |                |
+|Дети капитана Гранта         |                |
+|Простой Python               |                |
+|Тихий Дон. Том 1             |Тихий Дон       |
+|Тихий Дон. Том 2             |Тихий Дон       |
+
+
+select b.name as book_name, p.name as parent_book_name
+from book b
+right join book p on b.parent_book_id = p.book_id;
+
+|book_name       |parent_book_name             |
+|----------------|-----------------------------|
+|Тихий Дон. Том 1|Тихий Дон                    |
+|Тихий Дон. Том 2|Тихий Дон                    |
+|                |Тихий Дон. Том 1             |
+|                |Тихий Дон. Том 2             |
+|                |Простой Python               |
+|                |Python. К вершинам мастерства|
+|                |Сказка о рыбаке и рыбке      |
+|                |Путешествие к центру Земли   |
+|                |Голова профессора Доуэля     |
+|                |Капитанская дочка            |
+|                |Судьба человека              |
+|                |Дети капитана Гранта         |
+|                |Остров погибших кораблей     |
+```