dm пре 1 месец
родитељ
комит
0b1d26e3d0

+ 46 - 17
.obsidian/workspace.json

@@ -13,15 +13,44 @@
             "state": {
               "type": "markdown",
               "state": {
-                "file": "English/Homework.md",
+                "file": "hardcore web development/11. SQL/Создание таблиц.md",
                 "mode": "source",
                 "source": false
               },
               "icon": "lucide-file",
-              "title": "Homework"
+              "title": "Создание таблиц"
+            }
+          },
+          {
+            "id": "fe5e6324f55938ca",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "hardcore web development/11. SQL/Задание.md",
+                "mode": "source",
+                "source": false
+              },
+              "icon": "lucide-file",
+              "title": "Задание"
+            }
+          },
+          {
+            "id": "7c9055f563154d4a",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "hardcore web development/11. SQL/Сортировка данных.md",
+                "mode": "source",
+                "source": false
+              },
+              "icon": "lucide-file",
+              "title": "Сортировка данных"
             }
           }
-        ]
+        ],
+        "currentTab": 2
       }
     ],
     "direction": "vertical"
@@ -44,7 +73,7 @@
                 "autoReveal": false
               },
               "icon": "lucide-folder-closed",
-              "title": "Файловый менеджер"
+              "title": "Files"
             }
           },
           {
@@ -144,17 +173,22 @@
   },
   "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": "c9b8ca3213389ac3",
+  "active": "7c9055f563154d4a",
   "lastOpenFiles": [
-    "hardcore web development/4. Linux.md",
+    "hardcore web development/11. SQL/SQL настройка.md",
+    "hardcore web development/11. SQL/Сортировка данных.md",
+    "hardcore web development/11. SQL/Создание таблиц.md",
+    "hardcore web development/11. SQL/Задание.md",
+    "hardcore web development/11. SQL/NULL, coalecse.md",
     "English/Homework.md",
+    "hardcore web development/4. Linux.md",
     "network/ethernet.md",
     "English/img/10-1.jpg",
     "English/img/10-9.jpg",
@@ -173,9 +207,6 @@
     "todo/Счета.md",
     "todo/Тренировки и занятия.md",
     "Greenstar/modbus in ethernet stm32.md",
-    "hardcore web development/11. SQL/Создание таблиц.md",
-    "hardcore web development/11. SQL/Задание.md",
-    "hardcore web development/11. SQL/SQL настройка.md",
     "docs/sniffers_texto.pdf",
     "English/img/9-4.jpg.~tmp",
     "English/img/9-9.jpg.~tmp",
@@ -196,8 +227,6 @@
     "hardcore web development/9. Сессии, cookies, безопасность.md",
     "hardcore web development/8. HTTP.md",
     "hardcore web development/5-6-7 Internet.md",
-    "linux/Tmux.md",
-    "linux/vim.md",
-    "linux/server.md"
+    "linux/Tmux.md"
   ]
 }

+ 297 - 0
docs/Script-1.sql

@@ -27,6 +27,7 @@ insert into genus (genus_name, family_id) values (
 	3
 );
 
+
 table genus;
 
 select genus_name from genus;
@@ -44,4 +45,300 @@ select * from family where family_name='Дроздовые' and family_name='С
 
 select * from family where family_name like '%а%' or family_name like '%с%';
 
+select * from family;
+
+-- Используем функцию coalesce для полей со значением null
+
+select family_id, family_name, coalesce(description, 'не заполнено') description from family;
+
+select * from family where description is null or family_name like '%Д%';
+
+
+-- Временная таблица для сортировка
+create temp table author_tmp(
+    author_id bigint generated always as identity primary key,
+    first_name varchar(150) not null,
+    last_name varchar(150) not null
+);
+
+insert into author_tmp (first_name, last_name) values
+   ('Михаил', 'Шишкин'),
+   ('Михаил', 'Веллер'),
+   ('Михаил', 'Шолохов'),
+   ('Михаил', 'Зощенко'),
+   ('Михаил', 'Булгаков'),
+   ('Александр', 'Беляев'),
+   ('Александр', 'Пушкин'),
+   ('Лусиану', 'Рамальо');
+
+select * from author_tmp;
+select * from author_tmp order by first_name;
+
+select * from family order by family_id desc;
+
+select * from family order by description nulls first;
+
+select * from family;
+select family_name from family where family_name like 'Д%' order by family_name;
+
+select * from (
+    values (2, 3), (3, 20), (2, 4), (1, 20), (3, 4), (1, 19)
+) as something(a, b)
 
