Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб4.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
154.11 Кб
Скачать

Лабораторна робота № 4

Ціль заняття: вивчити команди формування запитів до бази даних (SELECT)

Результат заняття: результати виконання завдань, що приведені вкінці тексту. Сформування команди виборки даних у відповідності з варіантом завдання.

Теоретичні відомості.

Команда SELECT дозволяє реалізувати всі оператори реляційної алгебри над відношеннями (таблицями) бази даних. Обов’язковими виразами команди SELECT є вирази SELECT та FROM. В найпростішій формі, команда SELECT використовується для того, щоб добути інформацію з таблиці. Не обов’язково використовувати всі функції команди, але обов’язково зберігати їх порядок слідування, тобто функція ORDER BY завжди завершує команду SELECT, а функція HAVING завжди стоїть після GROUP BY, яке в свою чергу не може бути раніше ніж функція WHERE і т.д.

Синтаксис команди SELECT:

SELECT [DISTINCT] *|<стовпець> [<псевдонім>] [,<групова функція>] [,…n]

FROM <таблиця>[, …n]| (<підзапит>)

[WHERE <умова>]

[GROUP BY<вираз групування]

[HAVING <умова відбору групи>]

[ORDER BY < стовпець >[,…n]]

Щоб вивести вміст всіх стовпців, можна замінити їх перлік знаком *. В цьому випадку стовпці будуть виведені в тому порядку, в якому вони ідуть в таблиці. Якщо ви хочете змінити порядок, то доведеться перераховувати імена стовпців у потрібному порядку.

Функція FROM використовується для вказання переліку таблиць, що використовуються в запиті та умови їх з’єднання.

Приклад 1

Задача.

Вивести всі записи з відношення Progress.

Рішення.

1 варіант:

SELECT * FROM Progress;

2 варіант:

SELECT IDReport, IDSubject, NRecordBook, NTerm, PIN, Mark

FROM Progress;

Приклад 2

Задача.

Вивести назви предметів з таблиці Subject.

Рішення.

SELECT NameSubject

FROM Subject ;

Приклад 3

Задача.

Вивести список студентів з таблиці Student, присвоївши стовпцю виводу ім’я ПІП.

Рішення.

SELECT StName ФИО

FROM Student;

Окремо слід зупинитися на функції DISTINCT, яка дозволяє вивести унікальне значення на множині атрибутів, що задані у функції SELECT.

Приклад 4

Задача.

Вивести значення оцінок, які коли-небудь ставилися студентам.

Рішення.

SELECT Mark Оценка

FROM Progress;

Результатом цього запиту буде множина значень оцінок, що повторюються, в той час як нас цікавить тільки їх наявність у вихідній множині, тому доцільно цей запит виконати наступним чином:

SELECT DISTINCT Mark Оцінка

FROM Progress;

Виборка даних з декількох таблиць

Більшість запитів звертається не до однієї, а до декількох таблиць, перелік яких та умови їх з’єднання вказуються у функції FROM.

Синтаксис функції FROM:

FROM <перша таблиця> [[AS] <псевдонім>]

<тип об’єднання> <друга таблиця>[[AS] <псевдонім>]

[ON <умова об’єднання>]

Типи об’єднань наведені нижче в таблиці.

Присвоєння псевдоніма таблиці призводить до зменшення коду та покращує сприйняття тексту запита. Псевдонім повинен бути унікальним в рамках одного запита. Слід враховувати й те, що після того, як був оголошений псевдонім, SQL Server перестає сприймати дійсне ім’я таблиці в рамках даного запиту. Один і той же псевдонім може бути присвоєний різним таблицям в запиті і підзапиті. Однак, прагнучи до оптимального коду потрібно віддавати собі звіт наскільки це доцільно. Існує декілька способів з’єднання таблиць (див. Таблиця 1),найбільш вживаний спосіб INNER JOIN, який також може бути реалізований і з допомогою функції WHERE.

У функції FROM повинні бути вказані всі таблиці, що приймають участь у запиті, навіть якщо дані з тієї чи іншої таблиці не позначені у функції SELECT.

Таблиця 1

Варіанти JOIN

Призначення

1

2

3

1

INNER JOIN

Внутрішнє з’єднання, що включає тільки співпадаючі по умові з’єднання записи з таблиць, що з’єднуються

2

OUTER JOIN(LEFT – RIGHT)

Включає всі записи лівої (правої) таблиці і співпадаючі ї ними по умові з’єднання записи правої (лівої) таблиці

3

FULL JOIN

Включення всіх даних із з’єднувальних таблиць

4

CROSS JOIN

Декартове множення

Приклад 5

Задача.

Вивести списки студентів та назви груп, в яких вони навчаються.

Рішення.

SELECT NameGroup,NRecordBook,STname

FROM SGroup SG INNER JOIN Student St

ON SG.IDGroup=St.IDGroup

Приклад 6

Задача.

Вивести назви груп та список студентів, які в них зараховані. Тут розуміється, що мають місце групи, в які ще не були записані студенти.

Рішення.

SELECT NameGroup,NRecordBook,STname

FROM SGroup SG LEFT OUTER JOIN Student St

ON SG.IDGroup=St.IDGroup

або

SELECT NameGroup,NRecordBook,STname

FROM Student St RIGHT OUTER JOIN SGroup SG

ON St.IDGroup =SG.IDGroup

Приклад 7

Задача.

Вивести дані про успішність студентів.

Рішення.

Дані про успішність містяться в таблиці Progress, однак там інформація зберігається в закодованому вигляді. Щоб зробити необхідні дані доступними і зрозумілими, слід виконати з’єднання цієї таблиі Progress з таблицями Subject, Report, Student, Teacher.

select StName ФИО, Student.NRecordBook [№ зачётки],

NameReport[Вид отчётности],NameSubject [Название предмета],

TeacherName [Преподаватель], Mark Оценка

from Progress join Student

ON Student.NRecordBook=Progress.NRecordBook

join Report ON Progress.IDReport=Report.IDReport

join Subject ON Progress.IDSubject =Subject.IDSubject

join teacher ON Progress.PIN=teacher.PIN

Приклад 8

Задача.

Вивести номера залікової книжки та прізвища студентів з відношення Progress.

SELECT NRecordBook, StName ФИО

FROM Student, Progress

WHERE Student. NRecordBook = Progress. NRecordBook

Результат реалізації запита:

Ambiguous column name 'NRecordBook'.

Буде видано повідомлення про помилку, так як атрибут NRecordBook входить в схеми двох відношень і необхідно конкретизувати, із якого відношення вибирається функцією SELECT атрибут NRecordBook.

Приклад 8

Задача.

Вивести номера залікової книжки та прізвища студентів з відношення Progress.

SELECT Student.NRecordBook, StName ФИО

FROM Student, Progress

Можливо, результати будуть коректні, якщо ви хотіли виконати декартове з’єднання. В іншому випадку ви отримаєте таблицю що містить кількість записів, що рівне добутку кількості записів першої таблиці на кількість записів другої, тому що не була вказана умова з’єднання таблиць.

Приклад 9

Задача.

Вивести номера залікової книжки та прізвища студентів з відношення Progress.

SELECT S.NRecordBook, StName ФИО

FROM Student S,Progress P

WHERE Student. NRecordBook = Progress. NRecordBook

Результат реалізації запита:

Server: Msg 107

The column prefix 'Student' does not match with a table name or alias name used in the query.

Server: Msg 107The column prefix 'Progress' does not match with a table name or alias name used in the query.

Після присвоєння таблицям псевдонімів була спроба використати дійсні імена таблиць.

У більшості випадків мало кого цікавить весь вміст таблиць. Частіше всього при запиті обробляється множина запитів, що задовольняють ту чи іншу умову. Реалізація оператора вибору здійснюється в SQL Server за допомогою використання функції WHERE. Функція WHERE дозволяє задати критерій відбору рядків з таблиць.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]