пятница, 11 января 2019 г.

Команда SELECT Раздел ORDER BY

Раздел ORDER BY

Фраза ORDER BY используется для того, чтобы упорядочить строки, извлекаемые запросом.
В предложении ORDER BY SQL можно задавать несколько выражений. Сначала сортируются строки, основываясь на их значениях для первого выражения. Строки с одним и тем же значением для первого выражения затем сортируются по второму выражению и так далее. NULL-значения располагает после всех других при упорядочивании в порядке возрастания и перед всеми другими при сортировке в убывающем порядке.
Вместо имени столбца можно указать его позицию для сокращения записи длинного выражения.
Кроме того, при составлении сложных запросов, содержащих множественные операторы UNION, INTERSECT, MINUS, или UNION ALL, в предложении ORDER BY лучше использовать позиции, чем непосредственно сами выражения. Предложение ORDER BYможет появляться только в последнем составляющем запросе и сортирует строки, полученные всем составным запросом в целом.
Предложение ORDER BY подчинено следующим ограничениям:
  • Если в утверждении SELECT используются и оператор ORDER BY и оператор DISTINCT, то  предложение ORDER BY не может ссылаться на столбцы, не упоминаемые в списке выбора выбираемых столбцов.
  • Предложение ORDER  BY не может появляться в подзапросах внутри других утверждений.

ORDER BY в обратном порядке

Выбрать из EMP записи по всем продавцам, и упорядочить результаты по размерам комиссионных в обратном порядке (убывающем порядке):
SELECT * FROM emp WHERE job = ‘SALESMAN’ ORDER BY comm DESC;

ORDER BY в возрастающем порядке

Выбрать из EMP записи по всем сотрудникам, и упорядочить результаты по размерам комиссионных в возрастающем порядке:
SELECT * FROM emp WHERE job = ‘SALESMAN’ ORDER BY comm ASC;

ORDER BY в возрастающем и убывающем порядке

Выбрать из EMP записи по служащим, упорядоченные сначала по возрастанию номера отдела а затем по убыванию размера оклада:
SELECT ename, deptno, sal FROM emp ORDER BY deptno ASC, sal DESC;

Команда SELECT Раздел WHERE

Раздел WHERE

Если в табличном выражении присутствует раздел WHERE, то следующим вычисляется он.
Условие, следующее за ключевым словом WHERE, может включать предикат условия поиска, булевские операторы AND (и), OR (или) и NOT(нет) и скобки, указывающие требуемый порядок вычислений.
Вычисление раздела WHERE производится по следующим правилам: Пусть R — результат вычисления раздела FROM. Тогда условие поиска применяется ко всем строкам R, и результатом раздела WHERE является таблица SQL, состоящая из тех строк R, для которого результатом вычисления условия поиска является true. Если условие выборки включает подзапросы, то каждый подзапрос вычисляется для каждого кортежа таблицы R (в стандарте используется термин “effectively” в том смысле, что результат должен быть таким, как если бы каждый подзапрос действительно вычислялся заново для каждого кортежа R).
Среди предикатов условия поиска в соответствии со стандартом могут находиться следующие предикаты: предикат сравненияпредикат betweenпредикат inпредикат likeпредикат nullпредикат с квантором и предикат exists.
При проверке условия выборки числа сравниваются алгебраически: отрицательные числа считаются меньше, чем положительные, независимо от их абсолютной величины. Строки сравниваются в соответствии с их представлением в коде ANSI. При сравнении двух строк, имеющих разные длины, предварительно более короткая строка дополняется справа пробелами для того, чтобы обе строки имели одинаковую длину.
Предикат сравнения с выражениями или результатами подзапроса. Условие определяется из двух выражений, разделенных одним из знаков операции отношения: =<>(не равно), >>=< и <=.
Арифметические выражения левой и правой частей предиката сравнения строятся по общим правилам построения арифметических выражений и могут включать в общем случае имена столбцов таблиц из раздела FROM и константы. Типы данных арифметических выражений должны быть сравнимыми (например, если тип столбца a таблицы A является типом символьных строк, то предикат “a = 5” недопустим).
Если правый операнд операции сравнения задается подзапросом, то дополнительным ограничением является то, что мощность результата подзапроса должна быть не более единицы. Если хотя бы один из операндов операции сравнения имеет неопределенное значение, или если правый операнд является подзапросом с пустым результатом, то значение предиката сравнения равно unknown.
Для обеспечения переносимости прикладных программ нужно внимательно оценивать специфику работы с неопределенными значениями в конкретной СУБД.

