Базы данных / Подмога_БД_Величко / 8th work
.docПрактическая работа 8
Простейшие запросы к РБД
Оформление:
Схема данных.
Далее для каждого запроса:
-
Текст запроса (формулировка)
-
Запрос на языке SQL
-
Результат выполнения запроса в виде таблицы
Структура оператора Select.
Select [distinct] <список выражений над атрибутами>
From <список таблиц>
[Where <условие выборки>]
[Group by <список атрибутов>]
[Having <условие>]
[Union <выражения с оператором Select>]
[Order by <список атрибутов>]
-
Select distinct maker from Product;
Вывод разных производителей из таблицы Product
-
Select * from PC;
Выводит все поля из таблицы PC
-
SELECT *
FROM Laptop
WHERE model='1752';
Выведет все поля из таблицы Laptop для записей у которых в поле Model стоит значение 1752
-
SELECT model, type, price
FROM printer
WHERE price>200;
Выведет значения атрибутов model, type, price из таблицы printer для тех записей, у которых в поле price стоят значения большие 200
-
SELECT *
FROM PC
WHERE hd>10 and ram>64;
Выведет все поля из таблицы PC для записей у которых в поле HD стоят значения больше 10 и в поле Ram стоят значения большие 64
Операторы in, between, like, is (not) null
In= равен любому из списка
Not in= не равен ни одному из списка
Используется для сравнения проверяемого значения с заданным списком
-
SELECT *
FROM Printer
WHERE Printer.type In ('Laser','Jet');
Выведет все поля для принтеров, которые являются лазерными или струйными
-
SELECT *
FROM Printer
WHERE type Not In ('Laser','Jet');
Выведет все поля для принтеров, которые являются матричными
Between Оператор between используется для проверки условия вхождения значения поля в заданный интервал, то есть вместо списка значений атрибута этот оператор задаёт границы его изменения
-
SELECT *
FROM PC
WHERE Price between 600 and 850;
(граничные значения входят в интервал!)
Like осуществляет просмотр строковых значений полей с целью определить входит ли заданная в операторе Like подстрока в символьную строку
-
SELECT *
FROM Printer
WHERE type like 'L*';
Значение которое стоит в поле «тип» начинается на “L”. *- обозначает любую последовательность символов
-
SELECT *
FROM Printer
WHERE type like '*atr*';
Is null. Not is null проверяет пусто ли поле
-
SELECT *
FROM Product
WHERE maker is not null;
Если в операторе Select после ключевого слова From указывается не одна, а две таблицы, то в результате выполнения запроса, в котором отсутствует предложение Where, каждая строка одной таблицы соединиться с каждой строкой второй таблицы. (количество строк в результирующем запросе= произведение количеств строк в соединяемых таблицах). Такая операция называется декартовым произведением или полным соединением таблиц БД. Сама по себе эта операция не имеет практического значения, более того, при ошибочном использовании она может привести к неожиданным нештатным ситуациям.
Результат выполнения:
Соединение таблиц имеет смысл только тогда, когда соединяются не все строки исходных таблиц, а только те, которые интересуют пользователя.
Задаётся это заданием предложения с ключевым словом ON.
Select *
from Staff S inner join Departments D On S.Number_of_Department=D.ID_Department;
Результат выполнения:
Например, найдём номер телефона отдела, в котором работает Иванов Андрей. Выведем также его фамилию и имя. Для этого:
Select S.Surname, S.Name, S.Number_of_Department, D.telefon
from Staff S inner join Departments D On S.Number_of_Department=D.ID_Department
where S.Surname='Иванов';
Результат выполнения:
Соединение, использующее предикаты, основанные на равенствах называется эквисоединением. Рассмотренный пример соединения таблиц относится к виду так называемого внутреннего (INNER) соединения. При таком типе соединения соединяются только те строки таблиц, для которых является истинным предикат, задаваемый в предложении ON запроса.
12.SELECT Product.maker, Product.model AS model1, PC.model AS model2, PC.price
FROM Product INNER JOIN PC ON Product.model=PC.model;
Выводит производителей, номера моделей и цены из таблиц Product и PC.
13. SELECT Product.maker, Product.model AS model1, PC.model AS model2, PC.price
FROM Product LEFT JOIN PC ON Product.model=PC.model
WHERE Product.type='PC';
Поскольку двух моделей компьютеров из таблицы Product нет в таблице PC, то два поля для двух записей в данном примере будут пустые.
При использовании левого внешнего соединения расширение выводимой таблицы (результирующей выборки) осуществляется за счёт записей входной таблицы, имя которой указано слева от оператора Join.
14. Найти производителей цветных принтеров
SELECT Product.maker, Product.model, Printer.color
FROM Product INNER JOIN Printer ON Product.model=Printer.model
WHERE Printer.color='y';
15. Указать производителя и скорость для тех ноутбуков, которые имеют жесткий диск объёмом не менее 10 Гб
SELECT P.maker, L.speed
FROM product AS P INNER JOIN laptop AS L ON P.model=L.model
WHERE hd>=10;