Вся база SQL для начинающих за 1 час

Приветствую вас, дорогие друзья! В сегодняшнем видео я расскажу вам всё, что нужно знать про основы SQL. Как мы знаем, SQL — язык запросов, который просто жизненно необходимо знать при работе с базами данных. Казалось бы, формируй запрос и отправляй. А что если я вам скажу, что при помощи SQL можно не только создавать целые таблицы под данные, и это вам не Excel, так ещё и управлять этими данными, проводя такие манипуляции, как INSERT, UPDATE, DELETE и отдельно — SELECT. Я не только расскажу вам, как это делать, а главное — зачем. Для чего это вообще всё нужно именно в случае с SQL. И, конечно же, вы узнаете о такой фиче, как SQL. JOIN. Она вызывает много вопросов у начинающих, и сегодня о ней вы узнаете немного больше.

Расшифровка видео
Приветствие
0:00
весь мир сегодня про данный мы постоянно пользуемся разнообразными приложениями которые собирают огромное количество
0:06
информации о нас о нашей работе да О чём угодно В принципе Разумеется эти данные где-то хранятся и в первую очередь на
0:13
жёстких дисках с серверов Тех самых приложений которыми мы пользуемся Но для того чтобы удобно хранить эти данные на
0:20
жёстких дисках которые как бы железки люди придумали специальные программы базы данных так случилось что самое
0:27
популярные базы данных в мире – это SQL базы данных для работы с ними используется специальный язык запросов
0:32
неожиданно SQL и вероятнее всего вы будете активны его использовать Если
0:38
станете разработчиком и поэтому сегодня мы о нём поговорим Здравствуйте дорогие
0:44
друзья Меня Влад зовут Добро пожаловать на мой канал где мы говорим войти карьере и жизни вообще в этом ролике Я
0:49
супер подробный простыми словами расскажу вам обо всех основных понятиях и командах в языке чтобы после этого
0:55
видео вы могли написать совершенно Ну любой уже запрос мы затронем тему самих баз данных чтобы
1:02
Лучше понимать как в них хранится информация а также поговорим обо всех ключевых понятиях и словах языке SQL а
1:10
затем коснемся связи между различными таблицами через fronic Key а также поговорим о объединениях этих таблиц То
1:18
есть самый популярный запрос в интернете Таким образом мы пройдем по факту весь И
1:24
сколько всего за примерно 1 час концу этого видео вы будете владеть всей необходимой базой чтобы решать 99
1:30
процентов всех задач реальной разработки на esql вам Останется только попрактироваться со всеми этими
1:36
терминами чтобы закрепить ваши знания Но не переживайте ресурсы для практики я добавил в описании этого ролика
1:43
вспомните сколько раз Вы пытались вести учет собственных расходов Сначала вы записывали Всё значит на бумажку потом
БД и SQL
1:51
эволюционировали до текстового файла на компе а потом у вас появился даже серьёзный трафик но использование таких
1:58
инструментов как раз перестала причиной вашего бесславного провала в деле отслеживания ваших финансов да да
2:05
дорогие друзья теперь похрустывая сухим дошираком вы задумываетесь что нужно
2:10
попробовать что-то иное что проблема все еще не в том что вы потратили последнюю получку на бас в бакиной шестерки и что
2:18
вас спасут Высокие технологии тут же вам в голову
2:23
приходит гениальная совершенно идея по созданию собственного приложения для учета расхода Как же вы раньше не
2:29
додумались ведь это именно то что вам нужно не только вам но и всему миру в
2:35
целом потому что Ну никто же в мире еще не додумался создать приложение по учёту собственных расходов А вы получается ещё
2:42
и зарабатывать на этом можете годы бизнес-идейки подъехали а сразу
2:47
вспоминаете как кричали вслед своей бывшей когда она уходила от вас что вот глупая ещё приползёшь ко мне когда я
2:54
буду Бога Да теперь та она узнать сама будет пользоваться вашим приложением и каждое нажатие кнопочки В нем будет
3:00
напоминать ей о ее ошибки тут же вы решаете что пора приниматься за
3:06
разработку и сразу проблема всю информацию которую люди будут заносить в ваше приложение пока будут им
3:12
пользоваться нужно куда-то сохранять на том компе где это приложение вообще запущено и более того сохранять ее
3:20
куда-то нужно еще и в каком-то виде то есть структурировать а самое важное что различные части этой информации затем
3:26
нужно быстро находить сколько конкретно человек потратил в этот месяц а другой Сколько в другой месяц а третий сколько
3:33
потратил на шмотки и так далее критерии поиска всегда будут разные понятно что
3:39
всю эту информацию нужно хранить на жестком диске вашей ЭВМ потому что
3:44
именно жесткий диск гарантирует сохранение этой информации между перезапусками компа но жесткий диск это
3:51
железо для того чтобы находить на нем информацию в конкретном месте нужно специальная программа которая умеет
3:57
работать с этим жестким диском и доставать все необходимую информацию оттуда по конкретным запросам такой
4:03
программы и является база данных То есть это реально просто прога которая умеет
4:09
получать от вас какую-то информацию и сохранять ее на жестком диске того компа
4:14
где она запущена в общем-то а позднее Когда вам это будет нужно доставать эту
4:21
информацию обратно по конкретному запросу от вас который вы напишите и
4:26
возвращать ее вам если вы хотите с ней как-то поработать есть разнообразные программы базы данных которые люди
4:33
придумали для этой задачи по возраст quel My SQL oracledata
4:39
сервер и все они действительно выполняют одну и ту же задачу с различиями которые
4:46
сводятся только к их внутренней работе но цель этой работы У них всех одна и та
4:52
же Но для того чтобы такая программа что-то делала вам нужно ей каким-то образом отдавать команды Что именно
4:59
нужно сделать и поэтому каждый из этих баз данных предоставляет дополнительные
5:04
инструменты тоже отдельные программы с помощью которых Вы можете говорить этим
5:10
базам данных отдавать команды Что вы хотите чтобы они сделали записали что-то
5:16
на диск получили что-то с диска и так далее их есть великое множество например есть база данных posgress а к ней
5:23
цепляется программа ПГ админ для управления есть также бесплатная
5:28
программа которую можно подключить вообще к любой базе данных и посылать ей какие-то команды А есть более дорогой
5:36
вариант для богачей который называется brains который позволяет подключиться
5:42
вообще не только к SQL базам данных куча разнообразных других очень крутая штука то есть по сути здесь просто одна
5:50
программа на вашем компе обменивается информацией с другой программой на вашем
5:55
компе теперь вопрос как именно через эти программы отдавать команды в базу данных для этой цели люди
6:03
придумали специальный язык который базы данных умеют понимать он называется
6:12
в этом языке есть разнообразные слова которые базы данных умеют обрабатывать и
6:17
реагировать на них тем или иным образом то есть на этом языке Вы можете общаться с программой то есть базы данных как бы
6:25
говоря ей что нужно сделать вот эти данные пожалуйста Сохрани вот эти Я хочу
6:32
чтобы ты Обновила вот эти Удали пожалуйста нафиг А вот эти Я хочу получить и посмотреть что там лежит
6:38
вообще а база данных в зависимости от конкретных команд будет работать жестким диском выполняет те действия которых вы
6:46
ее попросили соответственно такие команды базе данных на языке SQL
6:52
называются неожиданно из коль запросами и ваша знание языка SQL определяется
6:57
именно умением формировать из Коль запросы с помощью разнообразных
7:02
слов чтобы база данных сделала именно то что вам нужно и при том максимально
7:08
быстро и эффективно теперь какую базу данных выбрать вам для вашего революционного совершенно приложения по
7:16
учету финансов на самом деле здесь мы поговорили только о тех базах данных
7:21
которые работают непосредственно с SQL То есть это SQL базы данных есть еще множество других баз данных которые
7:28
сильно отличаются и мы вообще не затрагивали эту тему в этом ролике но так или иначе даже SQL баз данных есть
7:35
несколько штук позже и так далее так Какую выбрать вам ответ
7:41
очень без разницы выберите ту для которой вы нашли хорошие учебные
7:47
материалы подходящие именно вам на самом деле на вашем учебном уровне все ускорить запросы в них будут абсолютные
7:53
идентичные и разницы в их внутренней работе вы вообще не заметите в вашем многомиллиардным приложении конечно
Таблицы
8:00
огромное количество типов данных которые вы захотите сохранить для его работы
8:05
например Вам нужно будет сохранить информацию о пользователях которые зарегистрировались в вашей системе также
8:12
сохранить конкретные категории прав доступные в вашем приложении а также сохранять затем сколько конкретный
8:20
пользователь потратил в конкретный день на конкретную категорию трат и так далее Как видите дорогие друзья все три типа
8:28
ваших данных в данном случае являются совершенно разными по своему смыслу и
8:34
структуре и в SQL базах для каждого типа Таких данных обычно создается отдельная
8:40
таблица таблица в базе данных это просто некоторые определенные пространства в
8:46
ней для хранения некоторых данных общих по смыслу в определенном виде например
8:53
всю информацию о пользователях в вашем приложении Вы бы могли хранить в таблице с названием юзеры и там колонки из
9:00
разряда имя фамилия email и прочее все что относится непосредственно к юзерам А
9:06
каждая строчка в такой таблице будет содержать все данные относящиеся к
9:11
одному конкретному пользователю вашего приложения именно в неё ваша база будет сохранять все данные при регистрации
9:18
нового пользователя в системе а для хранения информации категориях трат в вашем приложении вы бы создали в вашей
9:25
базе данных совершенно отдельную таблицу Почему отдельную таблицу потому что информация о категориях вообще никак не
9:31
относится к информации о юзерах Она имеет абсолютно другую структуру и поэтому ее гораздо удобнее хранить в
9:38
новой отдельной таблице в ней бы появились колонки например название категории какое-то и описание важность
9:46
трат на неё для ваших юзеров и так далее а конкретная строчка в этой таблице уже
9:52
бы содержала информацию о каждой конкретной категории трат что будет
9:57
существовать в вашем приложении Это то же самое вы провернули бы и для третьего
10:03
типа данных и для четвертого для пятого для любого который появится в вашей
10:08
системе То есть когда у вас появляются некоторые данные которые нужно представить в определенном виде Где в
10:15
этих данных Есть конкретные пункты которые вы можете сохранить вроде бы в конкретные колонки то вы всегда
10:21
высковать базах данных создаете новую таблицу для того чтобы хранить эти данные структурированы все из колебазы
10:28
данных организуют информацию именно в виде таблицы Именно поэтому Сколь базы данных настолько популярны в нашем мире
10:35
Потому что вы видели таблицы по сути везде работали с ними в школе в универе
10:41
видели экселевские таблицы можете сами даже на бумаге нарисовать таблицу это очень просто и очень знакомо и потому
10:48
такие базы данных это очень удобные инструменты для обычных людей но еще
10:54
такие базы данных дают вам возможность прокладывать связи между различными таблицами то есть при созда какой-то
11:00
таблице вашей базе Вы можете сказать что каждая новая строчка в этой таблице будет связана с одной или несколькими
11:07
другими строчками совершенно другой таблицы и может быть даже не одной таким образом вы можете создавать целые
11:13
структуры данных из ваших таблиц о том как это делать мы поговорим чуть позднее
11:19
в этом ролике так вот связи между различными таблицами в одной базе данных называются отношениями слово отношения
11:27
на английский переводится как И именно поэтому SQL базы данных еще могут
11:32
называть реляционными базами данных То есть это база данных которая позволяет создавать отношения между данными Да
11:40
дорогие друзья если вам нравится формат рассказа простым языком о сложных вещах то не забудьте пожалуйста тыкнуть лайк
11:46
под этим видео и подписаться на канал чтобы не пропустить ещё больше обучающих роликов Спасибо Давайте теперь просто
Создание таблиц
11:53
наконец уже перестанем говорить об этом и уже начнём что-то делать разберёмся Как именно в нашей базе данных а
12:00
создавать Таблицы с помощью конкретных из Сколь запросов и начнем с Учите сколько же прямо сейчас расскажу что у
12:06
меня тут открыто на компьютере я поставил себе базу данных по gress я сделал это с помощью Докера Вы можете
12:12
сделать это как угодно не принципиально абсолютно докер это тема отдельного вообще образовательного видео Так что в
12:19
описании я добавлю пару ссылок на инструкции Как именно это сделать И откуда вообще все это скачать там совсем
12:26
ничего сложного как игру на ком поставить затем я запустил эту пробку
12:31
подсказ Это же просто программа по сути я тоже сделал это с помощью Докера у себя но на самом деле когда вы ее
12:37
поставите на комп то она вообще у вас на старте системе будет запускаться теперь автоматически Если вы без Доки
12:44
расставили и в общем-то будет висеть в процессах Также вы можете поставить или повторять упражнение из этого ролика в
12:51
любой базе данных которая может стоит у вас на компе вам не обязательно ставить именно после разницы никакой прямо
12:59
сейчас в мо поздраз полностью пусто Я ничего совершенно не делал без вас также
13:04
я поставил себе на ком специальную программу для отправки команд в мою базу данных с возраст идет Такая совершенно
13:11
бесплатно и называется PG админ вам достаточно тоже ее просто скачать и запустить ссылка будет в описании PG
13:18
админ может работать только с позже Так что если вы используете другую базу данных то поставьте себе дебилдер
13:25
например для работы с ней или же Используйте тот инструмент что вам привычен это вообще не принципиально
13:32
теперь как со всем этим работать из ПГ админ Раз уж это отдельная программа вам
13:38
нужно подключиться после То есть к самому серверу базы данных это ведь тоже
13:43
отдельная программа Так что эти две проги нужно между собой связать как-то чтобы избе админ можно было послать
13:50
вопросы для установления такого подключения вам
13:57
нужно нажать кнопочку с добавлением сервера и в появившемся окне сначала указать Имя вашего подключения это может
14:04
быть что угодно Я например напишу экзамен затем переходим во вкладку Connection Что значит как раз
14:10
подключение и именно там мы будем говорить Где именно на нашем компе запущен сервер базы данных позы чтобы ПГ
14:18
админ мог с ним связаться в поле Host здесь мы указываем параметр Local Host
14:23
Это адрес компьютера на котором запущен пост которому мы в общем-то и пытаемся
14:29
подключиться поскольку у нас ипгмин и под запущены на одном компе то колхоз
14:36
значит что это наш собственный комп то есть тот же самый на котором запущен PG Admin и поэтому мы это пишем в поле порт
14:44
нам нужно указать программный порт на котором запущен наш поиск если вы ничего не меняли А после установки то по
14:50
умолчанию поиск запускается на парке 5432 Так что Я указываю Именно его далее
14:56
нам нужно указать имя пользователя и пароль для подключения к нашему серверу
15:01
баз данных POS по умолчанию опять же если вы ничего не меняли и логин и
15:07
пароль будут после маленькими буквами Так что
15:12
нажимаем подключиться и Шарах Мы видим что в нашем есть готовое подключение к
15:20
нашему серверу возраст можем Теперь его развернуть и увидеть что внутри по
15:25
умолчанию после уже создал для нас одну базу данных которую так и назвал
15:30
соответственно в учебных целях можем работать прямо с ней но в будущем вы можете создать здесь Сколь угодно много
15:37
своих собственных отдельных баз данных Так что разворачиваем эту базу Заходим в
15:43
раздел схем выбираем единственную паблик схему Не обращайте внимание на эти схемы
15:49
это гораздо более высокоуровневый разговор не относящийся конкретно к SQL
15:54
прямо сейчас там достаточно работы в схеме созданной по умолчанию опять же теперь можем Открыть раздел таблицы не
16:01
увидеть что он совершенно пуст то есть в нашей базе данных Пока что нет ни одной таблицы значит их нужно создать Ведь
16:08
именно в них мы будем сохранять наши данные из нашего знаменитого приложения для учета ваших расходов на чьи-то в
16:16
школьном буфете И вот теперь нам для создания таблиц уже пригодится язык
16:21
запросов Наша задача послать нашу базу данных команду которая скажет ей что необходимо
16:29
создать новую таблицу с определенными колонками в которой мы позднее будем
16:34
добавлять наши данные для отправки запросов базу данных пользователей которые подключен наш PG Admin нужно
16:42
перейти в консоль здесь У вас есть по сути текстовый редактор Где вы можете писать любые Сколь запросы и сразу
16:48
посылать их в базу данных на исполнение с помощью вот этой вот кнопочки запуска
16:53
для создания чего-либо в базе данных в SQL существует специальное слово которое
16:59
называется поэтому пишем Именно его Обратите внимание сколько принято все
17:05
команды писать большими буквами в принципе это не очень строгое правило Вы можете писать маленькими но я лично
17:11
предпочитаю большими слово криеет означает создать соответственно Теперь мы хотели бы сказать нашей базе данных в
17:18
этом запросе Что именно Мы хотим создать А мы хотели создать таблицу в общем-то
17:24
для этого есть еще одно слово table [аплодисменты]
17:30
теперь здесь по сути написано создать таблицу но еще было бы здорово сказать
17:37
нашей базе данных Как будет называться та Таблица которую мы создаем давайте
17:42
начнем с таблицы для хранения информации о пользователях нашего Великолепного приложения для отслеживания трат на
17:50
кальянс пацанами в багажнике вашей девятки как бы мы ее назвали Раз уж не
17:55
будет храниться информация пользователях то так и называем ЕЕ теперь сразу было бы здорово в нашем
18:02
запросе еще описать Из каких колонок это таблица будет состоять предположим для начала что мы хотели бы хранить в ней
18:10
имя фамилию и e-mail наших пользователей еще нужно не забыть о том что в каждой
18:15
таблице всегда должна быть колонка с уникальным идентификатором каждой строки
18:21
чтобы описать колонки которые мы хотим создать в новой таблице запросе после
18:26
имени этой таблицы открываем круглые скобочки и в них перечислять через
18:31
запятую Какие колонки Мы хотим сделать Сначала пишем название колонки давайте
18:37
начнем с колонки ID далее после названия колонки пишем Какие данные в этой
18:44
колонке могут храниться это числа это текст или еще что-то Давайте скажем что
18:49
у нас У каждой колонки будет уникальный номер ID то есть число Так что пишем
18:56
здесь слово Big in которая означает что в этой колонке могут содержаться только
19:02
целые числа и также я предлагаю Добавить сюда слово
19:09
[аплодисменты] оно означает что именно эта колонка будет являться уникальным
19:15
идентификатором каждой строчки в данной таблице ставим запятую и рисуем по
19:21
аналогии следующие колонки название колонки для хранения имени
19:28
пользователя что в ней может храниться в общем-то текст конечно так что пишем
19:34
ворчак и в скобочках 64 64 скобочках указывает что максимальная длина текста
19:41
в этой колонке может быть 64 символа я это ставлю от балды прямо сейчас просто
19:47
чтобы показать Вы можете менять это число в зависимости от того что нужно именно вашим приложении также предлагаю
19:55
Добавить сюда слово not Now оно означает что значение в данной колонке таблицы никогда не может быть пустым Ну просто
20:03
не имеет смысла сохранять пользователя без имени так и наверное тоже самое стоит добавить и для колонки
20:10
теперь уже дорисовываем остальные через запятую фамилия гласные это тоже текст
20:18
ворча 64 тоже не может быть пустой но теперь давайте запитая e-mail логично
20:27
назвать email такую колонку это тоже текст в общем-то сделаем длиннее 128
20:33
символов например и тоже не может быть пустым Ну какой пользователь без имейла
20:38
не имеет никакого смысла в результате у нас получился исход Запрос который
20:44
полностью описывает для нашей базы данных Какого вида таблицу ей нужно создать Теперь мы просто жмем кнопочку
20:51
отправки этого запроса в базу данных и видим как нам BD отвечает Что все
20:57
получилось выполнить успешно а слева Мы видим что у нас в этой BD
21:03
появилась новая таблица если мы ее откроем то увидим ровно те колонки
21:08
которые мы просили ее создать но пока в этой таблице не хранится ровно Никаких данных потому что мы только что ее
21:14
создали но еще Ничего туда не сохраняли и поэтому она очевидно пуста Вы можете
21:20
создавать Сколь угодно много таблиц вашей базе данных с помощью такого запроса просто название таблицы колонок
21:28
и определенные правила их формирования будут меняться например сейчас Мы создали таблицу для хранения
21:33
пользователей также могли бы создать таблицу для хранения категорий трат В нашем приложении или таблицу для
21:39
хранения конкретных трат каждого пользователя в определенный момент времени все это делается этим
21:45
замечательным запросом Create Table конечно дорогие друзья создавать таблицы
INSERT/UPDATE/DELETE
21:50
может и тетя Тамара с работы вашей мамы вскоре можно не просто создавать таблицы
21:57
можно добавлять их данные да да дорогие друзья в это возможно Трудно поверить но
22:04
язык искуэль позволяет вам делать И это тоже прямо сейчас у нас есть пустая таблица юзер с некоторыми колонками
22:10
соответственно Мы хотели бы добавить в неё совершенно новую строчку в которой и
22:16
сохраним данный а конкретном пользователе об одном конкретном пользователе в нашем знаменитом
22:22
приложении Чтобы это сделать нужно Разумеется выполнить Запрос к вашей базе
22:28
данных это в общем-то справедливо Для любой ситуации вашей с ней работать база
22:33
данных довольно глупый инструмент И без ваших указаний не может самостоятельно сделать вообще Ну хоть что-нибудь для
22:41
вставки данных SQL есть специальное слово переводится как ставить а то есть оно
22:47
как бы явно говорит что мы будем вставлять данные в какую-то нашу таблицу написав его мы должны после указать в
22:55
какую именно таблицу в нашей базе данных мы будем делать ставку строчки делается
23:01
это с помощью слова intu которое пишем сразу после insert то есть теперь тут
23:06
написано вставить в далее пишем название таблицы в которую мы хотим вставить
23:12
данные в нашем случае это таблица называется users Разумеется вы будете ставить
23:18
другое имя таблицы в зависимости от того куда вы хотите сохранить определенные
23:23
данные после того как вы указали в какую таблицу будете делать ставку данных нужно теперь указать Какие колонки мы
23:30
будем вставлять данные очевидно конечно дорогие друзья у вас ведь таблица состоит из колонок откуда база данных
23:37
сама может знать А в какой из них вы что-то хотите сохранить придется Это явно ей написать для этого после имени
23:45
таблицы открываем скобки и начинаем через запятую перечислять именно колонок которые мы хотим записать определенные
23:53
данные в нашем случае в таблице User есть колонки [музыка]
24:00
e-mail Так ведь их и записываем в общем-то И теперь наконец-то мы можем
24:06
написать какие именно значения то есть конкретные данные Мы хотим сохранить
24:11
новую строчку в каждой из этих колонок для этого васколе есть слово balius
24:17
которая переводится как значение указываем это слово после списка наших
24:23
колонок И после этого слова снова круглых скобках можем перечислить через
24:29
запятую конкретные данные которые мы хотим стать в каждую из колонок что
24:34
указали ранее например в колонку ID Мы хотим вставить единицу строчку в гласные фамилию Мишустин А вы
24:44
укажем числа записываем Просто так если хотите
24:50
вставить в колонку какой-то текст то берем этот текст в одиночные кавычки Обратите внимание что порядок следования
24:58
значений здесь должен совпадать с порядком перечисленных колонок в первых
25:03
скобках То есть если вы вставляете что-то в колонку ID то обязательно это значение должно идти вот здесь первым
25:10
соответственно вторым Если же вы поменяете порядок колонок в первых
25:16
скобках то соответственно нужно поменять и порядок значения повторить скобках чтобы они вставлялись именно в те
25:22
колонки в которые вам нужно теперь Мы готовы совершить нечто невероятное
25:27
дорогие друзья выполнить этот запрос запускаем нашу ракету и видим что ПГ
25:32
админ сообщает нам что ему удалось ставить целую одну строчку в нашу таблицу давайте убедимся что это
25:38
действительно так для этого найдем нашу таблицу в меню слева и дважды кликнем нее чтобы увидеть все строчки которые в
25:45
ней сейчас хранятся бабах Мы видим что в нашей таблице появилась целая одна
25:51
строчка которая хранит ровно ту информацию что мы сохраняли в нее ровно в тех колонках как мы и просили давайте
25:59
быстро выполним Еще пару вставок чтобы у нас таблице было больше строчек для
26:04
примера Я просто выполню тот же самый запрос но с другими данными для каждой колонки
26:11
круто мы наставляли в таблицу Аж три строчки уже Прямо Big Data приложение у
26:17
нас получается по-моему это уже крайне впечатляющие дорогие друзья и Ваш учитель информатики очевидно не сможет
26:23
скрыть своего восхищения вашими навыками владения персональным компьютером после
26:29
такого спектакля Но это еще не все вы будете шокированы Но те данные что Вы
26:36
сохранили можно еще и обновлять Представьте что в вашем приложении для умных и осознанных людей покупающих себе
26:43
чехлы Louis Vuitton на айфончики у одного пользователей изменился e-mail и
26:49
вот он хочет его обновить язык из коэль настолько мощный что Он позволяет вам
26:54
сделать И это нужно всего-навсего написать еще один небольшой запросик Если вы хотите обновить какие-то данные
27:02
в какой-то строчке В некоторой таблице то вам нужно использовать слово апдейт которая буквально означает обновить
27:09
далее нам нужно указать строчки В какой таблице мы будем обновлять в нашем
27:15
примере это снова таблица юзер потому что именно там мы пытаемся что-то обновить потому что именно там
27:21
пользователи есть email После этого мы хотим указать в каких колонках Мы хотим
27:27
поменять значение и На какие именно для этого есть слово
27:32
которое означает установить поменять что-либо пишем его После имени таблицей
27:38
А после него уже начинаем указывать какую колонку Мы хотим записать Какое
27:45
значение после обновления для этого пишем имя колонки которые мы хотим изменить затем знак равно Чтобы показать
27:52
что мы хотим в неё записать новое значение а потом пишем само новое
27:58
значение которое хотим туда поместить Например если я меняю свой емейл то я пишу название колонки e-mail равно и
28:05
затем строчку с новым e-mail который я хочу поместить в эту колонку вместо старого если вы захотите одним запросом
28:13
обновить сразу несколько колонок то можете здесь поставить запятую и указать еще одно выражение для обновления второй
28:20
колонки 3 и так далее Например если бы я хотел обновить ещё и имя то написал бы
28:26
равно допустим но и это еще не все у нас сейчас таблица
28:33
лежит три строчки с разными пользователями Так ведь А мы хотим обновить e-mail только для одного из них
28:40
для какого-то конкретного Поэтому в нашем запросе Нужно обязательно указать
28:47
Какую именно строку мы обновляем если мы этого не сделаем то прямо сейчас наш
28:52
запрос обновит вообще все строчки в таблице юзер чтобы указать конкретную строчку и
28:59
несколько строчек которым будет применяться наше обновление в запросе
29:05
нужно указать условия по которому база данных сможет понять какие именно строки
29:11
Нужно обновить для этого используется слово
29:16
которая буквально переводится как где это одно из самых важных слов в SQL
29:21
После него нам нужно указать условия которые и будет описывать какую строку
29:26
нужно найти в нашей таблице а затем применить к ней вот это самое обновление
29:32
как это сделать для начала нужно посмотреть на ваши существующие строчки
29:39
в таблице и решить что именно вы обновляете предположим Мы хотим обновить email самого первого пользователя Мы
29:45
видим что у него прямо сейчас уже ведь есть тут какие-то данные в его колонках Значит мы можем сослаться на эти
29:53
существующие данные в нашем новом запросе обновления то есть сначала
29:58
словами что мы хотим сказать тазе данных Мы хотим обновить email пользователя
30:04
если у этого пользователя ID равен одному потому что это самый первый
30:10
пользователь в нашей таблице И вот слово как раз используется для писания вот
30:16
этого Если в том что мы сказали поэтому мы просто в нашем запросе после
30:22
wayer пишем наши условия которые только что проговорили словами А именно ID
30:28
равно 1 То есть как теперь читается весь Запрос который мы написали обновить
30:35
таблицу users установив в колонку email значение
30:41
илон для строк Где в колонке ID содержится 1
30:49
выполняем этот запрос и видим что ПГ админ сообщает нам что он смог обновить целую одну строчку проверяем содержимое
30:56
таблицы и видим что email изменился именно строчки с id1 А все остальные
31:03
строчки остались нетронутыми на самом деле после Вы можете писать любые
31:08
совершенно условия по любым колонкам но всегда очень удобно в ваших таблицах иметь специальную колонку ID которая
31:15
всегда будет содержать уникальный номер конкрет строчки тогда зная его очень
31:21
удобно потом выбрать конкретную строчку для каких-то действий над ней Я думаю дорогие друзья что наше приложение с
31:28
вами уже может стать Поистине легендарным финтех стартапом когда мы с вами владеем такими Advanced SQL
31:35
техниками Но это еще не все Если прямо сейчас вы залетите на мой Boot кем-то Я
31:42
прошу прощения Это флешбеки просто небольшие из прошлых видео на самом деле
31:49
я хотел сказать дорогие друзья что вы можете не только добавлять и обновлять данные ваших таблицах используя сколь но
31:55
еще и удалять эти данные да да дорогие друзья владея и этой техникой тоже Вы
32:01
теперь сможете выполнять все лабораторные работы поиску для тянок ваши универской кафедры и кто знает что
32:08
это вам сулит на самом деле владея всеми знаниями что у нас теперь есть сделать
32:13
удаление некоторых строчек из вашей таблицы Это совершенно плёвое дело для
32:18
удаления городской используется слово делит вы удивитесь но оно переводится
32:24
как удалить так вот если вы хотите удалить одну или несколько строчек из
32:30
какой-то таблицы то вам достаточно написать а затем имя таблицы в общем-то из
32:36
которой вы хотите удалять конкретные строчки в нашем случае допустим снова users и теперь нам опять нужно указать
32:43
Какие конкретно строчки Мы хотим удалить из нашей таблицы Потому что если мы
32:49
этого не сделаем то такой запрос удалит вообще все что есть в вашей таблице это
32:54
вероятно не то что вы хотите в общем чтобы выбрать конкретные строчки По какому-то условию
33:03
Какое же слово нужно использовать кажется я где-то это уже слышал да
33:10
дорогие друзья Это именно слово обладающее супер силой выбор конкретных строк По какому-либо условию посмотрим
33:17
на нашу таблицу и представим что нам нужно удалить из неё вторую и третью
33:23
строчку потому что они стали нам по какой-то причине не нужны Не знаю небезызвестный администратор Михаил из
33:29
нашего приложения Решил их заблокировать их Теперь нужно удалить Если так то
33:35
после слова Where в нашем запросе удаления Мы можем написать ID равно 2
33:41
ID равно 3 слова our здесь означает или то есть Это буквально значит удалить из
33:49
таблицы users те строчки где ID равно 2 или ID
33:55
равно 3 это ведь есть ровно те строчки которые мы хотим удалить видите как
34:00
удобно пойти их выбирать Но на самом деле вы можете писать условия по любым
34:05
вообще колонкам вашей таблице просто Здесь удобно по запускаем Наш замечательный запрос и
34:13
проверяем таблицу Как видите дорогие друзья наши забаненные пользователи теперь исчезли больше не существует в
34:20
нашей табличке А значит и не занимают место на жестком диске одни плюсы конечно дорогие друзья не имеет смысла
SELECT
34:27
сохранять все наши данные в нашу замечательную базу данных если потом мы не будем эти данные оттуда доставать
34:33
чтобы показать их пользователям в определенном виде Так ведь таблички расходов мобильном приложении категории
34:40
трата также еженедельные тенденции покупок наших пользователей все это
34:45
будет строиться на основе тех данных которые мы храним в нашей базе данных Но для того чтобы отобразить всю эту
34:52
информацию в приложении нам нужно сначала научиться как-то эти данные из базы доставать делается Это довольно
34:59
просто дорогие друзья у меня здесь есть всё та же самая таблица с пользователями нашего приложения которую я заполнил
35:06
некоторым количеством строк для примера Теперь давайте ставим что в нашем
35:12
мобильном приложении есть ВиЧат для отображения профиля пользователя Ну как
35:17
и во многих знаменитых приложениях Мы же все-таки Big тех Корпорацию строим Значит у нас должна быть это килфи чачей
35:24
если Мы открываем профиль пользователя то в целом Это значит что мы знаем его
35:30
ID и хотим достать из базы все данные что в ней есть для пользователя именно с
35:35
таким IP предположим что мы хотим получить данный пользователя сойди один
35:41
достаточно остроумный и креативный пример Мне кажется сделать это с помощью
35:46
SQL довольно просто нам потребуется Какая неожиданность В общем для
35:52
получения данных из таблицы есть ключевое слово которая означает выбрать то есть мы
36:00
выбираем определенные данные из какого-то общего набора этих данных например таблицы Так что пишем Select
36:07
далее Нам необходимо указать какие именно колонки Мы выбираем из таблицы
36:13
предположим что мы хотим получить все колонки которые есть у некоторого
36:18
пользователя тогда мы могли бы просто перечислять здесь их название через запятую То есть я хочу получить и имя
36:26
пользователя и его имейл и Айки и фамилию все все после того как мы
36:33
указали какие именно колонки получаем было бы еще Здорово сказать из какой В общем
36:38
хотим получить потому что колонки то могут быть разных таблицах одинаковые называться одинаково Почему нет так вот
36:45
после колонок для этого пишем слово From а за ним уже имя Таблицы с которой мы
36:52
будем получать данные в нашем случае это снова Теперь давайте прочитаем этот запрос
36:58
человеческим языком выбрать ID имя фамилию и e-mail из таблицы
37:07
users кажется что все выглядит Логично но если запустить этот запрос прямо сейчас то в качестве результата нам
37:13
вернуться вообще все строчки из этой таблицы хотя мы хотели бы найти данные
37:18
только одного юзера с конкретным ID как это сделать нам нужно описать условия
37:25
выборки А мы это уже умеем делать используем слово чтобы описать условия
37:31
Если хотим достать юзера с конкретным агиту так и пишем как раньше равно 1 И
37:38
теперь здесь написано выбрать ID имя фамилию e-mail из таблицы
37:44
users где ID равно 1 выполняем и видим что нам возвращается табличка с
37:51
результатами нашего запроса в которой содержится именно та строчка которую мы искали как только она соответственно в
37:58
условиях вы все также Можете писать совершенно любые условия если я хочу
38:03
выбрать строчки где имя пользователя равно илон то я вполне могу написать и такое условие в моем запросе более того
38:09
Вы можете объединять несколько условий в одном запросе используя слова and и our
38:16
а также круглые скобки чтобы формировать сложные условия end означает и и
38:21
описывает ситуацию где для попадания в выборку строчка должна удовлетворять
38:27
обоим условиям означает или значит строчка должна
38:33
удовлетворять либо тому либо другому условию чтобы попасть в результат финальной выборки также есть знак не
38:40
равно который конечно говорит о том что строчка попадает в выборку Если значение
38:46
в этой колонке не равно и еще один интересный момент после слова Select мы
38:53
перечисляем колонки Но на самом деле мы можем перечислять не все колонки что
38:58
есть в таблице а лишь те что нам предположим нужны и получать в результате сокращенные строчки только с
39:05
важными данными в той или иной ситуации А еще Если вам нужны все колонки из
39:11
таблицы Но их очень много то вы можете вместо всех них написать звездочку после
39:16
Селект это будет значить ровно то что вы хотите получить финальный выборки Ровно
39:21
все колонки что есть в какой-то таблице Select это вероятно самый популярный
39:27
запрос какой базом данных поэтому для запуска вашего пояса легендарного стартапа Вам необходимо просто с ним
39:34
попрактиковаться Я надеюсь что этот ролик поможет вам лучше понять как пользоваться всеми этими инструментами
39:40
если вам нравится формат этого видео то поставьте ему пожалуйста лайк подпишитесь на канал это правда помогает
39:47
Спасибо конечно дорогие друзья наша знаменитое приложение для подсчета карманных денег школьников уже способна
FOREIGN KEY
39:54
на многое даже с этими запросами но проблема прямо сейчас в том что мы пока
39:59
умеем хранить данные только в отдельных таблицах то есть допустим мы храним наших юзеров В отдельной таблице юзер
40:06
как сейчас и предположим создадим новую таблицу springs в которой будем хранить
40:11
их траты в нашем приложении то есть мы там сможем создать какие-то колонки дополнительные для описания трат и
40:19
хранить там непосредственно наши данные о покупках пользователей в нашем
40:24
приложении но теперь как нам указать что конкретная строчка в таблице spending то
40:31
есть конкретная трата пользователя относится именно к Этому пользователю то есть другой конкретной строчки в таблице
40:39
юзер то есть совершенно другой таблицы Вот как это сделать это делается с помощью специальной
40:45
конструкции которая называется или внешний ключ как это выполнить в той
40:53
таблице где мы хотим показать что каждая стро принадлежит или относится к
40:58
какой-то другой В любой другой таблице мы можем создать дополнительную колонку эту Новую колонку в таблице springs мы
41:06
назовем User ID и в ней как раз будет храниться ID то есть идентификатор номер
41:12
конкретной строчки из таблицы users к которой относится та или иная строчка в
41:19
таблице spends У нас ведь есть эта колонка ID в таблице users посмотрите как удобно теперь на неё ссылаться
41:26
потому что это уникальный номер каждый конкретной строчки в нашей таблице в результате в нашей таблице будут
41:34
лежать разнообразные траты но в каждой из них будет указано пользователь с
41:39
каким номером совершал ту или иную покупку то есть между каждой строчкой в
41:44
таблице есть связь с некоторой строчкой из таблицы userscoin такая связь
41:51
называется отношения а колонка в которой хранится информация связи называется
41:57
внешним ключом потому что он указывает как бы наружу на другую таблицу не на ту
42:03
в которой сама эта информация хранится для того чтобы создать внешний ключ на
42:09
какую-то таблицу из новой нужно при написании запроса на создание новой
42:14
таблицы добавить пару слов у меня здесь уже написано некоторые запрос на создание таблицы spendience Давайте
42:20
добавим в него таблицу Для этого мне сначала потребуется та самая новая колонка в
42:28
моей таблице поэтому я и добавлю следуя все тем же правилам о которых мы говорили в начале ролика скажу также что
42:36
в этой колонке будут храниться числа Почему Потому что в таблице юзер с
42:42
колонки ID могут храниться только числа именно ID мы будем использовать здесь
42:47
чтобы указать на конкретного Теперь когда у меня есть такая колонка Я
42:53
хочу сказать что она действительно является внешним ключом на таблицу для
43:00
этого после создания всех колонок Я ставлю запятую и пишу слово
43:07
Что значит ограничение это специальное слово vsql которое позволяет Объявлять
43:13
правила внутреннего устройства любой вашей таблицы и furrenkey как раз
43:19
является одним из таких правил далее нам этот constrate нужно как-то назвать потому что все вы Сколь должно иметь
43:26
осмысленное имя называем его например юзер ФК чтобы подчеркнуть что это именно
43:31
внешний ключ а далее пишем что этот концерт действительно является forent так и пишем
43:37
теперь круглых скобках необходимо указать Какая колонка или колонки в
43:44
нашей создаваемой таблицы будут являться внешним ключом в нашем случае это наша
43:49
новая колонка User ID поэтому ее указывает А теперь нужно указать что из этой колонки мы
43:59
будем ссылаться или указывать на таблицу юзер для этого есть слово что
44:07
у нас и значит ссылается поэтому пишем references Какая таблица
44:13
users А теперь в круго скобках пишем на какую именно колонку в таблице юзерс
44:18
будет ссылаться наш внешний ключ то есть по факту мы определяем какие именно
44:24
значения могут содержаться в нашей новой колонке юзераги Конечно только те что
44:33
есть в колонке ID в таблице users если мы явно указываем все внешние ключи для
44:39
наших таблиц то они гарантируют правильность данных в этих таблицах например теперь в таблицу спендикс
44:46
Нельзя просто взять и записать юзер ID которого нет в таблице юзер только
44:52
существующие пользователи могут совершать траты в нашем приложении и как раз в этом убеждается выполняем наш скрипт и
45:01
видим Что у нас по факту появилась новая Таблица которую мы и ожидали общем-то увидеть но вот тут впг мин можно
45:08
заметить что в этой таблице есть вот такой внешний ключ Теперь если я захочу
45:15
сделать вставку в такую таблицу то я буду обязан указать корректный
45:20
User ID для каждой строчки вот у меня в таблице users есть пользователь с id3
45:26
Тогда я могу написать запрос на вставку данных через insert в таблицу spendence и указать что в колонку User ID можно
45:35
записать 3 чтобы показать что это новая строчка связана именно с этим юзером но
45:41
если я попробую заменить этот ID на тот которого еще нет моей таблице юзер что в
45:47
общем-то значит что такого пользователя нет в приложении в принципе то и сколько кинет мне ошибку говоря о том что такой
45:53
юзера не найден в таблице А значит и связь проложить не получится
46:00
Это очень удобно чтобы сохранять правильность ваших данных в таблицах
46:05
внешние ключи гаран качество связи между вашими таблицами базе данных но теперь
46:11
когда вы ими владеете у вас также есть гораздо больше возможностей с точки зрения получения этих данных из ваших
46:16
таблиц И для этого мы будем использовать слово Join вероятно одна из самых
JOIN
46:22
загадочных тем для начинающих разработчиков в мире SQL Join и используется в огромном количестве
46:29
запросов выборки их есть несколько различных видов а также запросы с ними
46:34
вообще в принципе выглядят крайне усложненными но прямо сейчас мы рассмотрим их супер подробно в
46:40
максимально лайтовом формате Что такое вообще этот Джонни дорогие друзья Давайте представимся ситуацию что у нас
46:48
вот есть эта таблица users в которых хранятся информация о пользователях также есть таблицы спендис и мы храним
46:55
информацию о конкретных тратах каждого пользователя и вот в таблице есть еще и
47:01
внешний ключ на таблицу чтобы эти две таблицы связать теперь представи все что
47:07
мы хотим получить из нашей базы данные следующего вида Мы хотим достать всю
47:12
информацию обо всех тратах каждого пользователя но еще мы хотим чтобы рядом
47:19
там для каждой траты содержалось колонка с именем пользователя который эту трату
47:25
совершил если мы посмотрим то в нашей таблице spendence нет колонки с именем
47:30
пользователя там есть только колонка с ID пользователя а имя оно как бы находится в другой вообще таблице тогда
47:37
как же нам написать запрос который вернет нам еще и имя на самом деле в таблице спендикс У нас ведь есть колонка
47:44
Где хранится ID пользователя в таблице users и кажется что зная этот ID для
47:50
каждой строчки мы могли бы как-нибудь получить и любую другую колонку которая
47:56
есть в таблице users а не в таблице спендикс и именно это позволяет сделать
48:02
Джой Джон переводится как присоединить и это слово вскоре используется для
48:07
присоединения друг к другу колонок из двух разных таблиц таким образом
48:13
выполняя запрос на получение данных с помощью Join Вы можете из двух таблиц
48:18
одновременно получить разные колонки в одном финальном результате запроса
48:24
Select Давайте попробуем написать тот Запрос который мы хотели получим все данные о тратах пользователей но еще и с
48:32
именем конкретного пользователя что совершил покупку мы сказали что нам нужно получить данные поэтому пишем
48:39
слово Select далее Мы хотели бы указать Какие колонки Мы хотим получить
48:45
финальный выборки Давайте поставим звездочку чтобы выбрать вообще все теперь указываем из какой таблицы мы
48:53
будем получать данные из таблицы потому что мы получаем траты Ну вот как раз эта
48:59
ситуация если мы посмотрим на таблицу из которой мы сейчас получаем все колонки
49:04
то Увидим что Ну нет колонки с именем пользователя получая Не получай колонки
49:11
в таблице в принципе нет есть только ID конкретного пользователя которому
49:16
принадлежит та или иная трата Но вот зная этот ID Мы же можем по нему в
49:21
другой таблице фьюзерс найти полную строчку со всей информацией о
49:27
пользователе которая как бы относится соединяется с этой строчкой Ну да вот
49:32
этот пользователь в таблице users достать теперь в нашем запросе именно
49:38
это можно сделать с помощью слова Join Вы можете к выборке из одной таблицы прицепить еще и выборку из другой
49:45
таблицы для этого нужно написать это самое слово после выборки из первой таблицы а после него указать Какую
49:51
именно таблицу вы хотите прицепить к первой выборке в нашем случае это users
49:57
сейчас мы сказали что будем к выборке из таблицы присоединяет также выборку из таблицы
50:05
users но еще хотела рассказать По какому принципу каждая строчка из первой таблицы будет
50:11
объединяться со строчками из 2 То есть если у меня есть одна строчка в таблице
50:17
spendence то какая строчка из таблицы users прицепится именно к моей финальной
50:24
выборке и делается это с помощью слова он используется для определения условия
50:30
соединения строк из первой и второй таблицы между собой соответственно после
50:36
этого слова Нам необходимо указать условия определяющие По какому принципу
50:42
строка из первой таблицы соединяется с какой-то строкой из второй таблицы чтобы
50:48
понять Как это условие написать нужно подумать о том что именно мы хотели
50:53
сделать изначально мы хотели вывести все строки из таблицы spandings но чтобы
50:59
также В каждой строке была дополнительная колонка с именем пользователя совершившего
51:07
покупку Мы помним что в таблице spendence для определения пользователя которому принадлежит покупка есть
51:13
колонка User ID тогда чтобы мы хотели сделать мы бы хотели чтобы для каждой строчки в
51:21
spendence по вот этому ID нашлась строчка в таблице users из нее бы
51:28
вытащилась имя конкретного пользователя и подставилась бы финальный выборку и
51:34
Ведь мы только что проговорили то самое условие которое хотим написать как мы объединяли строки по ID пользователя Вы
51:42
по сути сказали Давайте подтянем в нашу выборку трат все строки с пользователями
51:48
где значение в колонке юзера и в первой таблице и ID во второй таблице совпадают
51:56
на этом мы можем написать в нашем условии после слова он здесь работает
52:02
такая хитрая запись пишем сначала имя таблицы которую мы присоединяем к
52:09
основной это users дальше Точка а затем ID это имя
52:15
колонки по которой мы делаем соединение затем равно имя таблица к которой мы
52:23
присоединяем точка а затем имя колонки по которой мы делаем соединение
52:30
User ID зачем мы здесь указываем имя таблицы перед названием колонки Это для
52:35
того чтобы явно показать SQL из какой таблицы нужно взять ту или иную колонку
52:41
потому что теперь у нас в этом запросе участвуют две таблицы одновременно и поэтому для явного определения мы пишем
52:48
что вот эту колонку берем из этой таблицы А эту из этой и сравниваем их
52:53
Если значение в этих колонках совпадают для двух строк в первой и второй
52:58
таблицах то они будут соединены в одну строку финальной выборки Давайте
53:05
проверим просто запустим на запрос и Шарах Как вы можете видеть дорогие
53:11
друзья у нас здесь В результатах появилась таблица но колонок в ней гораздо больше чем хотя бы в одной из
53:18
созданных нами таблиц и если Вы внимательно Посмотрите то здесь есть все
53:23
все колонки из таблицы spendence а также все колонки из таблицы users и это
53:29
именно результат операции Join мы как бы соединили две таблицы в одну финальную
53:35
выборку то есть колонки и строки как бы слиплись друг с другом но теперь давайте
53:41
обратим внимание на строки поскольку мы в условии он указали что каждой строке
53:47
из пенз должна цепляться именно строка из users где юзер ID совпадает то именно
53:55
это мы и получаем здесь именно юзер с таким ID а здесь уже ровно с тем что
54:01
определён в этой строке то есть наши условия определяет логику вот этого
54:06
соединения каждой стро С первой таблицы с ее парой из второй таблицы но По
54:12
условию задачи Мы хотели чтобы В результатах выборки показывались не все колонки из таблицы users а только имя
54:18
сейчас мы вытащили слишком много данных а нам предположим это не нужно хотелось
54:24
бы как-то привести все в порядок чтобы работать только с теми данными что нам действительно здесь необходимы поправить
54:30
это не сложно прямо сейчас наш запрос выбирает все колонки из обеих таблиц
54:35
потому что здесь стоит звездочка она означает что нужно выбрать вообще все и
54:41
применяется вообще ко всем таблицам что участвует в этом запросе Раз уж у нас их
54:47
две то она и вынимает все колонки из users соответственно если мы хотим чтобы
54:55
это работало немного иначе то именно здесь нам нужно внести изменения в наш
55:00
запрос мы сказали что мы все еще хотим получать все колонки из таблицы с пенис
55:05
это можно сделать очень а с помощью записи имени таблицы если мы укажем что
55:11
мы хотим обратиться именно в таблицу spendence А через точку звездочку то этот запрос уже значит что мы достаем
55:17
все колонки но уже только из таблицы spendence если мы запустим это прямо
55:23
сейчас то Увидим что данные нам возвращаются здесь есть все колонки из нужной таблицы но все что относится к
55:31
таблице users оно пропало она Еще хотелось бы увидеть оттуда колонку с именем поэтому мы можем добавить это в
55:38
наш запрос Select ставим запятую И говорим что из таблицы users Мы хотим
55:43
получить именно колонку с именем снова зачем мы указываем именно таблиц чтобы
55:50
явно показали что эти колонки из этой таблицы А эту
55:55
вот берем из вот этой потому что таблиц уже две в запросе участвуют и нужно все
56:02
явно определяет для escoin для нашей базы данных откуда брать Какие данные
56:07
запускаем наш запросы бабах видим что у нас появилась выбор ровно с теми
56:12
колонками что нам нужны а также все Еще продолжает работать и Объединение наших
56:18
таблиц то есть мы вытаскиваем данные сразу из двух соединяющихся по
56:24
определенной логике тот же воин что мы использовали для такого объединения называется inner Join или внутреннее
56:32
объединение Мы даже в запросе можем писать не просто Join а Energy
56:38
чтобы явно показать это Но вообще слово inner не обязательно если вы его не
56:43
напишите то все это будет работать одинаково и на Join всегда включает
56:49
финальный результат только те строки в которых данные По условию действительно
56:54
совпадают но если в первой таблице или во второй таблице найдется строка для
57:01
которой нет пары в той таблице которой она присоединяется то эта строка не
57:07
попадет в результирующий выборку например Обратите внимание на нашу таблицу здесь есть ряд пользователей
57:14
которые пока не создавали никаких трат в таблице spendence нет строчек которые бы
57:21
имели такое как у этих пользователей тогда выполнив наш запрос на объединение
57:27
данных мы не увидим финальный выборке этих пользователей потому что у них нет
57:33
пары совпадающей магии по нашему условию в таблице именно
57:38
Вот это и гарантирует energior Это здорово но что если вы все-таки хотите включить в выборку не
57:45
только строки для которых нашлась пара но также и те для которых пара не нашлось это тоже можно сделать с помощью
57:52
Join of но только Вам нужен не имя Джоли уже а другой тип Джона аутен или внешний
57:59
Join Какая неожиданность в чем суть он работает точно так же как и на Join
58:07
но плюс к этому он еще и вынимает из БД строки для которых не нашлось пары и
58:14
тоже включает их выбор Вот и все соответственно при объединении у вас всегда есть две таблицы которые вы
58:20
соединяете назовем их левая и правая таблица так вот если вы хотите чтобы Out Join
58:27
выбрал также все строки для которых не нашлось пары при объединений из левой
58:33
таблицы то пишите Left Out А если хотите чтобы Выбрались строки без
58:39
пары и с правой таблицы в запросе то Write Join в нашем запросе Какая из
58:45
таблиц является левой А какая право то что идет первый в запросе та и левая а
58:51
вторая соответственно считается правой так вот теперь если я хочу чтобы мой
58:57
запрос включал финальную выборку также юзеров без каких-либо трат то что я
59:03
должен написать моя таблица юзер запросе идет Второй А значит она является правой
59:09
и строки без пары Я достаю именно из неё значит я мой Инна Джой меня
59:17
запускаю и вижу что среди всех результатов что были и до этого также
59:23
появились дополнительные строчки где имя пользователя есть но во всех остальных
59:29
колонках содержится нал то есть пустота ничего Почему Потому что для них ведь
59:34
нет пары в первой в левой таблице значит здесь отображается пустота та же логика
59:40
работает и для Left Out Join но там будут доставаться строки без пар из
59:46
левой таблицы но выглядит они будут точно также есть еще Full Out Join его
59:52
можно использовать Когда вам нужны строки без пары и из левой и из правой таблицы вместе условия выборки
59:58
определяются абсолютно Так же как и для обычного energround Здесь тоже более того в этих
1:00:05
условиях вы все также можете использовать слова and и у или как в
1:00:10
условиях чтобы создавать более сложные правила объединения ваших таблиц А
1:00:15
теперь Представьте дорогие друзья что вам так в принципе объясняют вообще все с примерами с картинками с анимациями
1:00:23
просто и доступно Если нравится Такой формат то Приходите ко мне на Boot кем
1:00:28
Где я рассказываю обо всем что вам нужно чтобы стать мощным Java разработчиком там можно и в команде поработать в
1:00:35
формате стажировки и крутые фичи для веб-приложения написать под руководством мощных тех лидов и все у нас там
1:00:42
расписано Именно таким языком получите кучу инсайтов А еще я в таком же виде
1:00:48
рассказываю о том как готовится к собеседованиям чтобы реально получить работу потом ссылка для регистрации на
1:00:55
Boot кем доступна в описании пригоняйте очень круто поработаем А теперь представьте вот какую историю дорогие
Агрегатные функции, GROUP BY
1:01:01
друзья у нас в таблице spending хранятся все данные обо всех тратах всех пользователей в нашем Великолепном
1:01:07
приложении вот было бы здорово посчитать сколько у нас в системе
1:01:13
потратил каждый пользователь в отдельности всего Вероятно это была бы самая грандиозная фича в нашей системе
1:01:20
только Подумайте Вы заходите в приложение и сразу видите результат всех
1:01:26
ваших необдуманных решений безвольных искушений тупейших поступков в вашей
1:01:32
жизни это же именно то чего хотят все ваши пользователи Гениально по-моему просто чтобы это значило для вас для
1:01:39
разработчика такой фичи У вас есть все данные в таблице spending с каждой строчкой это отдельная трата ваших
1:01:45
пользователей вот было бы здорово все и сложить друг с другом чтобы получить одно большое общее число Можно ли такое
1:01:52
сделать с помощью ускорить Разумеется можно есть встроенные инструменты для таких
1:01:58
вот задач найти сумму всех чисел в колонке найти максимум минимум среднее
1:02:03
значение и так далее эти инструменты называются агрегатными функциями очень
1:02:08
умное слово в каждой базе данных Есть огромное множество встроенных агрегатных функций и вы там точно можете найти те
1:02:16
что помогут вам решить ваши задачи мы рассмотрим нашу функцию суммы для
1:02:21
примера как было сказано Мы хотим взять все из нашей таблицы spendings и сложить
1:02:27
все значения в колонке прайс в одно общее а затем вытащить его из базы чтобы
1:02:32
в общем-то посмотреть на него Для этого нам подойдет агрегатная функция summa использовать ее очень удобно Если мы
1:02:39
хотим написать запрос который достает нам из таблицы spendience общую сумму всех значений то Конечно сначала нужно
1:02:46
поставить традиции сделать Селект Раз уж мы достаем это значение из базы пока
1:02:52
пропустим шаг описание колонок и сразу напишем Откуда мы хотим получить это
1:02:58
суммарное значение из таблицы с конечно поэтому так и пишет все это мы с вами
1:03:03
уже знаем А вот теперь давайте подумаем какие колонки и какого вида Мы хотим
1:03:09
получить из нашей таблицы мы сказали что мы хотим получить суммарный прайс всех трат в таблице если
1:03:18
мы просто укажем здесь колонку прайс и выполним запрос то нам вернуться просто
1:03:25
все строчки в которых есть какой-то прайс это не то что мы хотим мы хотели
1:03:30
бы их все сложить в одно общее значение И для этого мы можем взять и применить
1:03:37
нашу агрегатную функцию сам к нашей колонке прайс для этого рядом с именем
1:03:43
колонки пишем название нашей функции сам а затем круглые скобки в которых и будет
1:03:48
содержаться имя нашей колонки значение из которой мы будем суммировать с
1:03:53
помощью этой функции то здесь мы как бы говорим про суммировать А что именно про суммировать вот строчки по этой колонке
1:04:01
запустим наш запрос и увидим что мы получили крошечную табличку на выходе
1:04:07
всего из одной строчки но как вы можете видеть дорогие друзья в этой строчке число которое является суммой всех строк
1:04:16
в таблице spendence по колонке прайс все прочие агрегатные функции применяются в
1:04:21
том же формате например чтобы найти максимальную трату во всей нашей беды можно использовать функцию Max вместо
1:04:27
сумм куда мы и Передаем параметр прайс так как именно в этой колонке будем искать максимальное значение и потом
1:04:34
Шарах вот он и Максимум у нас появился среди всех вообще доступных строчек то
1:04:40
же самое можно сделать с минимумом можно посчитать среднее значение и многое другое по моему выглядит довольно Круто
1:04:46
И с этим можно делать действительно очень много полезных запросов для подсчета различных величин в вашем
1:04:53
приложении это еще не все дорогие друзья у нашего запроса в том виде в котором он
1:04:58
сейчас есть одна проблема он показывает нам сумму расходов всех пользователей нашего приложения вместе но на самом
1:05:06
деле каждому пользователю было бы интересно видеть сумму именно своих расходов они если там с чьими то другими
1:05:13
И если мы будем просто применять нашу функцию сам колонки Price то она всегда
1:05:19
по умолчанию будет считать сумму именно для всех колонок в данной таблице ей
1:05:24
безразлично какому конкретно юзеру относится та или иная строчка она
1:05:30
складывает их все вообще но мы-то с вами знаем что у нас в таблице spendence есть
1:05:35
колонка User ID которая показывает какому пользователю принадлежит данная
1:05:41
покупка вот было бы здорово если бы функция сам умело смотреть что если
1:05:47
трата принадлежит одному пользователю то для него считать отдельную сумму а если
1:05:52
другому юзеру то считать вторую сумму а затем финальным результатом показывать
1:05:58
не одну общую сумму как раньше а вот эти обе суммы подсчитаны для каждого
1:06:04
пользователя отдельно было бы просто класс Разумеется такое может провернуть
1:06:09
когда вы пользуетесь агре функциями ровно то что я сейчас описал можно
1:06:15
сделать с помощью конструкции групп by которую можно добавить к нашему запросу
1:06:21
добавляется она сразу после нашего селекта О чем говорит грубай это слово
1:06:28
указывает на то что теперь наша функция суммирование должна применяться Не ко
1:06:33
всем строчкам в таблице в принципе а считать отдельный результат для всех
1:06:39
строк в которых совпадает какое-либо значение давайте сейчас покажу что я
1:06:46
имею ввиду если в нашем запросе мы допишем грубой User ID и запустим то уже увидим
1:06:54
результат состоящий из нескольких значений а не из одного и вот что здесь
1:06:59
произошло когда этот запрос применился то база данных взяла первую строчку из
1:07:05
таблицы spandings и увидела что ей нужно считать сумму из колонки но еще я
1:07:12
увидела что мы указали грубой по User ID тогда база данных еще и посмотрела в
1:07:17
колонку User ID в данной строчке и отметила что эту сумму Она считает
1:07:23
именно для User ID равного единицы потому что в этой строчке лежит именно
1:07:28
такое значение а затем база данных перешла к следующей строчке которую тоже нужно суммировать и теперь база могла бы
1:07:36
добавить прайс к нашей общей сумме но из-за грубая Она видит что эта строчка
1:07:42
принадлежит уже юзеру сойди 2 а значит нельзя Это значение прайс добавлять сумму которая считается для юзера с ID 1
1:07:49
тогда база данных создает еще одну сумму для юзера среди 2 и считает отдельное
1:07:55
значение в ней потом встречает третью строчку видит что юзер одни тут снова один а у нас такая сумма уже считается
1:08:02
Значит мы не новую сумму создаем а добавляем существующую для юзера Один
1:08:08
потому что значение в колонке User ID совпадает которое мы видели на первой
1:08:14
строчке таким образом база данных проходит по всем строчкам и считает столько отдельных сумм Сколько в таблице
1:08:21
spendence есть уникальных значений в колонке User ID в результате мы получаем
1:08:27
финальную табличку в которой содержится суммы всех трат для каждого пользователя
1:08:32
в нашей системе в отдельности конечно грубой можно делать не по одной какой-то
1:08:38
конкретной колонке а сразу по нескольким из них тогда он будет считать отдельную
1:08:43
сумму или вообще результат любой агрегатной функции учитывая уникальные комбинации нескольких колонок Разумеется
1:08:51
с этим лучше попрактиковаться и поэтому я добавил в описании сразу несколько прикольных сайтов с кучей упражнений
1:08:57
поискуэль в том числе и на грубой и все бесплатно но если вы хотите реально
1:09:03
круто попрактиковаться со всем этим на примере настоящего живого проекта с крутыми фичами то очевидно нужно
1:09:10
залетать ко мне в описании под этим видео Есть все необходимое для того чтобы узнать как
1:09:15
это сделать Поэтому прилетайте будет Ну просто супер круто Теперь ваше
HAVING
1:09:20
приложение для учета расхода срывает всем крышечки очевидно там и посмотреть счет можно и записать туда чет можно и
1:09:27
максимум Она считает и можно отфильтровать данные по разным условиям короче ну просто класс но пользователи
1:09:33
всегда хотят большего как и вы в общем-то дорогие друзья вашим амбициям Нет предела поэтому вы придумываете еще
1:09:40
одну новую гениальную совершенно фичу в вашем приложении Вы хотите сделать так
1:09:46
чтобы когда какой-то пользователь в вашем приложении потратил более миллиона
1:09:51
денег то вы бы давали Ему достижение путилы чтобы все как бы знали кто здесь
1:09:56
богат владея теперь агрегатной функциями и выражением грубая из пункта выше вы
1:10:03
бросаетесь писать новые запросы которые вроде как должен быстро всё решить Вы
1:10:08
хотите найти всех пользователей у которых общий объём трат в приложении превысил миллион Выпишите Select из
1:10:17
таблицы юзеров где получать в общем-то всю информацию о них также цепляетесь к
1:10:23
таблице с тратами чтобы у вас была возможность посчитать там суммы для каждого пользователя соответственно
1:10:30
прописывайте вашу известную форму подсчета суммы для всех тратов
1:10:35
вспоминайте что вы считаете эти суммы для отдельных пользователей
1:10:40
соответственно Добавляйте к вашему запросу теперь осталось только достать тех у
1:10:49
которых Эта сумма что будет посчитано больше миллиона из Бриз же Пишите в и
1:10:56
говорите что сумма прайс больше 1 миллиона
1:11:03
а теперь в нетерпении потеряя руки предвкушая немыслимый до силе успех вы
1:11:09
жмете заветную кнопку запуска запроса и ваши мечты разбиваются об ошибку Square
1:11:16
О нет агрегатные функции нельзя применять внутри в какой же бред этот
1:11:22
исходит Зачем мне вообще вся эта фильтрация если Тут даже по агрегатным
1:11:27
функциям нельзя отфильтровать действительно дорогие друзья внутри Вы
1:11:33
можете писать любые условия но только не условия использующие агрегатные функции
1:11:39
подсчитывающие что-то из нескольких строк в вашем запросе Дело в том что в
1:11:45
внутри устроен не очень удобно Для выполнения таких операций если бы
1:11:50
исходит позволял писать такой через в то все ваши запросы работали бы не очень эффективно из-за просто внутреннего
1:11:57
устройства самой конструкции в разработчики придумали для вас новое слово
1:12:03
оно похоже на wear но внутри устроено иначе специально Создана для обработки
1:12:09
условий по агрегатным функциям В итоге вам нужно просто ваш заменить на хевинг
1:12:16
но важно сказать что хевинг можно писать только после грубой так как для проверки
1:12:22
условия группировка сумма юзерам уже должна быть произведена выполняем и у
1:12:29
нас все получилось как вы можете видеть мы вынули только юзеров у которых суммарные траты больше миллиона именно
1:12:36
то что мы хотели и это все благодаря Вы можете использовать с этим словом любые
1:12:42
условия по агрегатным функциям что в общем-то Нужны но важно правильно конструировать группировку и выборку Но
1:12:51
это приходит с опытом И практикой разумеется кажется вашему приложению теперь совсем нет равных с точки зрения
1:12:56
функционала и вы готовы показывать его всем вашим реальным пользователям и зарабатывать уже наконец миллиарды на их
1:13:05
постоянных тратах и ошибках и вот вы наконец в проводе дорогие друзья
Изменение таблиц
1:13:10
феноменальный успех у вас миллионы пользователей по всему миру вы успешный
1:13:16
Уважаемые бизнесмен а ваша бывшая кусает локти Как вы в общем-то и планировали и все это благодаря SQL и моему Бут кем
1:13:23
была который Вам очевидно нужно сходить чтобы все так и было так вот все здорово приложение работает но вдруг вам
1:13:31
приходят пользователи и говорят что было бы отлично добавить к их тратам некоторую дополнительную информацию
1:13:37
например им было бы полезно видеть На какую категорию товаров или услуг они тратили те или иные суммы денег вы
1:13:45
заползаете в свою базу данных и смотрите Окей У вас есть таблица со всеми тратами есть таблица чем-то вы
1:13:52
её добавили в начале в ней хранятся категории всех товаров и услуг которые вообще существуют которые можно
1:13:59
указывать вашим приложении но к сожалению договориться спендиенс нет никакого
1:14:04
указателя на эту таблицу категорились А вам бы он очень пригодился чтобы объединить все таблицы для каждой траты
1:14:11
указывать какой категории она принадлежит как будто хочется добавить в таблицу spending Новую колонку которая
1:14:18
станет внешним ключом на таблицу категорий и тогда будет понятно какая трата соединена С какой категорией этих
1:14:25
трат Да и как же это сделать первое что приходит вам на ум это удалить
1:14:31
существующую таблицу Полностью заново ее создать но уже добавляя Новую колонку
1:14:37
которая станет внешним ключом на таблицу категории но вы же умный вам об этом
1:14:42
вроде и мама говорила И бабушка пару раз упоминала поэтому вы понимаете что прямо
1:14:48
сейчас вы уже вроде ваша база данных на проводе ею пользуются пользователи и они
1:14:53
в эту таблицу которую вы собираетесь удалить уже сохранили какие-то данные Если вы её просто удалите а затем сразу
1:15:00
же создадите новую то очевидно что все странные пользователи которые там сейчас есть они просто пропадут Конечно вы не
1:15:08
можете этого допустить И что же тогда делать на самом деле все довольно просто в школе есть специальная конструкция
1:15:14
Альтер Table которая буквально означает изменить существующую таблицу и именно
1:15:19
она все сделает за вас и решит все ваши проблемы чтобы изменить нашу табличку
1:15:25
достаточно действительно написать новый Сколь Запрос который использует конструкцию альтерна
1:15:33
здесь мы говорим что собираемся изменить таблицу поэтому дальше необходимо указать Какую именно таблицу мы хотим
1:15:39
изменить кажется мы хотели изменить spendings поэтому ее сюда и запишем А
1:15:46
дальше нам необходимо указать Как именно мы хотим изменить эту таблицу что в ней
1:15:52
конкретно должно произойти мы хотели добавить в неё Новую колонку в которой
1:15:57
будет лежать ID категорий который относится та или иная трата чтобы
1:16:03
добавить колонку в таблицу Мы можем написать слово которое буквально
1:16:08
означает добавить а затем слово калом который означает буквально колонку то
1:16:15
есть добавить колонку А дальше мы организуем ту же Саму запись что мы
1:16:20
использовали при описании колонок в запросах на создание таблиц просто пишем
1:16:25
желаемое имя колонки и указываем тип возможных значений что в ней могут содержаться также любые другие параметры
1:16:33
поскольку ID категории у нас число то это колонка будет хранить числа бегаем но еще мы хотели сделать так чтобы эта
1:16:41
колонка была еще и внешним ключом на таблицу категории стакать если помните
1:16:46
когда мы создавали внешние ключи до этого то мы использовали слово constrain создавая таким образом новое правило в
1:16:54
базе данных это правило и есть отдельная сущность которую мы тоже можем теперь
1:17:00
добавить в таблицу уже после ее создания идем по знакомой схеме
1:17:08
А что мы тут добавляем конечно Так и запишем Но дальше уже идет описание
1:17:13
самого правила внешнего ключа похожие на то что мы делали раньше сначала название
1:17:19
правило затем тип этого правила в нашем случае затем из какой колонки в нашей таблице
1:17:27
мы будем указывать на другую и снова который вот добавляем выше категории А
1:17:33
на какую таблицу будем ссылаться через слово references таблицу категорились
1:17:38
конечно А на какую колонку в этой таблице Найди так и записали теперь
1:17:44
можем запустить сразу два наших запроса они выполнятся последовательно сверху
1:17:49
вниз и это очень важно потому что нельзя создать правила для несуществующей колонки соответственно она должна
1:17:56
создаваться первой а затем уже добавляется контент запускаем проверяем что там с нашей таблицей Как вы можете
1:18:03
видеть дорогие друзья у нас появилась новая колонка в которой для уже существующих строк хранится на Почему
1:18:10
Потому что когда эти данные вставлялись до появления колонки мы как бы и не
1:18:16
знали что это была за категория трат Так что мы теперь не можем поставить
1:18:21
постфактум для них какую-то катего поэтому можно оставить на или же Вы
1:18:27
могли бы засунуть туда какую-то категорию по умолчанию для старых записей но теперь при создании новой
1:18:34
строки мы без проблем можем указать дополнительное значение и для нашей новой колонки чтобы данные теперь
1:18:41
сохранялись из категориями тоже более того У нас тут прям есть внешний ключ на
1:18:46
категории поэтому не получится сохранить какой-то ID категории которого не существует в таблице категориз Все
1:18:53
работает именно так дорогие друзья Вы можете изменять свои таблицы Есть множество разнообразных конструкций
1:18:58
которые вы можете использовать с altertable например Вы можете удалить какую-то колонку если вам это нужно с
1:19:05
помощью а также много-многое другое Поэтому переходите на сайте в описании
1:19:10
для того чтобы практиковаться с различными скольз запросами в том числе и запросами на изменения таблиц Я
1:19:18
надеюсь это видео было очень ценным для вас будет здорово если поставите лайк и подпишитесь на канал это правда помогает также приходите в мой телеграмм
1:19:25
инстаграм где вы найдете огромное количество обсуждений простыми словами реально сложных концепций
1:19:33
Спасибо вам [музыка]

Поделиться: