2. Прості запити
Для подальшого використання в прикладах і вправах буде використовуватися “кінематографічна ” база даних, яка містить дані про кінофільми, акторів і кіностудії, охоплюючи п’ять відношень, (рис.6.1).
Movie (
TITLE : string,
YEAR : integer,
Length : integer, .
InColor : boolean,
StudioName :string,
ProducerC# : integer)
StarsIn (
MOVIETITLE : string,
MOVIEYEAR : integer,
STARNAME :string)
MovieStar (
name : string,
address : string,
gender : char,
birthdate : date)
MovieExec (
name : string,
address : string,
CERT# : integer,
NetWorth : integer)
Studio (
name : string,
address : string,
presC# : integer)
Рис.6.1. Приклад схеми бази даних про фільми, акторів і кіностудії.
Простішою формою запита буде така, яка передбачає вибір із деякого відношення групи кортежів, задовольняючих певній умові. Подібний запит аналогічний операції вибору в реляційній алгебрі. При його написанні використовуються три службових слова SQL – SELECT (“вибрати ”), FROM (“із”) і WHERE (“при умові ”), які застосовуються у більшості запитів SQL.
Приклад 6.1. На основі запита вибрати із БД на рис.6.1. данні про кінофільми, зняті на студії “Disney” у 1990 році. На мові SQL запит записується так:
SELECT *
FROM Movie
WHERE studioName = ‘Disney’ AND year = 1990;
Як бачимо, запит включає три речення:
У реченні FROM перелічені імена відношень (Movie).
Речення WHERE задає умову, аналогічну умові С оператора вибору sС у реляційній алгебрі. Кортежі відношення Movie, що вибираються, повинні задовольняти умовіWHERE.
Речення SELECT вказує, які атрибути кортежів, що належать відношенням із FROM і задовольняють умові WHERE, повинні бути включені у результуюче відношення.
Один із способів інтерпретації запита полягає у послідовній перевірці кожного кортежу відношення, що перелічені у реченні FROM, на відповідність умові речення WHERE. Так процесор запитів SQL, зустрівши кортеж t відношення Movie, виконає заміни назв атрибутів у реченні WHERE відповідними значеннями.
-
title
year
length
inColor
studioName
producer#
Pretty Woman
1990
119
true
Disney
999
Кортеж t
Тоді речення прийме наступний вигляд:
WHERE ‘Disney’= ‘Disney’ AND 1990= 1990
Оскільки умова є вірною, кортеж відношення Movie уключається у результуюче відношення запиту.
Проекція в SQL.
Для виконання процедури проекції використовується речення SELECT, у якому можна задавати список атрибутів, які необхідно включити у результуюче відношення.
Приклад 6.2. На основі запита вибрати із відношення Movie на рис.6.1. данні про назви і про тривалість демонстрації кінофільмів, знятих на студії “Disney” у 1990 році. На мові SQL запит записується так:
SELECT title, length
FROM Movie
WHERE studioName = ‘Disney’ AND year = 1990;
Вигляд одного кортежу результуючого відношення приведен нижче.
-
title
length
Pretty Woman
119
¼
¼
Для зміни у результуючому відношенні назв стовпців відношень, вказаних у реченні FROM, дозволяється у реченні SELECT супроводжувати ім’я атрибуту службовим словом AS і псевдонімом (alias), який повинен стати заголовком відповідного стовпця результуючої таблиці. Дозволяється слово AS не вживати: у цьому випадку ім’я і псевдонім атрибута розділяються тільки пробілом.
Ще однією можливістю речення SELECT, є створення розрахункових виразів у списку імен атрибутів, як це має місце у операторі розширеної проекції p в реляційній алгебрі.
Приклад 6.3. На основі запита вибрати із відношення Movie на рис.6.1. данні про назви і про тривалість демонстрації кінофільмів, знятих на студії “Disney” у 1990 році. У результуючому відношенні перейменувати стовпець title у стовпець з ім’ям name, а стовпець з атрибутом length у стовпець з ім’ям lengthInHours, у якому значеннями стовпця будуть результати множення вмісту компонентів length на константу 0,016667. На мові SQL запит записується так:
SELECT title name, length*0.016667 AS lengthInHours
FROM Movie
WHERE studioName = ‘Disney’ AND year = 1990;
Вигляд одного кортежу результуючого відношення приведен нижче.
-
name
lengthInHours
Pretty Woman
1.98334
¼
¼
Мова SQL надає можливість порівняння за допомогою службового слова LIKE.
Приклад 6.4. На основі запиту вибрати із відношення Movie назви кінофільмів, які включають два слова, розділених символом пробіл; і у яких першим є слово Star, а другим – слово, що складається із любих чотирьох символів. Запит має вигляд:
SELECT title
FROM Movie
WHERE title LIKE ‘Star ____’;
Використання у шаблоні символу _ дозволяє включати у результуюче відношення такі назви, як, наприклад, Star_Wars.
Упорядкування результатів.
Виконується за допомогою речення
ORDER BY < список атрибутів >
По умовчанню значення кожного атрибута, що включено до списку, сортуються по збільшенню. Щоб змінити порядок сортування на зворотній, слід вказати після імені атрибуту службове слово DESC
