Продолжим начатое, а именно самое основное что нужно знать из части SQL. В прошлом уроке мы уже выяснили одни из самых важных моментов, для чего и где используется. В данном уроке будет уже не много сложнее, но и не меньше по степени значимости.
Функции
Функции в SQL играют не мало важную роль, и вот некоторые из них:
COUNT()
— возвращает количество строкSUM()
— возвращает общую сумму числового столбцаAVG()
— возвращает среднее значение из набора значенийMIN()
/MAX()
— получает минимальное / максимальное значение из колонки
1 |
SELECT MAX(released) FROM albums; |
Вложенные таблицы
В предыдущем пункте мы узнали, как сделать простые вычисления с данными. Если мы действительно хотим использовать результат этих вычислений, чаще всего вложенного запроса. Допустим мы хотим получить имя исполнителя, альбом и год выпуска для самого старого альбома в таблице.
Мы знаем, как получить эти конкретные столбцы:
1 |
SELECT artist, album, released FROM albums; |
Мы также знаем, как получить самый ранний год:
1 |
SELECT MIN(released) FROM album; |
Альбомы
artist | album | released | genre | sales_in_millions |
---|---|---|---|---|
Michael Jackson | Thriller | 1982 | pop | 70 |
AC/DC | Back in Black | 1980 | rock | 50 |
Pink Floyd | The Dark Side of the Moon | 1973 | rock | 45 |
Whitney Houston | The Bodyguard | 1992 | soul | 44 |
1 2 3 4 5 |
SELECT artist,album,released FROM albums WHERE released = ( SELECT MIN(released) FROM albums ); |
Объединение таблиц
В более сложных баз данных, в большинстве случаев существует несколько таблиц, связанных друг с другом каким-либо образом. Например, две таблицы о видеоиграх и разработчиков видеоигр.
В таблице video_games есть колонка developer_id ( разработчик ), но она содержит целое число , а не имя разработчика. Это число представляет собой идентификатор соответствующего разработчика из таблицы game_developers, связывая логически два листа, что позволяет нам использовать информацию , хранящуюся в них обоих одновременно.
Если мы хотим создать запрос , который возвращает все , что нужно знать об играх, мы можем использовать INNER JOIN
, чтобы получить столбцы из обеих таблиц.
video_games
id | name | developer_id | genre |
---|---|---|---|
1 | Super Mario Bros. | 2 | platformer |
2 | World of Warcraft | 1 | MMORPG |
3 | The Legend of Zelda | 2 | adventure |
game_developers
id | name | country |
---|---|---|
1 | Blizzard | USA |
2 | Nintendo | Japan |
1 2 3 4 |
SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country FROM video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id; |
JOIN
.
Аллиасы
Если вы посмотрите на предыдущий пример вы заметите , что есть два столбца с именем name. Это сбивает с толку, так что давайте изменим его, установив аллиас одного из повторяющихся столбцов: название от game_developers появится в качестве разработчика.
Мы также можем сократить запрос радикально, установив аллиасы имен таблиц: video_games становится games и game_developers становится devs.
video_games
id | name | developer_id | genre |
---|---|---|---|
1 | Super Mario Bros. | 2 | platformer |
2 | World of Warcraft | 1 | MMORPG |
3 | The Legend of Zelda | 2 | adventure |
game_developers
id | name | country |
---|---|---|
1 | Blizzard | USA |
2 | Nintendo | Japan |
1 2 3 4 |
SELECT games.name, games.genre, devs.name AS developer, devs.country FROM video_games AS games INNER JOIN game_developers AS devs ON games.developer_id = devs.id; |
Обновление
Часто приходится изменять данные в некоторых из строк. В SQL это делается с помощью UPDATE
.
Использование UPDATE
состоит из
- Выбора таблицы, где находиться запись, которую мы хотим изменить.
- Установка нового значения (ев) для разыскиваемого столбца (ов).
- Выбор с
WHERE
, какие строки мы хотим обновить. Если опущено все строки в таблице изменятся.
Ниже приведена таблица высоким рейтингом одного из сериалов. Существует одна маленькая проблема, Game of Thrones ( игра престолов ) описывается как комедия, которой она явно не является. Давайте исправим это.
tv_series
id | name | genre | still_running | imdb_rating |
---|---|---|---|---|
1 | Breaking Bad | drama | no | 9.5 |
2 | Game of Thrones | comedy | yes | 9.5 |
3 | Rick and Morty | comedy | yes | 9.4 |
4 | Sherlock | mystery | yes | 9.3 |
1 2 3 |
UPDATE tv_series SET genre = 'drama' WHERE id = 2; |
Удаление строк
Процесс удаление строки из таблицы с помощью SQL довольно простой. Все, что необходимо, это выбрать правильную таблицу и строку которую хотим удалить.
tv_series
id | name | genre | still_running | imdb_rating |
---|---|---|---|---|
1 | Breaking Bad | drama | no | 9.5 |
2 | Game of Thrones | comedy | yes | 9.5 |
3 | Rick and Morty | comedy | yes | 9.4 |
4 | Sherlock | mystery | yes | 9.3 |
1 2 |
DELETE FROM tv_series WHERE id = 4 |
DELETE
запроса убедитесь , что к WHERE
прилагается строка. Без него все строки таблицы будут удалены!
Удаление таблиц
Если мы хотим удалить все строки, но оставить саму таблицу, то лучше использовать TRUNCATE:
1 |
TRUNCATE TABLE table_name; |
В случае, если мы действительно хотим, чтобы удалились все следы таблицы, что-бы то ни было, команда DROP входит в игру:
1 |
DROP TABLE table_name; |
Будьте очень осторожны с этими командами. Там нет отмены!
Вывод
И на этом пока все Возможно будут еще новые статьи по теме SQL, ведь это такая масштабная вещь, которую полностью за 20 — 30 минут изучить нельзя. Но основы вполне возможно.