SQLite
 sql >> база данни >  >> RDS >> SQLite

SQLite CROSS JOIN с практически пример

Резюме :в този урок ще научите как да използвате 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, за да създадете декартов продукт от множество таблици, участващи в присъединяването.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite Node.js

  2. SQLite капани и клопки

  3. Форматирайте резултатите от SQLite заявката като колони със заглавки на колони

  4. Каква е границата на SQL променливите, които човек може да посочи в единична execSQL заявка

  5. onCreate() на RoomDatabase.Callback() не беше извикан след успешно извикване на .build()