Вы находитесь на странице: 1из 51

SELECT

SQL оператор SELECT используется для извлечения записей из одной или


нескольких таблиц в базе данных SQL. Полученные записи известны как набор
результатов.
Синтаксис
Синтаксис для оператора SELECT в SQL.

SELECT expressions
FROM tables
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]];

Параметры или аргументs


expressions

Столбцы или расчеты, которые вы хотите получить. Используйте *, если


вы хотите выбрать все столбцы

tables

Таблицы, из которых вы хотите получить записи. В предложении FROM


должна быть указана хотя бы одна таблица

WHERE conditions
Необязательный. Условия, которые должны быть выполнены для записей,
которые будут выбраны. Если не предусмотрено никаких условий, будут
выбраны все записи

ORDER BY expression
Необязательный. Выражение, используемое для сортировки записей в
наборе результатов. Если указано более одного выражения, значения
должны быть разделены запятыми

ASC Необязательный. ASC сортирует результирующий набор в порядке


возрастания по  expressions. Это поведение по умолчанию, если
модификатор не указан
DESC Необязательный. DESC сортирует результирующий набор в
порядке убывания по expressions

Примеры
1. Извлечение всех столбцов из таблицы

SELECT *  FROM CUSTOMERS;

2. Извлечение отдельных столбцов. Вывести столбец LAST_NAME из таблицы


покупатели.

SELECT
LAST_NAME
FROM CUSTOMERS;

3. Извлечение нескольких столбцов. Вывести столбец FIRST_NAME,


LAST_NAME, PHONE_NUMBER из таблицы покупатели.
SELECT FIRST_NAME, LAST_NAME,
PHONE_NUMBER FROM CUSTOMERS;

4. Извлечение отличающихся строк. Требуется извлечь идентификаторы всех


продавцов из таблицы покупатели.

SELECT SRE_ID FROM


CUSTOMERS;
Как же извлечь список отличающихся значений? Для этого используется ключевое
слово DISTINCT, которое предписывает Oracle возвратить только отличающиеся
значения.

SELECT DISTINCT SRE_ID FROM


CUSTOMERS;

Ключевое слово DISTINCT не имеет частичного действия.


Применяется ко всем столбцам, перед именем которого оно стоит
в запросе. Если указать
SELECT DISTINCT CTR_NUMBER, SRE_ID FROM
CUSTOMERS
то будут извлечены все строки, содержимое обоих указанных
столбцов будет отличаться.

5. Употребление полностью уточненных имен.

SELECT LAST_NAME, COMMISSION_RATE


FROM SALES_REPRESENTATIVES;

И другой вариант. С уточнением таблицы

 SELECT SALES_REPRESENTATIVES.LAST_NAME,
SALES_REPRESENTATIVES.COMMISSION_RATE
FROM SALES_REPRESENTATIVES;
 SELECT SALES_REPRESENTATIVES.LAST_NAME,
SALES_REPRESENTATIVES.COMMISSION_RATE
FROM Имя_Базы.SALES_REPRESENTATIVES;

6. Употребление комментариев.

SELECT LAST_NAME,--Это вывод фамилии


COMMISSION_RATE FROM SALES_REPRESENTATIVES;

7. Сортировка извлекаемых данных.

Чтобы отсортировать данные явным образом, следует воспользоваться


предложением ORDER BY. Это предложение принимает имя одного или
нескольких столбцов, по которым сортируется выводимый результат.

SELECT FIRST_NAME, LAST_NAME


FROM CUSTOMERS
ORDER BY LAST_NAME
Сортировка по столбцу LAST_NAME

Можно сортировать данные по невыбранным полям

SELECT FIRST_NAME, LAST_NAME


FROM CUSTOMERS
ORDER BY CTR_NUMBER

8. Сортировка по нескольким столбцам.


 Добавить однофамильца в таблицу покупатели

