Использование операций IN и NOT IN




Оператор IN используется для сравнения некоторого значения со списком значений, при этом проверяется, входит ли значение в предоставленный список или сравниваемое значение не является элементом представленного списка.

Определить номера заказов, сделанных клиентами из Berlin

SELECT OrderID FROM Orders

WHERE CustomerID IN

(SELECT CustomerID FROM Customers WHERE City=‘Berlin’)

Использование ключевых слов ANY и ALL

Ключевые слова ANY и ALL могут использоваться с подзапросами, возвращающими один столбец чисел.

Если подзапросу будет предшествовать ключевое слово ALL, условие сравнения считается выполненным, только когда оно выполняется для всех значений в результирующем столбце подзапроса.

Если записи подзапроса предшествует ключевое слово ANY, то условие сравнения считается выполненным, когда оно выполняется хотя бы для одного из значений в результирующем столбце подзапроса.

Если в результате выполнения подзапроса получено пустое значение, то для ключевого слова ALL условие сравнения будет считаться выполненным, а для ключевого слова ANY – невыполненным. Ключевое слово SOME является синонимом слова ANY.

Все эти операторы применяется с любыми операторами сравнения

 

Найти номера заказов, сделанных в 1996 году, в которых количество товара с номером 36, превышает хотя бы раз такой же показатель в заказах 1998 на этот товар.

 

SELECT [Order Details].OrderID,Quantity FROM [Order Details] INNER JOIN Orders

ON [Order Details].OrderID=Orders.OrderID

WHERE Quantity>SOME

 

(SELECT Quantity FROM [Order Details] INNER JOIN Orders

ON [Order Details].OrderID=Orders.OrderID

WHERE ProductID=36 AND YEAR(OrderDate)=1998)

 

AND ProductID=36 AND YEAR(OrderDate)=1996

Использование операций EXISTS и NOT EXISTS

Ключевые слова EXISTS и NOT EXISTS предназначены для использования только совместно с подзапросами.

Результат их обработки представляет собой логическое значение TRUE или FALSE.

Для ключевого слова EXISTS результат равен TRUE в том и только в том случае, если в возвращаемой подзапросом результирующей таблице присутствует хотя бы одна строка.

Если результирующая таблица подзапроса пуста, результатом обработки операции EXISTS будет значение FALSE.

Для ключевого слова NOT EXISTS используются правила обработки, обратные по отношению к ключевому слову EXISTS.

Поскольку по ключевым словам EXISTS и NOT EXISTS проверяется лишь наличие строк в результирующей таблице подзапроса, то эта таблица может содержать произвольное количество столбцов.

 

Определить названия компаний, разместивших по крайней мере один заказ

SELECT CompanyName FROM Customers cu

WHERE EXISTS

(SELECT OrderID FROM Orders o WHERE o.CustomerID=cu.CustomerID)

 

Коррелированные подзапросы

Коррелированные подзапросы от обычных вложенных отличает то, что обмен информацией между коррелированными подзапросами и основными запросами осуществляется в обоих направлениях. Вложенные запросы обычно обрабатываются только один раз, затем информация возвращается во внешний запрос, который затем тоже выполняется один раз.

 

В коррелированных подзапросах внутренний запрос выполняется на основе информации, переданной из внешнего запроса, и наоборот.

Коррелированные запросы в параметре WHERE:

Определить Номер заказа и дату заказа для первого заказа каждого из клиентов

SELECT o1.CustomerID, o1.OrderID,o1.OrderDate

FROM Orders o1

WHERE o1.OrderDate=(SELECT MIN(o2.OrderDate) FROM Orders o2 WHERE o2.CustomerID=o1.CustomerID)

ORDER BY CustomerID

 

Коррелированные запросы в списке полей оператора SELECT:

Получить название компании и дату заказа, сделанного этой компанией в первый раз

SELECT cu.CompanyName,

(SELECT MIN(OrderDate) FROM Orders o WHERE o.CustomerID=cu.CustomerID)

FROM Customers cu

 

 


Операторы DML

DML (Data Manipulation Language) - язык манипулирования данными, который используется для манипулирования информацией внутри объектов реляционной базы данных посредством трех основных команд: INSERT, UPDATE, DELETE.

Оператор вставки

