- •Лабораторная работа №2 по курсу субд oracle Введение
- •Задание
- •Составить и выполнить команды select
- •Примеры
- •13 Rows selected.
- •13 Rows selected.
- •13 Rows selected.
- •3.5" Floppy Disk 10
- •13 Rows selected.
- •3.5" Floppy Disk 10
- •12 Rows selected.
- •2 Where (price between 10 and 60) and (price not in (10,60));
- •3.5" Floppy Disk 10 30
- •11 Rows selected.
- •3.5" Floppy Disk
- •11 Rows selected.
- •3.5" Floppy Disk 10
- •14 Rows selected.
- •14 Rows selected.
14 Rows selected.
SQL>
SQL> -- упорядочивание с явным указанием местоположения NULL значений
SQL> SELECT name, quantity FROM product ORDER BY quantity NULLS FIRST;
NAME QUANTITY
------------------------- ----------
Blue Ink Marker
Milk 1 lt.
Milk 3 lt.
DVD-RW Disk 5
Milk 3 lt. 5
DVD+RW Disk 5
DVD-R Disk 10
DVD+R Disk 10
Red Ink Marker 10
Blue Ink Marker 10
Green Ink Marker 10
NAME QUANTITY
------------------------- ----------
3.5" Floppy Disk 30
CD-RW Disk 100
CD-R Disk 200
14 rows selected.
SQL> SELECT name, quantity FROM product ORDER BY quantity NULLS LAST;
NAME QUANTITY
------------------------- ----------
DVD-RW Disk 5
DVD+RW Disk 5
Milk 3 lt. 5
DVD-R Disk 10
DVD+R Disk 10
Red Ink Marker 10
Blue Ink Marker 10
Green Ink Marker 10
3.5" Floppy Disk 30
CD-RW Disk 100
CD-R Disk 200
NAME QUANTITY
------------------------- ----------
Blue Ink Marker
Milk 1 lt.
Milk 3 lt.
14 rows selected.
SQL>
SQL> SELECT name, price FROM product
2 WHERE quantity IS NOT NULL
3 ORDER BY quantity;
NAME PRICE
------------------------- ----------
DVD-RW Disk 300
DVD+RW Disk 300
Milk 3 lt. 65
DVD-R Disk 80
DVD+R Disk 80
Red Ink Marker 60
Blue Ink Marker 60
Green Ink Marker 60
3.5" Floppy Disk 10
CD-RW Disk 20
CD-R Disk 15
11 rows selected.
SQL> --
SQL> -- ИСКЛЮЧЕНИЕ ПОВТОРЯЮЩИХСЯ ЗНАЧЕНИЙ (DISTINCT и UNIQUE это синонимы)
SQL> --
SQL>
SQL> SELECT name FROM product ORDER BY name;
NAME
-------------------------
3.5" Floppy Disk
Blue Ink Marker
Blue Ink Marker
CD-R Disk
CD-RW Disk
DVD+R Disk
DVD+RW Disk
DVD-R Disk
DVD-RW Disk
Green Ink Marker
Milk 1 lt.
NAME
-------------------------
Milk 3 lt.
Milk 3 lt.
Red Ink Marker
14 rows selected.
SQL>
SQL> -- выборка уникальных значений из столбца name
SQL> SELECT DISTINCT name FROM product ORDER BY name;
NAME
-------------------------
3.5" Floppy Disk
Blue Ink Marker
CD-R Disk
CD-RW Disk
DVD+R Disk
DVD+RW Disk
DVD-R Disk
DVD-RW Disk
Green Ink Marker
Milk 1 lt.
Milk 3 lt.
NAME
-------------------------
Red Ink Marker
12 rows selected.
SQL> SELECT UNIQUE name FROM product ORDER BY name;
NAME
-------------------------
3.5" Floppy Disk
Blue Ink Marker
CD-R Disk
CD-RW Disk
DVD+R Disk
DVD+RW Disk
DVD-R Disk
DVD-RW Disk
Green Ink Marker
Milk 1 lt.
Milk 3 lt.
NAME
-------------------------
Red Ink Marker
12 rows selected.
SQL>
SQL> -- выборка уникальных пар name, price
SQL> SELECT DISTINCT name, price FROM product ORDER BY name;
NAME PRICE
------------------------- ----------
3.5" Floppy Disk 10
Blue Ink Marker 60
Blue Ink Marker 80
CD-R Disk 15
CD-RW Disk 20
DVD+R Disk 80
DVD+RW Disk 300
DVD-R Disk 80
DVD-RW Disk 300
Green Ink Marker 60
Milk 1 lt. 20
NAME PRICE
------------------------- ----------
Milk 3 lt. 60
Milk 3 lt. 65
Red Ink Marker 60
14 rows selected.
SQL>
SQL> --
SQL> -- ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ АГРЕГИРОВАНИЯ (ГРУППОВЫХ ФУНКЦИЙ)
SQL> --
SQL>
SQL> -- получить общую стоимость товаров
SQL> SELECT SUM(price*quantity) FROM product;
SUM(PRICE*QUANTITY)
-------------------
12025
SQL>
SQL> -- подсчитать число строк в таблице
SQL> SELECT COUNT(*) FROM product;
COUNT(*)
----------
14
SQL>
SQL> -- подсчитать число значений (включая NULL) в столбце name
SQL> SELECT COUNT(name) FROM product;
COUNT(NAME)
-----------
14
SQL>
SQL> -- подсчитать число различных значений (включая NULL) в столбце name
SQL> SELECT COUNT(DISTINCT name) FROM product;
COUNT(DISTINCTNAME)
-------------------
12
SQL>
SQL> -- подсчитать число значений в столбце quntity (НЕ включая NULL)
SQL> SELECT COUNT(ALL quantity) FROM product;
COUNT(ALLQUANTITY)
------------------
11
SQL>
SQL> -- вычисление максимальной, минимальной и средней цены
SQL> SELECT MAX(price), MIN(price), AVG(price) FROM product;
MAX(PRICE) MIN(PRICE) AVG(PRICE)
---------- ---------- ----------
300 10 86.4285714
SQL> -- вычисление средней цены c учетом налогов
SQL> SELECT AVG(price * (1 + vat_tax)) FROM product;
AVG(PRICE*(1+VAT_TAX))
----------------------
102.885714
SQL>
SQL> --
SQL> -- ГРУППИРОВКА ЗНАЧЕНИЙ ДЛЯ ПРИМЕНЕНИЯ ФУНКЦИЙ АГРЕГИРОВАНИЯ
SQL> -- (функции агрегирования действую на группы сформированные
SQL> -- по списку полей в предложении GROUP BY)
SQL> --
SQL>
SQL> -- получить максимальную, минимальную и среднюю цены для каждого продукта
SQL> SELECT name, MAX(price), MIN(price), AVG(price)
2 FROM product
3 GROUP BY name;
NAME MAX(PRICE) MIN(PRICE) AVG(PRICE)
------------------------- ---------- ---------- ----------
3.5" Floppy Disk 10 10 10
Blue Ink Marker 80 60 70
CD-R Disk 15 15 15
CD-RW Disk 20 20 20
DVD+R Disk 80 80 80
DVD+RW Disk 300 300 300
DVD-R Disk 80 80 80
DVD-RW Disk 300 300 300
Green Ink Marker 60 60 60
Milk 1 lt. 20 20 20
Milk 3 lt. 65 60 62.5
NAME MAX(PRICE) MIN(PRICE) AVG(PRICE)
------------------------- ---------- ---------- ----------
Red Ink Marker 60 60 60
12 rows selected.
SQL> -- получить максимальную, минимальную и среднюю цены для каждого продукта
SQL> -- количество которых не равно NULL (снача осуществляется филтрация данных
SQL> -- по условию WHERE затем их группировка по GROUP BY и агрегирование)
SQL> SELECT name, MAX(price), MIN(price)
2 FROM product
3 WHERE quantity IS NOT NULL
4 GROUP BY name;
NAME MAX(PRICE) MIN(PRICE)
------------------------- ---------- ----------
3.5" Floppy Disk 10 10
Blue Ink Marker 60 60
CD-R Disk 15 15
CD-RW Disk 20 20
DVD+R Disk 80 80
DVD+RW Disk 300 300
DVD-R Disk 80 80
DVD-RW Disk 300 300
Green Ink Marker 60 60
Milk 3 lt. 65 65
Red Ink Marker 60 60
11 rows selected.
SQL>
SQL> -- получить среднюю цену для продуктов количество которых не равно NULL
SQL> -- и минимальная цена < 60 (предложение HAVING действует на
SQL> -- сформированные группы, поэтому в условии HAVING могут фигурировать
SQL> -- только те столбцы, которые имеют одно и тоже значение в приделах группы)
SQL> SELECT name, AVG(price)
2 FROM product
3 WHERE quantity IS NOT NULL
4 GROUP BY name
5 HAVING MIN(price) < 60;
NAME AVG(PRICE)
------------------------- ----------
3.5" Floppy Disk 10
CD-R Disk 15
CD-RW Disk 20
SQL>
SQL> --
SQL> -- ПРОСТЫЕ ВЛОЖЕННЫЕ ЗАПРОСЫ (ПОДЗАПРОСЫ)
SQL> -- (подзапрос должен выбирать только один столбец!)
SQL> --
SQL>
SQL> -- средняя цена товара (этот запрос возвращает одно значение!!!)
SQL> SELECT AVG(price) FROM product;
AVG(PRICE)
----------
86.4285714
SQL> -- товары чья цена выше средней
SQL> SELECT name, price
2 FROM product
3 WHERE price > (SELECT AVG(price) FROM product);
NAME PRICE
------------------------- ----------
DVD-RW Disk 300
DVD+RW Disk 300
SQL>
SQL> -- товары чья цена выше средней цены на CD диски
SQL> SELECT name, price
2 FROM product
3 WHERE price > (SELECT AVG(price) FROM product WHERE name LIKE 'CD%');
NAME PRICE
------------------------- ----------
CD-RW Disk 20
DVD-R Disk 80
DVD+R Disk 80
DVD-RW Disk 300
DVD+RW Disk 300
Red Ink Marker 60
Green Ink Marker 60
Blue Ink Marker 60
Blue Ink Marker 80
Milk 1 lt. 20
Milk 3 lt. 60
NAME PRICE
------------------------- ----------
Milk 3 lt. 65
12 rows selected.
SQL>
SQL> -- товары у которых ставка НДС такая же как и товара
SQL> -- с величиной product_id = 10
SQL> SELECT name, price
2 FROM product
3 WHERE vat_tax = (SELECT vat_tax FROM product WHERE product_id=10);
NAME PRICE
------------------------- ----------
CD-RW Disk 20
CD-R Disk 15
3.5" Floppy Disk 10
DVD-R Disk 80
DVD+R Disk 80
DVD-RW Disk 300
DVD+RW Disk 300
Red Ink Marker 60
Green Ink Marker 60
Blue Ink Marker 60
Blue Ink Marker 80
11 rows selected.
SQL>
SQL> -- товары чья цена равна цене на какой либо CD диск
SQL> SELECT name, price
2 FROM product
3 WHERE price IN (SELECT DISTINCT price FROM product WHERE name LIKE 'CD%');
NAME PRICE
------------------------- ----------
CD-R Disk 15
CD-RW Disk 20
Milk 1 lt. 20
SQL>
SQL> --
SQL> -- ОБНОВЛЕНИЕ ДАННЫХ (СТРОК) В ТАБЛИЦЕ
SQL> --
SQL>
SQL> -- установить всем продуктам ставку НДС на 20% (0.20)
SQL> UPDATE product SET vat_tax = 0.20;
14 rows updated.
SQL> -- поднять цену на все продукты на 10%
SQL> UPDATE product SET price = price * 1.10;
14 rows updated.
SQL>
SQL> -- установить молочным продуктам ставку НДС на 12% (0.12)
SQL> UPDATE product
2 SET vat_tax = 0.12
3 WHERE name LIKE 'Milk%';
3 rows updated.
SQL>
SQL> -- добавить в название молочных продуктов слово 'Bottled'
SQL> UPDATE product
2 SET name = 'Bottled ' || name
3 WHERE name LIKE 'Milk%';
3 rows updated.
SQL>
SQL> SELECT * FROM product;
PRODUCT_ID NAME PRICE VAT_TAX QUANTITY
---------- ------------------------- ---------- ---------- ----------
1 CD-RW Disk 22 .2 100
2 CD-R Disk 16.5 .2 200
3 3.5" Floppy Disk 11 .2 30
4 DVD-R Disk 88 .2 10
5 DVD+R Disk 88 .2 10
6 DVD-RW Disk 330 .2 5
7 DVD+RW Disk 330 .2 5
8 Red Ink Marker 66 .2 10
9 Green Ink Marker 66 .2 10
10 Blue Ink Marker 66 .2 10
11 Blue Ink Marker 88 .2
PRODUCT_ID NAME PRICE VAT_TAX QUANTITY
---------- ------------------------- ---------- ---------- ----------
12 Bottled Milk 1 lt. 22 .12
13 Bottled Milk 3 lt. 66 .12
14 Bottled Milk 3 lt. 71.5 .12 5
14 rows selected.
SQL>
SQL> -- снизить цену на продукты чья цена выше 200 на 5%
SQL> UPDATE product
2 SET price = price * 0.95
3 WHERE price > 200;
2 rows updated.
SQL>
SQL> -- заменить NULL значения на число 0 в столбце quantity
SQL> UPDATE product
2 SET quantity = 0
3 WHERE quantity IS NULL;
3 rows updated.
SQL> -- увеличить для товара 'CD-R Disk' количество на 10 и цену на 5%
SQL> UPDATE product
2 SET quantity = quantity + 10, price = price * 1.05
3 WHERE name = 'CD-R Disk';
1 row updated.
SQL>
SQL>
SQL> --
SQL> -- УДАЛЕНИЕ ДАННЫХ (СТРОК) ИЗ ТАБЛИЦЫ
SQL> --
SQL>
SQL> -- удалить все товары количество которых равно NULL или 0
SQL> DELETE product WHERE (quantity IS NULL) OR (quantity = 0);
3 rows deleted.
SQL>
SQL> -- удалить все молочные продукты
SQL> DELETE product WHERE name LIKE '%Milk%';
1 row deleted.
SQL>
SQL> -- удалить все продукты c ценой более 80 или равной 10 или 15
SQL> DELETE product WHERE (price > 80) OR price IN (10, 15);
4 rows deleted.
SQL>
SQL> -- удаление всех строк из таблицы (одна за одной)
SQL> DELETE product;
6 rows deleted.
SQL> -- удаление всех данных из таблицы
SQL> TRUNCATE TABLE product;
Table truncated.
SQL>
SQL> --
SQL> -- УДАЛЕНИЕ ТАБЛИЦЫ
SQL> --
SQL> DROP TABLE product;
Table dropped.
SQL>