where data between ’07-01-07’ and ’11-01-07’;
Пример 9:
Выбрать информацию по заводам, у которых поле «телефон» пустое: select kodz from zavod where telz is null;
Пример 10:
Выбрать информацию по заводам, у которых поле «телефон» заполнено: select kodz from zavod where telz is not null;
Синонимы и их применение при выборке данных.
Синонимы представляют собой альтернативное имя объекта, определяемое пользователем и служащее для более удобного использования при работе с именами объектов.
create [public] synonym имя_синонима for имя_польз.имя_объекта;
(public означает, что данный синоним может использоваться любым пользователем.)
Пример 11:
Запрос, приведенный в примере № 3 можно записать короче: select b.kodz, b.namez, a.koddz, a.kolvo, a, data
from ZakupkaD a , Zavod b
where b.kodz=a.kodz and b.kodz=2;
Пример 12:
Создать синоним для таблицы Закупка деталей для пользователя студент: create synonym zakd for student.Zakupkad;
Подзапросы.
Запросы, в которых используются несколько предложений select. Могут быть однострочные (возвращают одну строку :в условии используются знаки равенства/ неравенства) и многострочные (подзапрос
возвращает несколько строк: используется in)
16
Пример 13:
Выбрать детали, которые покупались у заводов, в названии которых есть слово «лак»
select * from zakupkad where kodz in
( select kodz from zavod
where namez like ‘%лак%’ or namez like ‘%Лак%’ );
Представления
Пример 1. Сортировка:
Выбрать все записи из таблицы Закупка деталей и отсортировать по коду
детали: |
|
|
|
|
select * from zakupkad |
order by koddz; |
|||
KODDZ KODZ KOLVO PRICED DATA |
||||
---------- ---------- ---------- ---------- ------------ |
||||
31 |
2 |
8 |
30 |
07.01.06 |
31 |
2 |
8 |
30 |
12.02.06 |
32 |
2 |
1 |
35 |
10.01.06 |
32 |
2 |
1 |
35 |
15.02.06 |
41 |
4 |
4 |
48 |
11.01.06 |
41 |
4 |
4 |
48 |
16.03.05 |
Возрастание ( ASC ) или убывание ( DESC ) для каждого столбца. По умолчанию установлено – возрастание
SELECT * FROM Orders ORDER BY cnum DESC;
Пример 2. Группировка:
Посчитать сколько раз покупали ту или иную деталь:
select koddz, count(data) from zakupkad
17
group by koddz;
KODDZ COUNT(DATA)
---------- -----------
312
322
412
ЗАМЕЧАНИЕ: в предложении group by указывается поле, которое обязательно должно присутствовать в предложении select, в отличие от предложения order by. Также, в предложении group by можно указывать несколько полей, в этом случае группировка будет последовательна сначала по одному полю, потом по второму.
Пример 4. Конкатенация (объединеие):
ЗАМЕЧАНИЕ: в предложениях select можно объединять значения двух или более полей (например, если ФИО разбито на 3 поля) и добавлять сторонний текст.
Вывести данные из примера №2, используя возможности конкатенации: select 'Деталь'||' '||koddz||' '||'покупалась'||' '||count(data)||'раз(-а)'
from zakupkad group by koddz;
'ДЕТАЛЬ'||''||KODDZ||''||'ПОКУПАЛАСЬ'||''||COUNT(DATA)||'РАЗ(-А)
----------------------------------------------------------------
Деталь 31 покупалась 2раз(-а) Деталь 32 покупалась 2раз(-а) Деталь 41 покупалась 2раз(-а)
Пример 5. Синонимы столбцов, ввод собственного текста:
При выполнении запросов в примерах 2-4, в качестве имени поля выводиться то, что пишется в предложениях select. Вид результата можно привести в более удобный для пользователя вид с помощью синонимов столбцов.
18
Синонимы пишутся через пробел. Если синоним состоит из нескольких слов, то они отделяются символом нижнего подчеркивания, например,
Название_завода.
select kodz Код, namez Название from zavod;
КОД |
НАЗВАНИЕ |
----- |
---------------------------------------- |
1 |
Стекольный завод №1 |
2Лакокрасочный завод
4Деревообработывающий завод № 5
5Завод по изготовлению металлоконструкций
На базе примера № 3:
select Sum((KOLVO)*(PRICED)) Сумма from zakupkad where koddz=31;
СУММА
----------
480
Пример 6. Выборка неповторяющихся (уникальных) записей:
Добавим в таблицу Закупка деталей дублирующую строку со значениями
KODDZ KODZ KOLVO PRICED DATA
---------- ---------- ---------- ---------- ------------
41 4 4 48 11.01.06
Сделать выборку данных из всех полей таблицы Закупка деталей, исключая повторяющиеся записи:
select distinct * from zakupkad;
Таким образом дублирующяся запись пропущена, выведено 6 строк.
Пример 7. Применение NOT:
19
Выбрать информацию по заводам, у которых поле «телефон» не пустое:
select kodz |
from zavod |
where telz is not null; |
АНАЛОГИЧНО: |
|
|
select kodz |
from zavod |
where not telz is null; |
Выбрать информацию по деталям, которые закупались в одну из дат: select * from zakupkad where data not in (’07-01-07’, ’10-01-07’, ’11-01-
07’);
АНАЛОГИЧНО:
select * from zakupkad where not data in (’07-01-07’, ’10-01-07’, ’11-01- 07’);
Пример 8. Применение агрегатных функций:
* COUNT - считает число значений в данном столбце, или число строк в таблице (count (*), например) . Когда она считает значения столбца, она используется с DISTINCT чтобы производить счет чисел различных значений в данном поле. Если вместо DISTINCT указать |ALL, то в результате будет выведено число строк, в которых указанное поле не нулевое.
SQL> select * from u;
I L P N
---------- --------------- --------------- ---------------
1 |
b |
1 |
Бухгалтер |
2 |
p |
2 |
Плановик |
3 |
m |
3 |
Менеджер |
4 |
|
4 |
Гость |
SQL> select count(l)
20