insert into customers values ('c07', 'c07@mail.ru',


'Юрий', 'Фёдоров', '89031191110', 500, 'sr01', null, null)
 Выбрать значения из таблицы покупатели и отсортировать по
нескольким полям. Сначала по фамилии, потом по имени.

SELECT LAST_NAME, FIRST_NAME FROM


CUSTOMERS
ORDER BY LAST_NAME, FIRST_NAME
asc

9. Указание направления сортировки.


Сортировка по возрастанию ASC, убывание – DESC
 Выбрать информацию о покупателе. Упорядочить по фамилии по
убыванию.

SELECT FIRST_NAME, LAST_NAME,


PHONE_NUMBER
FROM CUSTOMERS
ORDER BY LAST_NAME DESC

 Выбрать информацию о покупателе. Упорядочить по фамилии по


возрастанию.

select FIRST_NAME, LAST_NAME, PHONE_NUMBER


FROM CUSTOMERS
ORDER BY LAST_NAME ASC

ИЛИ

select FIRST_NAME, LAST_NAME,


PHONE_NUMBER
FROM CUSTOMERS
ORDER BY LAST_NAME
10.Фильтрация данных.

Для фильтрации данных используется критерий поиска в предложении


WHERE.
 Вывести информацию по покупателю с фамилией Иевлев.

SELECT FIRST_NAME, LAST_NAME,


PHONE_NUMBER
FROM CUSTOMERS
WHERE LAST_NAME= 'Пивнев'

 Выбрать номера товаров, цена которых ниже 5000


SELECT
ITM_NUMBER, PRICE
FROM PRICE_HISTORY
WHERE PRICE<5000
 Выбрать номера товаров, цена которых ниже или равна 6000

SELECT ITM_NUMBER, PRICE


FROM PRICE_HISTORY
WHERE PRICE<=6000

 Проверка на несовпадения. Вывести все заказы, которые открыты не на


покупателя с кодом c03

SELECT ODR_ID, CTR_NUMBER


FROM ORDERS
WHERE CTR_NUMBER<> 'c03'

< >-означает меньше или больше (не равно), != означает «не


равно»

SELECT ODR_ID,
CTR_NUMBER
FROM ORDERS
WHERE CTR_NUMBER!='c03'

 Проверка на соответствие диапазону значений


SELECT
ITM_NUMBER, PRICE
FROM PRICE_HISTORY
WHERE PRICE BETWEEN 4600 AND 7890

 Проверка пустых значений

SELECT FIRST_NAME, LAST_NAME,


PHONE_NUMBER
FROM CUSTOMERS
WHERE LOYALTY_CARD_NUMBER IS NULL

 Проверка непустых значений


SELECT FIRST_NAME, LAST_NAME, PHONE_NUMBER
FROM CUSTOMERS
WHERE
LOYALTY_CARD_NUMBER IS NOT NULL

11. Сочетание предложений WHERE.


 Применение логической операции AND. Операция AND предписывает
СУБД вернуть те строки, которые удовлетворяют обоим заданным условиям.
Выбрать номера товаров цена, у которых была установлена 28 марта и меньше
3000.

SELECT ITM_NUMBER,
PHY_START_DATE, PRICE
FROM PRICE_HISTORY
WHERE PHY_START_DATE='28-Mar-2020'
AND PRICE<3000

 Применение логической операции OR противоположна операции AND.


Логическая операция предписывает СУБД извлечь строки, удовлетворяющие
любому из заданных условий.

Выбрать номера товаров цена, у которых была установлена 20 марта или цена
больше 56 000.
SELECT ITM_NUMBER, PHY_START_DATE, PRICE FROM
PRICE_HISTORY
WHERE PHY_START_DATE='20-Mar-2020' OR PRICE > 56000

 Выбрать номера товаров стоимостью менее 5000р цена, на которые была


установлена 20 и 28 марта

SELECT ITM_NUMBER, PHY_START_DATE, PRICE FROM


PRICE_HISTORY

