Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Авт_ПМП / Tema_SQL.doc
Скачиваний:
10
Добавлен:
05.02.2016
Размер:
462.34 Кб
Скачать

Ліве з’єднання (left join)

Ліве з’єднання таблиць, наприклад table_a і table_b, застосовують тоді, коли потрібно, щоб результат містив всі рядки однієї таблиці (наприклад table_a) і лише ті рядки з іншої таблиці (наприклад table_b), для яких в першій таблиці є відповідники. Наприклад, ліве з’єднання таблиць table_a і table_b матиме вид:

SELECT a.kod AS kod_a,a.suma AS suma_a, b.kod AS kod_b,b.suma AS suma_b

FROM table_a a LEFT JOIN table_b b ON a.kod=b.kod

Результат запиту матиме вид:

kod_a

suma_a

kod_b

suma_b

1

100

1

50

1

100

1

47

2

150

2

35

2

150

2

80

1

55

1

50

1

55

1

47

1

40

1

50

1

40

1

47

2

89

2

35

2

89

2

80

3

28

NULL

NULL

Для стовпчика kod таблиці table_a зі значеннім 3 у таблиці table_b немає відповідника, тому в результуючій таблиці у стовчиках, які віповідають стовпчикам таблиці table_b стоять значення NULL.

Наведемо приклад з’єднання 3-х таблиць. Змінимо структуру таблиці Vidomist, а саме:

kod

year

mounth

D

1

2002

1

367.78

2

2002

1

1309.55

3

2002

1

2709.98

1

2002

2

400

2

2002

2

500

3

2002

2

600

де стовпчики year i mounth означають відповідно рік і місяць виплати зарплати. Додамо нову таблицю Osoba, в якій зберігається інформація про працівників:

kod

priz

1

Іванов

2

Петров

3

Сидоров

4

Петренко

Задача. Потрібно сформувати відомість зарплати за 2-й місяць 2002 року з колонками: “Прізвище”, “Нараховано”, “Сума податку”, “До виплати”.

Відповідний SQL-оператор матиме вид:

SELECT a.priz AS Прізвище, b.D AS Нараховано, (b.D-c.d_l)*c.p+c.c AS [Сума податку], b.D-((b.D-c.d_l)*c.p+c.c) AS [До виплати]

FROM (Osoba a INNER JOIN Vidomist b ON a.kod=b.kod) INNER JOIN tpp c ON((b.D>c.d_l) AND (b.D<=c.d_r))

WHERE b.year=2002 AND b.mounth=2

Еквівалентна форма даного SQL-оператора матиме вид:

SELECT a.priz AS Прізвище, b.D AS Нараховано, (b.D-c.d_l)*c.p+c.c AS [Сума податку], b.D-((b.D-c.d_l)*c.p+c.c) AS [До виплати]

FROM Osoba a, Vidomist b, tpp c

WHERE a.kod=b.kod AND (b.D>c.d_l) AND (b.D<=c.d_r) AND

b.year=2002 AND b.mounth=2

Результуюча таблиця матиме вид:

Прізвище

Нараховано

Сума податку

До виплати

Іванов

400

65,55

334,45

Петров

500

85,55

414,45

Сидоров

600

105,55

494,45

Соседние файлы в папке Авт_ПМП