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

Присъединяване към SQLite

Резюме :в този урок ще научите за различни видове SQLite присъединявания за запитване на данни от две или повече таблици.

За демонстрацията ще използваме artists и albums таблици от примерната база данни.

Един изпълнител може да има нула или много албуми, докато албумът принадлежи на един изпълнител.

За да поискате данни и от двамата artists и albums таблици, които използвате, можете да използвате INNER JOIN , LEFT JOIN , или CROSS JOIN клауза. Всяка клауза за присъединяване определя как SQLite използва данни от една таблица, за да съвпадне с редове в друга таблица.

Имайте предвид, че SQLite не поддържа директно RIGHT JOIN и FULL OUTER JOIN .

SQLite INNER JOIN

Следното изявление връща заглавията на албумите и имената на техните изпълнители:

SELECT 
    Title,
    Name
FROM 
    albums
INNER JOIN artists 
    ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)

Ето частичния изход:

В този пример INNER JOIN клаузата съответства на всеки ред от albums таблица с всеки ред от artists таблица въз основа на условието за присъединяване (artists.ArtistId = albums.ArtistId ) посочен след ON ключова дума.

Ако условието за присъединяване е вярно (или 1), колоните с редове от двата albums и artists таблиците са включени в набора от резултати.

Тази заявка използва псевдоними на таблици (l за albums таблица и r за artists таблица), за да съкратите заявката:

SELECT
    l.Title, 
    r.Name
FROM
    albums l
INNER JOIN artists r ON
    r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)

В случай, че имената на колоните на обединените таблици са едни и същи, например ArtistId , можете да използвате USING синтаксис, както следва:

SELECT
   Title, 
   Name
FROM
   albums
INNER JOIN artists USING(ArtistId);Code language: SQL (Structured Query Language) (sql)

Клаузата USING(ArtistId) е еквивалентен на клаузата ON artists.ArtistId = albums.ArtistId .

SQLite LEFT JOIN

Това изявление избира имената на изпълнители и заглавията на албуми от artists и albums таблици с помощта на LEFT JOIN клауза:

SELECT
    Name, 
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

Ето изхода:

LEFT JOIN клаузата избира данни, започващи от лявата таблица (artists ) и съвпадащи редове в дясната таблица (albums ) въз основа на условието за присъединяване (artists.ArtistId = albums.ArtistId ) .

Лявото присъединяване връща всички редове от artists таблица (или лява таблица) и съвпадащите редове от albums таблица (или дясна маса).

Ако ред от лявата таблица няма съвпадащ ред в дясната таблица, SQLite включва колони от редовете в лявата таблица и NULL за колоните на дясната таблица.

Подобно на INNER JOIN клауза, можете да използвате USING синтаксис за условието за присъединяване, както следва:

SELECT
   Name, 
   Title
FROM
   artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
   Name;Code language: SQL (Structured Query Language) (sql)

Ако искате да намерите изпълнители, които нямат албуми, можете да добавите WHERE клауза, както е показано в следната заявка:

SELECT
    Name,
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
WHERE Title IS NULL   
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

Тази снимка показва частичния изход:

По принцип този тип заявка ви позволява да намерите редове, които са налични в лявата таблица, но нямат съответни редове в дясната таблица.

Обърнете внимание, че LEFT JOIN и LEFT OUTER JOIN са синоними.

SQLite CROSS JOIN

CROSS JOIN клаузата създава декартово произведение на редове от обединените таблици.

За разлика от INNER JOIN и LEFT JOIN клаузи, CROSS JOIN няма условие за присъединяване. Ето основния синтаксис на CROSS JOIN клауза:

SELECT
    select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)

CROSS JOIN комбинира всеки ред от първата таблица (table1 ) с всеки ред от втората таблица (table2 ), за да образувате резултатния набор.

Ако първата таблица има N редове, втората таблица има M редове, крайният резултат ще има NxM редове.

Практичен пример за CROSS JOIN клауза е да се комбинират два набора от данни за формиране на първоначален набор от данни за по-нататъшна обработка. Например имате списък с продукти и месеци и искате да направите план кога можете да продавате кои продукти.

Следният скрипт създава products и calendars таблици:

CREATE TABLE products(
    product text NOT null
);

INSERT INTO products(product)
VALUES('P1'),('P2'),('P3');



CREATE TABLE calendars(
    y int NOT NULL,
    m int NOT NULL
);

INSERT INTO calendars(y,m)
VALUES 
    (2019,1),
    (2019,2),
    (2019,3),
    (2019,4),
    (2019,5),
    (2019,6),
    (2019,7),
    (2019,8),
    (2019,9),
    (2019,10),
    (2019,11),
    (2019,12);
Code language: SQL (Structured Query Language) (sql)

Тази заявка използва CROSS JOIN клауза за комбиниране на продуктите с месеците:

SELECT * 
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)

Ето изхода:

В този урок научихте различни видове SQLite съединения, които ви позволяват да правите заявки от множество таблици.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не мога да задам няколко изображения в изглед на мрежа?

  2. Вмъкване в базата данни SQLite android

  3. Трябва ли да създам клас, който наследява SQLiteOpenHelper за всяка таблица в моята база данни?

  4. Как да извлечем изображение от база данни на SQLite?

  5. SQLite избира редове, ако времевата марка съвпада с днешната дата