WHERE PHY_START_DATE='20-Mar-2020' OR
PHY_START_DATE='28-Mar-2020' AND PRICE<5000

Если вывод будет некорректен, проставить скобки там, где это необходимо.
Приоритет AND может быть выше, чем OR.

SELECT ITM_NUMBER, PHY_START_DATE, PRICE FROM


PRICE_HISTORY
WHERE (PHY_START_DATE='20-Mar-2020' OR
PHY_START_DATE='28-Mar-2020') AND PRICE<5000

Тогда СУБД сначала отфильтрует данные по условию OR в круглых скобках.


Так как приоритет () выше, чем OR ИЛИ AND.

12.Применение операции IN.


Для указания ряда условий, каждое из которых может быть удовлетворено.
Оператор IN позволяет указать несколько значений в предложении WHERE.
Он является сокращением для нескольких условий OR.

SELECT ITM_NUMBER, NAME, DESCRIPTION,


CATEGORY, RAZMER
FROM ITEMS
WHERE ITM_NUMBER IN ('in01', 'in05', 'in07');

13.Применение операции NOT IN. Отрицает любое следующее далее условие.

 SELECT ITM_NUMBER, NAME, DESCRIPTION,


CATEGORY, RAZMER FROM ITEMS WHERE
ITM_NUMBER NOT IN ('in01', 'in05', 'in07');

14.Применение операции LIKE. 33ПК

Оператор LIKE используется в предложении WHERE для поиска заданного шаблона


в столбце.
В сочетании с оператором LIKE используются два подстановочных знака:
% - Знак процента представляет нулевой, один или несколько символов
_ - Подчеркнутый символ представляет собой один символ

Выражение Описание
WHERE name LIKE 'text%' Находит любые значения, начинающиеся с "text"
WHERE name LIKE '%text' Находит любые значения, заканчивающиеся на "text"
WHERE name LIKE '%text Находит любые значения, которые имеют «text» в любой
%' позиции
Находит любые значения, которые имеют «text» во
WHERE name LIKE '_text%'
второй позиции
WHERE name LIKE 'text_ Находит любые значения, начинающиеся с «text» и
%_%' длиной не менее 3 символов
WHERE name LIKE 'text Находит любые значения, начинающиеся с «text» и
%data' заканчивающиеся на «data»

 Выбрать всех покупателей с фамилией, начинающейся с «Ф»:

SELECT * FROM CUSTOMERS


WHERE LAST_NAME

LIKE 'Ф%';
 Следующий оператор SQL выбирает покупателей с фамилией,
заканчивающей на «в».

SELECT * FROM CUSTOMERS

WHERE LAST_NAME LIKE '%в';


 Выбрать номера покупателей проживающих в Ростове по неточному
соответствию (Ростов в любой позиции).

SELECT * FROM CUSTOMERS_ADDRESSES

WHERE CITY LIKE '%Ростов%';


 Выбрать покупателей с именем, начинающимся с «О» и длиной не менее 3
символов:

SELECT * FROM CUSTOMERS


WHERE FIRST_NAME

LIKE 'О_%_%';
Потом попробовать имя Ольга сократить до Ол и снова проверить запрос.

 Выбрать покупателей с фамилией, начинающейся с «Б» и заканчивающейся


на «в».

SELECT * FROM CUSTOMERS


WHERE LAST_NAME LIKE 'Б
%в';
 Выбрать всех покупателей с фамилией, не начинающейся с «Ф»:

SELECT * FROM CUSTOMERS WHERE


LAST_NAME NOT LIKE 'Ф%';
Применение агрегатных функций.

 COUNT ()– производит подсчет количества строк таблицы с не-NULL


значениями указанного в качестве аргумента поля.
 SUM() – вычисляет арифметическую сумму всех выбранных значений
данного поля.
 AVG() – производит усреднение всех выбранных значений данного поля.
 MAX() – выводит наибольшее значение из всех выбранных значений
данного поля.
 MIN()– выводит наименьшее значение из всех выбранных значений данного
