русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Дополнительные операторы языка SQL


Дата добавления: 2013-12-23; просмотров: 1876; Нарушение авторских прав


Рассмотрим примеры применения агрегатных функций COUNT (Количество), SUM (Сумма), AVG (Среднее), MIN (Минимум), MAX (Максимум).

Пусть имеем таблицу Сессия (Группа, ФИО_студ, Дисциплина, Оценка).

Пример 1. Требуется определить количество студентов, сдавших экзамен по каждой дисциплине. Необходимо сгруппировать записи по дисциплинам, предварительно исключив из представления записи с пустыми полями в столбце Оценка.

SELECT Сессия.Дисциплина, COUNT(*)

FROM Сессия

WHERE Сессия.Оценка IS NOT NULL

GROUP BY Сессия.Дисциплина

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

SELECT [Сессия].[группа], [Сессия].[Дисциплина], Count(*), AVG([Оценка])

FROM Сессия

WHERE ([Сессия].[Оценка] Is Not Null) And [Сессия].[Оценка]>2

GROUP BY [Сессия].[ГРУППА], [Сессия].[Дисциплина];

Пример 3. Вывести группы, в каждой из которых по одной дисциплине на экзаменах получено больше одной двойки:

SELECT [Сессия].[Группа]

FROM Сессия

WHERE ([Сессия].[Оценка]=2)

GROUP BY [Сессия].[ГРУППА], [Сессия].[Дисциплина]

HAVING COUNT(*)>1;

 

Пусть имеем базу данных «Банк» с одной таблицей, в которой содержится информация о счетах в филиалах некоторого банка:

Фил = <Номер, ФИО, Филиал, ДатаОткрытия, ДатаЗакрытия, Остаток>;

и подстановочная таблица

Гор = <Филиал, Город>.

Пример 4. Найти суммарные остатки на счетах в филиалах, которые превышают 5000 руб.

SELECT Фил.Филиал, Sum(Фил.Остаток)

FROM Фил

GROUP BY Фил.Филиал

HAVING (SUM(Фил.Остаток)>5000);

Пример 5. Найти суммарный остаток в филиалах по счетам, которые были открыты 27 декабря 2002 года.

SELECT Фил.Филиал, Sum(Фил.Остаток) AS [Sum-Остаток]

FROM Фил

WHERE Фил.ДатаОткрытия=#12/27/2002#



GROUP BY Фил.Филиал;

Пример 6. Найти суммарный остаток на счетах филиалов в Иркутске, Ангарске и Зиме.

SELECT Фил.Филиал, Sum(Фил.Остаток)

FROM Фил

GROUP BY Фил.Филиал

HAVING Филиал IN («Иркутск», «Ангарск», «Зима»);

 

Рассмотрим примеры применение вложенных запросов в операторе выбора. Пусть имеется база данных Сессия, состоящая из трех отношений R1, R2 и R3. Атрибуты таблиц следующие:

R1 = (ФИО, Дисциплина, Оценка);

R2 = (ФИО, Группа);

R3 = (Группа, Дисциплина).

Пример 7. Требуется получить список тех студентов, кто сдал все положенные в сессию экзамены.

SELECT ФИО

FROM R1 AS A

WHERE Оценка>2

GROUP BY [ФИО]

HAVING (((Count(*))=(SELECT COUNT(*)

FROM R2, R3

WHERE R2.Группа=R3.Группа

AND ФИО=A.ФИО)));

Пример 8. Требуется получить список тех студентов, кто должен был сдавать экзамен по Базам данных, но пока еще не сдавал.

SELECT ФИО

FROM R2 A, R3

WHERE A.Группа =R3.Группа AND Дисциплина = "БД" AND NOT EXISTS (SELECT ФИО

FROM R1

WHERE ФИО = A.ФИО AND Дисциплина = "БД");

Пример 9. Требуется найти поставщиков, которые поставляют все виды деталей (Найти поставщиков таких, что не существует детали, которую бы они не поставляли).

SELECT DISTINCT [S].[Имя]

FROM S

WHERE (((Exists

(SELECT *

FROM P

WHERE NOT EXISTS

(SELECT *

FROM SP

WHERE [SP].[П#]=[S].[П#] AND [SP].[Д#]=[P].[Д#])))=False));

Или

SELECT DISTINCT [S].[Имя]

FROM S

WHERE (((NOT Exists

(SELECT *

FROM P

WHERE NOT EXISTS

(SELECT *

FROM SP

WHERE [SP].[П#] =[S].[П#] AND [SP].[Д#] =[P].[Д#])))));

Или

SELECT DISTINCT [П#]

FROM SP

GROUP BY [П#]

HAVING COUNT ( [Д#]) =

(SELECT COUNT ([Д#])

FROM P);

Или

SELECT DISTINCT [S].[ИМЯ]

FROM SP, S

WHERE[S].[П#] = [SP].[П#]

GROUP BY [S].[ИМЯ]

HAVING COUNT ([SP].[Д#]) =

(SELECT COUNT ([P].[Д#])

FROM P);

 

Рассмотрим примеры применения внутреннего и внешнего объединения.

В операнде FROM могут содержаться выражения объединений следующего вида:

1. Выражение естественного объединения:: =

<имя таблицы_1> NATURAL {INNER| FULL [OUTER] |

LEFT [OUTER] | RIGHT [OUTER] } JOIN <ИМЯ_ТАБЛИЦЫ_2>

2. Выражение перекрестного объединения :: =

CROSS JOIN <ИМЯ ТАБЛИЦЫ_2>

3. Выражение запроса на объединение :: =

<имя_таблицы_1> UNION JOIN <имя_таблицы_2>

4. Выражение объединения:: =

< имя таблицы_1> { INNER| FULL [OUTER] |

LEFT [OUTER] | RIGHT [OUTER] } JOIN {ON условие | [USING (список столбцов)]} <имя_таблицы_2>

INNER |FULL }

Здесь INNER – внутреннее объединение; LEFT – левое объединение, т.е. в результат входят все строки таблицы 1, а части результирующих кортежей, для которых не было соответствующих значений в таблице 2, дополняются значениями NULL; RIGHT – правое объединение, в результирующее отношение включаются все строки таблицы 2, а недостающие части таблицы 1 дополняются неопределенными значениями; FULL – полное внешнее объединение и левое и правое; OUTER – означает внешнее.

Пример 10. Требуется получить список, содержащий кортежи по всем студентам, по всем сдаваемым ими дисциплинам, со всеми полученными или не полученными оценкам (общая ведомость).

SELECT R1.ФИО, R1.Дисциплина, R1.Оценка

FROM (R2 NATURAL INNER JOIN R3) LEFT JOIN R1 USING (ФИО.Дисциплина)

Рассмотрим примеры определения привилегий.

Формат оператора:

GRANT <привилегии> ON <имя таблицы>

TO <имя пользователя> [{,<имя пользователя>}…]

[WITH GRANT OPTION]

К привилегиям относятся команды: SELECT – разрешение на выполнение запросов; INSERT – вставка значений; UPDATE – изменение значений с указанием множества полей таблицы; DELETE – удаление записей; ALL PRIVILEGES (ALL) – передача всех привилегий для таблицы пользователю; PUBLIC – определяет объект как «общедоступный объект».

Примеры.

1. GRANT SELECT, INSERT ON Сотрудники TO Иванов, Степанов; - Иванову и Степанову разрешено выполнять запросы и вставлять значения в табл. Сотрудники.

2. GRANT UPDATE (зарплата) ON Сотрудники TO Бухгалтер; - Пользователю Бухгалтер разрешено изменять значения в поле Зарплата таблицы Сотрудники.

3. GRANT ALL ON Сотрудники TO Директор; - передача всех привилегий по таблице пользователю Директор.

4. GRANT SELECT ON Сотрудники TO PUBLIC; - устанавливается, что таблица Сотрудники является общедоступной.

5. GRANT SELECT, INSERT ON Зарплата.Сотрудники TO Директор

WITH GRANT OPTION; - Директор имеет право передать привилегии на поле Зарплата таблицы Сотрудники другому пользователю.

 

Рассмотрим примеры отмены привилегий.

Формат оператора:

REVOKE <список привилегий> ON <имена таблиц>

FROM <имена пользователей>; -

Пример.

REVOKE INSERT, DELETE ON Сотрудники

FROM Иванов, Степанов; - Иванову и Степанову отменяют установленные ранее привилегии. Это может сделать тот пользователь, который привилегии ранее устанавливал.

Пример. Установить пользователю Петров (руководитель отдела «Игрушки») разрешение на изменение данных о продавцах отдела, без возможности изменять записи по другим отделам.

GRANT VIEW ОтделИгрушки

AS SELECT *

FROM Сотрудники

WHERE Отдел = «Игрушки»

WITH CHECK OPTIN;

GRANT UPDATE ON ОтделИгрушки TO Петров;



<== предыдущая лекция | следующая лекция ==>
Основные операторы языка SQL | Этапы решения задач на ЭВМ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.