+
+select * from (
+    values (2, 3), (3, 20), (2, 4), (1, 20), (3, 4), (1, 19)
+) as something(a, b)
+order by a, b;
+
+select * from (
+    values (3, 20), (2, 4), (1, 20), (3, 4), (3, null), (1, 19), (2, 1), (2, null)
+) as something(a, b)
+order by a, b desc nulls last;
+
+
+table genus;
+table species;
+
+insert into species (species_id, species_name, genus_id, description, average_length, average_weight, primary_color) values (
+
+), (
+);
+
+insert into species (species_name, genus_id, description, average_length, average_weight, primary_color) values 
+('Большая синица',
+1,
+'Обычная птица из семейства синицевых, обитающая в лесах и садах.',
+14,
+18,
+'жёлтый'),
+('Синица лазоревка',
+1,
+'Маленькая яркая птица из семейства синицевых.',
+12,
+11,
+'голубой и жёлтый'),
+('Синица обыкновенная',
+1,
+'Распространённый вид синиц, обитающий в лесах и парках.',
+13,
+14,
+'зеленоватый'),
+('Гаичка болотная',
+2,
+'Маленькая птица из семейства синицевых, обитающая в болотистых районах.',
+12,
+13,
+'серый'),
+('Гаичка буроголовая',
+2,
+'Маленькая птица с коричневой головой.',
+11,
+12,
+'коричневый и серый'),
+('Гаичка черноголовая',
+2,
+'Маленькая птица с черной головой.',
+10,
+11,
+'чёрный и серый'),
+('Ворон обыкновенный',
+3,
+'Крупная птица из семейства врановых, обитающая в различных средах обитания.',
+64,
+1500,
+'чёрный'),
+('Грач',
+3,
+'Птица из семейства врановых с характерным внешним видом.',
+46,
+400,
+'чёрный'),
+('Клушица',
+3,
+'Птица из семейства врановых, обитающая в горах.',
+60,
+1200,
+'чёрный'),
+('Сорока обыкновенная',
+4,
+'Птица из семейства врановых с характерной черно-белой окраской.',
+45,
+200,
+'чёрный и белый'),
+('Сорока чернокрылая',
+4,
+'Птица с черными крыльями и белым телом.',
+44,
+190,
+'чёрный и белый'),
+('Сорока голубая',
+4,
+'Птица с голубыми крыльями и хвостом.',
+43,
+180,
+'голубой и белый'),
+('Дрозд рябинник',
+5,
+'Певчая птица из семейства дроздовых, обитающая в лесах и садах.',
+25,
+100,
+'коричневый'),
+('Дрозд певчий',
+5,
+'Певчая птица с мелодичным голосом.',
+23,
+90,
+'коричневый и белый'),
+('Дрозд черный',
+5,
+'Птица с черным оперением и мелодичным пением.',
+24,
+95,
+'чёрный'),
+('Дрозд белобровик',
+5,
+'Птица с белыми бровями и ярким оперением.',
+22,
+85,
+'коричневый и белый'),
+('Дрозд пересмешник',
+5,
+'Птица, способная имитировать звуки других птиц.',
+26,
+110,
+'серый и коричневый'),
+('Синица белая',
+1,
+'Белая синица, обитающая в северных регионах.',
+15,
+20,
+'белый и серый'),
+('Синица сибирская',
+1,
+'Птица, обитающая в Сибири, с ярким оперением.',
+16,
+21,
+'жёлтый и зелёный'),
+('Синица черноголовая',
+1,
+'Синица с черной головой и белыми щеками.',
+14,
+19,
+'чёрный и белый'),
+('Гаичка хохлатая',
+2,
+'Гаичка с характерным хохолком на голове.',
+12,
+14,
+'серый и чёрный'),
+('Гаичка горная',
+2,
+'Птица, обитающая в горных районах.',
+11,
+13,
+'коричневый и серый'),
+('Гаичка рыжеголовая',
+2,
+'Гаичка с рыжей головой и серым телом.',
+13,
+15,
+'рыжий и серый'),
+('Ворон пустынный',
+3,
+'Ворон, обитающий в пустынях.',
+62,
+1400,
+'чёрный'),
+('Ворон северный',
+3,
+'Ворон, обитающий в северных регионах.',
+63,
+1450,
+'чёрный'),
+('Ворон лесной',
+3,
+'Ворон, предпочитающий лесные районы.',
+61,
+1350,
+'чёрный'),
+('Сорока зеленая',
+4,
+'Сорока с зеленым оттенком в оперении.',
+46,
+210,
+'зелёный и белый'),
+('Сорока крапчатая',
+4,
+'Сорока с крапчатым оперением.',
+44,
+190,
+'чёрный и белый'),
+('Сорока длиннохвостая',
+4,
+'Сорока с длинным хвостом.',
+47,
+220,
+'чёрный и белый'),
+('Дрозд лесной',
+5,
+'Дрозд, предпочитающий лесные районы.',
+25,
+100,
+'коричневый'),
+('Дрозд полевой',
+5,
+'Дрозд, обитающий на полях и лугах.',
+24,
+95,
+'коричневый и белый'),
+('Дрозд луговой',
+5,
+'Дрозд, предпочитающий луговые районы.',
+23,
+90,
+'коричневый'),
+('Дрозд болотный',
+5,
+'Дрозд, обитающий в болотистых районах.',
+26,
+110,
+'серый и коричневый'),
+('Дрозд красногрудый',
+5,
+'Дрозд с ярко-красной грудью.',
+27,
+115,
+'красный и коричневый'),
+('Синица пестрая',
+1,
+'Синица с пестрым оперением.',
+14,
+18,
+'жёлтый и чёрный'),
+('Синица зелёная',
+1,
+'Синица с зелёным оттенком в оперении.',
+15,
+20,
+'зелёный и жёлтый'),
+('Синица красноголовая',
+1,
+'Синица с красной головой и серым телом.',
+14,
+19,
+'красный и серый'),
+('Гаичка зеленоголовая',
+2,
+'Гаичка с зеленым оттенком в оперении.',
+12,
+13,
+'зелёный и серый'),
+('Гаичка сероголовая',
+2,
+'Гаичка с серой головой и белым телом.',
+11,
+12,
+'серый и белый')
+
+);