Примеры выборки SELECT с разделом WHERE

Выборка кода и фамилии покупателей, проживающих в Москве.
SELECT CUSTOMERNO, FIRSTNAME, LASTNAME FROM CUSTOMER WHERE CITY = ‘Москва’;
Выборка из таблицы emp данных по служащим отдела с номером 40:
SELECT * FROM emp  WHERE deptno = 40;
Извлечение из таблицы записи с полями  имя, должность, размер оклада и номер отдела для всех служащих за исключением продавцов из отдела с номером 30:
SELECT ename, job, sal, deptno FROM emp WHERE NOT deptno = 30;

Команда SELECT Раздел FROM

Раздел FROM

Результатом выполнения раздела FROM является расширенное декартово произведение таблиц, заданных списком таблиц раздела FROM, которое в стандарте определяется следующим образом:
“Расширенное произведение R есть мультимножество всех строк r таких, что r является конкатенацией строк из всех идентифицированных таблиц в том порядке, в котором они идентифицированы. Мощность R есть произведение мощностей идентифицированных таблиц. Порядковый номер столбца в R есть n+s, где n — порядковый номер порождающего столбца в именованной таблице T, а s — сумма степеней всех таблиц, идентифицированных до T в разделе FROM”.

Примеры простой выборки SELECT

Пример 1. Выборка полей fname и sname из таблицы persons.
SELECT fname, sname FROM persons;
Пример 2. Выборка всех полей из таблицы persons без перечисления названий полей.
SELECT * FROM persons;
Результирующая таблица может включать не только поля исходных таблиц, но и результат вычисления над полями таблицы. В выражениях могут использоваться арифметические операторы и функции. Перечень допустимых функций определяется используемым диалектом языка SQL. Функции являются наиболее узким местом при переносе приложений из одного сервера данных на другой.
Конструкция SELECT может включать арифметические выражения, а также простые имена полей. Кроме того, можно добавить константы в результат выборки.
Пример 3. Выборка полей: id товара, текстовое поле «цена товара» и стоимость товара.
SELECT idgoods, «Цена», price FROM goods;

Команда DROP

Команда DROP

Используя запрос DROP можно удалить таблицы (TABLE), индексы (INDEX) и базы данных (DATABASE).

DROP TABLE

DROP TABLE, применяемый в базе данных Oracle.
Обычно с таблицей в базе данных связано несколько объектов, например индекс, создаваемый первичным ключом, или ограничение UNIQUE, налагаемое на столбцы таблицы.
При удалении таблицы Oracle автоматически удаляет и любой связанный с ней индекс. Для удаления таблицы из БД необходимо выполнить команду DROP TABLE:
DROP TABLE Пример 1
Удаление таблицы:
DROP TABLE table;
Однако удалить таблицу не всегда столь просто. В любой момент мы можем создать таблицу с ограничениями целостности. Ограничение целостности (Integrityconstraint ) – это правило, устанавливаемое для таблицы и ограничивающее тип данных, которые можно вводить в эту таблицу. Если попытаться удалить таблицу с ограничениями целостности, возвращается сообщение об ошибке следующего вида: «Unique/primary keys in table referenced by foreign keys» (на уникальные/первичные ключи таблицы ссылаются внешние ключи).
Когда существуют ограничения для других таблиц, на которые ссылается удаляемая таблица, можно пользоваться каскадной конструкцией CASCADE CONSTRAINTS:
DROP TABLE. Пример 2
Удаление таблицы с ограничениями целостности:
DROP TABLE table CASCADE CONSTRAINTS;
DROP TABLE, применяемый в mySQL
DROP TABLE. Пример 3
Для удаления таблицы также используется запрос:
DROP TABLE table;
DROP TABLE. Пример 4
В случае, если необходимо установить проверку на существование таблицы при удалении (если существует удалить таблицу) запрос принимает следующий вид:
DROP TABLE IF EXISTS table;
Данный запрос будет выполнен в том случае, если удаляемая таблица существует в базе данных.
DROP INDEX
Данный запрос DROP INDEX используется для удаления индексов в таблице.
DROP INDEX, применяемый в базе данных Oracle:
Когда индекс в базе данных больше не нужен, разработчик может удалить его командой DROP INDEX. После удаления индекса эффективность поиска с использованием столбца или столбцов, ограниченных индексом, больше не повышается и упоминание об индексе исчезает из словаря данных. Индекс, применяемый для первичного ключа, удалить нельзя.
Синтаксис оператора DROP INDEX одинаков для удаления индекса любого типа (уникальности, битовой карты или В-дерева). Чтобы каким-то образом улучшить индекс, нужно сначала удалить его, а потом создать новый.
DROP INDEX. Пример 1
DROP INDEX my_index;
DROP INDEX, применяемый в mySQL:
DROP INDEX. Пример 2
Для удаления индексов (INDEX) используется запрос:
DROP INDEX my_index ON table;
Данный запрос удаляет индексы, указанные в my_index из таблицы table, но она не работает в версиях MySQL до 3.22. В версиях 3.22 и более поздних используется команда:
ALTER TABLE table_name DROP INDEX index_name;
DROP DATABASE
DROP DATABASE. Пример 1
DROP DATABASE database;
Запрос DROP DATABASE удаляет базу данных database.

