Кажется наш канал временно превращается в "Войти в СУБД", ха-ха. Но я просто горю желанием раскрыть эту тему для начинающих специалистов. Не зря же моя дипломная работа в университете называлась "Система управления базами данных" - в юные годы я был очень амбициозен, и твёрдо убежден в том, что напишу СУБД, которая изменит мир.
Около 2-х лет подряд в те славные времена я писал собственную систему управления базами данных. В момент презентации, некоторый преподавательский состав был убеждён что это ворованный программный продукт (потому что ну никак им не верилось в то, чтобы студенты писали такие работы). Но конечно же, свою дипломную работу я не крал - а писал ее сам на волне вдохновения, мечтая о том как моя СУБД станет известной на весь мир (спойлер - не стала).
Так вот. Умение работать с базами данных - это одна из основ современного IT. Не уметь работать с СУБД будучи программистом, это как жить дома без холодильника - каждый раз когда нужно пополнить припасы, надо сразу бежать в магазин - не очень удобная история. Точно так же и приложения без СУБД - это только красивый интерфейс, который не может самостоятельно сохранять данные в режиме конкурентного доступа.
SQL - язык управления данными 🛠
SQL в определённом смысле не является языком программирования. Хотя, на нём можно программировать функции и процедуры внутри СУБД - и потом вызывать их из внешнего мира, или изнутри базы. Более корректно будет сказать, что SQL является языком для управления данными. Именно с этой целью он был создан, именно с этой целью он применяется. Задача SQL предельно проста - предоставлять простой синтаксис для быстрой вставки данных, быстрого и понятного поиска данных, а так же для описания структуры таблиц - в которых будут храниться данные.
На сегодняшний день SQL является универсальным стандартом, который поддерживают практически все реляционные СУБД. То есть, бОльшая часть известных мне СУБД поддерживает его "из коробки" как базовый язык для взаимодействия.
Язык SQL придумали в 1974 году внутри компании IBM Рэймонд Бойс (слева на фото) и Дональд Чемберлин (справа на фото). Вот эти ребята:
Краткий экскурс в историю. В 1970 году Эдгар Кодд придумал реляционные базы данных - вот статья на эту тему. Придумал, и поехал выступать с научными симпозиумами на эту тему по стране. И вот, в 1972 году, на одном из таких технических мероприятий, он встретил Бойса и Чембэрлина. Видимо вдохновившись жаркими беседами и искренним интересом Кодда к сути вопроса, в совместном авторстве эти двое учёных запилили язык SQL. Интересно, знали ли они на тот момент, что их язык станет золотым стандартом, и проникнет практически во все сферы жизни?
В 1986 году жизнь языка SQL приняла новый оборот! В игру вступил ISO - международная организация по стандартизации. SQL был описан как стандарт, и с тех пор этот стандарт поддерживается. За это время он был обновлён 10 раз, и кажется наиболее актуальной версией является версия от 2023 года. Подробнее об этом пишут в вики. Вот так же ссылка на стандарт языка SQL в версии от 2016 года.
Первой же СУБД, которая поддерживала SQL в качестве основного языка запросов - стала СУБД Oracle V2. Кстати про Oracle тоже можно почитать в предыдущих статьях. Ну и конечно нельзя обойти вниманием СУБД IBM System R, для которой (и в рамках которой) этот язык был создан.
Так же грустный факт - соавтор языка SQL Рэймонд Бойс скончался через месяц после завершения работы над первой версией SQL. Оставив свою жену и 10-месячную дочку.
Что касается Дональда Чэмберлина - кажется он жив-здоров, работает в компании Couchbase (разработчики noSQL СУБД) в качестве технического консультанта. Вот статья о нем в Англоязычной вики. Иронично, что автор SQL работает в команде которая делает noSQL решения.
Основные типы SQL-запросов 🔤
В основе языка SQL лежит всего 4 типа запросов - SELECT, INSERT, UPDATE, DELETE. Они соответствующим образом выполняют функции поиска, вставки, обновления и удаления записей в таблицах. Удивительно, но пожалуй 95% всех операций с данными в мире приходится именно на эти 4 запроса. И как мне кажется, превалирует в них с большим отрывом оператор SELECT - поиск данных.
Для работы с этими операторами обязательно нужна таблица с данными. Она может быть пустой или непустой, но она обязательно должна быть. То есть, каждый из этих операторов применяется к конкретной таблице - соответственно ища там запись, добавляя запись, либо удаляя или обновляя запись. Для создания таблицы данных используется операция CREATE TABLE.
Всего же существует гораздо больше SQL команд. В некоторых СУБД так же существует расширенная / собственная версия языка SQL. Но в общем и целом, основные операции крутятся вокруг 4-х вышеуказанных команд в базовом варианте, и порядка 10 команд для остальных действий.
Когда какому-то приложение нужно добавить данные в некоторую таблицу - создаётся и далее выполняется запрос типа INSERT. Когда приложению нужно обновить данные - используется запрос типа UPDATE. Для удаления данных используется запрос типа DELETE. И так далее.
Каждый запрос порождает в базе данных транзакцию - с информацией о том, кто, когда и где применил этот запрос. В итоге, список таких транзакций составляет историю изменений таблицы. Соответственно состояние таблицы можно менять на некоторую дату, "откатывая" список транзакций на некоторый конкретный день - возвращая базу данных к некоторому конкретному состоянию.
Все запросы передаются внутрь базы данных в виде обычного текста. Подключение происходит через TCP-IP протокол, по логину и паролю. Более подробнее об этом механизме я писал вот в этой статье.
Примеры SQL запросов 📘
И наконец-то, краткие примеры запросов для таблицы users - содержащей столбцы name, age, city - соответственно имя, возраст и город проживания.
SELECT name, age, city FROM users WHERE age=50;
// Найти всех пользователей возрастом 50 лет.
INSERT INTO users (name, age, city) VALUES (‘Вася’, 25, ‘Краснодар’);
// Добавить пользователя Вася с возрастом 25 лет, из Краснодара.
DELETE FROM users WHERE age=32;
// Удалить всех пользователей в возрасте 32 года.
UPDATE users SET name=‘Петя’ WHERE name=‘Вася’;
// Переименовать всех Вась на Петь.
Хотел найти и оставить тут ссылку на какой-нибудь годный сайт с простой шпаргалкой по SQL. К моему большому удивлению, не смог ни найти такого сайта, ни вспомнить по каким материалам учился я сам. Нашел только или очень сложные материалы, или слишком посредственные по качеству. Подумаю, может напишу сам что-то подобное.
🔥 Понравилось? Подпишись! Победим восстание роботов вместе! 🔥
🚀 P.S. Ты можешь круто поддержать меня и проект "Войти в IT" на boosty! Я публикую там более эксклюзивный и профессиональный, иногда немного личный контент. Хочешь посмотреть как я выгляжу в реальной жизни? Тогда жми: Ссылка 🚀
P.S.2 У меня ещё есть Telegram-канал. Там посты чуть попроще, и чуть повеселей. Ссылка