поля.

Функция SUM

Эта функция позволяет просуммировать значения,


какого либо поля при запросе

SELECT SUM(QUANTITY_ORDERED) AS
Количество
FROM ORDERED_ITEMS;
 SELECT SUM(QUANTITY_ORDERED)
AS Количество
FROM ORDERED_ITEMS
WHERE ODR_ID='o01';

Функция AVG

Следующая функция осуществляет подсчет среднего


арифметического поля данных

 Вывести среднюю цену товаров

SELECT AVG(PRICE) AS Ср_цена

FROM PRICE_HISTORY;
 Вывести среднюю цену товара под кодом in09

SELECT AVG(PRICE) AS Ср_цена


FROM PRICE_HISTORY
WHERE ITM_NUMBER = 'in09';

Функции MIN и MAX


Еще 2 функции, которые близки по своему действию. Они находят минимальное
или максимальное значение соответственно того параметра, который будет передан
в скобках. Синтаксис повторяется.

 Вывести МАКСИМАЛЬНУЮ И МИНИМАЛЬНУЮ ЦЕНУ У ТОВАРА С


КОДОМ in09

SELECT MAX(PRICE), MIN(PRICE)


FROM PRICE_HISTORY
WHERE ITM_NUMBER='in09';
 ВЫВЕСТИ РАЗНИЦУ МЕЖДУ МАКСИМАЛЬНОЙ И
МИНИМАЛЬНОЙ ЦЕНОЙ У ТОВАРА С КОДОМ in09

SELECT MAX(PRICE) - MIN(PRICE) AS


Разница
FROM PRICE_HISTORY
WHERE ITM_NUMBER='in09';

Функция COUNT
Эта функция необходима для того, чтобы подсчитать количество выбранных
значений или строк. Существует два основных варианта ее использования:
 С ключевым словом DISTINCT, для того, чтобы подсчитать количество не
повторяющихся значений
 С использованием «*», для того, чтобы подсчитать количество всех выбранных
значений

Теперь разберем пример использования COUNT в SQL:


 Подсчитать количество продавцов

SELECT COUNT(*) AS Продавцы

FROM SALES_REPRESENTATIVES;
 Подсчитать количество сделанных заказов и количество покупателей в
таблице ORDERS

SELECT COUNT(*) AS Заказы,


COUNT(DISTINCT CTR_NUMBER) AS
Покупатели FROM ORDERS;
Группирование данных

Группировка данных позволяет разделить все данные на логические наборы,


благодаря чему становится возможным выполнение статистических вычислений
отдельно в каждой группе.
Создание групп (GROUP BY)
Группы создаются с помощью предложения GROUP BY оператора SELECT.

 Подсчитать количество покупателей, закрепленное за каждым продавцом.

SELECT SRE_ID AS Номер,


COUNT(CTR_NUMBER) AS Покупатели
FROM CUSTOMERS
GROUP BY SRE_ID
 Подсчитать количество покупателей, закрепленное за каждым продавцом.
Покупателей, которые не закреплены за продавцами, необходимо скрыть из
вывода.

select sre_id, count(CTR_NUMBER) as


Покупатели
from CUSTOMERS
where sre_id is not null
group by sre_id
 Подсчитать количество заказов открытых на каждого покупателя

SELECT CTR_NUMBER, COUNT(*) AS Количество


FROM ORDERS
GROUP BY CTR_NUMBER

Фильтрация групп с Having


 Подсчитать количество заказов открытых на каждого покупателя и вывести
покупателей, у которых количество заказов в группировке >=2

SELECT CTR_NUMBER, COUNT(*) AS Количество


FROM ORDERS
GROUP BY CTR_NUMBER
HAVING COUNT(*) >=2;
 Подсчитать количество товаров в категории «Одежда» и вывести название
этих товаров

SELECT NAME, count(*) as Количество


