
- •Оглавление
- •Введение
- •Общие сведения о sql
- •Сведения об операторах sql
- •Сведения о типах данных
- •Методические указания по выполнению практической части лабораторной работы на тему «Разработка базы данных в субд MySql»
- •4.1 На что следует обратить внимание перед началом работы
- •4.2 Начало работы с MySql
- •4.3 Построение простых запросов
- •4.4 Выполнение операций с несколькими таблицами
- •4.5 Упорядочение результата order by
- •Варианты заданий
- •Список литературы
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)