Команды SQL в одной таблице
Команды SQL делятся на несколько групп по тому, что они делают. В таблице собраны те, которые нужны чаще всего, а в каждом разделе ниже одна из них запускается на примере.
| Команда | Группа | Что делает |
|---|---|---|
CREATE TABLE | DDL | Создаёт новую таблицу и её столбцы |
ALTER TABLE | DDL | Добавляет или переименовывает столбец, переименовывает таблицу |
DROP TABLE | DDL | Удаляет таблицу вместе со всеми строками |
INSERT | DML | Добавляет новые строки |
UPDATE | DML | Изменяет значения в существующих строках |
DELETE | DML | Удаляет строки |
SELECT | DQL | Читает строки, фильтрует их через WHERE и сортирует через ORDER BY |
BEGIN, COMMIT, ROLLBACK | TCL | Объединяет изменения, чтобы они выполнились или отменились вместе |
DDL означает data definition language (язык определения данных), DML означает data manipulation language (язык манипулирования данными), DQL означает data query language (язык запросов), а TCL означает transaction control language (язык управления транзакциями). Важнее названий само разделение: DDL меняет форму базы данных, DML меняет её содержимое.
CREATE TABLE: создать таблицу
CREATE TABLE задаёт имя таблицы и перечисляет её столбцы с типами и правилами. Всем остальным командам на этой странице нужна таблица, с которой они будут работать.
На странице про CREATE TABLE разобраны правила вроде NOT NULL, UNIQUE и DEFAULT.
INSERT: добавить строки
INSERT INTO добавляет одну строку или несколько. Перечислите столбцы, затем значения в том же порядке.
Столбец id заполнился сам: INTEGER PRIMARY KEY получает следующий номер, если вы его не указали. Подробнее на странице INSERT.
SELECT: прочитать строки
SELECT это команда, которую вы будете писать чаще всего. Выберите столбцы, отфильтруйте строки через WHERE и отсортируйте их через ORDER BY.
Возвращаются только строки, прошедшие проверку WHERE, и первой идёт самая высокая оценка. Подробности на страницах основы SELECT и WHERE.
UPDATE: изменить строки
UPDATE записывает новые значения в уже существующие строки. Какие строки менять, решает условие WHERE; если его не указать, изменятся все строки.
Если вы не уверены, каким строкам соответствует условие WHERE, сначала выполните его как SELECT. На странице UPDATE есть другие приёмы.
DELETE: удалить строки
DELETE FROM удаляет строки, которые подходят под условие WHERE. Как и UPDATE, без условия команда затрагивает все строки.
Строки Chen больше нет, остальные не тронуты. См. DELETE.
ALTER TABLE и DROP TABLE: изменить или удалить таблицу
ALTER TABLE меняет существующую таблицу, не теряя её строк. DROP TABLE удаляет таблицу полностью.
Новый столбец в существующих строках содержит NULL, пока вы его не заполните. На странице ALTER и DROP TABLE перечислено, что разрешает SQLite.
JOIN: объединить таблицы
JOIN читает строки сразу из двух таблиц, сопоставляя их по общему столбцу.
У Boris нет записей о курсах, поэтому INNER JOIN его не включает. LEFT JOIN оставил бы его с пустым курсом.
GROUP BY: подвести итоги по группам
GROUP BY сворачивает строки с одинаковым значением в одну строку, а агрегатная функция вроде COUNT или AVG подводит итог по каждой группе.
Подробнее на страницах агрегатные функции и GROUP BY и HAVING.
BEGIN, COMMIT и ROLLBACK: объединить изменения
Транзакция заставляет несколько изменений считаться одним. COMMIT сохраняет их все, ROLLBACK отменяет их все.
Перевод был зафиксирован, а второе изменение откатилось, поэтому у Ada в итоге 70, а у Boris 80. Когда нужны транзакции, объясняет страница Транзакции.
Чем отличается SQLite
Команды на этой странице относятся к стандартному SQL, и всё, что вы изучите здесь, пригодится в MySQL и PostgreSQL. Но запускаемые примеры написаны для SQLite, и в больших СУБД меняются три детали:
- Список таблиц. Примеры читают
sqlite_master, собственную таблицу схемы SQLite. В MySQL для этого естьSHOW TABLES, а в PostgreSQL представлениеinformation_schema.tables(или\dtвpsql). - Автоматические id. В SQLite столбец, объявленный как
INTEGER PRIMARY KEY, сам нумерует новые строки, поэтому в примерах сINSERTстолбецidпропущен. В MySQL столбцу нуженAUTO_INCREMENT, а в PostgreSQL столбец идентичности (GENERATED BY DEFAULT AS IDENTITY) илиSERIAL. - Права и изменения схемы. В SQLite нет
GRANTиREVOKE, потому что база SQLite представляет собой один файл без учётных записей, а еёALTER TABLEне умеет менять тип столбца.
Часто задаваемые вопросы
Какие команды SQL основные?
Пять команд покрывают большую часть повседневной работы: CREATE TABLE создаёт таблицу, INSERT добавляет строки, SELECT читает их, UPDATE изменяет, а DELETE удаляет. Следом идут ALTER TABLE, DROP TABLE, JOIN, GROUP BY и команды транзакций BEGIN, COMMIT и ROLLBACK.
Чем DDL отличается от DML?
DDL (язык определения данных) меняет структуру базы данных: CREATE, ALTER и DROP. DML (язык манипулирования данными) меняет строки внутри таблиц: INSERT, UPDATE и DELETE. SELECT только читает данные, поэтому его часто выделяют отдельно как DQL.
Важен ли регистр в командах SQL?
Нет. SELECT, select и Select работают одинаково. Писать ключевые слова заглавными буквами принято для того, чтобы они выделялись на фоне имён таблиц и столбцов. А вот текст в кавычках сравнивается точно, поэтому в SQLite 'Ada' и 'ada' это разные строки, если вы не попросите сравнение без учёта регистра.
Работают ли эти команды так же в MySQL и PostgreSQL?
Эти операторы относятся к стандартному SQL и значат одно и то же во всех трёх СУБД, так что всё, что вы изучите здесь, пригодится и там. Но запускаемые примеры написаны для SQLite: список таблиц здесь читается из sqlite_master, для автоматических id в MySQL нужен AUTO_INCREMENT, а в PostgreSQL столбец идентичности, и в SQLite нет GRANT и REVOKE.