+ 59 - 0
docs/Script.sql

@@ -61,5 +61,64 @@ select * from author where author_id=1;
 
 select * from author where name='Михаил Шолохов' and author_id=200;
 
+-- Создание временной таблицы
 
+create temp table author_without_checks (
+	author_id bigint generated always as identity primary key,
+	name varchar(150) not null,
+	description text
+);
+
+insert into author_without_checks (name) values ('какой-то автор');
+
+select * from author_without_checks;
 
+
+select * from author;
+select * from book;
+
+-- Добавим данные в таблицу author
+
+insert into author (name, description) values
+	('Александр Пушкин', 'Русский поэт, драматург и прозаик, рассматривается как основоположник современного русского литературного языка.'),
+	('Александр Беляев', 'Русский писатель-фантаст, один из основоположников советской научно-фантастической литературы.');
+
+insert into book (name, author_id, category_id) values
+    ('Они сражались за Родину', 1, 1),
+    ('Поднятая целина', 1, 1),
+    ('Донские рассказы', 1, 1),
+    ('Наука ненависти', 1, 1),
+    ('Капитанская дочка', 4, 1),
+    ('Руслан и Людмила', 4, 1),
+    ('Евгений Онегин', 4, 1),
+    ('Метель', 4, 1),
+    ('Пиковая дама', 4, 1),
+    ('Сказка о рыбаке и рыбке', 4, 1),
+    ('Голова профессора Доуэля', 5, 1),
+    ('Остров погибших кораблей', 5, 1),
+    ('Последний человек из Атлантиды', 5, 1),
+    ('Властелин мира', 5, 1),
+    ('Человек-амфибия', 5, 1),
+    ('Продавец воздуха', 5, 1),
+    ('Ариэль', 5, 1),
+    ('Светопреставление', 5, 1),
+    ('Вечный хлеб', 5, 1),
+    ('Золотая гора', 5, 1),
+    ('Земля горит', 5, 1),
+    ('Путешествие к центру Земли', 3, 1),
+    ('Дети капитана Гранта', 3, 1),
+    ('Двадцать тысяч льё под водой', 3, 1),
+    ('Вокруг Луны', 3, 1),
+    ('Вокруг света за 80 дней', 3, 1),
+    ('Таинственный остров', 3, 1),
+    ('Пятнадцатилетний капитан', 3, 1),
+    ('Зелёный луч.', 3, 1),
+    ('В стране мехов', 3, 1);
+
+select count(*) from book;
+
+select book_id, name, author_id
+from book
+order by name limit 10 offset 30;
+
+table book;