FROM ITEMS
WHERE CATEGORY='Одежда'
GROUP BY NAME

 Подсчитать количество товаров в категории «Одежда» и вывести


название этих товаров, если количество товаров >3

SELECT NAME, count(*) as Количество


FROM ITEMS
WHERE CATEGORY='Одежда'
GROUP BY NAME
HAVING count(*)>3;

Группирование данных и сортировка


SELECT NAME, count(*) as Количество
FROM ITEMS
WHERE CATEGORY='Одежда'
GROUP BY NAME
HAVING count(*)>2
ORDER BY NAME DESC ;
Фильтрация по подзапросу
Вывести номер покупателя, на которого оформлен заказ, в котором
заказан товар под кодом in03
Проверяем:
1. Вывести заказ, в котором был заказан товар с кодом in03.

SELECT ODR_ID
FROM ORDERED_ITEMS
WHERE ITM_NUMBER='in03'
2. Вывести номер покупателя, на которого открыт заказ с номером o03

SELECT CTR_NUMBER
FROM ORDERS
WHERE ODR_ID ='o03'
3. А теперь объединим вышестоящие запросы в один. Первый запрос
станет подзапросом. Итоговый запрос выглядит следующим образом.

SELECT CTR_NUMBER
FROM ORDERS
WHERE ODR_ID = (SELECT ODR_ID
FROM ORDERED_ITEMS
WHERE ITM_NUMBER='in03')

Сначала выполнится подзапрос, а затем внешний запрос.


Если будет возвращаться более одной строки в
подзапросе, то внешний запрос выполняться не будет.!!!!
Для возврата более одной строки необходимо
прописать запрос следующим образом:
SELECT CTR_NUMBER
FROM ORDERS
WHERE ODR_ID IN (SELECT ODR_ID
FROM ORDERED_ITEMS
WHERE ITM_NUMBER='in03')
Еще пример

Вывести номер покупателя, фамилию покупателя, имя покупателя, номер


телефона покупателя и почту покупателя, на которого оформлен заказ, в котором
фигурирует товар под номером 3.

 Выводим номер заказа, в котором есть этот товар


SELECT ODR_ID FROM ORDERED_ITEMS WHERE ITM_NUMBER='in03'

 Выводим код покупателя, на которого был открыт данный заказ.


SELECT CTR_NUMBER FROM ORDERS WHERE ODR_ID = 'o03'

И собираем запросы в один.


SELECT FIRST_NAME, LAST_NAME, PHONE_NUMBER, EMAIL
FROM CUSTOMERS
WHERE CTR_NUMBER IN
(SELECT CTR_NUMBER
FROM ORDERS WHERE ODR_ID IN
(SELECT ODR_ID
FROM ORDERED_ITEMS
WHERE ITM_NUMBER='in03'))

Еще пример

Вывести самую последнюю цену для товара с номером in09

1. Отработать сначала этот запрос

SELECT * from PRICE_HISTORY

WHERE ITM_NUMBER = 'in09'

ORDER BY PHY_START_DATE desc


2. А потом этот:

SELECT * FROM

(SELECT * from PRICE_HISTORY

WHERE ITM_NUMBER = 'in09'

ORDER BY PHY_START_DATE desc)

WHERE rownum = 1
Применение подзапросов в качестве вычисляемых полей

1. Подсчитать количество заказов открытых на покупателя с кодом c01

SELECT COUNT(*) AS ЗАКАЗЫ

FROM ORDERS

WHERE CTR_NUMBER='c01'

2. Выбрать фамилию, имя и телефон покупателя. Выполнить подсчет


количества заказов открытых на каждого покупателя. Выводимую информацию
упорядочить по столбцу LAST_NAME.

SELECT LAST_NAME, FIRST_NAME, PHONE_NUMBER,


