30.Подзапросы
Ответ на практический вопрос
Вывести список учеников получивших оценку 5
SELECT Фамилия, Имя, Класс
FROM Ученики
WHERE Код_ученика In (SELECT Код_ученика
From Оценки
Where Оценка=5 );
Используется оператор In, так как подрапрос возвращает более одной записи.
Теорет вопрос
SQL позволяет использовать одни запросы внутри других запросов, то есть вкладывать запросы друг в друга.
Как работает запрос SQL со связанным подзапросом?
• Выбирается строка из таблицы, имя которой указано во внешнем запросе.
• Выполняется подзапрос и полученное значение применяется для анализа этой строки в условии предложения WHERE внешнего запроса.
• По результату оценки этого условия принимается решение о включении или не включении строки в состав выходных данных.
• Процедура повторяется для следующей строки таблицы внешнего запроса.
В некоторых случаях для гарантии получения единственного значения в результате выполнения подзапроса используется DISTINCT. Одним из видов функций, которые автоматически всегда выдают в результате единственное значение для любого количества строк, являются агрегирующие функции.
Оператор IN также широко применяется в подзапросах. Он задает список значений, с которыми сравниваются другие значения для определения истинности задаваемого этим оператором предиката.
Подзапросы можно применять внутри предложения HAVING.
Логические оператора в подзапросах:
EXISTS , NOT, IN, ANY, ALL
36.Пользовательские функции- они возвращают или выводят результат. Делятся на 2 вида: скалярные(функции, которые возвращают число или текст) и табличные(функции, которые выводят результат в виде таблицы).
Синтаксис команд
CREATE FUNCTION <Имя функции>
([@<Параметр1> <Тип1>[=<Значение1>],
@<Параметр2> <Тип2>[=<Значение2>], . . .])
RETURNS <Тип>/TABLE
AS
RETURN([<Команды SQL>])
CREATE FUNCTION (функция_Средняя_цена)
RETURNS TABLE
AS
RETURN
SELECT товар,Цена1,Цена2,(Цена3,Цена1+Цена2+Цена3)/3
FROM Товары
31. Ответ на практический вопрос
SELECT Фамилия, Имя
From Ученики
Where Класс='11'
UNION SELECT Фамилия, Имя
From Ученики
Where Класс='10'
ORDER BY 1;
1 в Order by означает то, что упорядоченность будет идти по фамилии, так как Фамилия после Select стоит первая
Теорет вопрос
Оператор UNION используется для объединения выходных данных двух или более SQL-запросов в единое множество строк и столбцов.
символом “;” (точка с запятой) оканчивается только последний запрос. Отсутствие этого символа в конце SELECT-запроса означает, что следующий за ним запрос также, как и он сам, является частью общего запроса с UNION. Использование оператора UNION возможно только при объединении запросов, соответствующие столбцы которых совместимы по объединению. То есть, соответствующие числовые поля должны иметь полностью совпадающие тип и размер, символьные поля должны иметь точно совпадающее количество символов, количество полей в списке каждой инструкции SELECT должно совпадать. В противном случае выводится сообщение об ошибке.Если NULL-значения запрещены для столбца хотя бы одного любого подзапроса объединения, то они должны быть запрещены и для всех соответствующих столбцов в других подзапросах объединения.Допускается указание только одной операции ORDER BY, и она должна указываться после последней инструкции UNION SELECT. При необходимости из инструкций SELECT или UNION SELECT можно задать операции GROUP BY и HAVING.В противном случае выводится сообщение об ошибке.
Требования к столбцам запросов
-имя столбца;
-тип данных столбца;
-значение по умолчанию – может заноситься в столбец тогда, когда при внесении записей в таблицу не указано значение для данного столбца (в определении столбца может отсутствовать);
-указание на то, обязательно ли столбец должен содержать данные: NOT NULL предотвращает занесение в столбец значений NULL (может отсутствовать).
33. Ответ на практический вопрос
Передайте пользователю Ivan право на изменение оценок, удаление записей в таблице Exam_marks:
GRANT DELETE, UPDATE ON Exam_marks TO Ivan
Отмените привилегию удаления строк по отношению к таблице Exam_marks у пользователя по имени Ivan:
REVOKE DELETE
ON Exam_marks FROM Ivan
Теорет вопрос
Назначение и отмена разрешений
С помощью оператора GRANT пользователю или группе можно дать разрешение на использование объекта. Оператор GRANT имеет следующий синтаксис:
GRANT разрешение ON TABLE таблица
ТО учетная_запись1
все разрешения, которые можно назначить с помощью оператора GRANT:
SELECT; DELETE; INSERT; UPDATE; DROP; SELECTSECURITY; UPDATESECURITY; DBPASSWORD;
UPDATEIDENTITY;CREATE;SELECTSCHEMA;SCHEMA;UPDATEOWNER.
Параметр Таблица в приведенном выше синтаксисе — это имя любой таблицы базы данных.
Например, следующий оператор GRANT предоставляет группе Programmers права на просмотр, удаление, добавление и модификацию строк таблицы tblCustomer:
GRANT SELECT, DELETE, INSERT, UPDATE ON TABLE tblCustomer TO Programmers
Для отмены предоставленных пользователю или группе прав на объект предназначен оператор REVOKE, синтаксис которого приведен ниже:
REVOKE разрешение ON
TABLE таблица
FROM учетная_запись
Следующий оператор REVOKE запрещает группе Programmers удалять записи из таблицы tblCustomer:
REVOKE DELETE
ON TABLE tblCustomer
FROM Programmers
Определение понятия
32. Ответ на практический вопрос
Создайте пользователя по имени Ivan, пароль и идентификатор любые:
CREATE USER Ivan 1111111 Terminator
{1111111--------это пароль
Terminator------ это идентификатор}
Создайте группу пользователей по имени Menedger:
CREATE GROUP Menedger pid1
{ У групп паролей нет, так как их учетные записи не предназначены для подключения к базе данных. pid1------ это идентификатор }
Определите пользователя Ivan в группу Menedger: ADD USER Ivan To Menedger
Теорет вопрос
Новая учетная запись пользователя создается в Jet 4 SQL посредством оператора CREATE USER, который имеет следующий синтаксис:
CREATE USER пользователь пароль pid
В этом операторе указываются имя пользователя, которое будет внесено в его учетную запись, модифицируемый пароль пользователя и его персональный идентификатор, уникальный во всех рабочих группах. Обратите внимание, что имя пользователя, его пароль и персональный идентификатор разделяются не запятыми, а пробелами!
Учетная запись группы создается оператором CREATE GROUP:
CREATE GROUP rpynna1 pid1
У групп паролей нет, так как их учетные записи не предназначены для подключения к базе данных. Имена пользователей и групп не должны совпадать, так как учетные записи пользователей и групп разделяют одно «пространство имен».
Изменение паролей
Для изменения пароля пользователя в его учетной записи служит оператор ALTER USER:
ALTER USER пользователь PASSWORD новый_пароль старый_пароль
Так, текущий пароль Сьюзан — minus — можно заменить паролем plus:
ALTER USER Suzanne PASSWORD minus plus
Чтобы изменить пароль базы данных, следует воспользоваться оператором
ALTER DATABASE:
ALTER DATABASE PASSWORD новый_пароль старый_пароль
Если база данных не защищена паролем (имеет пароль Null), а вы хотите назначить ей пароль ххх, выполните следующее:
ALTER DATABASE PASSWORD ххх Null
Добавление пользователей в группу
Чтобы сделать ряд пользователей членами определенной группы, необходимо воспользоваться оператором ADD USER. Ниже приведен его синтаксис:
ADD USER пользователь1[,пользователь2 [, . .]] ТО группа
Например, Питера можно включить в группу Programmers с помощью следующего оператора:
ADD USER Peter ТО Programmers
А чтобы добавить Поля и Сьюзан во встроенную группу users, воспользуйтесь вот таким оператором:
ADD USER Suzanne. Paul TO users
Каждого нового пользователя, учетная запись которого создана с помощью оператора CREATE USER, обязательно нужно добавить во встроенную группу users посредством оператора ADD USER. Иначе пользователь не сможет подключиться к базе данных со своим новым именем и паролем!
Удаление пользователей и групп
Оператор DROP USER имеет две формы. Первая используется для удаления учетной записи пользователя:
DROP USER пользователь1
В частности, чтобы удалить учетную запись Поля, нужно воспользоваться оператором
DROP USER Paul
Вторая форма оператора DROP USER служит для удаления пользователя из группы:
DROP USER пользователь1 FROM группа
Вот, например, как удаляется запись Сьюзан из группы Programmers:
DROP USER Suzanne FROM Progranmers
Ну а чтобы удалить саму группу, нужно обратиться к оператору DROP GROUP:
DROP GROUP rpynna1
Далее показано, как удалить группу Managers: DROP GROUP Managers
34. Ответ на практический вопрос
CREATE VIEW Uch
AS SELECT *
FROM Ученики
WHERE Фамилия Like ‘_о%’
Теорет вопрос
Представление-это тот же запрос,который выполняется всякий раз,когда представление учавствует в какой-либо команде.
Создание, удаление и обновление представлений
Представление создается командой CREATE VIEW, после которой указывается имя представления, а затем следует запрос, формирующий тело представления.
Преимущество представления по сравнению с запросами к БД заключается в том, что оно будет модифицировано автоматически всякий раз, когда таблица, лежащая в его основе, изменяется.
Представление можно изменять командами модификации DML, но фактически команды будут перенаправлены к базовой таблице. Например, выполнение команды
UPDATE Имя_прдеставления SET поля для модификации
WHERE условие;
Представления упрощают работу с данными, однако достаточно часто они являются объектами, доступными только для чтения. Они бывают модифицируемыми (Если команды модификации могут выполняться в представлении , отображая определенную часть их содержимого) и немодифицируемыми (позволяют получать информацию более рационально, получать достаточно сложные запросы, которые можно получать многократно, не используя сложных предикатов.
).Это означает, что информацию из них можно запрашивать, но они не могут подвергаться действию команд модификации. Рассмотрим правила, определяющие, является ли представление модифицируемым.
Синтаксис удаления представления из БД подобен удалению базовых таблиц:
DROP VIEW <им представления>