TRUNCATE TABLE

Запрос TRUNCATE TABLE используется для того, чтобы удалить данные внутри таблицы, тем самым не затрагивая саму таблицу. В нужном случае TRUNCATE TABLE может быть очень полезен.
TRUNCATE TABLE, примеры использования TRUNCATE TABLE
TRUNCATE TABLE. Пример 1
TRUNCATE TABLE table;
DROP SEQUENCE
DROP SEQUENCE используется для удаления последовательности.
DROP SEQUENCE. Пример 1
DROP SEQUENCE sequence_name;
DROP SYNONYM
DROP SYNONYM используется для удаления синонимов.
DROP SYNONYM. Пример 1
DROP SYNONYM synonym_name;
Для удаления общих синонимов необходимо воспользоваться командой DROP PUBLIC SYNONYM.
DROP SYNONYM. Пример 2
DROP PUBLIC SYNONYM synonym_name;

команда REVOKE

С помощью команды REVOKE осуществляется отмена привилегий, синтаксис команды REVOKE аналогичен синтаксису команды GRANT.
Пример 1. Отмена привилегии CREATE TABLE на создание таблиц в базе данных у пользователя user
REVOKE CREATE TABLE FROM user;
Пример 2. Отмена привилегии SELECT на выборку записей из таблицы
REVOKE SELECT ON table_name FROM user;
Пример 3. Отмена привилегий UPDATE и DELETE на изменение и удаления записей
REVOKE UPDATE, DELETE ON table_name FROM user;
Пример 4. Отмена общих привилегий
REVOKE ALL ON table_name FROM user;

Команда GRANT

С помощью команд управления данными можно управлять доступом пользователей к базе данных.
Команда GRANT используется для назначения привилегий пользователям.
Синтаксис команды GRANT:
GRANT
Синтаксис команды GRANT
  • system_priv — системная привилегия
  • role — роль: набор соответствующих полномочий, которые администратор может коллективно предоставлять пользователям и другим ролям.
  • user — пользователь
  • PUBLIC —  привилегия передается всем пользователям
  • WITH ADMIN OPTION — если предоставлены системные полномочия или роли, то параметр позволяет пользователю передать полномочие или роль другим пользователям или ролям