Оператор INSERT вставляет новые строки в таблицу. При этом значения столбцов могут представлять собой константы либо являться результатом выполнения подзапроса.

 

INSERT INTO <имя_таблицы> [(имя_столбца [,...n])]

 

{VALUES (значение[,...n])

| <SELECT_оператор>}

 

При вставке строки в таблицу проверяются все ограничения, наложенные на данную таблицу. Это могут быть ограничения первичного ключа или уникального индекса, проверочные ограничения типа CHECK, ограничения ссылочной целостности. В случае нарушения какого-либо ограничения вставка строки будет отвергнута.

Первая форма оператора INSERT с параметром VALUES предназначена для вставки единственной строки в указанную таблицу.

Список столбцов указывает столбцы, которым будут присвоены значения в добавляемых записях.

Список может быть опущен, тогда подразумеваются все столбцы таблицы (кроме автоинкрементных), причем в определенном порядке, установленном при создании таблицы.

Если в операторе INSERT указывается конкретный список имен полей, то любые пропущенные в нем столбцы должны быть объявлены при создании таблицы как допускающие значение NULL, за исключением тех случаев, когда при описании столбца использовался параметр DEFAULT.

Список значений должен следующим образом соответствовать списку столбцов:

• количество элементов в обоих списках должно быть одинаковым;

• должно существовать прямое соответствие между позицией одного и то же элемента в обоих списках, поэтому первый элемент списка значений должен относиться к первому столбцу в списке столбцов, второй – ко второму столбцу и т.д.

• типы данных элементов в списке значений должны быть совместимы с типами данных

Преодолеть ограничение на вставку одной строки в операторе INSERT при использовании VALUES позволяет искусственный прием использования подзапроса, формирующего строку с предложением UNION ALL. Так если нам требуется вставить несколько строк при помощи одного оператора INSERT, можно написать:

INSERT INTO Products

SELECT ‘Стул’, 1200

UNION ALL

SELECT ‘Стол', 3000

UNION ALL

SELECT ‘Шкаф', 5000

Вторая форма оператора INSERT с параметром SELECT позволяет скопировать множество строк из одной таблицы в другую.

 

Предложение SELECT может представлять собой любой допустимый оператор SELECT. Вставляемые в указанную таблицу строки в точности должны соответствовать строкам результирующей таблицы, созданной при выполнении вложенного запроса.

Все ограничения, указанные выше для первой формы оператора SELECT, применимы и в этом случае.

Поскольку оператор SELECT в общем случае возвращает множество записей, то оператор INSERT в такой форме приводит к добавлению в таблицу аналогичного числа новых записей.

 

Оператор удаления

Оператор DELETE предназначен для удаления группы записей из таблицы.

DELETE FROM <имя_таблицы>[WHERE <условие_отбора>]

Здесь параметр имя_таблицы представляет собой либо имя таблицы базы данных.

Если предложение WHERE присутствует, удаляются записи из таблицы, удовлетворяющие условию отбора. Если опустить предложение WHERE, из таблицы будут удалены все записи, однако сама таблица сохранится.

Для удаления всех записей из таблицы также может использоваться оператор TRUNCATE TABLE <имя_таблицы>

 

Оператор обновления

Оператор UPDATE применяется для изменения значений в группе записей или в одной записи указанной таблицы.

 

UPDATE имя_таблицы

SET имя_столбца=<выражение>[,...n]

[WHERE <условие_отбора>]

 

Параметр имя_таблицы – это либо имя таблицы базы данных.

В предложении SET указываются имена одного и более столбцов, данные в которых необходимо изменить.

Предложение WHERE является необязательным. Если оно опущено, значения указанных столбцов будут изменены во всех строках таблицы. Если предложение WHERE присутствует, то обновлены будут только те строки, которые удовлетворяют условию отбора.

Выражение представляет собой новое значение соответствующего столбца и должно быть совместимо с ним по типу данных.

 


Операторы DDL

DDL (Data Definition Language, DDL) - язык определения данных, который позволяет создавать и изменять структуру объектов базы данных.

Создание базы данных

Процесс создания базы данных в системе SQL-сервера состоит из двух этапов:

• сначала организуется сама база данных,

• а затем принадлежащий ей журнал транзакций.

