Резюме :в този урок ще научите как да използвате SQLite CROSS JOIN
за да комбинирате два или повече набора от резултати от множество таблици.
Въведение в SQLite CROSS JOIN
клауза
Ако използвате LEFT JOIN
, INNER JOIN
, или CROSS JOIN
без ON
или USING
клауза, SQLite произвежда декартовия продукт на включените таблици. Броят на редовете в декартовото произведение е произведението на броя на редовете във всяка включена таблица.
Да предположим, че имаме две таблици A и B. Следните изрази извършват кръстосано свързване и произвеждат декартово произведение на редовете от таблиците A и B.
SELECT *
FROM A JOIN B;
Code language: SQL (Structured Query Language) (sql)
SELECT *
FROM A
INNER JOIN B;
Code language: SQL (Structured Query Language) (sql)
SELECT *
FROM A
CROSS JOIN B;
Code language: SQL (Structured Query Language) (sql)
SELECT *
FROM A, B;
Code language: SQL (Structured Query Language) (sql)
Да предположим, че таблицата A има N реда, а таблицата B има M реда, CROSS JOIN
от тези две таблици ще произведе набор от резултати, който съдържа NxM
редове.
Представете си, че ако имате третата таблица C с K
редове, резултат от CROSS JOIN
клауза от тези три таблици ще съдържа NxMxK
редове, които може да са много огромни. Ето защо трябва да бъдете много внимателни, когато използвате CROSS JOIN
клауза.
Използвате INNER JOIN
и LEFT JOIN
клаузи по-често от CROSS JOIN
клауза. Все пак ще намерите CROSS JOIN
клауза е много полезна в някои случаи.
Например, когато искате да имате матрица, която има две измерения, пълна с данни, като данни за членове и дати в база данни за членство. Искате да проверите служителите на членовете за всички подходящи дати. В този случай можете да използвате CROSS JOIN
клауза като следното изявление:
SELECT name,
date
FROM members
CROSS JOIN dates;
Code language: SQL (Structured Query Language) (sql)
SQLite CROSS JOIN
пример за клауза
Следните изрази създават ranks
и suits
таблици, които съхраняват ранговете и костюмите за тесте карти и вмъкват пълните данни в тези две таблици.
CREATE TABLE ranks (
rank TEXT NOT NULL
);
CREATE TABLE suits (
suit TEXT NOT NULL
);
INSERT INTO ranks(rank)
VALUES('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('10'),('J'),('Q'),('K'),('A');
INSERT INTO suits(suit)
VALUES('Clubs'),('Diamonds'),('Hearts'),('Spades');
Code language: SQL (Structured Query Language) (sql)
Следващият израз използва CROSS JOIN
клауза за връщане на пълно тесте данни от карти:
SELECT rank,
suit
FROM ranks
CROSS JOIN
suits
ORDER BY suit;
Code language: SQL (Structured Query Language) (sql)
ранг | костюм |
---|---|
2 | Клубове |
3 | Клубове |
4 | Клубове |
5 | Клубове |
6 | Клубове |
7 | Клубове |
8 | Клубове |
9 | Клубове |
10 | Клубове |
J | Клубове |
В | Клубове |
К | Клубове |
A | Клубове |
2 | Диаманти |
3 | Диаманти |
4 | Диаманти |
5 | Диаманти |
6 | Диаманти |
7 | Диаманти |
8 | Диаманти |
9 | Диаманти |
10 | Диаманти |
J | Диаманти |
В | Диаманти |
К | Диаманти |
A | Диаманти |
2 | Сърца |
3 | Сърца |
4 | Сърца |
5 | Сърца |
6 | Сърца |
7 | Сърца |
8 | Сърца |
9 | Сърца |
10 | Сърца |
J | Сърца |
В | Сърца |
К | Сърца |
A | Сърца |
2 | Пика |
3 | Пика |
4 | Пика |
5 | Пика |
6 | Пика |
7 | Пика |
8 | Пика |
9 | Пика |
10 | Пика |
J | Пика |
В | Пика |
К | Пика |
A | Пика |
В този урок научихте как да използвате клаузата на SQLite CROSS JOIN, за да създадете декартов продукт от множество таблици, участващи в присъединяването.