(SELECT COUNT(*)
FROM ORDER WHERE ORDERS.CTR_NUMBER =
CUSTOMERS.CTR_NUMBER) AS ЗАКАЗЫ
FROM CUSTOMERS
ORDER BY LAST_NAME
Соединение таблиц.
Oracle JOINS используются для извлечения данных из нескольких
таблиц. JOIN выполняется всякий раз, когда две или более таблиц объединяются в
SQL предложении.
Есть 4 различных типа присоединения Oracle:
Oracle INNER JOIN (или иногда называют простое соединение)
Oracle LEFT OUTER JOIN (или иногда называют LEFT JOIN)
Oracle RIGHT OUTER JOIN (или иногда называют RIGHT JOIN)
Oracle FULL OUTER JOIN (или иногда называют FULL JOIN)

INNER JOIN (простое соединение)


Синтаксис
Синтаксис INNER JOIN в Oracle/PLSQL:
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
В этом рисунке, Oracle INNER JOIN возвращает затененную область:
1. Вывести номер покупателя, ФИО, номер телефона и название команды.

 SELECT CTR_NUMBER, FIRST_NAME, LAST_NAME, PHONE_NUMBER,


NAME FROM CUSTOMERS INNER JOIN TEAMS ON
CUSTOMERS.TEM_ID=TEAMS.TEM_ID

Или так

 SELECT CTR_NUMBER, FIRST_NAME|| ' ' || LAST_NAME AS ФИО,


PHONE_NUMBER, NAME FROM CUSTOMERS INNER JOIN TEAMS ON
CUSTOMERS.TEM_ID=TEAMS.TEM_ID

2. Выбрать информацию по заказам и покупателям, на которых открыты данные


заказы. Упорядочить вывод по номеру заказа.
SELECT ODR_ID, DATA, PHONE_NUMBER, LAST_NAME, FIRST_NAME FROM
CUSTOMERS INNER JOIN ORDERS ON
CUSTOMERS.CTR_NUMBER=ORDERS.CTR_NUMBER
ORDER BY ODR_ID
3. Вывести номер заказа, название товара и заказанное количество. Вывод
информации упорядочить по полю номер заказа.

SELECT ODR_ID, NAME, QUANTITY_ORDERED


FROM ITEMS INNER JOIN ORDERED_ITEMS
ON ITEMS.ITM_NUMBER=ORDERED_ITEMS.ITM_NUMBER
ORDER BY ODR_ID
4. Вывести ФИО покупателей и адрес покупателей проживающих в городе
Ростове-на-Дону.

SELECT FIRST_NAME, LAST_NAME, CITY, ADDRESS_LINE, POSTAL_CODE


FROM CUSTOMERS INNER JOIN CUSTOMERS_ADDRESSES
ON CUSTOMERS.CTR_NUMBER=CUSTOMERS_ADDRESSES.CTR_NUMBER
WHERE CITY LIKE '%Ростов%'
5. Подсчитать количество по каждому заказанному товару.

SELECT NAME, DESCRIPTION, CATEGORY, RAZMER, COLOR,


SUM(QUANTITY_ORDERED) AS Количество
FROM ITEMS INNER JOIN ORDERED_ITEMS
ON ITEMS.ITM_NUMBER=ORDERED_ITEMS.ITM_NUMBER
GROUP BY NAME, DESCRIPTION, CATEGORY, RAZMER, COLOR
6. Вывести количество заказов открытых на покупателей.

SELECT LAST_NAME, FIRST_NAME, COUNT (ODR_ID) AS Количество


FROM CUSTOMERS INNER JOIN ORDERS
ON CUSTOMERS.CTR_NUMBER=ORDERS.CTR_NUMBER
GROUP BY LAST_NAME,FIRST_NAME

7. Вывести ФИО покупателя, телефон покупателя, ФИО закрепленного


продавца и название закрепленной команды.

Команды Покупатели Продавцы


