· INSERT - добавить строки в таблицу
· UPDATE - изменить строки в таблице
· DELETE - удалить строки в таблице
· COMMIT - зафиксировать внесенные изменения
· ROLLBACK - откатить внесенные изменения
Наиболее важными для пользователя являются операторы манипулирования данными (DML).
Пример 1. Вставка одной строки в таблицу Р (поля PNUM и PNAME):
INSERT INTO P (PNUM, PNAME)VALUES (4, "Иванов");Пример 2. Вставка в таблицу нескольких строк, выбранных из другой таблицы (в таблицу TMP_TABLE вставляются данные о поставщиках из таблицы P, имеющие номера, большие 2):
INSERT INTOTMP_TABLE (PNUM, PNAME)SELECT PNUM, PNAMEFROM PWHERE P.PNUM>2;Пример 3. Обновление нескольких строк в таблице Р (присвоить значение Пушников полю PNAME в записях, в которых в поле PNUM стоит значение 1):
UPDATE P SET PNAME = "Пушников" WHEREP.PNUM = 1;Пример 4. Удаление нескольких строк в таблице:
DELETE FROM PWHERE P.PNUM = 1;Пример 5. Удаление всех строк в таблице:
DELETEFROMP;Оператор SELECT является фактически самым важным для пользователя и самым сложным оператором SQL. Он предназначен для выборки данных из таблиц, т.е. он, собственно, и реализует одно их основных назначение базы данных - предоставлять информацию пользователю.
Оператор SELECT всегда выполняется над некоторыми таблицами, входящими в базу данных.
Замечание. На самом деле в базах данных могут быть не только постоянно хранимые таблицы, а также временные таблицы и так называемые представления. Представления - это просто хранящиеся в базе данные SELECT-выражения. С точки зрения пользователей представления - это таблица, которая не хранится постоянно в базе данных, а "возникает" в момент обращения к ней. С точки зрения оператора SELECT и постоянно хранимые таблицы, и временные таблицы и представления выглядят совершенно одинаково. Конечно, при реальном выполнении оператора SELECT системой учитываются различия между хранимыми таблицами и представлениями, но эти различия скрыты от пользователя.
Результатом выполнения оператора SELECT всегда является таблица. Таким образом, по результатам действий оператор SELECT похож на операторы реляционной алгебры. Любой оператор реляционной алгебры может быть выражен подходящим образом сформулированным оператором SELECT. Сложность оператора SELECT определяется тем, что он содержит в себе все возможности реляционной алгебры, а также дополнительные возможности, которых в реляционной алгебре нет.
Пример 6. Выбрать все данные (ставим *) из таблицы Р (ключевые слова SELECT… FROM…):
SELECT *FROMP;Замечание. В результате получим новую таблицу, содержащую полную копию данных из исходной таблицы P.
Пример 7. Выбрать все строки (ставим *) из таблицы Р, удовлетворяющих некоторому условию (ключевое слово WHERE…) (где в поле PNUM стоит значение, большее 2):
SELECT *FROM PWHERE P.PNUM > 2;Замечание. В качестве условия в разделе WHERE можно использовать сложные логические выражения, использующие поля таблиц, константы, сравнения (>, <, = и т.д.), скобки, союзы AND (и) и OR(или), отрицание NOT (не).
Пример 8. Выбрать значения некоторого поля (например, все значения (*) поля NAME) из исходной таблицы Р (указание списка отбираемых колонок):
SELECT P.NAMEFROM P;Замечание. В результате получим таблицу с одной колонкой, содержащую все наименования поставщиков.
Замечание. Если в исходной таблице присутствовало несколько поставщиков с разными номерами, но одинаковыми наименованиями, то в результатирующей таблице будут строки с повторениями - дубликаты строк автоматически не отбрасываются.
Пример 9. Выбрать некоторые колонки из исходной таблицы, удалив из результата повторяющиеся строки (ключевое слово DISTINCT):
SELECT DISTINCT P.NAMEFROM P;Замечание. Использование ключевого слова DISTINCT приводит к тому, что в результатирующей таблице будут удалены все повторяющиеся строки.
Пример 10. Использование скалярных выражений и переименований колонок в запросах (ключевое слово AS…):
SELECTTOVAR.PRICE,"=" AS EQU,TOVAR.KOL*TOVAR.PRICE AS SUMMAFROM TOVAR;В результате получим таблицу с колонками, которых не было в исходной таблице TOVAR:
TNAME | KOL | PRICE | EQU | SUMMA |
Болт | 10 | 100 | = | 1000 |
Гайка | 20 | 200 | = | 4000 |
Винт | 30 | 300 | = | 9000 |
Пример 11.Упорядочение результатов запроса (ключевое слово ORDER BY…):
SELECTPD.PNUM,PD.DNUM,PD.VOLUMEFROM PDORDER BY DNUM;В результате получим следующую таблицу, упорядоченную по полю DNUM:
PNUM | DNUM | VOLUME |
1 | 1 | 100 |
2 | 1 | 150 |
3 | 1 | 1000 |
1 | 2 | 200 |
2 | 2 | 250 |
1 | 3 | 300 |
Пример 12. Упорядочение результатов запроса по нескольким полям с возрастанием или убыванием (ключевые слова ASC, DESC):
SELECTPD.PNUM,PD.DNUM,PD.VOLUMEFROM PDORDER BY DNUM ASC,VOLUMEDESC;В результате получим таблицу, в которой строки идут в порядке возрастания значения поля DNUM, а строки, с одинаковым значением DNUM идут в порядке убывания значения поля VOLUME:
PNUM | DNUM | VOLUME |
3 | 1 | 1000 |
2 | 1 | 150 |
1 | 1 | 100 |
2 | 2 | 250 |
1 | 2 | 200 |
1 | 3 | 300 |
Замечание. Если явно не указаны ключевые слова ASC или DESC, то по умолчанию принимается упорядочение по возрастанию (ASC).
Пример 13. Естественное соединение таблиц (способ 1 - явное указание условий соединения):
SELECTP.PNUM,P.PNAME,PD.DNUM,PD.VOLUMEFROM P, PDWHERE P.PNUM = PD.PNUM;В результате получим новую таблицу, в которой строки с данными о поставщиках соединены со строками с данными о поставках деталей:
PNUM | PNAME | DNUM | VOLUME |
1 | Иванов | 1 | 100 |
1 | Иванов | 2 | 200 |
1 | Иванов | 3 | 300 |
2 | Петров | 1 | 150 |
2 | Петров | 2 | 250 |
3 | Сидоров | 1 | 1000 |
Замечание. Соединяемые таблицы перечислены в разделе FROM оператора, условие соединения приведено в разделе WHERE. Раздел WHERE, помимо условия соединения таблиц, может также содержать и условия отбора строк.
Пример 14. Естественное соединение таблиц (способ 2 - ключевые слова JOIN… USING…):
SELECTP.PNUM,P.PNAME,PD.DNUM,PD.VOLUMEFROM P JOIN PD USING PNUM;Замечание. Ключевое слово USING позволяет явно указать, по каким из общих колонок таблиц будет производиться соединение.
Пример 15. Естественное соединение таблиц (способ 3 - ключевое слово NATURAL JOIN):
SELECTP.PNUM,P.PNAME,PD.DNUM,PD.VOLUMEFROM P NATURAL JOIN PD;Замечание. В разделе FROM не указано, по каким полям производится соединение. NATURAL JOIN автоматически соединяет по всем одинаковым полям в таблицах.
Пример 16. Естественное соединение трех таблиц:
SELECTP.PNAME,D.DNAME,PD.VOLUMEFROMP NATURAL JOIN PD NATURAL JOIN D;В результате получим следующую таблицу:
PNAME | DNAME | VOLUME |
Иванов | Болт | 100 |
Иванов | Гайка | 200 |
Иванов | Винт | 300 |
Петров | Болт | 150 |
Петров | Гайка | 250 |
Сидоров | Болт | 1000 |
Пример 17. Прямое произведение таблиц:
SELECTP.PNUM,P.PNAME,D.DNUM,D.DNAMEFROM P, D;В результате получим следующую таблицу:
PNUM | PNAME | DNUM | DNAME |
1 | Иванов | 1 | Болт |
1 | Иванов | 2 | Гайка |
1 | Иванов | 3 | Винт |
2 | Петров | 1 | Болт |
2 | Петров | 2 | Гайка |
2 | Петров | 3 | Винт |
3 | Сидоров | 1 | Болт |
3 | Сидоров | 2 | Гайка |
3 | Сидоров | 3 | Винт |
Замечание. Т.к. не указано условие соединения таблиц, то каждая строка первой таблицы соединится с каждой строкой второй таблицы.
Иногда приходится выполнять запросы, в которых таблица соединяется сама с собой, или одна таблица соединяется дважды с другой таблицей. При этом используются имена корреляции (алиасы, псевдонимы), которые позволяют различать соединяемые копии таблиц. Имена корреляции вводятся в разделе FROM и идут через пробел после имени таблицы. Имена корреляции должны использоваться в качестве префикса перед именем столбца и отделяются от имени столбца точкой. Если в запросе указываются одни и те же поля из разных экземпляров одной таблицы, они должны быть переименованы для устранения неоднозначности в именованиях колонок результатирующей таблицы. Определение имени корреляции действует только во время выполнения запроса.
Пример 19. Отобрать все пары поставщиков таким образом, чтобы первый поставщик в паре имел статус, больший статуса второго поставщика:
SELECTP1.PNAME AS PNAME1,P1.PSTATUS AS PSTATUS1,P2.PNAME AS PNAME2,P2.PSTATUS AS PSTATUS2FROMP P1, P P2WHERE P1.PSTATUS1 > P2.PSTATUS2;В результате получим следующую таблицу:
PNAME1 | PSTATUS1 | PNAME2 | PSTATUS2 |
Иванов | 4 | Петров | 1 |
Иванов | 4 | Сидоров | 2 |
Сидоров | 2 | Петров | 1 |
Пример 21. Получить общее количество поставщиков (ключевое слово COUNT):
SELECT COUNT(*) AS NFROM P;В результате получим таблицу с одним столбцом и одной строкой, содержащей количество строк из таблицы P:
N |
3 |
Пример 22. Получить общее, максимальное, минимальное и среднее количества поставляемых деталей (ключевые слова SUM, MAX, MIN, AVG):