ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.11.2023
Просмотров: 178
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
«NULL – предикат» –проверяется,не содержится ли в столбце
значение NULL;
NULL – это специальное значение, представляющее собой отсут-
ствие любого значения. Стандарт ANSY/ISO определяет, что ре-
зультатом сравнения любого значения со значением NULL не могут
быть такие значения как TRUE или FALSE. Результатом сравне-
ния будет UNKNOWN (неизвестно).
«Предикат существования» –проверяется,получены ли в результате работы подзапроса одна или несколько строк.
Наиболее часто используется предикат сравнение. Проверяемое значе- ние может сравниваться со значением другого столбца, константой, выраже- нием, содержащим арифметические операторы, или с результатом подзапро- са. Условие отбора может быть задано сложным логическим выражением, в котором простые логические условия связанны логическими операторами, такими как NOT, AND и OR.
Предикат «между» записывается с помощью оператораBETWEEN.
Синтаксис предиката: выражение [NOT] BETWEEN значение
1
AND значение
2
Аргументы значение
1
и значение
2
определяют начало и конец диа-
103 пазона значений и могут быть заданы числовыми, или символьными кон- стантами.
Для записи предиката «в» используется оператор IN. Синтаксис опера- тора: выражение [NOT] IN {(значение
1
, значение
2
[,…])| подзапрос}
Предикат «как» реализуется в языке операторомLIKE.
Оператор LIKE выполняет проверку строкового значения (тип Char,
VarChar) на соответствие шаблону. Шаблон строится с помощью обычных и подстановочных символов. Синтаксис оператора: выражение [NOT] LIKE шаблон
«NULL – предиката» имеет синтаксис: выражение IS [NOT] NULL
Раздел ORDER BY позволяет задать сортировку результатов запроса.
Синтаксис раздела:
ORDER BY критерий_столбца [{ASC|DESC}][,…]
Критерий_столбца задается именем столбца или его номером в спи- ске столбцов. По значениям этого столбца будет упорядочена таблица ре- зультатов запроса. С помощью ключевых слов ASC и DESC можно указать порядок сортировки (ASC – по возрастанию значений, DESC – по убыванию значений). Сортировка может выполняться по значениям нескольких столб- цов. Стандарт позволяет управлять порядком сортировки отдельно по каж- дому столбцу.
Выборка данных из таблицы с группировкой
Раздел GROUP BY указывает на необходимость группировки строк таблиц по определенным критериям для выполнения вычислений над значе- ниями строк таблицы попавшими в группу. Синтаксис раздела:
GROUP BY критерий_группировки
Критерий_группировки содержит имя одного,или несколькихстолб- цов, которые называются столбцами группировки. Столбцы группировки оп- ределяют, по какому признаку строки делятся на группы.
Как правило, группировка данных выполняется с целью получения итоговых данных по некоторому признаку. Поэтому если в команде SELECT указывается раздел GROUP BY, то в аргументе список_столбцов раздела
SELECTдля одного или нескольких столбцовдолжна быть указана агрегат- ная (статистическая) функция.
Агрегатные (статистические) функции позволяют выполнять статисти- ческую обработку данных. К ним относятся:
Функция AVG() – вычисляет среднее значение для группы значений.
Синтаксис функции: AVG ([выражение | DISTINCT имя_столбца])
Если задан предикат DISTINCT, то агрегирование выполняется только для строк имеющих неповторяющиеся значения столбца.
104
Функция COUNT() – подсчитывает количество значений в группе.
Синтаксис функции: COUNT ({[DISTINCT] имя_столбца | * })
Если задан аргумент ‗*‘, то функция подсчитывает общее количество строк независимо от того, содержат ли они значения NULL или нет.
Функция SUM() – выполняет суммирование всех значений указанного столбца для каждой группы. Синтаксис функции:
SUM ([
выражение | DISTINCT имя_столбца])
Функция MAX() – возвращает максимальное значение столбца в ка- ждой группе. Синтаксис функции: MAX (выражение)
Функция MIN() – возвращает минимальное значение столбца в каждой группе. Синтаксис функции: MIN (выражение)
SQL позволяет группировать результаты запроса на основании значе- ния, полученного объединением значений нескольких столбцов. Однако SQL обеспечивает только один уровень группировки.
Последовательность имен столбцов в разделе GROUP BY не обяза- тельно должна соответствовать последовательности имен в списке SELECT.
Совместно с разделом GROUP BY команда SELECT может содежать раздел HAVING для задания условия отбора групп строк. Синтаксис раздела:
HAVING критерий_отбора
Указанное в разделе HAVING условие отбора будет применяться к ка- ждой строке, полученной в результате группировки данных. И только те из них, для которых условие будет выполняться, попадут в таблицу результатов запроса.
Выборка данных из нескольких таблиц
SQL позволяет получать данные, которые находятся в нескольких таб- лицах. Для этого в разделе FROM команды SELECT необходимо указать имена таблиц, которые содержат нужные данные.
Соединение таблиц – это процесс формирования пар строк путем срав- нения содержимого соответствующих столбцов.
Таблица, получившаяся в результате формирования пар строк и со-
держащая данные двух таблиц, называется соединением двух таб-
лиц.
Для соединения таблиц можно использовать две различные формы:
- явный синтаксис соединения с помощью оператора JOIN, указанного в разделе SELECT;
- неявный синтаксис соединения, когда условия каждой операции со- единения определяется неявно в разделе WHERE.
Синтаксис неявного соединения таблиц:
SELECT список_столбцов
FROM таблица
1
, таблица
2
WHERE таблица
1
.столбец
1
оператор таблица
2
.столбец
1
105
Явный синтаксис соединения таблиц имеет вид:
FROM таблица
1
{ INNER | {LEFT|RIGHT|FULL} [OUTER] } JOIN таблица
2
ON таблица
1
.столбец
1
= таблица
2
.столбец
1
INNER JOIN указывает на выполнение внутреннего соединения строк.
{LEFT |RIGHT| FULL} [OUTER] JOIN используется для создания внешнего соединения. Результатом этого соединения будут все пары строк, соответствующие условию соединения, и строки, которые не нашли себе па- ру и имеющие в выходных столбцах значение NULL.
Пример.Получить сведения о наименовании тех специальностей, на которых больше одной группы студентов.
SELECT
[Наименование специальности],
COUNT
([Номер группы]) AS [количество групп]
FROM
Специальность s INNER JOIN Группа g
ON s
.[Номер специальности]= g
.[Номер специальности]
GROUP BY
[Наименование специальности]
HAVING COUNT([Номер группы])>1
Подзапросы
SQL позволяет вкладывать запросы друг в друга. Такой механизм по- зволяет использовать результаты одного запроса в качестве составной части другого.
Подзапрос (подчиненный запрос) – это запрос, содержащийся в
предложении WHERE, HAVING или FROM другого (основного) за-
проса.
Подзапрос отличается от обычного запроса тем, что возвращаемый подзапросом результат можно использовать в качестве операнда выражения или в более сложном запросе. Запрос с подзапросом зачастую является са- мым естественным способом выражения запроса, так как структура такого запроса лучше всего соответствует словесному описанию запроса.
Наиболее часто подзапросы используются в качестве части раздела
WHERE или HAVING. В разделе WHERE значения, полученные в результа- те выполнения подзапроса, используются в критериях отбора строк из ис- ходной таблицы или из результата соединения таблиц. В разделе HAVING полученные в результате выполнения подзапроса значения используется для отбора групп строк.
Подзапрос всегда заключается в круглые скобки . В качестве подзапро- са может использоваться только команда SELECT, содержащая раздел FROM и необязательные разделы WHERE, GROUP BY и HAVING.
Команда SELECT в подзапросе:
- может возвращать таблицу результатов, состоящую только из одного значения столбца, или из столбца значений, или из нескольких столбцов;
106
- не должна содержать раздел ORDER BY. Так как результат подза- проса используется основным запросом, то не имеет смысла его сортировать;
- имена столбцов подзапроса могут являться ссылками на столбцы ос- новного запроса.
Подзапрос не может быть запросом на объединение (UNION) несколь- ких команд SELECT.
Синтаксис критерия отбора имеет вид: выражение [NOT] IN подзапрос
Критерий отбора может выполнять проверку на существование данных подзапроса. Синтаксис проверки на существование:
EXISTS подзапрос
Оператор EXISTS проверяет, содержится ли в таблице результатов подзапроса хотя бы одна строка. Если результат подзапроса содержит хотя бы одну строку, то оператор возвращает значение TRUE, в противном случае
FALSE.
Подзапрос может возвращать столбец значений, в этом случае в разде- ле WHERE основного запроса должно выполнять многократное сравнение для каждого значения, полученного в результате выполнения подзапроса. Син- таксис многократного сравнения: выражение операция_сравнения {ANY|ALL} подзапрос
Оператор ANY выполняет проверку для каждого значения столбца, воз- вращенного подзапросом и, если условие выполнено хотя бы для одного зна- чения из столбца, то возвращает значение TRUE.
Оператор ALL также выполняет проверку для каждого значения столбца, возвращенного подзапросом, однако возвращает значение TRUE, если усло- вие выполнятся для всех значений столбца.
Пример: Требуется вывести список студентов, обучающихся на специ- альности «Управление качеством»:
SELECT
[Номер группы], Фамилия,
[
Номер зачетной книжки]
FROM студент WHERE [Номер группы] IN
(SELECT
[Номер группы] FROM Группа
WHERE
[Номер специальности]=
(SELECT
[Номер специальности]
FROM
Специальность
WHERE
[Наименование специальности]=
‘Управление качеством’))
Это пример «трехуровневого» запроса. Вложенный подзапрос возвра- щает номер специальности «Управления качеством». Подзапрос основного запроса, используя это значение, находит и возвращает номера групп этой специальности. Основной запрос включает в таблицу результатов сведения о тех студентах, номера групп которых равны одному из возвращенных подза-
107 просом значений.
Стандарт не определяет максимальное число уровней вложенности, однако когда запрос имеет более двух вложенных подзапросов, он становит- ся трудным для понимания. Кроме этого, с увеличением числа уровней вло- женности запросов увеличивается и время на их выполнение.
Коррелированные подзапросы
Подзапрос называется коррелированным подзапросом, если внутрен- ний запрос зависит от внешнего запроса для всех его значений.
Пример: Определить сведения о студентах, каких групп отсутствуют в таблице СТУДЕНТ.
SELECT
[Номер группы] FROM Группа g
WHERE NOT EXISTS
( SELECT * FROM
Студент s
WHERE s
.[Номер группы]=g.[Номер группы] )
Имя столбца, не входящего ни в одну из таблиц подзапроса и принад- лежащего таблице основного запроса, называется коррелирующей (внешней) ссылкой. Подзапрос может иметь внешнюю ссылку на таблицу основного за- проса независимо от его уровня вложенности. В этом случае в качестве внешней ссылки следует указать полное имя столбца. В отличие от простого подзапроса, коррелированный подзапрос логически выполняется каждый раз, когда отыскивается новая строка внешнего запроса.
Стандарт разрешает использовать подзапросы в разделе FROM. В этом случае подзапрос может возвращать множество столбцов . Если основной за- прос содержит подзапрос в разделе FROM, то сначала выполняется подза- прос и по результатам его выполнения создается временная таблица. Затем выполняется основной запрос, который использует эту временную таблицу в качестве источника данных точно так же, как и обычную таблицу, храня- щуюся в базе данных.
Добавление данных
Добавление данных в таблицу выполняется с помощью команд
INSERT INTO и SELECT INTO.
Команда INSERT INTO позволяет добавить одну или несколько строк в уже существующую таблицу. Синтаксис команды на добавление строк:
INSERT INTO
таблица [ (столбец
1
[,
столбец
2
[, ...] ] ) ]
{ VALUES (
значение
1
[,
значение
2
[, ...] ) [,…] | запрос }
В списке столбец
1
,
столбец
2
,… указываются имена столбцов, в ко- торые команда будет добавлять значения. Если список столбцов отсутствует, то вставка значений выполняется во все столбцы записи таблицы, начиная с первой. Порядок следования имен столбцов в списке может не соответство-
108 вать их расположению в строке таблицы. Список может содержать не все столбцы таблицы.
Раздел VALUES используется для добавления в таблицу одной или не- скольких строк. Количество значений в разделе VALUES определяется спи- ском столбцов. Значения могут быть заданы одним из способов:
{ значение|DEFAULT|NULL }
Значение DEFAUNT – это значение, определенное для столбца по умолчанию при создании таблицы.
Значение NULL может быть помещено в столбец, если при создании таблицы это было разрешено.
Пример:Добавить сведения о результатах сдачи экзаменов студентомв сессию.
INSERT INTO
[Группа]
([Номер специальности],[Номер факультета],Курс)
VALUES (3801, 90900, 2, 4), (1111,221400, 4, 3)
Добавить в таблицу несколько строк можно с помощью запроса на из- влечение данных (команда SELECT). Синтаксис команды:
INSERT INTO
таблица [ ( столбец
1
[,
столбец
2
[, ...]] ) ]
SELECT
столбец
1
[,
столбец
2
[, ...]
FROM
список_таблиц
Команда SELECT...INTO позволяет создать новую таблицу на основа- нии данных, полученных по запросу. Структура создаваемой таблицы будет соответствовать структуре запроса. В базе данных не должно существовать таблицы, имя которой совпадает с именем таблицы, указанной в SE-
LECT...INTO. Синтаксис команды:
SELECT
столбец
1
[,
столбец
2
[, ...]] INTO
новая_таблица
FROM
список_таблиц
В списке определяются имена столбцов таблиц, значения которых бу- дут включены в таблицу результатов. Имена столбцов в разделе SELECT должны принадлежать одной из таблиц, перечисленных в списке FROM.
Пример:Создать таблицу―Список групп‖,содержащую сведения о количе- стве студентов в группах специальности «Управление качеством».
SELECT c
.[Номер группы], COUNT(Фамилия) as [Количество сту- дентов]
INTO
[Список групп]
FROM
Студент c INNER JOIN Группа g ON c.[Номер груп- пы]=g.[Номер группы] INNER JOIN Специальность s ON g.[Номер спе- циальности]=s.[Номер специальности]
WHERE
[Наименование специальности]=’Управление качеством’
GROUP BY c
.[Номер группы]
SELECT * FROM
[Список групп]
Изменение данных
109
Изменение данных выполняется с помощью команды UPDATE . Ко- манда позволяет обновлять данные одного или нескольких столбцов таблицы в одной или нескольких строках. Синтаксис таблицы:
UPDATE
имя_таблицы
SET
столбец= {новое_значение | DEFAULT | NULL} [,…]
[WHERE
критерий_отбора]
SET определяет изменения, которые необходимо выполнить для одно- го, нескольких, или всех столбцов таблицы. Новое значение может быть за- дано выражением. Раздел WHERE задает условие отбора тех строк, которые нужно изменить.
Пример:Создать запрос на изменение номера специальности«Управление качеством».
UPDATE
Специальность
SET
[Номер специальности]= 221401
WHERE
[номер специальности]=220501
Удаление данных
Для удаления данных из таблицы используется команда DELETE. Уда- ление данных выполняется построчно. За одну операцию можно удалить од- ну или нескольких строк. Синтаксис команды:
DELETE
таблица
[WHERE
критерий_отбора]
Пример:Создать запрос на удаление из таблицыСтудентсведений о студен- те Иванове из группы 1191.
DELETE
Студент
WHERE
[номер группы]=1191 AND Фамилия=’Иванов’
Если раздел WHERE отсутствует, команда удалит все строки таблицы.
Удаление всех строк из таблицы не приводит к удалению сомой таблицы.
9 ОСНОВНЫЕ ФУНКЦИИ И ТИПОВАЯ ОРГАНИЗАЦИЯ СО-
ВРЕМЕННЫХ СИСТЕМ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ
9.1. Основные функции систем управления базами данных
Языково-программным средством управления БД является система управления базами данных (СУБД).
Системой управления базами данных называют программную
систему, предназначенную для создания базы данных на ЭВМ, под-
держания этой БД в актуальном состоянии и обеспечения досту-
па пользователей к содержащимся в ней данным.
По степени универсальности различают два больших класса СУБД:
системы общего назначения;
специализированные системы.
110
СУБД общего назначения не ориентированы на какую-либо предмет- ную область или информационные потребности какой-либо группы пользо- вателей . Каждая система такого класса реализуется как программное средст- во, способное функционировать на некоторой модели ЭВМ в определенной операционной системе и поставляемое как программный продукт. Этим
СУБД присущи развитые функциональные возможности по организации, хранению и управлению данными.
Специализированные СУБД создаются в редких случаях при невоз- можности или нецелесообразности использования СУБД общего назначения
(как, например, в военном деле).
К числу основных функций СУБД принято относить следующие:
управление данными во внешней памяти;
управление буферами оперативной памяти;
управление транзакциями;
журнализация и восстановление БД после сбоев;
поддержание языков БД.
значение NULL;
NULL – это специальное значение, представляющее собой отсут-
ствие любого значения. Стандарт ANSY/ISO определяет, что ре-
зультатом сравнения любого значения со значением NULL не могут
быть такие значения как TRUE или FALSE. Результатом сравне-
ния будет UNKNOWN (неизвестно).
«Предикат существования» –проверяется,получены ли в результате работы подзапроса одна или несколько строк.
Наиболее часто используется предикат сравнение. Проверяемое значе- ние может сравниваться со значением другого столбца, константой, выраже- нием, содержащим арифметические операторы, или с результатом подзапро- са. Условие отбора может быть задано сложным логическим выражением, в котором простые логические условия связанны логическими операторами, такими как NOT, AND и OR.
Предикат «между» записывается с помощью оператораBETWEEN.
Синтаксис предиката: выражение [NOT] BETWEEN значение
1
AND значение
2
Аргументы значение
1
и значение
2
определяют начало и конец диа-
103 пазона значений и могут быть заданы числовыми, или символьными кон- стантами.
Для записи предиката «в» используется оператор IN. Синтаксис опера- тора: выражение [NOT] IN {(значение
1
, значение
2
[,…])| подзапрос}
Предикат «как» реализуется в языке операторомLIKE.
Оператор LIKE выполняет проверку строкового значения (тип Char,
VarChar) на соответствие шаблону. Шаблон строится с помощью обычных и подстановочных символов. Синтаксис оператора: выражение [NOT] LIKE шаблон
«NULL – предиката» имеет синтаксис: выражение IS [NOT] NULL
Раздел ORDER BY позволяет задать сортировку результатов запроса.
Синтаксис раздела:
ORDER BY критерий_столбца [{ASC|DESC}][,…]
Критерий_столбца задается именем столбца или его номером в спи- ске столбцов. По значениям этого столбца будет упорядочена таблица ре- зультатов запроса. С помощью ключевых слов ASC и DESC можно указать порядок сортировки (ASC – по возрастанию значений, DESC – по убыванию значений). Сортировка может выполняться по значениям нескольких столб- цов. Стандарт позволяет управлять порядком сортировки отдельно по каж- дому столбцу.
Выборка данных из таблицы с группировкой
Раздел GROUP BY указывает на необходимость группировки строк таблиц по определенным критериям для выполнения вычислений над значе- ниями строк таблицы попавшими в группу. Синтаксис раздела:
GROUP BY критерий_группировки
Критерий_группировки содержит имя одного,или несколькихстолб- цов, которые называются столбцами группировки. Столбцы группировки оп- ределяют, по какому признаку строки делятся на группы.
Как правило, группировка данных выполняется с целью получения итоговых данных по некоторому признаку. Поэтому если в команде SELECT указывается раздел GROUP BY, то в аргументе список_столбцов раздела
SELECTдля одного или нескольких столбцовдолжна быть указана агрегат- ная (статистическая) функция.
Агрегатные (статистические) функции позволяют выполнять статисти- ческую обработку данных. К ним относятся:
Функция AVG() – вычисляет среднее значение для группы значений.
Синтаксис функции: AVG ([выражение | DISTINCT имя_столбца])
Если задан предикат DISTINCT, то агрегирование выполняется только для строк имеющих неповторяющиеся значения столбца.
104
Функция COUNT() – подсчитывает количество значений в группе.
Синтаксис функции: COUNT ({[DISTINCT] имя_столбца | * })
Если задан аргумент ‗*‘, то функция подсчитывает общее количество строк независимо от того, содержат ли они значения NULL или нет.
Функция SUM() – выполняет суммирование всех значений указанного столбца для каждой группы. Синтаксис функции:
SUM ([
выражение | DISTINCT имя_столбца])
Функция MAX() – возвращает максимальное значение столбца в ка- ждой группе. Синтаксис функции: MAX (выражение)
Функция MIN() – возвращает минимальное значение столбца в каждой группе. Синтаксис функции: MIN (выражение)
SQL позволяет группировать результаты запроса на основании значе- ния, полученного объединением значений нескольких столбцов. Однако SQL обеспечивает только один уровень группировки.
Последовательность имен столбцов в разделе GROUP BY не обяза- тельно должна соответствовать последовательности имен в списке SELECT.
Совместно с разделом GROUP BY команда SELECT может содежать раздел HAVING для задания условия отбора групп строк. Синтаксис раздела:
HAVING критерий_отбора
Указанное в разделе HAVING условие отбора будет применяться к ка- ждой строке, полученной в результате группировки данных. И только те из них, для которых условие будет выполняться, попадут в таблицу результатов запроса.
Выборка данных из нескольких таблиц
SQL позволяет получать данные, которые находятся в нескольких таб- лицах. Для этого в разделе FROM команды SELECT необходимо указать имена таблиц, которые содержат нужные данные.
Соединение таблиц – это процесс формирования пар строк путем срав- нения содержимого соответствующих столбцов.
Таблица, получившаяся в результате формирования пар строк и со-
держащая данные двух таблиц, называется соединением двух таб-
лиц.
Для соединения таблиц можно использовать две различные формы:
- явный синтаксис соединения с помощью оператора JOIN, указанного в разделе SELECT;
- неявный синтаксис соединения, когда условия каждой операции со- единения определяется неявно в разделе WHERE.
Синтаксис неявного соединения таблиц:
SELECT список_столбцов
FROM таблица
1
, таблица
2
WHERE таблица
1
.столбец
1
оператор таблица
2
.столбец
1
105
Явный синтаксис соединения таблиц имеет вид:
FROM таблица
1
{ INNER | {LEFT|RIGHT|FULL} [OUTER] } JOIN таблица
2
ON таблица
1
.столбец
1
= таблица
2
.столбец
1
INNER JOIN указывает на выполнение внутреннего соединения строк.
{LEFT |RIGHT| FULL} [OUTER] JOIN используется для создания внешнего соединения. Результатом этого соединения будут все пары строк, соответствующие условию соединения, и строки, которые не нашли себе па- ру и имеющие в выходных столбцах значение NULL.
Пример.Получить сведения о наименовании тех специальностей, на которых больше одной группы студентов.
SELECT
[Наименование специальности],
COUNT
([Номер группы]) AS [количество групп]
FROM
Специальность s INNER JOIN Группа g
ON s
.[Номер специальности]= g
.[Номер специальности]
GROUP BY
[Наименование специальности]
HAVING COUNT([Номер группы])>1
Подзапросы
SQL позволяет вкладывать запросы друг в друга. Такой механизм по- зволяет использовать результаты одного запроса в качестве составной части другого.
Подзапрос (подчиненный запрос) – это запрос, содержащийся в
предложении WHERE, HAVING или FROM другого (основного) за-
проса.
Подзапрос отличается от обычного запроса тем, что возвращаемый подзапросом результат можно использовать в качестве операнда выражения или в более сложном запросе. Запрос с подзапросом зачастую является са- мым естественным способом выражения запроса, так как структура такого запроса лучше всего соответствует словесному описанию запроса.
Наиболее часто подзапросы используются в качестве части раздела
WHERE или HAVING. В разделе WHERE значения, полученные в результа- те выполнения подзапроса, используются в критериях отбора строк из ис- ходной таблицы или из результата соединения таблиц. В разделе HAVING полученные в результате выполнения подзапроса значения используется для отбора групп строк.
Подзапрос всегда заключается в круглые скобки . В качестве подзапро- са может использоваться только команда SELECT, содержащая раздел FROM и необязательные разделы WHERE, GROUP BY и HAVING.
Команда SELECT в подзапросе:
- может возвращать таблицу результатов, состоящую только из одного значения столбца, или из столбца значений, или из нескольких столбцов;
106
- не должна содержать раздел ORDER BY. Так как результат подза- проса используется основным запросом, то не имеет смысла его сортировать;
- имена столбцов подзапроса могут являться ссылками на столбцы ос- новного запроса.
Подзапрос не может быть запросом на объединение (UNION) несколь- ких команд SELECT.
Синтаксис критерия отбора имеет вид: выражение [NOT] IN подзапрос
Критерий отбора может выполнять проверку на существование данных подзапроса. Синтаксис проверки на существование:
EXISTS подзапрос
Оператор EXISTS проверяет, содержится ли в таблице результатов подзапроса хотя бы одна строка. Если результат подзапроса содержит хотя бы одну строку, то оператор возвращает значение TRUE, в противном случае
FALSE.
Подзапрос может возвращать столбец значений, в этом случае в разде- ле WHERE основного запроса должно выполнять многократное сравнение для каждого значения, полученного в результате выполнения подзапроса. Син- таксис многократного сравнения: выражение операция_сравнения {ANY|ALL} подзапрос
Оператор ANY выполняет проверку для каждого значения столбца, воз- вращенного подзапросом и, если условие выполнено хотя бы для одного зна- чения из столбца, то возвращает значение TRUE.
Оператор ALL также выполняет проверку для каждого значения столбца, возвращенного подзапросом, однако возвращает значение TRUE, если усло- вие выполнятся для всех значений столбца.
Пример: Требуется вывести список студентов, обучающихся на специ- альности «Управление качеством»:
SELECT
[Номер группы], Фамилия,
[
Номер зачетной книжки]
FROM студент WHERE [Номер группы] IN
(SELECT
[Номер группы] FROM Группа
WHERE
[Номер специальности]=
(SELECT
[Номер специальности]
FROM
Специальность
WHERE
[Наименование специальности]=
‘Управление качеством’))
Это пример «трехуровневого» запроса. Вложенный подзапрос возвра- щает номер специальности «Управления качеством». Подзапрос основного запроса, используя это значение, находит и возвращает номера групп этой специальности. Основной запрос включает в таблицу результатов сведения о тех студентах, номера групп которых равны одному из возвращенных подза-
107 просом значений.
Стандарт не определяет максимальное число уровней вложенности, однако когда запрос имеет более двух вложенных подзапросов, он становит- ся трудным для понимания. Кроме этого, с увеличением числа уровней вло- женности запросов увеличивается и время на их выполнение.
Коррелированные подзапросы
Подзапрос называется коррелированным подзапросом, если внутрен- ний запрос зависит от внешнего запроса для всех его значений.
Пример: Определить сведения о студентах, каких групп отсутствуют в таблице СТУДЕНТ.
SELECT
[Номер группы] FROM Группа g
WHERE NOT EXISTS
( SELECT * FROM
Студент s
WHERE s
.[Номер группы]=g.[Номер группы] )
Имя столбца, не входящего ни в одну из таблиц подзапроса и принад- лежащего таблице основного запроса, называется коррелирующей (внешней) ссылкой. Подзапрос может иметь внешнюю ссылку на таблицу основного за- проса независимо от его уровня вложенности. В этом случае в качестве внешней ссылки следует указать полное имя столбца. В отличие от простого подзапроса, коррелированный подзапрос логически выполняется каждый раз, когда отыскивается новая строка внешнего запроса.
Стандарт разрешает использовать подзапросы в разделе FROM. В этом случае подзапрос может возвращать множество столбцов . Если основной за- прос содержит подзапрос в разделе FROM, то сначала выполняется подза- прос и по результатам его выполнения создается временная таблица. Затем выполняется основной запрос, который использует эту временную таблицу в качестве источника данных точно так же, как и обычную таблицу, храня- щуюся в базе данных.
Добавление данных
Добавление данных в таблицу выполняется с помощью команд
INSERT INTO и SELECT INTO.
Команда INSERT INTO позволяет добавить одну или несколько строк в уже существующую таблицу. Синтаксис команды на добавление строк:
INSERT INTO
таблица [ (столбец
1
[,
столбец
2
[, ...] ] ) ]
{ VALUES (
значение
1
[,
значение
2
[, ...] ) [,…] | запрос }
В списке столбец
1
,
столбец
2
,… указываются имена столбцов, в ко- торые команда будет добавлять значения. Если список столбцов отсутствует, то вставка значений выполняется во все столбцы записи таблицы, начиная с первой. Порядок следования имен столбцов в списке может не соответство-
108 вать их расположению в строке таблицы. Список может содержать не все столбцы таблицы.
Раздел VALUES используется для добавления в таблицу одной или не- скольких строк. Количество значений в разделе VALUES определяется спи- ском столбцов. Значения могут быть заданы одним из способов:
{ значение|DEFAULT|NULL }
Значение DEFAUNT – это значение, определенное для столбца по умолчанию при создании таблицы.
Значение NULL может быть помещено в столбец, если при создании таблицы это было разрешено.
Пример:Добавить сведения о результатах сдачи экзаменов студентомв сессию.
INSERT INTO
[Группа]
([Номер специальности],[Номер факультета],Курс)
VALUES (3801, 90900, 2, 4), (1111,221400, 4, 3)
Добавить в таблицу несколько строк можно с помощью запроса на из- влечение данных (команда SELECT). Синтаксис команды:
INSERT INTO
таблица [ ( столбец
1
[,
столбец
2
[, ...]] ) ]
SELECT
столбец
1
[,
столбец
2
[, ...]
FROM
список_таблиц
Команда SELECT...INTO позволяет создать новую таблицу на основа- нии данных, полученных по запросу. Структура создаваемой таблицы будет соответствовать структуре запроса. В базе данных не должно существовать таблицы, имя которой совпадает с именем таблицы, указанной в SE-
LECT...INTO. Синтаксис команды:
SELECT
столбец
1
[,
столбец
2
[, ...]] INTO
новая_таблица
FROM
список_таблиц
В списке определяются имена столбцов таблиц, значения которых бу- дут включены в таблицу результатов. Имена столбцов в разделе SELECT должны принадлежать одной из таблиц, перечисленных в списке FROM.
Пример:Создать таблицу―Список групп‖,содержащую сведения о количе- стве студентов в группах специальности «Управление качеством».
SELECT c
.[Номер группы], COUNT(Фамилия) as [Количество сту- дентов]
INTO
[Список групп]
FROM
Студент c INNER JOIN Группа g ON c.[Номер груп- пы]=g.[Номер группы] INNER JOIN Специальность s ON g.[Номер спе- циальности]=s.[Номер специальности]
WHERE
[Наименование специальности]=’Управление качеством’
GROUP BY c
.[Номер группы]
SELECT * FROM
[Список групп]
Изменение данных
109
Изменение данных выполняется с помощью команды UPDATE . Ко- манда позволяет обновлять данные одного или нескольких столбцов таблицы в одной или нескольких строках. Синтаксис таблицы:
UPDATE
имя_таблицы
SET
столбец= {новое_значение | DEFAULT | NULL} [,…]
[WHERE
критерий_отбора]
SET определяет изменения, которые необходимо выполнить для одно- го, нескольких, или всех столбцов таблицы. Новое значение может быть за- дано выражением. Раздел WHERE задает условие отбора тех строк, которые нужно изменить.
Пример:Создать запрос на изменение номера специальности«Управление качеством».
UPDATE
Специальность
SET
[Номер специальности]= 221401
WHERE
[номер специальности]=220501
Удаление данных
Для удаления данных из таблицы используется команда DELETE. Уда- ление данных выполняется построчно. За одну операцию можно удалить од- ну или нескольких строк. Синтаксис команды:
DELETE
таблица
[WHERE
критерий_отбора]
Пример:Создать запрос на удаление из таблицыСтудентсведений о студен- те Иванове из группы 1191.
DELETE
Студент
WHERE
[номер группы]=1191 AND Фамилия=’Иванов’
Если раздел WHERE отсутствует, команда удалит все строки таблицы.
Удаление всех строк из таблицы не приводит к удалению сомой таблицы.
9 ОСНОВНЫЕ ФУНКЦИИ И ТИПОВАЯ ОРГАНИЗАЦИЯ СО-
ВРЕМЕННЫХ СИСТЕМ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ
9.1. Основные функции систем управления базами данных
Языково-программным средством управления БД является система управления базами данных (СУБД).
Системой управления базами данных называют программную
систему, предназначенную для создания базы данных на ЭВМ, под-
держания этой БД в актуальном состоянии и обеспечения досту-
па пользователей к содержащимся в ней данным.
По степени универсальности различают два больших класса СУБД:
системы общего назначения;
специализированные системы.
110
СУБД общего назначения не ориентированы на какую-либо предмет- ную область или информационные потребности какой-либо группы пользо- вателей . Каждая система такого класса реализуется как программное средст- во, способное функционировать на некоторой модели ЭВМ в определенной операционной системе и поставляемое как программный продукт. Этим
СУБД присущи развитые функциональные возможности по организации, хранению и управлению данными.
Специализированные СУБД создаются в редких случаях при невоз- можности или нецелесообразности использования СУБД общего назначения
(как, например, в военном деле).
К числу основных функций СУБД принято относить следующие:
управление данными во внешней памяти;
управление буферами оперативной памяти;
управление транзакциями;
журнализация и восстановление БД после сбоев;
поддержание языков БД.
1 ... 4 5 6 7 8 9 10 11 12