Пример 1
Предположим, пользователь Р1 является владельцем таблицы Student и нужно передать пользователю Р2 право на формулирование запросов к этой таблице:
GRANT SELECT ON Student TO P2;
Пример 2
Для передачи прав на другие привилегии синтаксис тот же самый. Пользователь Р1, являющийся владельцем таблицы Student, может разрешить пользователю Р2 вводить строки в нее:
GRANT INSERT ON Student TO P2;
Пример 3
Передача привилегий не ограничивается передачей единственной привилегии единственному пользователю с помощью одной команды GRANT. Допустимы списки привилегий и/или пользователей с элементами, разделенными запятыми:
GRANT SELECT, INSERT ON Student TO P2;
GRANT SELECT, INSERT ON Student TO P2, Р3;
Пример 4
Можно разрешить пользователю изменять значения любого или всех столбцов таблицы:
GRANT UPDATE ON Student TO P2;
GRANT UPDATE (Fam,Ball) ON Student TO P2;
Пример 5
Если необходимо предоставить кому-то все полномочия на конкретный объект, используется ключевое слово ALL:
GRANT ALL ON Student ТО Р2;
Пример 6
Когда передаются привилегии с атрибутом PUBLIC, который относится  к пользователям, а не к привилегиям, то все пользователи получают их автоматически. Чаще всего это применяется для привилегии SELECT для определенных таблиц или представлений, которые нужно предоставить каждому пользователю для рассмотрения. Разрешить каждому пользователю просматривать таблицу Student можно следующей командой:
GRANT SELECT ON Student TO PUBLIC;
Пример 7.
Иногда создатель таблицы хочет, чтобы другие пользователи имели право передавать привилегии на эту таблицу. Это можно сделать с помощью предложения WITH GRANT OPTION. Если пользователь Р1 желает, чтобы пользователь Р2 имел право передавать полномочия на работу с таблицей Student другим пользователям, то он должен передать пользователю Р2 привилегию на выполнение соответствующих команд:
GRANT SELECT, INSERT ON Student ТО Р2 WITH GRANT OPTION;

SET TRANSACTION

В Oracle пользователю разрешается выполнять несколько операторов изменения данных как одну логическую единицу работы, заканчиваемую или сохранением результатов в базе данных, или их отменой. Транзакция начинается с первого исполняемого SQL-операторапользователя и заканчивается явной фиксацией (завершением) или откатом со стороны пользователя.
Транзакции обрабатываются группой управляющих средств, с помощью которых пользователь может выдать команду INSERTUPDATE или DELETE, указывающую начало серии команд изменения данных. После внесения изменений в базу данных пользователь может сохранить данные в базе, закончив транзакцию явным образом. Если же в любой момент транзакции возникает ошибка, пользователь может отменить изменения в базе данных, возвратив ее в состояние, в котором она находилась до начала транзакции.
Транзакции создаются посредством  двух различных элементов базы данных Oracle. Первый – это набор команд, определяющий начало, контрольные точки и окончание транзакции, а второй – специальный механизм блокирования, предотвращающий изменение информации строк базы данных несколькими пользователями одновременно.

SET TRANSACTION

Транзакции описываются следующими командами:
  • SET TRANSACTION – начинает транзакцию и устанавливает ее базовые характеристики.
  • COMMIT – заканчивает текущую транзакцию сохранением изменений в базе данных и начинает новую транзакцию
  • ROLLBACK – заканчивает текущую транзакцию отменой изменений в базе данных и начинает новую транзакцию
  • SAVEPOINT – устанавливает контрольные точки (точки прерывания) для транзакции, разрешая неполный откат.
Команда SET TRANSACTION является необязательной, так как транзакция начинается:
  • после регистрации пользователя в Oracle с помощью SQL*Plus и исполнения им первой команды
  • после выдачи команды ROLLBACK или COMMIT, заканчивающей транзакцию
  • после выхода пользователя из системы
  • в результате аварии системы
  • после выдачи команды описания данными, например ALTER DATABASE
Команда COMMIT в обработке транзакций представляет тот момент времени, когда пользователь уже внес необходимые изменения как одну логическую группу, а поскольку ошибок не произошло, он готов к сохранению результатов своей работы. Выдачей команды COMMIT в базе данных еще и неявно закрывается текущая транзакция и начинается новая.
Откат транзакции выполняется не только в результате выдачи команды ROLLBACK, но и неявно, когда выполнение оператора по той или иной причине заканчивается неудачно или когда пользователь отменяет оператор командой CTRL-C.
Установка контрольных точек с помощью команды SAVEPOINT позволяет разбить весь объем работы, выполняемой транзакцией, на отдельные сегменты. Откат можно производить только до конкретной точки сохранения, оставляя предшествующие изменения в силе. Точки сохранения очень полезны в ситуациях, когда необходимо восстановить часть незавершенной транзакции. Следующий пример показывает, что в программном блоке сохраняются только те изменения, которые были внесены до описания точки сохранения:
UPDATE my_table.products SET price=50 WHERE product=10010;
SAVEPOINT точка_сохранения;
UPDATE my_table.products SET price=200;
ROLLBACK TO SAVEPOINT точка_сохранения;
COMMIT;

SET ROLE Oracle

SET ROLE Oracle