Информация размещается в соответствующих файлах, имеющих расширения *.mdf (для базы данных) и *.ldf. (для журнала транзакций). В файле базы данных записываются сведения об основных объектах (таблицах, индексах, просмотрах и т.д.), а в файле журнала транзакций – о процессе работы с транзакциями (контроль целостности данных, состояния базы данных до и после выполнения транзакций).

Создание базы данных в системе SQL-сервер осуществляется командой CREATE DATABASE

CREATE DATABASE имя_базы_данных

[ON [PRIMARY] [ <определение_файла> [,...n] ]

[,<определение_группы> [,...n] ] ]

[ LOG ON {<определение_файла>[,...n] } ]

[ FOR LOAD | FOR ATTACH ]

При выборе имени базы данных следует руководствоваться общими правилами именования объектов. Если имя базы данных содержит пробелы или любые другие недопустимые символы, оно заключается в ограничители (двойные кавычки или квадратные скобки). Имя базы данных должно быть уникальным в пределах сервера и не может превышать 128 символов.

Параметр ON определяет список файлов на диске для размещения информации, хранящейся в базе данных.

Параметр PRIMARY определяет первичный файл. Если он опущен, то первичным является первый файл в списке.

Параметр LOG ON определяет список файлов на диске для размещения журнала транзакций. Имя файла для журнала транзакций генерируется на основе имени базы данных, и в конце к нему добавляются символы _log.

При создании базы данных можно определить набор файлов, из которых она будет состоять. Файл определяется с помощью следующей конструкции:

<определение_файла>::= (

[ NAME=логическое_имя_файла,]

FILENAME='физическое_имя_файла'

[,SIZE=размер_файла ]

[,MAXSIZE={max_размер_файла |UNLIMITED } ]

[, FILEGROWTH=величина_прироста ])[,...n]

Здесь логическое имя файла – это имя файла, под которым он будет опознаваться при выполнении различных SQL-команд.

Физическое имя файла предназначено для указания полного пути и названия соответствующего физического файла, который будет создан на жестком диске. Это имя останется за файлом на уровне операционной системы.

Параметр SIZE определяет первоначальный размер файла; минимальный размер параметра – 512 Кб, если он не указан, по умолчанию принимается 1 Мб.

Параметр MAXSIZE определяет максимальный размер файла базы данных. При значении параметра UNLIMITED максимальный размер базы данных ограничивается свободным местом на диске.

При создании базы данных можно разрешить или запретить автоматический рост ее размера (это определяется параметром FILEGROWTH) и указать приращение с помощью абсолютной величины в Мб или процентным соотношением.

Дополнительные файлы могут быть включены в группу:

<определение_группы>::=FILEGROUP имя_группы_файлов <определение_файла>[,...n]

 

Изменение базы данных

Большинство действий по изменению конфигурации базы данных выполняется с помощью следующей конструкции:

ALTER DATABASE имя_базы_данных

{ ADD FILE <определение_файла>[,...n] [TO FILEGROUP имя_группы_файлов ]

| ADD LOG FILE <определение_файла>[,...n]

| REMOVE FILE логическое_имя_файла

| ADD FILEGROUP имя_группы_файлов

| REMOVE FILEGROUP имя_группы_файлов

| MODIFY FILE <определение_файла>

| MODIFY FILEGROUP имя_группы_файлов <свойства_группы_файлов>}

Как видно из синтаксиса, за один вызов команды может быть изменено не более одного параметра конфигурации базы данных. Если необходимо выполнить несколько изменений, придется разбить процесс на ряд отдельных шагов.

В базу данных можно добавить (ADD) новые файлы данных (в указанную группу файлов или в группу, принятую по умолчанию) или файлы журнала транзакций.

Параметры файлов и групп файлов можно изменять (MODIFY).

Для удаления из базы данных файлов или групп файлов используется параметр REMOVE. Однако удаление файла возможно лишь при условии его освобождения от данных. В противном случае сервер не разрешит удаление.

В качестве свойств группы файлов используются следующие:

READONLY – группа файлов используется только для чтения; READWRITE – в группе файлов разрешаются изменения; DEFAULT – указанная группа файлов принимается по умолчанию.

 

Удаление базы данных

Удаление базы данных осуществляется командой:

DROP DATABASE имя_базы_данных [,...n]

Удаляются все содержащиеся в базе данных объекты, а также файлы, в которых она размещается.

 




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: