Лабораторная работа: Знакомства с MS SQL Server

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Таб_номер

Звание

Степень

101

профессор

д. т.н.

102

доцент

к. ф.-м. н.

105

доцент

к. т.н.

201

профессор

д. ф.-м. н.

202

доцент

к. ф.-м. н.

301

профессор

д. т.н.

302

доцент

к. т.н.

401

профессор

д. т.н.

402

доцент

к. т.н.

403

ассистент

-

501

профессор

д. ф.-м. н.

502

профессор

д. ф.-м. н.

503

доцент

к. ф.-м. н.

601

профессор

д. ф.-м. н.

Таблица 10. Студент

Рег_номер

Номер

Фамилия

10101

09.03.03

Николаева Н. Н.

10102

09.03.03

Иванов И. И.

10103

09.03.03

Крюков К. К.

20101

09.03.02

Андреев А. А.

20102

09.03.02

Федоров Ф. Ф.

30101

14.03.02

Бондаренко Б. Б.

30102

14.03.02

Цветков К. К.

30103

14.03.02

Петров П. П.

50101

01.03.04

Сергеев С. С.

50102

01.03.04

Кудрявцев К. К.

80101

38.03.05

Макаров М. М.

80102

38.03.05

Яковлев Я. Я.

Таблица 11. Экзамен

Дата

Код

Рег_номер

Таб_номер

Аудитория

Оценка

05.06.2015

102

10101

102

т505

4

05.06.2015

102

10102

102

т505

4

05.06.2015

202

20101

202

т506

4

05.06.2015

202

20102

202

т506

3

07.06.2015

102

30101

105

ф419

3

07.06.2015

102

30102

101

т506

4

07.06.2015

102

80101

102

м425

5

09.06.2015

205

80102

402

м424

4

09.06.2015

209

20101

302

ф333

3

10.06.2015

101

10101

501

т506

4

10.06.2015

101

10102

501

т506

4

10.06.2015

204

30102

601

ф349

5

10.06.2015

209

80101

301

э105

5

10.06.2015

209

80102

301

э105

4

12.06.2015

101

80101

502

с324

4

15.06.2015

101

30101

503

ф417

4

15.06.2015

101

50101

501

ф201

5

15.06.2015

101

50102

501

ф201

3

15.06.2015

103

10101

403

ф414

4

17.06.2015

102

10101

102

т505

5

Пример 1: Выбрать факультет и кафедры, используя неявное соединение. Результат отсортировать по алфавиту:

SELECT

Ф.Название AS Факультет

, К.Название AS Кафедра

FROM

Факультет Ф, Кафедра К

WHERE

Ф.Аббревиатура = К.Факультет ORDER BY

Факультет, Кафедра

Пример 2: Выбрать факультет и кафедры, используя явное соединение. Результат от- сортировать по алфавиту:

SELECT

Ф.Название AS Факультет

, К.Название AS Кафедра

FROM

Факультет Ф

INNER JOIN Кафедра К ON Ф.Аббревиатура = К.Факультет

ORDER BY

Факультет, Кафедра

Пример 3: Выбрать все факультеты и их кафедры, если существуют. Результат отсор- тировать по алфавиту:

SELECT

Ф.Название AS Факультет

, К.Название AS Кафедра

FROM

Факультет Ф

LEFT OUTER JOIN Кафедра К ON Ф.Аббревиатура = К.Факультет

ORDER BY

Факультет, Кафедра

Пример 4: Вывести из таблиц «Кафедра», «Специальность» и «Студент» данные о сту- дентах:

SELECT

С.Фамилия

, П.Направление

, К.Название AS Кафедра

FROM

Студент С

INNER JOIN Специальность П ON С.Номер = П.Номер INNER JOIN Кафедра К ON П.Шифр = К.Шифр

Пример 5: Вывести для каждого сотрудника фамилию, должность, зарплату и фамилию его непосредственного руководителя:

SELECT

С.Фамилия

, С.Должность

, С.Зарплата

, П.Фамилия AS Руководитель

FROM

Сотрудник С

INNER JOIN Сотрудник П ON С.Шеф = П.Таб_номер

Пример 6: Вывести список студентов, сдавших хотя бы один экзамен. По правилам соединения, студенты, не сдававшие экзамены, в выборке представлены не будут:

SELECT

С.Фамилия

FROM

Студент С

INNER JOIN Экзамен Э ON С.Рег_номер = Э.Рег_номер

GROUP BY

С.Фамилия

Пример 7: Вывести из таблиц «Студент» и «Экзамен» учетные номера и фамилии сту- дентов, а также количество сданных экзаменов и средний балл для каждого студента:

SELECT

С.Фамилия

, COUNT(Э.Оценка) AS [Количество экзаменов]

, AVG(Э.Оценка) AS [Средний балл]

FROM

Студент С

INNER JOIN Экзамен Э ON С.Рег_номер = Э.Рег_номер

GROUP BY

С.Фамилия

Пример 8: Вывести список заведующих кафедрами и их зарплаты, и стаж работы: SELECT

С.Фамилия

, С.Зарплата

, З.Стаж

FROM

Сотрудник С

INNER JOIN Зав_кафедрой З ON С.Таб_номер = З.Таб_номер

Пример 9: Вывести список кандидатов и докторов физико-математических наук: SELECT

С.Фамилия

, П.Степень

FROM

Сотрудник С

INNER JOIN Преподаватель П ON С.Таб_номер = П.Таб_номер

WHERE

П.Степень IN ('к.ф.-м.н.', 'д.ф.-м.н.')

Пример 10: Вывести название дисциплины, фамилию, должность и степень препода- вателя, дату и место проведения экзаменов в хронологическом порядке:

SELECT DISTINCT

Д.Название AS Дисциплина

, С.Фамилия, С.Должность

, П.Степень, Э.Дата, Э.Аудитория

FROM

Экзамен Э

INNER JOIN Дисциплина Д ON Э.Код = Д.Код

INNER JOIN Сотрудник С ON Э.Таб_номер = С.Таб_номер INNER JOIN Преподаватель П ON Э.Таб_номер = П.Таб_номер

ORDER BY

Э.Дата

Пример 11: Вывести фамилию преподавателей и количество их экзаменов: SELECT

С.Фамилия, COUNT(Э.Дата) AS [Количество экзаменов]

FROM

Экзамен Э

INNER JOIN Сотрудник С ON Э.Таб_номер = С.Таб_номер

GROUP BY

С.Фамилия

Пример 12: Вывести список студентов, не сдавших ни одного экзамена: SELECT

С.Фамилия

FROM

Студент С

LEFT OUTER JOIN Экзамен Э ON С.Рег_номер = Э.Рег_номер

WHERE

Э.Рег_номер IS NULL

Задание

Вывести из таблиц «Кафедра», «Специальность» и «Студент» данные о студентах, которые обучаются на данном факультете (например, «ит»).

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

Вывести в запросе для каждого сотрудника номер и фамилию его непосредствен- ного руководителя. Для заведующих кафедрами поле руководителя оставить пустым.

Вывести список студентов, сдавших минимум два экзамена.

Вывести список инженеров с зарплатой, меньшей 20000 руб.

Вывести список студентов, сдавших экзамены в заданной аудитории.

Вывести из таблиц «Студент» и «Экзамен» учетные номера и фамилии студентов, а также количество сданных экзаменов и средний балл для каждого студента только для тех студентов, у которых средний балл не меньше заданного (например, 4).

Вывести список заведующих кафедрами и их зарплаты, и степень.

Вывести список профессоров.

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

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

Вывести список студентов, не сдавших ни одного экзамена в указанной дате.

Лабораторная работа 7

Объединение результатов нескольких запросов

Цель работы

Изучить основы объединения результатов запросов.

Изучить UNION.

Изучить EXCEPT.

Изучить INTERSECT.

Теоретическая часть

Для объединения результатов двух или более запросов в одну таблицу используется команда UNION. Команда UNION объединяет вывод двух или более запросов в единый набор строк и столбцов и имеет вид:

Первый запрос UNION [ALL]

Второй запрос

Для объединения результатов нескольких запросов с помощью UNION, они должны соответствовать следующим требованиям:

? содержать одинаковое количество столбцов;

? типы данных столбцов должны совпадать во всех запросах;

? в промежуточных запросах нельзя использовать сортировку ORDER BY.

Чтобы отсортировать результат объединения, в конце запроса добавляется ORDER BY. Названия столбцов в запросах могут отличаться. Поэтому в команде ORDER BY указывается название столбцов с первого запроса.

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

Если необходимо при объединении сохранить повторяющиеся строки, то для этого ис- пользуется параметр ALL.

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

Чтобы найти разность двух выборок, то есть те строки, которые есть в первой выборке, но которых нет во второй, используется команда EXCEPT. Команда EXCEPT имеет следую- щий вид:

Первый запрос EXCEPT

Второй запрос.

Возвращаются все различные значения, указанные слева от оператора EXCEPT. Эти значения возвращаются, если они отсутствуют в результатах выполнения правого запроса.

Требования к использованию команды EXCEPT такие же, как к команде UNION.

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

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

Первый запрос INTERSECT

Второй запрос.

Требования к использованию команды INTERSECT такие же, как к командам UNION и EXCEPT.

Практическая часть

Дана таблица Страны:

Название

Столица

Площадь

Население

Континент

Австрия

Вена

83858

8741753

Европа

Азербайджан

Баку

86600

9705600

Азия

Албания

Тирана

28748

2866026

Европа

Алжир

Алжир

2381740

39813722

Африка

Ангола

Луанда

1246700

25831000

Африка

Аргентина

Буэнос-Айрес

2766890

43847000

Южная Америка

Афганистан

Кабул

647500

29822848

Азия

Бангладеш

Дакка

144000

160221000

Азия

Бахрейн

Манама

701

1397000

Азия

Белиз

Бельмопан

22966

377968

Северная Америка

Белоруссия

Минск

207595

9498400

Европа

Бельгия

Брюссель

30528

11250585

Европа

Бенин

Порто-Ново

112620

11167000

Африка

Болгария

София

110910

7153784

Европа

Боливия

Сукре

1098580

10985059

Южная Америка

Ботсвана

Габороне

600370

2209208

Африка

Бразилия

Бразилиа

8511965

206081432

Южная Америка

Буркина-Фасо

Уагадугу

274200

19034397

Африка

Бутан

Тхимпху

47000

784000

Азия

Великобритания

Лондон

244820

65341183

Европа

Венгрия

Будапешт

93030

9830485

Европа

Название

Столица

Площадь

Население

Континент

Венесуэла

Каракас

912050

31028637

Южная Америка

Восточный Тимор

Дили

14874

1167242

Азия

Вьетнам

Ханой

329560

91713300

Азия

Пример 1: Вывести объединенный результат выполнения запросов, которые выбирают страны с площадью больше 1 млн. кв. км и с населением больше 100 млн. чел.:

SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Площадь > 1000000 UNION

SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Население > 100000000

Пример 2: Вывести объединенный результат выполнения запросов, которые выбирают страны с площадью больше 1 млн. кв. км и с населением больше 100 млн. чел., при этом остав- ляет дубликаты:

SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Площадь > 1000000 UNION ALL

SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Население > 100000000

Пример 3: Вывести объединенный результат выполнения запросов, которые выбирают европейские страны с плотностью более 300 чел. на кв. км, азиатские страны с плотностью более 200 чел. на кв. км. и африканские страны с плотностью более 150 чел. на кв. км. Резуль- тат отсортировать по континентам:

SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Континент = 'Европа' AND

CAST(Население AS FLOAT) / Площадь > 400 UNION

SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Континент = 'Азия' AND

CAST(Население AS FLOAT) / Площадь > 300

UNION SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Континент = 'Африка' AND

CAST(Население AS FLOAT) / Площадь > 200 ORDER BY

Континент

Пример 4: Вывести список стран с площадью больше 1 млн. кв. км, исключить страны с населением больше 10 млн. чел.:

SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Площадь > 1000000 EXCEPT

SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Население > 10000000

Пример 5: Вывести список стран с площадью больше 1 млн. кв. км и с населением больше 100 млн. чел.:

SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Площадь > 1000000 INTERSECT

SELECT

Название

,Столица

,Площадь

,Население

,Континент FROM

Страны WHERE

Население > 100000000

Задание

Вывести объединенный результат выполнения запросов, которые выбирают страны с площадью меньше 500 кв. км и с площадью больше 5 млн. кв. км: интерфейс база данный фильтрация

Источник: https://otherreferats.allbest.ru/download/1383510/