+ 31 - 0
hardcore web development/11. SQL/NULL, coalecse.md

@@ -0,0 +1,31 @@
+NULL - отсутствие значения
+
+```sql
+-- Для извлечения полей со значением NULL нужно использовать `is`
+select * from author_without_checks where description is null;
+
+-- coaleasce вместо null вернет 'не заполнено'
+select
+	author_id,
+	name,
+	coalesce(description, 'не заполнено') as description
+from author_without_checks;
+
+update author_without_checks set description='привет' where author_id=3;
+```
+
+```sql
+-- В задании с базой птиц
+select 
+	family_id, 
+	family_name, 
+	coalesce(description, 'не заполнено') description 
+from family;
+
+-- Все поля где description null
+select * from family where description is null;
+
+-- С условием or
+select * from family where description is null or family_name like '%Д%';
+
+```

+ 8 - 1
hardcore web development/11. SQL/Создание таблиц.md

@@ -38,6 +38,13 @@ create table book (
 
 -- Получаем данные
 => select * from something;
+
+-- Или так
+create temp table author_without_checks (
+	author_id bigint generated always as identity primary key,
+	name varchar(150) not null,
+	description text
+);
 ```
 
 ~={cyan}Создание таблиц в базе bird из задания=~
@@ -181,7 +188,7 @@ select * from (values
 ) t(movie, imdb_rating, year);
 ```
 
-Фильтрация данных
+~={yellow}Фильтрация данных=~
 
 ```sql
 ---Ключевое слово `WHERE` означает фильтрацию, то есть достань мне все записи из таблички авторов, где поле `author_id = 1`

+ 333 - 0
hardcore web development/11. SQL/Сортировка данных.md

@@ -0,0 +1,333 @@
+```sql
+select * from author order by name;
+
+-- Сортировка по возрастанию
+select * from author order by author_id
+select * from author order by author_id asc;
+
+-- Сортировка по убыванию
+select * from author order by author_id desc;
+
+-- Сортировка по author_id в порядке убывания (с указанием порядка null)
+select author_id, name, description
+	from author
+order by 1 nulls last;
+```
+
+```sql
+-- Временная таблица для сортировка
+create temp table author_tmp(
+	author_id bigint generated always as identity primary key,
+	first_name varchar(150) not null,
+	last_name varchar(150) not null
+);
+
+insert into author_tmp (first_name, last_name) values
+	('Михаил', 'Шишкин'),
+	('Михаил', 'Веллер'),
+	('Михаил', 'Шолохов'),
+	('Михаил', 'Зощенко'),
+	('Михаил', 'Булгаков'),
+	('Александр', 'Беляев'),
+	('Александр', 'Пушкин'),
+	('Лусиану', 'Рамальо');
+
+-- Ну и теперь сортировка
+select * from author_tmp order by first_name;
+select * from author_tmp order by first_name, last_name;
+select * from author_tmp order by first_name, last_name desc;
+```
+
+~={yellow}Работа с данным, созданными в SQL-запросе=~
+```sql
+select * from (values ('Яблоко'), ('Апельсин'), ('Банан'));
+
+-- сортировка просто по номеру колонки
+select * from (values ('Яблоко'), ('Апельсин'), ('Банан')) t order by 1;
+
+-- даём колонке имя, но сортировка по номеру колонки
+select * from (values ('Яблоко'), ('Апельсин'), ('Банан')) t(fruit) order by 1;
+
+-- даём колонке имя, сортировка по этому имени
+select * from (
+    values
+        ('Яблоко'),
+        ('Апельсин'),
+        ('Банан')
+) as t (fruit) order by fruit;
+
+-- добавляем ещё одну колонку просто для примера
+select * from (
+    values
+        ('Яблоко', 100),
+        ('Апельсин', 200),
+        ('Банан', 150)
+) as t (fruit, price)
+order by fruit;
+```
+
+~={yellow}Задания на сортировку с базой птиц=~
+
+```sql
+select * from family order by family_id desc;
+
+select * from family order by description nulls first;
+select * from family order by description nulls last;
+select family_name from family where family_name like 'Д%' order by family_name;
+```
+
+~={yellow}Ограничение количества результатов запроса=~
+
+```sql
+-- Верунь количество книг
+select count(*) from book;
+
+-- Вернуть 10 записей
+select book_id, name, author_id
+from book
+order by name limit 10;
+
+-- Вернуть сдедующие 10 записей (параметр offset)
+select book_id, name, author_id
+from book
+order by name limit 10 offset 10;
+```
+
+```sql
+--- Наполняем базу данных птиц
+insert into species (species_name, genus_id, description, average_length, average_weight, primary_color) values 
+('Большая синица',
+1,
+'Обычная птица из семейства синицевых, обитающая в лесах и садах.',
+14,
+18,
+'жёлтый'),
+('Синица лазоревка',
+1,
+'Маленькая яркая птица из семейства синицевых.',
+12,
+11,
+'голубой и жёлтый'),
+('Синица обыкновенная',
+1,
+'Распространённый вид синиц, обитающий в лесах и парках.',
+13,
+14,
+'зеленоватый'),
+('Гаичка болотная',
+2,
+'Маленькая птица из семейства синицевых, обитающая в болотистых районах.',
+12,
+13,
+'серый'),
+('Гаичка буроголовая',
+2,
+'Маленькая птица с коричневой головой.',
+11,
+12,
+'коричневый и серый'),
+('Гаичка черноголовая',
+2,
+'Маленькая птица с черной головой.',
+10,
+11,
+'чёрный и серый'),
+('Ворон обыкновенный',
+3,
+'Крупная птица из семейства врановых, обитающая в различных средах обитания.',
+64,
+1500,
+'чёрный'),
+('Грач',
+3,
+'Птица из семейства врановых с характерным внешним видом.',
+46,
+400,
+'чёрный'),
+('Клушица',
+3,
+'Птица из семейства врановых, обитающая в горах.',
+60,
+1200,
+'чёрный'),
+('Сорока обыкновенная',
+4,
+'Птица из семейства врановых с характерной черно-белой окраской.',
+45,
+200,
+'чёрный и белый'),
+('Сорока чернокрылая',
+4,
+'Птица с черными крыльями и белым телом.',
+44,
+190,
+'чёрный и белый'),
+('Сорока голубая',
+4,
+'Птица с голубыми крыльями и хвостом.',
+43,
+180,
+'голубой и белый'),
+('Дрозд рябинник',
+5,
+'Певчая птица из семейства дроздовых, обитающая в лесах и садах.',
+25,
+100,
+'коричневый'),
+('Дрозд певчий',
+5,
+'Певчая птица с мелодичным голосом.',
+23,
+90,
+'коричневый и белый'),
+('Дрозд черный',
+5,
+'Птица с черным оперением и мелодичным пением.',
+24,
+95,
+'чёрный'),
+('Дрозд белобровик',
+5,
+'Птица с белыми бровями и ярким оперением.',
+22,
+85,
+'коричневый и белый'),
+('Дрозд пересмешник',
+5,
+'Птица, способная имитировать звуки других птиц.',
+26,
+110,
+'серый и коричневый'),
+('Синица белая',
+1,
+'Белая синица, обитающая в северных регионах.',
+15,
+20,
+'белый и серый'),
+('Синица сибирская',
+1,
+'Птица, обитающая в Сибири, с ярким оперением.',
+16,
+21,
+'жёлтый и зелёный'),
+('Синица черноголовая',
+1,
+'Синица с черной головой и белыми щеками.',
+14,
+19,
+'чёрный и белый'),
+('Гаичка хохлатая',
+2,
+'Гаичка с характерным хохолком на голове.',
+12,
+14,
+'серый и чёрный'),
+('Гаичка горная',
+2,
+'Птица, обитающая в горных районах.',
+11,
+13,
+'коричневый и серый'),
+('Гаичка рыжеголовая',
+2,
+'Гаичка с рыжей головой и серым телом.',
+13,
+15,
+'рыжий и серый'),
+('Ворон пустынный',
+3,
+'Ворон, обитающий в пустынях.',
+62,
+1400,
+'чёрный'),
+('Ворон северный',
+3,
+'Ворон, обитающий в северных регионах.',
+63,
+1450,
+'чёрный'),
+('Ворон лесной',
+3,
+'Ворон, предпочитающий лесные районы.',
+61,
+1350,
+'чёрный'),
+('Сорока зеленая',
+4,
+'Сорока с зеленым оттенком в оперении.',
+46,
+210,
+'зелёный и белый'),
+('Сорока крапчатая',
+4,
+'Сорока с крапчатым оперением.',
+44,
+190,
+'чёрный и белый'),
+('Сорока длиннохвостая',
+4,
+'Сорока с длинным хвостом.',
+47,
+220,
+'чёрный и белый'),
+('Дрозд лесной',
+5,
+'Дрозд, предпочитающий лесные районы.',
+25,
+100,
+'коричневый'),
+('Дрозд полевой',
+5,
+'Дрозд, обитающий на полях и лугах.',
+24,
+95,
+'коричневый и белый'),
+('Дрозд луговой',
+5,
+'Дрозд, предпочитающий луговые районы.',
+23,
+90,
+'коричневый'),
+('Дрозд болотный',
+5,
+'Дрозд, обитающий в болотистых районах.',
+26,
+110,
+'серый и коричневый'),
+('Дрозд красногрудый',
+5,
+'Дрозд с ярко-красной грудью.',
+27,
+115,
+'красный и коричневый'),
+('Синица пестрая',
+1,
+'Синица с пестрым оперением.',
+14,
+18,
+'жёлтый и чёрный'),
+('Синица зелёная',
+1,
+'Синица с зелёным оттенком в оперении.',
+15,
+20,
+'зелёный и жёлтый'),
+('Синица красноголовая',
+1,
+'Синица с красной головой и серым телом.',
+14,
+19,
+'красный и серый'),
+('Гаичка зеленоголовая',
+2,
+'Гаичка с зеленым оттенком в оперении.',
+12,
+13,
+'зелёный и серый'),
+('Гаичка сероголовая',
+2,
+'Гаичка с серой головой и белым телом.',
+11,
+12,
+'серый и белый');
+```