Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
61
Добавлен:
16.04.2013
Размер:
246.78 Кб
Скачать

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>

Соседние файлы в папке lab2
  • #
    16.04.2013246.78 Кб61lab2.doc
  • #
    16.04.201365.37 Кб58lab2_sample.lst
  • #
    16.04.20139.29 Кб58lab2_sample.sql