Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИО.ЛР.3.SQL.Манипулирование данными.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
350.21 Кб
Скачать

4.4 Выполнение операций с несколькими таблицами

4.4.1 SELECT

Оператор SELECT позволяет выбирать значения полей из нескольких таблиц.

SELECT -- оператор выбирает требуемые таблицы.

P.PNUM,

P.PNAME,

PD.DNUM,

PD.VOLUME

FROM P, PD

WHERE P.PNUM = PD.PNUM;

Исходные таблицы P и PD :

В результате получим новую таблицу, в которой строки с данными о поставщиках соединены со строками с данными о поставках деталей:

Замечание. Соединяемые таблицы перечислены в разделе FROM оператора, условие соединения приведено в разделе WHERE. Раздел WHERE, помимо условия соединения таблиц, может также содержать и условия отбора строк.

4.4.2 UNION

  • Получить имена поставщиков, имеющих статус, больший 3 или поставляющих хотя бы одну деталь номер 2 (объединение двух подзапросов - ключевое слово UNION):

SELECT P.PNAME

FROM P

WHERE P.STATUS > 3

UNION -- результат после объединения

SELECT P.PNAME

FROM P, PD

WHERE P.PNUM = PD.PNUM AND

PD.DNUM = 2 ;

  • Результирующие таблицы объединяемых запросов должны быть совместимы, т.е. иметь одинаковое количество столбцов и одинаковые типы столбцов в порядке их перечисления.

  • Не требуется, чтобы объединяемые таблицы имели бы одинаковые имена колонок.

  • Это отличает операцию объединения запросов в SQL от операции объединения в реляционной алгебре.

  • Наименования колонок в результирующем запросе будут автоматически взяты из результата первого запроса в объединении.

4.4.3 NATURAL JOIN

Естественное соединение таблиц (ключевое слово NATURAL JOIN):

SELECT

P.PNUM,

P.PNAME,

PD.DNUM,

PD.VOLUME

FROM P NATURAL JOIN PD; --соединение таблицы P и PD;

Замечание. В разделе FROM не указано, по каким полям производится соединение. NATURAL JOIN автоматически соединяет по всем одинаковым полям в таблицах.

В результате после соединения таблицы P и PD :

4.4.4 OUTER JOIN

LEFT OUTER JOIN (можно использовать просто LEFT JOIN)

SELECT * FROM `user` LEFT OUTER JOIN `article` ON `article`.`ID_user` = `user`.`ID_user`

 

4.4.5 INNER JOIN

Этот тип объединения позволяет извлекать строки, которые обязательно присутсвуют во всех объединяемых таблицах.

В простейшем случае (без указания условий отбора), выборка вернёт т.н. декартово произведение, в котором каждая строка одной таблицы будет сопоставлена с каждой строкой другой таблицы:

mysql> SELECT * FROM nomenclature INNER JOIN description;

+----+-----------+----+---------------------+

| id | name | id | description |

+----+-----------+----+---------------------+

| 1 | Книга | 1 | Замечательная книга |

| 2 | Табуретка | 1 | Замечательная книга |

| 3 | Карандаш | 1 | Замечательная книга |

| 1 | Книга | 3 | Красный карандаш |

| 2 | Табуретка | 3 | Красный карандаш |

| 3 | Карандаш | 3 | Красный карандаш |

| 1 | Книга | 5 | Зелёная машинка |

| 2 | Табуретка | 5 | Зелёная машинка |

| 3 | Карандаш | 5 | Зелёная машинка |

+----+-----------+----+---------------------+

9 rows in set (0.00 sec)