Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Михайлов БД шпоры.doc
Скачиваний:
58
Добавлен:
08.03.2015
Размер:
360.45 Кб
Скачать

11. Манипулирование данными в языке sql.

Наиболее важным оператором языка SQL является оператор выбора - Select.

Синтаксис оператора SELECT имеет следующий вид:

SELECT [ALL | DISTINCT] «список полей>|*)

FROM <Список таблиц>

[WHERE <Оператор-условие выборки или соединения>]

[GROUP BY <Список полей результата>]

[HAVING <Оператор-условие для группы>]

[ORDER BY <Список полей, по которым упорядочить вывод>

Здесь ключевое слово ALL означает, что в результирующий набор строк включаются все строки, удовлетворяющие условиям запроса. Значит, в результирующий набор могут попасть одинаковые строки. И это нарушение принципов теории отношений (в отличие от реляционной алгебры, где по умолчанию предполагается отсутствие дубликатов в каждом результирующем отношении). Ключевое слово DISTINCT означает, что в результирующий набор включаются только различные строки, то есть дубликаты строк результата не включаются в набор.

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

В разделе FROM задается перечень исходных отношений (таблиц) запроса.

В разделе WHERE задаются условия отбора строк результата или условия соединения

кортежей исходных таблиц, подобно операции условного соединения в реляционной алгебре

В разделе GROUP BY задается список полей группировки.

В разделе HAVING задаются Операторы-условия, накладываемые на каждую группу.

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

Однотабличный запрос

Если однотабличный запрос должен будет содержать все атрибуты исх. таблицы, то вместо списка атрибутов указывается имя атрибута (*). Пусть необходимо вывести информацию обо всех магазинах с указанием их названий и владельцев, тогда оператор select буде иметь вид:

select all Название, Владелец

from Магазин

Пусть необходимо выбрать информацию о магазинах, принадлежащих какому-либо владельцу, т.е. фамилия владельца будет являться условием выбора. Условие выбора может формироваться с использованием операторов сравнения, равно, неравно, меньше, ≤, ≥. Условия Between –между, like – похоже на, in – принадлежит, is null – не определено, exists – существует. Условия могут предваряться оператором отрицания not. Если условие выбора состоит из нескольких значений, то они соединяются логическими операторами: and и or. Пример: Выбрать информацию о магазинах, принадлежащих Культяпкину Г.Г.

select all

from Магазин

where Владелец=Культяпкин Г.Г.

Предложение group by позволяет выполнить перекомпоновку ответной (формируемой) таблицы по группам, каждая из которых имеет одинаковое значение столбца, включенное в перечень group by.После этого к формируемым группам применяют функции, указанные в операторе select и значения группы заменяются на единств. значение: сумму при указании функции sum, количество при указании функции count, минимальное значение – min максимальное значение – max и среднее значение – AVG. Поля, отбираемые в запросе group by, могут быть содержащимися в предложении group by атрибутами, общими выражениями и литерами. Ни один атрибут, не входящий в предложение group by не может перечисляться в предложении select. Такое ограничение накладывается в связи с тем, что для этих атрибутов нельзя гарантировать, что значения будут одинаковыми. Следовательно, нельзя однозначно определить значение атрибута, корректно представляющего группу. Предложение having служит для отбора среди групп. Если группа не удовлетворяет предложению having, то её кортеж не входит в результирующую таблицу. Значения, которые могут входить в предложение having те же самые, что и для предложения select.

Многотабличные запросы.

При формировании многотабличного запроса предложение from будет включать имена этих таблиц. Предложение where, group by и having принимают те же самые значения. Если необходимо включить в результирующую таблицу вычисляемое поле, то выражение, на основании которого определяется значение этого поля, записывается предложение select (как имя обычного атрибута). Если вычисляемому полю должно быть присвоено имя, то последнее указывается перед выражением для вычисления внутри апострофов. Одной из операций, выполняемых над несколькими таблицами, является операция соединения. Соединение определяется предложением from, в котором перечислены два исходных отношения и where, где содержится условие соединения. В зависимости от версии поисковой системы поддерживаются четыре различных версии операторов соединения: внутреннее соединение (inner join), внешнее соединение (outer join), левое соединение (left join) и правое соединение (right join). При внутреннем соединении для каждого соответствия между двумя исходными кортежами создается кортеж результирующего отношения. В результате левого создаются все кортежи внутреннего соединения и добавляются кортежи для всех строк левого операнда (таблицы, имя которой указано первым в предложении from), для которого нет соответствующих строк в правом операнде. При этом копиям результирующего кортежа, которые соответствуют атрибутам правого операнда, присваивается нулевое значение. Правое соединение аналогично левому, но к результатам нового соединения добавляются строки для кортежа правого операнда, для которых не нашлось соответствующих кортежей в левом операнде. Открытое (внешнее) соединение является объединением левого и правого соединений. В результирующей таблице содержаться строки для всех соответствий, а также по одной строке для каждого кортежа левой исходной таблицы, для которого не нашлось соответствующего кортежа в правой таблице, и по одной строке для каждого кортежа правой таблицы, для которого нет соответствующего кортежа в левой таблице. Для того чтобы в Access выбрать вид соединения, достаточно щелкнуть правой клавишей мыши по линии связи между таблицами в конструкторе запросов и в свойствах соединения выбрать соответствующие параметры.

Вложенные операторы select.

Часто запрос бывает настолько сложным, что его трудно сформулировать в рамках единственного оператора select, поэтому в SQL допускается использование оператора select внутри предложения where другого оператора select. Во вложенном операторе select могут содержаться ссылки на поля, содержащегося в нем оператора. Во вложенных операторах select могут использоваться следующие операторы и ключевые слова: in, all, exists, unique, contains, union, not, intersect (взаимовыборка). В Microsoft Access вложенный оператор select не используется.

Операции работы с множеством.

В SQL оператор select позволяет выполнять операции объединения, пересечения, разности. Для объединения двух отношений используется ключевое слово union. Если требуется объединить отношение R1 и R2, то оператор будет выглядеть так:

(select*from R1) union

(select*from R2)

Операция пересечения в SQL обозначается ключевым словом intersect.

Для операций разности используется ключевое слово except.

Модификация содержимого БД с помощью средств SQL

Модификация содержимого БД связана со вставкой, обновлением и удалением. Оператор вставки Insert добавляет новые строки в таблицу. Оператор обновления Update модифицирует 1 или несколько атрибутов определённых строк таблицы. Оператор удаления Delete удаляет 1 или несколько строк из таблицы. Чтобы вставить строку в таблицу, необходимо задать значения атрибутов этой таблицы. Оператор Insert выглядит следующим образом:

Insert in to <имя таблицы>

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

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

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

Оператор обновления изменяет 1 или несколько строк таблицы. Состоит из 3-х предложений.

Update <имя таблицы>

set <атрибут = значение>

where <условие отбора>

Update определяет какую таблицу обновлять, set содержит 1 или более аргументов (через запятую), определяющих какие атрибуты обновлять и какими будут их новые значения. Where служит для определения строк, в которых будут проводиться изменения. Если предложение Where отсутствует, то изменяться будут значения атрибутов во всех строках. Выражение в правой части присваивания может быть сложным и даже содержать вложенные операторы select.

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

В нём указывается имя таблицы и условие отбора.

Delete from <имя таблицы>

<условие отбора>

Удаляются те строки таблицы, которые удовлетворяют условию.