Роль (ROLE) – это именованный элемент базы данных, который объединяет несколько привилегий. Если имеется несколько привилегий для одной роли, то между привилегиями и ролями создается отношение «многие – к-одному». Роль – это уникальный элемент базы данных, не принадлежащий пользователю. Ее можно создать с помощью команды CREATE ROLE, причем наименование роли не может совпадать с именем пользователя. При наличии привилегии CREATE ROLE пользователи также могут задавать привилегии. После создания роль становится частью заданного по умолчанию набора ролей.
Какая роль назначена тому или иному пользователю, СУБД может определить в процессе его опознания по паролю. Для присвоения пользователю роли используется команда SET ROLE.

SET ROLE Пример 1

Пользователь USER1 создает роль my_role без защиты паролей, передает ей набор привилегий. Затем использование роли данным пользователем разрешается (активизируется) или запрещается с помощью команды SET ROLE.

ROLE Oracle

CREATE ROLE my_role NOT IDENTIFIED;
GRANT SELECTINSERT ON Student TO my_role;
GRANT UPDATE (Fam,Ball) ON Student TO my_role;
SET ROLE my_role IDENTIFIED BY st;
После этого пользователь USER1 может передать право на использование роли my_role другому пользователю с помощью команды GRANT.

SQL SELECT

Команда SELECT

Команда SELECT производит выборку данных из таблиц по запросу.
Язык SQL допускает три типа синтаксических конструкций, начинающихся с ключевого слова SELECT:
  1. оператор выборки (select statement)
  2. спецификация курсора (cursor specification)
  3. подзапрос (subquery).

Синтаксис команды SELECT в MySQL

SELECT
Синтаксис команды SELECT в Oracle
Основные ключевые слова и параметры команды SELECT в MySQL
  • DISTINCT — возвращает только одно значение  для каждого набора одинаковых выбранных значений столбца
  • ALL — возвращает все выбранные строки, включая все повторяющиеся значения столбцов (принимается по умолчанию)
  • * — выбирает все столбцы из всех таблиц или представлений, перечисленных после оператора  FROM
  • schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
  • table.*  view.* — выбирает все столбцы из указанной таблицы, представления
  • Expr — извлекает из таблицы (представления) некоторое определяемое выражение
  • table view — имя таблицы(представления), из которой происходит выборка  данных.
  • subquery — подзапрос, который сервер обрабатывает тем же самым способом как представление.
  • WHERE — ограничивает множество строк выборкой тех записей, для которых условие является истинным; если это предложение опускается, сервер возвращает все строки из таблиц.
  • GROUP BY — группирует выбранные строки по группам строк с одинаковым значением указанных полей и возвращает одиночную строку итоговой информации для каждой группы.
  • HAVING — ограничивает выбираемые группы строк такими группами, для которых определяемое условие является истинным; если это предложение опускается, сервер возвращает строки всех групп.
  • UNION UNION ALL INTERSECT MINUS — объединяет строки, возвращенные двумя утверждениями SELECT с использованием операции пересечения множеств; для ссылки на столбец вводится псевдоним для его обозначения; предложение FOR UPDATE не может использоваться с этими операторами
  • ORDER BY — упорядочивает строки, возвращенные запросом.
  • Expr— значение выражения определяет правило  упорядочивания строк.
  • ASC DESC — определяет порядок вывода данных (по возрастанию или по убыванию); значением по умолчанию является ASC.
  • FOR UPDATE — блокирует выбранные строки.
  • OF — блокирует выбираемые строки для специфической таблицы в объединении.
  • NOWAIT — возвращает  управление пользователю, если команда SELECT пытается блокировать строку, которая уже блокирована другим пользователем; если это предложение опускается, сервер ждет, пока строка не станет доступной и только тогда возвращает результаты команды SELECT.

Синтаксис команды SELECT в Oracle

Синтаксис команды SELECT в Oracle
Синтаксис команды SELECT в Oracle
Query table expression clause
Query table expression clause
Sample clause
Sample clause
With clause
With clause
Table collection expression
Table collection expression
Where clause
Where clause
Outer join
Outer join
Hierarchical query clause
Hierarchical query clause
Group by clause
Group by clause
Order by clause
Order by clause
For update clause
For update clause

