Супергеройское введение в SQL | В паутине

Супергеройское введение в SQL

Привет, отважный герой, мы ждали тебя! Мир на грани разрушения, злобный Доктор Релятивистус собирается устроить хаос в нашем упорядоченном мире данных. Собери команду и останови конец света. Вся надежда только на тебя!

Секретная база

Ты получишь все, что потребуется, чтобы подготовиться к битве с Релятивистусом. На этой секретной базе ты сможешь собрать и подготовить лучших героев современности.

В левом поле можно создать все нужные таблицы, определить их структуру, указать нужные параметры и добавить данные.

В правом поле можно выполнять запросы на выборку данных из созданных таблиц.

Набираем команду

Анкета

Нам нужны только сильнейшие герои современности – Супермен, Бэтмен, Железный Человек и, конечно, Черепашки Ниндзя.

Давай подготовим шаблон анкеты для всех желающих вступить в твою суперкоманду – создадим первую таблицу. Введи этот код в левое поле:

Оператор CREATE создает в базе данных новую таблицу с названием superheroes. Каждая строка внутри скобок – это отдельная колонка, или поле таблицы. Она определяет, какие именно данные нужно хранить.

Сначала указываем имя поля, потом тип данных, а дальше перечисляем необходимые атрибуты, которых может и не быть.

  • id – число (INT), которое будет автоматически увеличиваться для каждой следующей записи (AUTO_INCREMENT). Это поле служит первичным ключом (PRIMARY KEY) таблицы, то есть однозначно идентифицирует строку, в которой находится.
  • name – строка (VARCHAR) длиной не более 20 символов с именем супергероя, которая не может быть пустой (NOT NULL).
  • age – возраст. Если его не указать, будет автоматически подставлено значение по умолчанию (DEFAULT), то есть 0.
  • gender – пол («m» или «f»).
  • height – рост.

Атрибуты, которые каким-либо образом ограничивают возможные значения поля (длина, уникальность) называются ограничениями.

Нажми на кнопку Build Schema, чтобы зафиксировать структуру базы.

Если эта анкета кажется тебе недостаточно полной, ее всегда можно изменить. Например, было бы неплохо отдельно хранить геройское имя и реальное. Переименуем поле name на hero_name (заодно сделаем его уникальным – UNIQUE) и добавим новую колонку (код опять добавляется в левое поле):

А возраст, пожалуй, нам не понадобится, удалим его:

Первые герои

Стоило только объявить о наборе в суперкоманду, как подтянулись первые желающие – компания Мстителей. Нужно занести в базу их данные (опять в левое поле):

Оператор INSERT добавляет данные в таблицу superheroes. Перечисляем поля, которые хотим заполнить, и в нужном порядке добавляем значения. Содержимое каждых скобок после VALUES станет отдельной строкой, или записью таблицы.

Обрати внимание, тут нет поля id – оно заполняется автоматически увеличивающимся числом. Как и поле age, в него устанавливается дефолтное значение 0.

Вселенные и команды

Суперкоманда для битвы с Релятивистусом получится разношерстной. Многие из героев даже не будут знакомы между собой, а в битве требуется сплоченность и согласованность действий. Поэтому имеет смысл сохранить данные о том, в какие отряды изначально входили герои.

Создай еще две таблицы в левом поле:

Теперь добавь в супергеройскую анкету поля universe и team:

Почему у этих полей числовые значения? Мы поместим сюда ссылки на записи в таблицах universes и teams. Это позволит не привязываться к названиям, а также обеспечит целостность данных. Указать можно будет только одну из зафиксированных в базе вселенных.

Обеспечить связь между таблицами поможет внешний ключ (FOREIGN KEY).

Указываем название ключа (hero_universe, hero_team), поле, к которому он относится, а также ссылку на поле связанной таблицы.

Сейчас в твоей команде только представители вселенной Marvel из отряда Мстителей, поэтому можно сразу же заполнить нужные поля для всех записей:

Слишком много Флешей

Вот еще одна порция заявок на вступление в суперкоманду для битвы с Релятивистусом. На этот раз от Лиги Справедливости. Это крутые ребята, можешь добавить их в левое поле:

Ух ты, сразу все Флеши пришли. Хьюстон, у нас проблемы!

База не позволяет внести записи с дублирующимся полем hero_name, ведь мы установили для него атрибут UNIQUE. Но это совершенно очевидно три разных человека, хоть и под маской одного и того же героя. Изменим ограничение уникальности:

Теперь можно внести данные новых героев.

Супергерои в сборе

Вот еще желающие:

Добавь их в базу и начинай готовиться к решающей битве с Релятивистусом.

Подготовка команды

Обращаться к нужным членам команды ты можешь с помощью оператора SELECT и множества способов фильтрации в SQL.

Найти участников тебе поможет оператор SELECT и множество способов фильтрации данных. Вводи запросы в правом поле.

Перекличка!

По росту становись!

Заодно узнаем средний, минимальный и максимальный рост героев:

Ради развлечения можно вычислить высоту пирамиды из супергероев:

На боевые группы разбейся!

Группы получились неравномерные, лучше их объединить в отряды.

Первый отряд – Мстители:

Второй отряд – Черепашки и Люди-Икс:

Третий отряд Лига Справедливости и Хэллбой:

Выработка стратегии

В разведку пойдут самые маленькие и шустрые:

Решающий удар нанесут два самых мощных героя:


А Флеши будут изматывать и запутывать противника.

Перед боем

Чтобы сбросить напряжение перед решающей битвой с Релятивистусом супергеройская команда устроила вечеринку и решила выбрать короля вечера. По традиции в выборах участвовали только герои, в именах которых есть слова MAN или BOY.

Отбирая кандидатов, не забудьте исключить женщин – они будут участвовать в выборе королевы.

Решающая битва

Объединение

Твоя команда выстраивается в боевом порядке:

Этот полный список получен путем радикального тройного внутреннего объединения таблиц базы. Сначала мы перечислили все интересующие нас поля, а затем установили условие соответствия.

Герои из разных отрядов и разных вселенных объединились и плечом к плечу встали против злобного доктора Релятивистуса.

Победа

Разумеется, ты победил! Разве могло быть иначе с такой потрясающей командой супергероев?

Порядок в мире данных восстановлен, а доктор Релятивистус убежал.

Пришла пора наградить всех героев, участвовавших в битве:

Благодаря оператору DISTINCT в итоговой таблице мы получим только одного Флеша, а не трех.

Сцена после титров

В любом супергеройском приключении обязательно должна быть сцена после титров, может быть даже и не одна.

Супергеройская команда распалась, она выполнила свою функцию. Все расходятся по своим вселенным. Пора удалять таблицу из базы:

Подождите секунду! Кто это там выглядывает из-за угла, коварно хихикая?

Да это же злобный доктор Релятивистус!

Нет, мы не будем совсем удалять таблицу. Просто очистим ее, чтобы в нужный момент снова собрать команду героев.

Полный код базы здесь.

Комментарии (0)

Ваш email не будет опубликован. Все поля обязательны