Есть две таблицы A и B, в таблице A 3 записи, в B — 4
В каждой таблице есть не уникальное, числовое, всегда заполненное поле driver_id
Необходимо заполнить таблицу, в которой будут минимальные и максимальные количества строк после выполнения запросов по шаблону:
select count(*) from A Тип джойна B on A.driver_id = B.driver_id
Тип джойна MIN count(*) MAX count(*) inner join ? ? left join 3 ? full join ? ?
Так как мы не знаем, какие данные хранятся в таблицах A и B, соответственно и количество строк при различных соединениях будет разным.
INSERT INTO A (DRIVER_ID) VALUES (0); INSERT INTO A (DRIVER_ID) VALUES (0); INSERT INTO A (DRIVER_ID) VALUES (0); INSERT INTO B (DRIVER_ID) VALUES (1); INSERT INTO B (DRIVER_ID) VALUES (1); INSERT INTO B (DRIVER_ID) VALUES (1); INSERT INTO B (DRIVER_ID) VALUES (1); COMMIT WORK;
При таких данных мы получим минимальные значения при различных соединениях.
SELECT COUNT(*) FROM A JOIN B ON B.DRIVER_ID = A.DRIVER_ID; -- 0 SELECT COUNT(*) FROM A LEFT JOIN B ON B.DRIVER_ID = A.DRIVER_ID; -- 3 (В таблице A 3 записи) SELECT COUNT(*) FROM A FULL JOIN B ON B.DRIVER_ID = A.DRIVER_ID; -- 7 (В таблице A 3 записи + 4 записи в таблице B. Итого 7 записей)
Если мы изменим данные в таблицах.
insert into A (driver_id) values (0); insert into A (driver_id) values (0); insert into A (driver_id) values (0); insert into B (driver_id) values (0); insert into B (driver_id) values (0); insert into B (driver_id) values (0); insert into B (driver_id) values (0); COMMIT WORK;
При таких данных мы получим максимальные значения при различных соединениях.
SELECT COUNT(*) FROM A JOIN B ON B.DRIVER_ID = A.DRIVER_ID; -- (A * B = 12 записей) SELECT COUNT(*) FROM A LEFT JOIN B ON B.DRIVER_ID = A.DRIVER_ID; -- (A * B = 12 записей) SELECT COUNT(*) FROM A FULL JOIN B ON B.DRIVER_ID = A.DRIVER_ID; -- (A * B = 12 записей)
Итого:
select count(*) from A Тип джойна B on A.driver_id = B.driver_id
Тип джойна MIN count(*) MAX count(*) inner join 0 12 left join 3 12 full join 7 12
Tags: SQL