Основные ключевые слова и параметры команды SELECT в Oracle

  • DISTINCT — возвращает только одно значение  для каждого набора одинаковых выбранных значений столбца.
  • ALL — возвращает все выбранные строки в Oracle, включая все повторяющиеся значения столбцов (принимается по умолчанию).
  • * — выбирает все столбцы из всех таблиц или представлений, перечисленных после раздела  FROM.
  • schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя.
  • table.*  view.* — выбирает все столбцы из указанной таблицы Oracle, представления.
  • Expr — извлекает из таблицы (представления) некоторое определяемое выражение.
  • table view — имя таблицы(представления), из которой происходит выборка  данных.
  • c_alias – алиасное имя (псевдоним) извлекаемого столбца, выражения.
  • t_alias – алиасное имя (псевдоним) таблицы Oracle.
  • subquery — подзапрос, который сервер обрабатывает тем же самым способом как представление.
  • WHERE — ограничивает множество строк выборкой тех записей, для которых условие является истинным; если это предложение опускается, сервер возвращает все строки из таблиц Oracle.
  • GROUP BY — группирует выбранные строки по группам строк с одинаковым значением указанных полей и возвращает одиночную строку итоговой информации для каждой группы.
  • HAVING — ограничивает выбираемые группы строк такими группами, для которых определяемое условие является истинным; если это предложение опускается, сервер возвращает строки всех групп.
  • UNION [ALL] INTERSECT MINUS — объединяет строки, возвращенные двумя утверждениями SELECT с использованием операции пересечения множеств; для ссылки на столбец вводится псевдоним для его обозначения. Предложение FOR UPDATE не может использоваться с этими операторами.
  • ORDER BY — упорядочивает строки, возвращенные запросом: в Expr — указывается значение выражения, которое определяет правило  упорядочивания строк по возрастанию ASC или убыванию DESC. Значением по умолчанию является ASC.
  • PARTITION —  в отличие от ORDER BY позволяет частично упорядочивать набор данных.
  • FOR UPDATE — блокирует выбранные строки.
  • NOWAIT — возвращает  управление пользователю, если команда SELECT пытается блокировать строку, которая уже блокирована другим пользователем; если это предложение опускается, сервер ждет, пока строка не станет доступной и только тогда возвращает результаты команды SELECT.

Описание команды SELECT

Основой всех синтаксических конструкций, начинающихся с ключевого слова SELECT, является синтаксическая конструкция “табличное выражение”.
Семантика табличного выражения состоит в том, что на основе последовательного применения разделов FROMWHEREGROUP BY и HAVING из заданных в разделе FROMтаблиц строится некоторая новая результирующая таблица, порядок следования строк которой не определен и среди строк которой могут находиться дубликаты (т.е. в общем случае таблица-результат табличного выражения является мультимножеством строк).
Наиболее общей является конструкция “спецификация курсора”. Курсор — это понятие языка SQL, позволяющее с помощью набора специальных операторов получить построчный доступ к результату запроса к БД. К табличным выражениям, участвующим в спецификации курсора, не предъявляются какие- либо ограничения. При определении спецификации курсора используются три дополнительных конструкции: спецификация запроса, выражение запросов и раздел ORDER BY.
В спецификации запроса задается список выборки (список арифметических выражений над значениями столбцов результата табличного выражения и констант). В результате применения списка выборки к результату табличного выражения производится построение новой таблицы, содержащей то же число строк, но вообще говоря другое число столбцов, содержащих результаты вычисления соответствующих арифметических выражений из списка выборки.
Выражение запросов — это выражение, строящееся по указанным синтаксическим правилам на основе спецификаций запросов. Единственной операцией, которую разрешается использовать в выражениях запросов, является операция UNION(объединение таблиц) с возможной разновидностью UNION ALL.
Оператор выборки — это отдельный оператор языка SQL, позволяющий получить результат запроса в прикладной программе без привлечения курсора. Поэтому оператор выборки имеет синтаксис, отличающийся от синтаксиса спецификации курсора, и при его выполнении возникают ограничения на результат табличного выражения. Фактически, и то, и другое диктуется спецификой оператора выборки как одиночного оператора SQL: при его выполнении результат должен быть помещен в переменные прикладной программы. Поэтому в операторе появляется раздел INTO, содержащий список переменных прикладной программы, и возникает то ограничение, что результирующая таблица должна содержать не более одной строки.
В диалекте SQL СУБД Oracle поддерживается расширенный вариант оператора выборки, результатом которого не обязательно является таблица из одной строки. Такое расширение не поддерживается ни в SQL/89, ни в SQL/92.
Подзапрос — запрос, который может входить в предикат условия выборки оператора SQL.
Кстати, данную статью Вы можете найти в интернете по запросам:
Команда SELECTСинтаксис команды SELECTОписание команды SELECT.
  • SELECT
  • Команда SELECT
  • SQL SELECT
  • Синтаксис команды SELECT
  • Описание команды SELECT

