Синтаксис в SQL - языка программирования определяется и поддерживается ISO / IEC SC 32 в рамках ISO / IEC 9075 . Этот стандарт не доступен в свободном доступе. Несмотря на существование стандарта, код SQL не может быть полностью переносимым между различными системами баз данных без корректировок.
Элементы языка
Язык SQL подразделяется на несколько языковых элементов, в том числе:
- Ключевые слова - это слова, определенные в языке SQL. Они либо зарезервированы (например
SELECT
,COUNT
иYEAR
), либо не зарезервированы (напримерASC
,DOMAIN
иKEY
). Список зарезервированных слов SQL . - Идентификаторы - это имена объектов базы данных, таких как таблицы, столбцы и схемы. Идентификатор может не совпадать с зарезервированным ключевым словом, если только это не ограниченный идентификатор. Идентификаторы с разделителями означают идентификаторы, заключенные в двойные кавычки. Они могут содержать символы, обычно не поддерживаемые в идентификаторах SQL, и могут быть идентичны зарезервированному слову, например, столбец с именем
YEAR
определяется как"YEAR"
. - Предложения , которые являются составными компонентами утверждений и запросов. (В некоторых случаях это необязательно.) [1]
- Выражения , которые могут создавать либо скалярные значения, либо таблицы, состоящие из столбцов и строк данных.
- Предикаты , которые определяют условия, которые могут быть оценены с помощью трехзначной логики SQL (3VL) (истина / ложь / неизвестно) или логических значений истинности и используются для ограничения эффектов операторов и запросов или для изменения потока программы.
- Запросы , которые извлекают данные на основе определенных критериев. Это важный элемент SQL .
- Операторы , которые могут иметь постоянное влияние на схемы и данные или могут управлять транзакциями, потоком программы, соединениями, сеансами или диагностикой.
- Незначительные пробелы обычно игнорируются в операторах и запросах SQL, что упрощает форматирование кода SQL для удобства чтения.
Операторы
Оператор | Описание | Пример |
---|---|---|
= | Равно | Author = 'Alcott' |
<> | Не равно (многие СУБД принимают != в дополнение к <> ) | Dept <> 'Sales' |
> | Больше чем | Hire_Date > '2012-01-31' |
< | Меньше, чем | Bonus < 50000.00 |
>= | Больше или равно | Dependents >= 2 |
<= | Меньше или равно | Rate <= 0.05 |
[NOT] BETWEEN [SYMMETRIC] | Между включительным диапазоном. SYMMETRIC инвертирует границы диапазона, если первая выше второй. | Cost BETWEEN 100.00 AND 500.00 |
[NOT] LIKE [ESCAPE] | Начинается с рисунка персонажа | Full_Name LIKE 'Will%' |
Содержит образец символа | Full_Name LIKE '%Will%' | |
[NOT] IN | Равно одному из нескольких возможных значений | DeptCode IN (101, 103, 209) |
IS [NOT] NULL | Сравнить с нулем (данные отсутствуют) | Address IS NOT NULL |
IS [NOT] TRUE или же IS [NOT] FALSE | Проверка значения логической истинности | PaidVacation IS TRUE |
IS NOT DISTINCT FROM | Равно значению или оба значения равны нулю (данные отсутствуют) | Debt IS NOT DISTINCT FROM - Receivables |
AS | Используется для изменения имени столбца при просмотре результатов | SELECT employee AS department1 |
Иногда предлагались или реализовывались другие операторы, такие как оператор линии горизонта (для поиска только тех строк, которые не «хуже» других).
В SQL есть case
выражение, появившееся в SQL-92 . В самом общем виде, который в стандарте SQL называется «искомый случай»:
СЛУЧАЙ, КОГДА n > 0 ТОГДА 'положительный' КОГДА n < 0 ТОГДА 'отрицательный' Иначе 'ноль' END
SQL проверяет WHEN
условия в том порядке, в котором они появляются в источнике. Если в источнике не указано ELSE
выражение, по умолчанию используется SQL ELSE NULL
. Также можно использовать сокращенный синтаксис, называемый «простой случай»:
СЛУЧАЙ n КОГДА 1 ТО "Один" КОГДА 2 ТОГДА "Два" ELSE "Я не могу сосчитать этот высокий" КОНЕЦ
В этом синтаксисе используется неявное сравнение на равенство с обычными предостережениями при сравнении с NULL .
Существуют две короткие формы специальных CASE
выражений: COALESCE
и NULLIF
.
В COALESCE
выражении возвращает значение первой не-NULL операнда, найдено, работая слева направо, или NULL , если все операнды равны NULL.
КОАЛЕС ( x1 , x2 )
эквивалентно:
СЛУЧАЙ , КОГДА x1 IS NOT NULL THEN x1 ELSE x2 END
NULLIF
Выражение имеет два операнда и возвращает NULL , если операнды имеют то же значение, в противном случае он имеет значение первого операнда.
NULLIF ( x1 ; x2 )
эквивалентно
СЛУЧАЙ, КОГДА x1 = x2 ТОГДА NULL ELSE x1 END
Комментарии
Стандартный SQL допускает два формата для комментариев :, -- comment
который заканчивается первой новой строкой , и /* comment */
, который может занимать несколько строк.
Запросы
Самая распространенная операция в SQL, запрос, использует декларативный SELECT
оператор. SELECT
извлекает данные из одной или нескольких таблиц или выражений. Стандартные SELECT
операторы не оказывают постоянного воздействия на базу данных. Некоторые нестандартные реализации SELECT
могут иметь постоянные эффекты, например SELECT INTO
синтаксис, представленный в некоторых базах данных. [2]
Запросы позволяют пользователю описывать требуемые данные, оставляя систему управления базами данных (СУБД) для выполнения планирования , оптимизации и выполнения физических операций, необходимых для получения желаемого результата.
Запрос включает список столбцов для включения в окончательный результат, обычно сразу после SELECT
ключевого слова. Звездочка (" *
") может использоваться, чтобы указать, что запрос должен возвращать все столбцы запрошенных таблиц. SELECT
- самый сложный оператор в SQL, с необязательными ключевыми словами и предложениями, которые включают:
- Предложение
FROM
, которое указывает таблицы, из которых нужно получить данные. ПредложениеFROM
может включать необязательныеJOIN
подпункты для определения правил объединения таблиц. - Предложение
WHERE
включает предикат сравнения, который ограничивает строки, возвращаемые запросом. ПредложениеWHERE
исключает все строки из набора результатов, в которых предикат сравнения не имеет значения True. - Предложение
GROUP BY
проецирует строки, имеющие общие значения, в меньший набор строк. [ требуется пояснение ]GROUP BY
часто используется в сочетании с функциями агрегирования SQL или для удаления повторяющихся строк из набора результатов. ПредложениеWHERE
применяется передGROUP BY
предложением. - Предложение
HAVING
включает предикат, используемый для фильтрации строк, являющихся результатомGROUP BY
предложения. Поскольку он действует на результатыGROUP BY
предложения, вHAVING
предикате предложения можно использовать функции агрегирования . - Предложение
ORDER BY
определяет, какой столбец [столбцы] использовать для сортировки результирующих данных и в каком направлении их сортировать (по возрастанию или по убыванию). БезORDER BY
предложения порядок строк, возвращаемых запросом SQL, не определен. DISTINCT
Ключевое слово [3] устраняет дубликаты данных. [4]- Предложение
OFFSET
определяет количество строк, которые нужно пропустить перед началом возврата данных. - Предложение
FETCH FIRST
определяет количество возвращаемых строк. Некоторые базы данных SQL вместо этого имеют нестандартные альтернативы, напримерLIMIT
,TOP
илиROWNUM
.
Пункты запроса имеют определенный порядок выполнения [5], который обозначается числом справа. Это выглядит следующим образом:
SELECT | 5. |
FROM | 1. |
WHERE | 2. |
GROUP BY | 3. |
HAVING | 4. |
ORDER BY | 6. |
OFFSET | 7. |
FETCH FIRST | 8. |
В следующем примере SELECT
запроса возвращается список дорогих книг. Запрос извлекает все строки из таблицы Book, в которой столбец цен содержит значение больше 100,00. Результат сортируется по заголовку в порядке возрастания . Звездочка (*) в списке выбора указывает, что все столбцы таблицы Book должны быть включены в набор результатов.
ВЫБЕРИТЕ * ИЗ ЗАКАЗА, ГДЕ цена > 100 . 00 ЗАКАЗАТЬ ПО заголовку ;
В приведенном ниже примере демонстрируется запрос нескольких таблиц, группировки и агрегирования путем возврата списка книг и количества авторов, связанных с каждой книгой.
ВЫБЕРИТЕ книгу . title AS Название , количество ( * ) AS Авторы ИЗ книги ПРИСОЕДИНЯЙТЕСЬ Book_author ON Книга . isbn = Автор_книги . isbn ГРУППА ПО Книга . название ;
Пример вывода может выглядеть следующим образом:
Название Авторы---------------------- -------Примеры SQL и руководство 4Радость SQL 1Введение в SQL 2Подводные камни SQL 1
При предварительном условии, что isbn является единственным общим именем столбца для двух таблиц и что столбец с именем title существует только в таблице Book , можно переписать приведенный выше запрос в следующей форме:
ВЫБРАТЬ заголовок , количество ( * ) КАК Авторы ИЗ книги ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ Book_author ГРУППА ПО заголовку ;
Однако многие поставщики [ количественной оценки ] либо не поддерживают этот подход, либо требуют определенных соглашений об именах столбцов для эффективной работы естественных объединений.
SQL включает в себя операторы и функции для вычисления значений по сохраненным значениям. SQL позволяет использовать выражения в списке выбора для проецирования данных, как в следующем примере, который возвращает список книг стоимостью более 100,00 с дополнительным столбцом sales_tax, содержащим сумму налога с продаж, рассчитанную по ставке 6% от цены .
ВЫБЕРИТЕ isbn , название , цену , цену * 0 . 06 AS sales_tax FROM Книги WHERE цена > 100 . 00 ЗАКАЗАТЬ ПО заголовку ;
Подзапросы
Запросы могут быть вложенными, чтобы результаты одного запроса можно было использовать в другом запросе с помощью реляционного оператора или функции агрегирования. Вложенный запрос также известен как подзапрос . В то время как соединения и другие операции с таблицами во многих случаях предоставляют альтернативы, превосходящие в вычислительном отношении (то есть более быстрые), использование подзапросов вводит иерархию при выполнении, которая может быть полезной или необходимой. В следующем примере функция агрегирования AVG
получает в качестве входных данных результат подзапроса:
ВЫБЕРИТЕ isbn , название , цену ИЗ книги ГДЕ цена < ( ВЫБЕРИТЕ СРЕДНЮЮ ( цену ) ИЗ книги ) ЗАКАЗАТЬ ПО заголовку ;
Подзапрос может использовать значения из внешнего запроса, и в этом случае он называется коррелированным подзапросом .
С 1999 года стандарт SQL допускает WITH
разделы для подзапросов, то есть именованные подзапросы, обычно называемые общими табличными выражениями (также называемые факторизацией подзапросов ). CTE также могут быть рекурсивными , ссылаясь на самих себя; Результирующий механизм позволяет обходы дерева или графа (когда они представлены как отношения) и, в более общем смысле, вычисления фиксированных точек .
Производная таблица
Производная таблица является использование ссылок в SQL подзапрос в предложении FROM. По сути, производная таблица - это подзапрос, который можно выбрать или присоединить к нему. Функциональность производной таблицы позволяет пользователю ссылаться на подзапрос как на таблицу. Встроенное представление также называется встроенным представлением или подзапросом .
В следующем примере оператор SQL включает соединение исходной таблицы «Книга» с производной таблицей «Продажи». Эта производная таблица фиксирует связанную информацию о продажах книг с использованием номера ISBN для присоединения к таблице «Книга». В результате производная таблица предоставляет результирующий набор с дополнительными столбцами (количество проданных товаров и компания, которая продала книги):
ВЫБРАТЬ b . isbn , б . название , б . цена , распродажа . items_sold , продажи . company_nm ИЗ книги b JOIN ( SELECT SUM ( Items_Sold ) Items_Sold , Company_Nm , ISBN FROM Book_Sales GROUP BY Company_Nm , ISBN ) sales ON sales . isbn = b . isbn
Нулевая или трехзначная логика (3VL)
Концепция Null позволяет SQL обрабатывать недостающую информацию в реляционной модели. Слово NULL
является зарезервированным ключевым словом в SQL, используемым для идентификации специального маркера Null. Сравнение с Null, например равенство (=) в предложениях WHERE, приводит к неизвестному значению истинности. В операторах SELECT SQL возвращает только те результаты, для которых предложение WHERE возвращает значение True; т. е. он исключает результаты со значением False, а также исключает те, значение которых неизвестно.
Таким образом, наряду с True и False, неизвестное, полученное в результате прямого сравнения с Null, привносит в SQL фрагмент трехзначной логики . Таблицы истинности, которые SQL использует для AND, OR и NOT, соответствуют общему фрагменту трехзначной логики Клини и Лукасевича (которые различаются своим определением импликации, однако SQL не определяет такую операцию). [6]
|
|
|
|
Однако существуют споры о семантической интерпретации пустых значений в SQL из-за ее обработки вне прямых сравнений. Как видно из приведенной выше таблицы, прямое сравнение на равенство между двумя значениями NULL в SQL (например {{{1}}}
) возвращает значение истинности Неизвестно. Это соответствует интерпретации, что Null не имеет значения (и не является членом какой-либо области данных), а скорее является заполнителем или «меткой» для отсутствующей информации. Тем не менее, принцип , согласно которому два Нули не равны друг другу эффективно нарушается в спецификации SQL для UNION
и INTERSECT
операторов, которые делают идентифицировать аннулирует друг с другом. [7] Следовательно, эти операции с наборами в SQL могут давать результаты, не представляющие достоверную информацию, в отличие от операций, включающих явные сравнения с NULL (например, те, которые WHERE
описаны в пункте, описанном выше). В предложении Кодда 1979 года (которое в основном было принято SQL92) эта семантическая несогласованность рационализирована тем, что удаление дубликатов в операциях над наборами происходит «на более низком уровне детализации, чем проверка равенства при оценке операций поиска». [6] Однако профессор компьютерных наук Рон ван дер Мейден пришел к выводу, что «несоответствия в стандарте SQL означают, что невозможно приписать какую-либо интуитивную логическую семантику обработке нулей в SQL». [7]
Кроме того, поскольку операторы SQL возвращают значение Unknown при прямом сравнении чего-либо с Null, SQL предоставляет два предиката сравнения, специфичных для NULL: IS NULL
и IS NOT NULL
проверяет, являются ли данные NULL или нет. [8] SQL явно не поддерживает универсальную количественную оценку и должен работать как отрицательная количественная оценка существования . [9] [10] [11] Также существует инфиксный оператор сравнения «<выражение значения строки> IS DISTINCT FROM BOOLEAN
переменные типа, которые, согласно стандарту, также могут содержать значения Unknown, если они допускают значение NULL. На практике ряд систем (например, PostgreSQL ) реализуют BOOLEAN Unknown как BOOLEAN NULL, который, как сказано в стандарте, означает, что NULL BOOLEAN и UNKNOWN «могут использоваться взаимозаменяемо для обозначения одного и того же». C. Дата (2011 г.). SQL и теория отношений: как писать точный код SQL . O'Reilly Media, Inc. стр. 83. ISBN 978-1-4493-1640-2. [12]
Манипуляция данными
Языка манипулирования данными (DML) является подмножеством SQL используется для добавления, обновления и удаления данных:
INSERT
добавляет строки (формально кортежи ) в существующую таблицу, например:
ВСТАВИТЬ НА пример ( столбец1 , столбец2 , Столбец3 ) ЗНАЧЕНИЯ ( 'тест' , 'N' , NULL );
UPDATE
изменяет набор существующих строк таблицы, например:
ОБНОВЛЕНИЕ пример SET column1 = 'обновленное значение' WHERE column2 = 'N' ;
DELETE
удаляет существующие строки из таблицы, например:
УДАЛИТЬ ИЗ примера WHERE column2 = 'N' ;
MERGE
используется для объединения данных нескольких таблиц. Она сочетает в себеINSERT
иUPDATE
элементы. Он определен в стандарте SQL: 2003; до этого некоторые базы данных предоставляли аналогичные функции через другой синтаксис, иногда называемый « upsert ».
MERGE INTO table_name С ИСПОЛЬЗОВАНИЕМ табличная_ссылка ON ( состояние ) КОГДА MATCHED THEN UPDATE SET column1 = value1 [, column2 = значение2 ...] КОГДА НЕ MATCHED THEN INSERT ( COLUMN1 [, column2 ...]) VALUES ( значение1 [, значение2 ... ])
Контроль транзакций
Транзакции, если они доступны, обертывают операции DML:
START TRANSACTION
(илиBEGIN WORK
, илиBEGIN TRANSACTION
, в зависимости от диалекта SQL) отмечает начало транзакции базы данных , которая либо завершается полностью, либо не завершается вовсе.SAVE TRANSACTION
(илиSAVEPOINT
) сохраняет состояние базы данных на текущий момент транзакции
CREATE TABLE tbl_1 ( ID INT ); ВСТАВИТЬ INTO tbl_1 ( ID ) ЗНАЧЕНИЯ ( 1 ); ВСТАВИТЬ INTO tbl_1 ( ID ) ЗНАЧЕНИЯ ( 2 ); COMMIT ; ОБНОВЛЕНИЕ tbl_1 SET id = 200 WHERE id = 1 ; SAVEPOINT id_1upd ; ОБНОВЛЕНИЕ tbl_1 SET id = 1000 WHERE id = 2 ; ROLLBACK в id_1upd ; ВЫБЕРИТЕ идентификатор из таблицы_1 ;
COMMIT
делает все изменения данных в транзакции постоянными.ROLLBACK
отменяет все изменения данных с момента последнегоCOMMIT
илиROLLBACK
, оставляя данные такими, какими они были до этих изменений. После завершенияCOMMIT
инструкции изменения транзакции не могут быть отменены.
COMMIT
и ROLLBACK
завершить текущую транзакцию и снять блокировки данных. В отсутствие такого START TRANSACTION
или подобного оператора семантика SQL зависит от реализации. В следующем примере показана классическая транзакция перевода средств, когда деньги удаляются с одного счета и добавляются к другому. Если удаление или добавление не удается, откатывается вся транзакция.
НАЧАТЬ СДЕЛКУ ; ОБНОВЛЕНИЕ УСТАНОВКА учетной записи сумма = сумма - 200 ГДЕ account_number = 1234 ; ОБНОВЛЕНИЕ УСТАНОВКА учетной записи сумма = сумма + 200 ГДЕ account_number = 2345 ; ЕСЛИ ОШИБКИ = 0 COMMIT ; ЕСЛИ ОШИБКИ <> 0 ОТКАТ ;
Определение данных
Язык определения данных (DDL) управляет структурой таблиц и индексов. Самые основные пункты DDL являются CREATE
, ALTER
, RENAME
, DROP
и TRUNCATE
заявлением:
CREATE
создает объект (например, таблицу) в базе данных, например:
CREATE TABLE пример ( столбец1 ЦЕЛОЕ , столбец2 УАКСНАК ( 50 ), Столбец3 ДАТА НЕ NULL , ПЕРВИЧНЫЙ КЛЮЧ ( столбец1 , столбец2 ) );
ALTER
изменяет структуру существующего объекта различными способами, например, добавляя столбец в существующую таблицу или ограничение, например:
Пример ALTER TABLE ADD column4 INTEGER DEFAULT 25 NOT NULL ;
TRUNCATE
очень быстро удаляет все данные из таблицы, удаляя данные внутри таблицы, а не саму таблицу. Обычно это подразумевает последующую операцию COMMIT, т. Е. Ее нельзя откатить (данные не записываются в журналы для отката позже, в отличие от DELETE).
Пример TRUNCATE TABLE ;
DROP
удаляет объект в базе данных, как правило, безвозвратно, т.е. его невозможно откатить, например:
Пример DROP TABLE ;
Типы данных
Каждый столбец в таблице SQL объявляет тип (ы), который может содержать этот столбец. ANSI SQL включает следующие типы данных. [13]
- Строки символов и строки национальных символов
CHARACTER(n)
(или ): строка n- символов фиксированной ширины , дополненная пробелами по мере необходимостиCHAR(n)
CHARACTER VARYING(n)
(или ): строка переменной ширины с максимальным размером n символовVARCHAR(n)
CHARACTER LARGE OBJECT(n [ K | M | G | T ])
(или ): символ большого объекта с максимальным размером n [K | M | G | T] персонажиCLOB(n [ K | M | G | T ])
NATIONAL CHARACTER(n)
(или ): строка фиксированной ширины, поддерживающая международный набор символовNCHAR(n)
NATIONAL CHARACTER VARYING(n)
(или ): строка переменной шириныNVARCHAR(n)
NCHAR
NATIONAL CHARACTER LARGE OBJECT(n [ K | M | G | T ])
(или ): большой объект национального характера с максимальным размером n [K | M | G | T] персонажиNCLOB(n [ K | M | G | T ])
Для CHARACTER LARGE OBJECT
и NATIONAL CHARACTER LARGE OBJECT
типов данных, умножители K
(1 024), M
(1 048 576), G
(1 073 741 824) и T
(1 099 511 627 776) , могут быть необязательно использованы при определении длины.
- Двоичный
BINARY(n)
: Двоичная строка фиксированной длины, максимальная длина n .BINARY VARYING(n)
(или ): двоичная строка переменной длины, максимальная длина n .VARBINARY(n)
BINARY LARGE OBJECT(n [ K | M | G | T ])
(или ): большой двоичный объект с максимальной длиной n [K | M | G | Т] .BLOB(n [ K | M | G | T ])
Для BINARY LARGE OBJECT
типа данных при указании длины можно дополнительно использовать множители K
(1 024), M
(1 048 576), G
(1 073 741 824) и T
(1 099 511 627 776).
- Логический
BOOLEAN
Тип BOOLEAN
данных может хранить значения TRUE
и FALSE
.
- Числовой
INTEGER
(илиINT
),SMALLINT
иBIGINT
FLOAT
,REAL
иDOUBLE PRECISION
NUMERIC(precision, scale)
или жеDECIMAL(precision, scale)
DECFLOAT(precision
)
Например, число 123,45 имеет точность 5 и масштаб 2. Точность - это положительное целое число, которое определяет количество значащих цифр в определенной системе счисления (двоичной или десятичной). Шкала является неотрицательным целым числом. Шкала 0 указывает, что число является целым числом. Для десятичного числа со шкалой S, точное числовое значение представляет собой целое значение значащих цифр , разделенных на 10 S .
SQL предоставляет функции CEILING
и FLOOR
для округления числовых значений. (Популярные функции конкретных поставщиков: TRUNC
(Informix, DB2, PostgreSQL, Oracle и MySQL) и ROUND
(Informix, SQLite, Sybase, Oracle, PostgreSQL, Microsoft SQL Server и Mimer SQL.))
- Временной (дата и время)
DATE
: для значений даты (например2011-05-03
).TIME
: для значений времени (например15:51:36
).TIME WITH TIME ZONE
: то же, что иTIME
, но с указанием подробностей о рассматриваемом часовом поясе.TIMESTAMP
: Это aDATE
и a,TIME
объединенные в одну переменную (например2011-05-03 15:51:36.123456
).TIMESTAMP WITH TIME ZONE
: то же, что иTIMESTAMP
, но с указанием подробностей о рассматриваемом часовом поясе.
Функцию SQL EXTRACT
можно использовать для извлечения одного поля (например, секунд) значения даты и времени или интервала. Действующая система даты / времени сервера баз данных может быть вызвана с помощью таких функций , как CURRENT_DATE
, CURRENT_TIMESTAMP
, LOCALTIME
или LOCALTIMESTAMP
. (Популярные функции конкретного поставщика являются TO_DATE
, TO_TIME
, TO_TIMESTAMP
, YEAR
, MONTH
, DAY
, HOUR
, MINUTE
, SECOND
, DAYOFYEAR
, DAYOFMONTH
и DAYOFWEEK
.)
- Интервал (дата и время)
YEAR(precision)
: количество летYEAR(precision) TO MONTH
: количество лет и месяцевMONTH(precision)
: количество месяцевDAY(precision)
: количество днейDAY(precision) TO HOUR
: количество дней и часовDAY(precision) TO MINUTE
: количество дней, часов и минутDAY(precision) TO SECOND(scale)
: количество дней, часов, минут и секундHOUR(precision)
: количество часовHOUR(precision) TO MINUTE
: количество часов и минутHOUR(precision) TO SECOND(scale)
: количество часов, минут и секундMINUTE(precision)
: количество минутMINUTE(precision) TO SECOND(scale)
: количество минут и секунд
Контроль данных
Язык управления данными (DCL) разрешает пользователям получать доступ к данным и манипулировать ими. Его два основных утверждения:
GRANT
разрешает одному или нескольким пользователям выполнять операцию или набор операций с объектом.REVOKE
устраняет грант, который может быть грантом по умолчанию.
Пример:
GRANT SELECT , UPDATE ON пример TO some_user , another_user ;REVOKE SELECT , UPDATE ON пример FROM some_user , another_user ;
Заметки
- ^ Международный стандарт ANSI / ISO / IEC (IS). Язык баз данных SQL - Часть 2: Основа (SQL / Foundation). 1999 г.
- ^ «Справочник по Transact-SQL». Справочник по языку SQL Server . Электронная документация по SQL Server 2005. Microsoft. 2007-09-15 . Проверено 17 июня 2007 .
- ^ Руководство пользователя процедуры SQL SAS 9.4 . Институт САС. 2013. с. 248. ISBN 9781612905686. Проверено 21 октября 2015 .
Хотя аргумент UNIQUE идентичен аргументу DISTINCT, он не является стандартом ANSI.
- ^ Леон, Алексис ; Леон, Мэтьюз (1999). «Устранение дубликатов - ВЫБРАТЬ с помощью DISTINCT». SQL: полный справочник . Нью-Дели: Tata McGraw-Hill Education (опубликовано в 2008 г.). п. 143. ISBN. 9780074637081. Проверено 21 октября 2015 .
[...] ключевое слово DISTINCT [...] удаляет дубликаты из набора результатов.
- ^ «Каков порядок выполнения SQL-запроса? - Designcise.com» . www.designcise.com . Проверено 4 февраля 2018 .
- ^ а б Ханс-Иоахим, К. (2003). «Нулевые значения в реляционных базах данных и надежные информационные ответы». Семантика в базах данных. Второй международный семинар Замок Дагштуль, Германия, 7–12 января 2001 г. Исправленные статьи . Конспект лекций по информатике. 2582 . С. 119–138. DOI : 10.1007 / 3-540-36596-6_7 . ISBN 978-3-540-00957-3.
- ^ a b Рон ван дер Мейден, «Логические подходы к неполной информации: обзор» в Chomicki, Янв; Сааке, Гюнтер (ред.) Логика для баз данных и информационных систем , Kluwer Academic PublishersISBN 978-0-7923-8129-7 , стр. 344
- ^ ИСО / МЭК. ISO / IEC 9075-2: 2003, «SQL / Foundation» . ИСО / МЭК.
- ^ «Семантика и проблемы универсальной квантификации в SQL» . Компьютерный журнал . Февраль 1989. DOI : 10,1093 / comjnl / 32.1.90 . Проверено 16 января 2017 .
- ^ Fratarcangeli, Клаудио (1991). «Методика универсальной количественной оценки в SQL» . ACM SIGMOD Запись . 20 (3): 16–24. DOI : 10.1145 / 126482.126484 . Проверено 16 января 2017 .
- ^ Каваш, Джалал (2004) Сложная количественная оценка на языке структурированных запросов (SQL): учебное пособие с использованием реляционного исчисления ; Журнал "Компьютеры в математике и преподавании естественных наук"ISSN 0731-9258 Том 23, выпуск 2, 2004 г., AACE, Норфолк, Вирджиния. Thefreelibrary.com
- ^ ISO / IEC 9075-2: 2011 §4.5
- ^ «ISO / IEC 9075-1: 2016: Информационные технологии - Языки баз данных - SQL - Часть 1: Framework (SQL / Framework)» .