SELECT CUSTOMERS.LAST_NAME|| ' ' || CUSTOMERS.FIRST_NAME AS
ФИО_ПОКУПАТЕЛЯ, CUSTOMERS.PHONE_NUMBER,
SALES_REPRESENTATIVES.LAST_NAME|| ' ' ||
SALES_REPRESENTATIVES.FIRST_NAME AS ФИО_ПРОДАВЦА, TEAMS.NAME
FROM TEAMS INNER JOIN
(CUSTOMERS INNER JOIN SALES_REPRESENTATIVES
ON
CUSTOMERS.SRE_ID=SALES_REPRESENTATIVES.SRE_ID)
ON TEAMS.TEM_ID=CUSTOMERS.TEM_ID
8. Вывести номер заказа, дату, ФИО покупатели и ФИО продавца.

Заказы Покупатели Продавцы

SELECT ODR_ID, DATA, CUSTOMERS.LAST_NAME|| ' ' ||


CUSTOMERS.FIRST_NAME AS ФИО_ПОКУПАТЕЛЯ,
SALES_REPRESENTATIVES.LAST_NAME|| ' ' ||
SALES_REPRESENTATIVES.FIRST_NAME AS ФИО_ПРОДАВЦА
FROM ORDERS JOIN
(CUSTOMERS INNER JOIN SALES_REPRESENTATIVES
ON CUSTOMERS.SRE_ID=SALES_REPRESENTATIVES.SRE_ID)
ON ORDERS.CTR_NUMBER=CUSTOMERS.CTR_NUMBER
9. Вывести ФИО покупателя, город, адрес, индекс, ФИО продавца и
название команды.

Продавцы Покупатели Команды

Адрес
SELECT CUSTOMERS.LAST_NAME|| ' ' || CUSTOMERS.FIRST_NAME AS
ФИО_ПОКУПАТЕЛЯ, CITY AS ГОРОД, ADDRESS_LINE AS АДРЕС,
POSTAL_CODE AS ИНДЕКС, SALES_REPRESENTATIVES.LAST_NAME|| ' ' ||
SALES_REPRESENTATIVES.FIRST_NAME AS ФИО_ПРОДАВЦА, NAME AS
КОМАНДА

FROM SALES_REPRESENTATIVES JOIN

(CUSTOMERS INNER JOIN TEAMS ON TEAMS.TEM_ID = CUSTOMERS.TEM_ID)


INNER JOIN CUSTOMERS_ADDRESSES ON
CUSTOMERS_ADDRESSES.CTR_NUMBER=CUSTOMERS.CTR_NUMBER)

ON SALES_REPRESENTATIVES.SRE_ID = CUSTOMERS.SRE_ID

10. Вывести номер заказа (o01) и сумму этого заказа (количество товара* на
последнюю указанную цену товара)

SELECT ODR_ID, (QUANTITY_ORDERED*PRICE) AS Цена

FROM ORDERED_ITEMS

INNER JOIN PRICE_HISTORY

ON ORDERED_ITEMS.ITM_NUMBER=PRICE_HISTORY.ITM_NUMBER

WHERE ODR_ID='o01'
AND PHY_START_DATE = (select max(PHY_START_DATE) FROM
PRICE_HISTORY

WHERE ORDERED_ITEMS.ITM_NUMBER=PRICE_HISTORY.ITM_NUMBER)

11. Вывести общую сумма заказа под номером 01

SELECT ODR_ID, SUM((QUANTITY_ORDERED*PRICE)) AS Общая_сумма

FROM ORDERED_ITEMS INNER JOIN PRICE_HISTORY ON


ORDERED_ITEMS.ITM_NUMBER=PRICE_HISTORY.ITM_NUMBER

WHERE ODR_ID='o01' AND PHY_START_DATE = (select


max(PHY_START_DATE)

FROM PRICE_HISTORY

WHERE ORDERED_ITEMS.ITM_NUMBER=PRICE_HISTORY.ITM_NUMBER)

GROUP BY ODR_ID
12. Вывести НОМЕР ЗАКАЗА И СУММУ ЗАКАЗА. Упорядочить вывод
информации по номеру заказа.