SQL Команда UPDATE

Команда UPDATE

Команда UPDATE — производит изменения в уже существующей записи или во множестве записей в таблице SQL. Изменяет существующие значения в таблице или в основной таблице представления.

Команда UPDATE Синтаксис команды

UPDATE
Синтаксис команды UPDATE
Команда UPDATE. Основные ключевые слова и параметры команды UPDATE
  • schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
  • table view — имя таблицы SQL, в которой изменяются данные; если определяется представление, данные изменяются в  основной таблице SQL представления
  • subquery_1 — подзапрос, который сервер обрабатывает тем же самым способом как представление
  • сolumn — столбец таблицы SQL или представления SQL, значение которого изменяется; если столбец таблицы из предложения SET опускается, значение столбца остается неизменяемым
  • expr — новое значение, назначаемое соответствующему столбцу; это выражение может содержать главные переменные и необязательные  индикаторные переменные
  • subquery_2 — новое значение, назначаемое соответствующему столбцу
  • subquery_3 — новое значение, назначаемое соответствующему столбцу
WHERE — определяет диапазон изменяемых строк теми, для которых определенное условие является TRUE; если опускается эта фраза, модифицируются все строки в таблице или представлении.
При выдаче утверждения UPDATE включается любой UPDATE-триггер, определенный на таблице.
Подзапросы. Если предложение SET содержит подзапрос, он возвращает точно одну строку для каждой модифицируемой строки. Каждое значение в результате подзапроса назначается соответствующим столбцам списка в круглых скобках. Если подзапрос не возвращает никакие строки, столбцу назначается NULLПодзапросы могут выбирать данные из модифицируемой таблицы. Предложение SET может совмещать выражения и подзапросы.
Команда UPDATE Пример 1
Изменение для всех покупателей рейтинга на значение, равное 200:
UPDATE Customers SET rating = 200;
Команда UPDATE Пример 2
Замена значения столбца во всех строках таблицы, как правило, используется редко. Поэтому в команде UPDATE, как и в команде DELETE, можно использовать предикат. Для выполнения указанной замены значений столбца rating, для всех покупателей, которые обслуживаются продавцом Giovanni (snum = 1003), следует ввести:
UPDATE Customers SET rating = 200 WHERE snum = 1001;
Команда SQL UPDATE Пример 3
В предложении SET можно указать любое количество значений для столбцов, разделенных запятыми:
UPDATE emp SET job = ‘MANAGER’, sal = sal + 1000, deptno = 20 WHERE ename = ‘JONES’;
Команда UPDATE Пример 4
В предложении SET можно указать значение NULL без использования какого-либо специального синтаксиса (например, такого как IS NULL). Таким образом, если нужно установить все рейтинги покупателей из Лондона (city = ‘London’) равными NULL-значению, необходимо ввести:
UPDATE Customers SET rating = NULL WHERE city = ‘London’;
Команда UPDATE Пример 5
Поясняет использование следующих синтаксических конструкций команды UPDATE:
  • Обе формы предложения SET вместе в одном утверждении.
  • Подзапрос.
  • Предложение WHERE, ограничивающее диапазон  модифицируемых строк.
UPDATE emp a SET deptno =
(SELECT deptno FROM dept WHERE loc = ‘BOSTON’), (sal, comm) = (SELECT1.1*AVG(sal), 1.5*AVG(comm) FROM emp b WHERE a.deptno = b.deptno) WHERE deptno IN (SELECT deptno FROM dept WHERE loc = ‘DALLAS’ OR loc = ‘DETROIT’);
Вышеупомянутое утверждение UPDATE выполняет следующие операции:
  • Модифицирует только тех служащих, кто работают в Dallas или Detroit
  • Устанавливает значение колонки deptno для служащих из Бостона
  • Устанавливает жалованье каждого служащего в 1.1 раз больше среднего жалованья всего отдела
  • Устанавливает комиссионные каждого служащего в 1.5 раза больше  средних комиссионных всего отдела