Р6 Шайба Красный 19 Липецк
Nbsp;
РЕЛЯЦИОННЫЕ ЯЗЫКИ ЗАПРОСОВ
Существуют языки: ISBL - язык системы PRTV, QUEL -язык системы INGRES, SQL - язык системы System R; QBE - язык интерфейса высокого уровня в ряде СУБД, PIQUE - язык экспериментальной системы PITS. ISBL ос-нован на реляционной алгебре. QUEL и SQL - на исчислении кортежей. QBE -язык, основанный на исчислении доменов. PIQUE - похож на исчисление кор-тежей, но обеспечивает интерфейс со схемой помощью W-функций.
Язык SQL (Structured Query Language)
Язык был разработан в компании IBM в начале 70-х годов, его первой реализацией был продукт System R; впоследствии он был реализован в много-численных коммерческих продуктах как фирмы IBM, так и других изготовите-лей. Язык SQL стал Американским национальным стандартом (ANSI), Международным стандартом (ISO), стандартом системы UNIX (X/Open). Он используется для описания реляционных операций. Стандарты: SQL/89, SQL/92.
В реляционных системах выполняются как минимум 2 условия:
1. Данные воспринимаются пользователем как таблицы.
2. В распоряжении пользователя имеются операторы (например, для выборки данных), среди которых есть операторы SELECT, PROJECT и JOIN.
Операция SELECT предназначена для извлечения определенных строк из таблиц
Операция PROJECT предназначена для извлечения определенных столбцов из таблицы.
Операция JOIN предназначена для соединения двух таблиц на основе общих значений в общих столбцах.
Все эти операции могут быть сформулированы на языке SQL.
|
|
Пример 5.1. Пусть имеются 2 таблицы:
ОТДЕЛЫ (№ отдела, Наименование, Бюджет)
СЛУЖАЩИЕ (№ служащего, № отдела, Оклад)
1. SELECT:
SELECT № отдела, Наименование, Бюджет
FROM ОТДЕЛЫ
WHERE Оклад >400р.
2. PROJECT:
SELECT № отдела, Бюджет
FROM ОТДЕЛЫ
3. JOIN:
SELECT ОТДЕЛЫ.*, СЛУЖАЩИЕ.*
FROM ОТДЕЛЫ, СЛУЖАЩИЕ
WHERE ОТДЕЛЫ. № отдела = СЛУЖАЩИЕ. № отдела
Функции определения данных:
CREATE TABLE - оператор создания таблицы ;
CREATE INDEX - оператор создания индексной таблицы;
DROP TABLE - оператор удаления таблицы ;
DROP INDEX - оператор удаления индексной таблицы.
Операторы манипулирования данными
В языке SQL предусмотрено четыре предложения манипулирования данными: SELECT (выдать, выбрать), UPDATE (обновить), DELETE (удалить) и INSERT (включить).
Создадим БД Поставщиков (S), Деталей (Р) и Поставок (SP).
CREATE TABLE S
(НОМЕР_ПОСТАВЩИКА CHAR (5),
ИМЯ CHAR (20),
СОСТОЯНИЕ SMALLINT,
ГОРОД CHAR (15));
CREATE TABLE Р
(НОМЕР_ДЕТАЛИ CHAR (6),
НАЗВАНИЕ_ДЕТАЛИ CHAR (20),
|
|
ЦВЕТ CHAR (7),
ВЕС SMALLINT,
Город CHAR (15));
CREATE TABLE SP
(НОМЕР_ПОСТАВЩИКА CHAR (5),
НОМЕР_ДЕТАЛИ CHAR (6),
КОЛИЧЕСТВО INTEGER);
Содержимое базы данных представлено в табл. 5.1, 5.2, 5.3
Поставщики(Р) Таблица 5.1
НОМЕР_ПОСТАВЩИКА | ИМЯ | СОСТОЯНИЕ | ГОРОД |
S1 S2 S3 S4 S5 | Саша Дима Боря Коля Алик | 20 10 30 20 30 | Липецк Пермь Пермь Липецк Арзамас |
Детали (P) Таблица 5.2
НОМЕР_ДЕТАЛИ | НАЗВАНИЕ | ЦВЕТ | ВЕС | ГОРОД |
Р1 Р2 Р3 Р4 Р5 Р6 | Гайка Болт Винт Винт Кулачок Блюм | Красный Зеленый Голубой Красный Голубой Красный | 12 17 17 14 12 19 | Липецк Пермь Рига Липецк Пермь Липецк |
|
|
Поставки (SP) Таблица 5.3
НОМЕР_ПОСТАВЩИКА | НОМЕР_ДЕТАЛИ | КОЛИЧЕСТВО |
S1 S1 S1 S1 S1 S1 S2 S2 S3 S4 S4 S4 | Р1 Р2 Р3 P4 P5 P6 P1 P2 P2 P2 P4 P5 | 300 200 400 200 100 100 300 400 200 200 300 400 |
Выборки
Основной операцией в языке SQL является отображение, синтаксически представляющее собой блок SELECT – FROM - WHERE (выбрать – из – где).
Структура оператора SELECT:
|
|
SELECT [DISTINCT] элементы
FROM таблица
[WHERE <предикат>]
[GROUP BY <поле> [HAVING <предикат>]]
[ORDER BY <поле>]
где: DISTINCT означает, что из таблицы результатов исключается дублирование.
GROUP BY поле - создаются группы, в которых указанное поле имеет одно и то же значение.
HAVING <предикат> - из результата будут исключены некоторые группы.
ORDER BY <поле> - результат будет отсортирован по указанному полю.
Пример 5.2. Выдать номера и состояния для поставщиков, находящихся в Перми:
SELECT НОМЕР_ПОСТАВЩИКА, СОСТОЯНИЕ
FROM S
WHERE ГОРОД= 'Пермь'
Результат: НОМЕР ПОСТАВЩИКАСОСТОЯНИЕ
S2 10
S3 30
Пример 5.3. Простая выборка. Выдать номера для всех поставляемых деталей:
SELECT НОМЕР_ДЕТАЛИ
FROM SP
Результат: НОМЕР ДЕТАЛИ
Р1
Р2
РЗ
Р4
Р5
Р6
Р1
Р2
Р2
P4
Р5
Пример 5.4. Выборка с исключением дубликатов.
SELECT DISTINCT НОМЕР_ДЕТАЛИ
FROM SP
Результат: НОМЕР ДЕТАЛИ
Р1
Р2
РЗ
Р4
Р5
Р6
SELECT DISTINCT - означает выбрать различные.
Пример 5.5. Выборка вычисляемых значений. Выдать номер и вес каждой детали:
SELECT НОМЕР_ДЕТАЛИ, ВЕС
FROM P
Результат: НОМЕР ДЕТАЛИ ВЕС
Р1 12
Р2 17
РЗ 17
Р4 14
Р5 12
Рб 19
Пример 5.6. Фраза SELECT (и фраза WHERE) может включать арифметические выражения, а также прочие имена полей. Можно, кроме того, осуществлять выборку просто констант.
SELECT НОМЕР_ДЕТАЛИ, 'Вес в граммах=', ВЕС
FROM P
Результат: НОМЕР ДЕТАЛИ ВЕС
.Р1 Вес в граммах= 12
Р2 Вес в граммах= 17
РЗ Вес в граммах= 17
Р4 . Вес в граммах= 14
Р5 Вес в граммах= 12
Р6 Вес в граммах= 19
5.7. Выдать полные характеристики для всех поставщиков:
SELECT *
FROM S
Результатом будет таблица S со всеми полями.
Пример 5.8. Ограниченная выборка. Выдать номера поставщиков, которые находятся в Перми и имеют состояние больше, чем 20.
SELECT НОМЕР_ПОСТАВЩИКА
FROM S
WHERE ГОРОД=’Пермь’ AND СОСТОЯНИЕ > 20
Результат: НОМЕР ПОСТАВЩИКА
S3
Условие или предикат, следующий за ключевым словом WHERE, может включать операторы сравнения =, <> (не равно),>,ù >, >=, , ù < и <=, булевские операторы AND (и), OR (или) и NOT (нет), а скобки указывают требуемый порядок вычислений.
Пример 5.9. Выборка с упорядочением. Выдать номера и состояния поставщиков, находящихся в Перми, в порядке убывания их состояния:
SELECT НОМЕР_ПОСТАВЩИКА
FROM S
WHERE ГОРОД=’Пермь’
ORDER BY СОСТОЯНИЕ DESC
Результат: НОМЕР ПОСТАВЩИКАСОСТОЯНИЕ
S3 30
S2 10
Параметры:
ASC – возрастание, DECS – убывание, ORDER BY – упорядочить.
При упорядочивании можно указывать номер столбца:
SELECT НОМЕР_ДЕТАЛИ, ВЕС
FROM P
ORDER BY 2, НОМЕР_ДЕТАЛИ
В строке ORDER BY … цифра 2 означает ссылку на второй столбец результирующей таблицы.
Результат: НОМЕР_ДЕТАЛИВЕС
|
Р1 12
Р5 12
Р4 14
Р2 17
РЗ 17
Р6 19
Пример 5.10. Выборка с использованием BETWEEN (между). Выдать сведения о деталях, вес которых находится в диапазоне от 16 до 19 включительно:
SELECT НОМЕР_ДЕТАЛИ, НАЗВАНИЕ, ЦВЕТ, ВЕС, ГОРОД
FROM P
WHERE ВЕС BETWEEN 16 AND 19
Результат: НОМЕР ДЕТАЛИНАЗВАНИЕЦВЕТВЕСГОРОД
Р2 Болт Зеленый 17 Пермь
РЗ Винт Голубой 17 Рига
Р6 Шайба Красный 19 Липецк
Может также использоваться NOT BETWEEN.
Пример 5.11. Выборка с использованием IN .Выдать детали, вес которых 12,16,17.
SELECT НОМЕР _ДЕТАЛИ, НАЗВАНИЕ, ВЕС, ГОРОД
FROM P
WHERE ВЕС IN (12, 16,17)
Существует также предикат NOT IN (не принадлежит).
Пример 5.12. Выборка с использованием предиката LIKE (похоже на).Выдать все детали, название которых начинается с буквыВ:
SELECT НОМЕР_ДЕТАЛИ, НАЗВАНИЕ, ЦВЕТ, ВЕС, ГОРОД
FROM P
WHERE НАЗВАНИЕ LIKE 'B%'
Обычно предикат LIKE имеет форму:
Имя столбца LIKE литерная строковая константа,
где имя столбца имеет тип CHAR.
Литеры:
- Литера " _ " (разрыв или подчеркивание) или " ? " - обозначает любую одиночную литеру.
- Литера " %" (процент) или " * " - обозначает любую последовательность из нескольких литер.
- Все другие литеры обозначают просто сами себя.
Примеры:
АДРЕС LIKE '% Брест %' - будет приниматься истина, если АДРЕС
содержит строку "Брест".
НОМЕР_ПОСТАВЩИКА LIKE 'S_ _' - будет истина, если номер
состоит из трех литер и первая из них литера S.
НАЗВАНИЕ LIKE '% К_ _ _' - будет истина, если название состоит из
четырех и более литер и трем последним из них предшествует литера К.
ГОРОД NOT LIKE '% Е %' - будет истина, если значение литера не
содержит литеры Е.
Дата добавления: 2018-04-04; просмотров: 320; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!