SELECT ODR_ID, SUM((QUANTITY_ORDERED*PRICE)) AS Общая_сумма


FROM ORDERED_ITEMS INNER JOIN PRICE_HISTORY ON
ORDERED_ITEMS.ITM_NUMBER=PRICE_HISTORY.ITM_NUMBER

WHERE PHY_START_DATE = (select max(PHY_START_DATE)

FROM PRICE_HISTORY

WHERE ORDERED_ITEMS.ITM_NUMBER=PRICE_HISTORY.ITM_NUMBER)

GROUP BY ODR_ID

ORDER BY ODR_ID

LEFT OUTER JOIN


Другой тип соединения называется Oracle LEFT OUTER JOIN. Этот тип
соединения возвращает все строки из таблиц с левосторонним соединением,
указанным в условии ON, и только те строки из другой таблицы, где объединяемые
поля равны.
Синтаксис
Синтаксис для Oracle LEFT OUTER JOIN:
SELECT columns
FROM table1
LEFT [OUTER] JOIN table2
ON table1.column = table2.column;
В некоторых базах данных LEFT OUTER JOIN заменяется на LEFT JOIN.
На этом рисунке, Oracle LEFT OUTER JOIN возвращает затененную область:
Oracle LEFT OUTER JOIN возвратит все записи из table1 и только те записи
из table2, которые пересекаются с table1.
1. Вывести всех покупателей (и представителей команды и индивидуальных
покупателей.

SELECT CTR_NUMBER, FIRST_NAME, LAST_NAME, PHONE_NUMBER, NAME


FROM CUSTOMERS LEFT JOIN TEAMS ON
CUSTOMERS.TEM_ID=TEAMS.TEM_ID
RIGHT OUTER JOIN
Другой тип соединения называется Oracle RIGHT OUTER JOIN. Этот тип
соединения возвращает все строки из таблиц с правосторонним соединением,
указанным в условии ON, и только те строки из другой таблицы, где объединяемые
поля равны.
Синтаксис
Синтаксис Oracle RIGHT OUTER JOIN:
SELECT columns
FROM table1
RIGHT [OUTER] JOIN table2
ON table1.column = table2.column;
В некоторых базах данных, RIGHT OUTER JOIN заменяется на RIGHT JOIN.
На этом рисунке, Oracle RIGHT OUTER JOIN возвращает затененную область:

Oracle RIGHT OUTER JOIN возвратит все записи из table2 и только те записи
из table1, которые пересекаются с table2.
1. Добавить в таблицу Teams новую команду

INSERT INTO TEAMS VALUES ('t05', 'Команда 5', 16, 3)

2. Вывести полный список команд (Даже те, которые не закреплены за


покупателями).
SELECT CTR_NUMBER, FIRST_NAME, LAST_NAME, PHONE_NUMBER,
NAME FROM CUSTOMERS right JOIN TEAMS ON
CUSTOMERS.TEM_ID=TEAMS.TEM_ID

FULL OUTER JOIN


Другой тип соединения называется Oracle FULL OUTER JOIN. Этот тип
соединения возвращает все строки из левой таблицы и правой таблицы с NULL —
значениями в месте, где условие объединения не выполняется.
Синтаксис
Синтаксис для Oracle FULL OUTER JOIN:
SELECT columns
FROM table1
FULL [OUTER] JOIN table2
ON table1.column = table2.column;
В некоторых базах данных, FULL OUTER JOIN заменяются FULL JOIN.
На этом рисунке, FULL OUTER JOIN возвращает затененную область:
Oracle FULL OUTER JOIN будет возвращать все записи из обеих
таблиц table1 и table2.
Вывести всю информацию из таблиц покупатели и команды.

SELECT CTR_NUMBER, FIRST_NAME, LAST_NAME, PHONE_NUMBER, NAME


FROM CUSTOMERS FULL JOIN TEAMS ON
CUSTOMERS.TEM_ID=TEAMS.TEM_ID

Оценить