В данной статье мы рассмотрим объединение 3?х и более таблиц. В качестве примера мы будем использовать 2 подхода:
- Использование выборки по внешним ключам
- Механизм JOIN
Для начала создадим таблицы:
- orders
- customers
- goods
(для проверки примеров можно использовать ресурс – http://sqlfiddle.com/)
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(20),
last_name VARCHAR(20),
email VARCHAR(100)
);
CREATE TABLE goods (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
price DECIMAL
);
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
created DATE,
customer_id INT NOT NULL,
good_id INT NOT NULL,
FOREIGN KEY (customer_id)
REFERENCES customers (id),
FOREIGN KEY (good_id)
REFERENCES goods (id)
);
И добавим в них данные:
insert into customers VALUES(1, 'One', 'First', 'test1@mail.com');
insert into customers VALUES(2, 'Two', 'Second', 'test2@mail.com');
insert into customers VALUES(3, 'Three', 'Third', 'test3@mail.com');
insert into customers VALUES(4, 'Four', 'Fourth', 'test4@mail.com');
insert into customers VALUES(5, 'Five', 'Fifth', 'test5@mail.com');
insert into goods VALUES(1, 'good_1', 100.00);
insert into goods VALUES(2, 'good_2', 200.00);
insert into goods VALUES(3, 'good_3', 300.00);
insert into goods VALUES(4, 'good_4', 400.00);
insert into goods VALUES(5, 'good_5', 500.00);
insert into goods VALUES(6, 'good_6', 600.00);
insert into goods VALUES(7, 'good_7', 700.00);
insert into goods VALUES(8, 'good_8', 800.00);
insert into goods VALUES(9, 'good_9', 900.00);
insert into goods VALUES(10, 'good_10', 1000.00);
insert into orders VALUES(1, '2019-01-01', 1, 1);
insert into orders VALUES(2, '2019-01-02', 1, 2);
insert into orders VALUES(3, '2019-01-03', 2, 3);
insert into orders VALUES(4, '2019-01-04', 2, 4);
insert into orders VALUES(5, '2019-01-05', 3, 5);
insert into orders VALUES(6, '2019-01-06', 3, 6);
insert into orders VALUES(7, '2019-01-07', 4, 7);
insert into orders VALUES(8, '2019-01-08', 4, 8);
insert into orders VALUES(9, '2019-01-09', 5, 9);
insert into orders VALUES(10, '2019-01-10', 5, 10);
Использование внешних ключей:
SELECT
c.last_name, c.email, g.name, o.created
FROM
customers c,
goods g,
orders o
WHERE
c.id = o.customer_id
AND o.good_id = g.id;
В результате выполнения данного запроса мы получим следующий результат:
last_name | name | created | |
---|---|---|---|
First | test1@mail.com | good_1 | 2019-01-01 |
First | test1@mail.com | good_2 | 2019-01-02 |
Second | test2@mail.com | good_3 | 2019-01-03 |
Second | test2@mail.com | good_4 | 2019-01-04 |
Third | test3@mail.com | good_5 | 2019-01-05 |
Third | test3@mail.com | good_6 | 2019-01-06 |
Fourth | test4@mail.com | good_7 | 2019-01-07 |
Fourth | test4@mail.com | good_8 | 2019-01-08 |
Fifth | test5@mail.com | good_9 | 2019-01-09 |
Fifth | test5@mail.com | good_10 | 2019-01-10 |
Использование JOIN:
SELECT
c.last_name, c.email, g.name, o.created
FROM
customers c
INNER JOIN
orders o ON o.customer_id = c.id
INNER JOIN
goods g ON g.id = o.good_id;
В результате выполнения данного запроса мы получим следующий результат:
last_name | name | created | |
---|---|---|---|
First | test1@mail.com | good_1 | 2019-01-01 |
First | test1@mail.com | good_2 | 2019-01-02 |
Second | test2@mail.com | good_3 | 2019-01-03 |
Second | test2@mail.com | good_4 | 2019-01-04 |
Third | test3@mail.com | good_5 | 2019-01-05 |
Third | test3@mail.com | good_6 | 2019-01-06 |
Fourth | test4@mail.com | good_7 | 2019-01-07 |
Fourth | test4@mail.com | good_8 | 2019-01-08 |
Fifth | test5@mail.com | good_9 | 2019-01-09 |
Fifth | test5@mail.com | good_10 | 2019-01-10 |
В данной статье мы рассмотрели 2 способа объединения 3 и более 3?хтаблиц.