SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Podzapytanie SQLite

Podsumowanie :w tym samouczku dowiesz się o podzapytaniu SQLite do tworzenia bardziej czytelnych i złożonych zapytań.

Wprowadzenie do podzapytania SQLite

Podzapytanie to SELECT instrukcja zagnieżdżona w innej instrukcji. Zobacz następujące oświadczenie.

SELECT column_1
FROM table_1
WHERE column_1 = (
   SELECT column_1 
   FROM table_2
);Code language: SQL (Structured Query Language) (sql)

Poniższe zapytanie to zapytanie zewnętrzne :

SELECT column_1
  FROM table_1
 WHERE colum_1 =Code language: SQL (Structured Query Language) (sql)

A następujące zapytanie to podzapytanie .

(SELECT column_1
  FROM table_2)Code language: SQL (Structured Query Language) (sql)

Aby umieścić podzapytanie, musisz użyć pary nawiasów. Zwróć uwagę, że możesz zagnieździć podzapytanie w innym podzapytaniu o określonej głębokości.

Zazwyczaj podzapytanie zwraca pojedynczy wiersz jako wartość niepodzielną, chociaż może zwrócić wiele wierszy w celu porównania wartości z IN operatora.

Możesz użyć podzapytania w SELECT , FROM , WHERE i JOIN klauzule.

Przykłady podzapytań SQLite

Użyjemy tracks i albums tabele z przykładowej bazy danych do demonstracji.

1) Podzapytanie SQLite w WHERE przykład klauzuli

Możesz użyć prostego podzapytania jako warunku wyszukiwania. Na przykład poniższa instrukcja zwraca wszystkie utwory w albumie o tytule Let There Be Rock

SELECT trackid,
       name,
       albumid
FROM tracks
WHERE albumid = (
   SELECT albumid
   FROM albums
   WHERE title = 'Let There Be Rock'
);Code language: SQL (Structured Query Language) (sql)

Podzapytanie zwraca identyfikator albumu o tytule 'Let There Be Rock' . Zapytanie używa operatora równości (=) do porównania albumid zwrócone przez podzapytanie z albumid w tracks tabela.

Jeśli podzapytanie zwraca wiele wartości, możesz użyć IN operatora, aby sprawdzić istnienie pojedynczej wartości w zestawie wartości.

Zobacz następujących employees i customers tabela w przykładowej bazie danych:

Na przykład poniższe zapytanie zwraca klientów, których przedstawiciele handlowi znajdują się w Kanadzie.

SELECT customerid,
       firstname,
       lastname
  FROM customers
 WHERE supportrepid IN (
           SELECT employeeid
             FROM employees
            WHERE country = 'Canada'
       );
Code language: SQL (Structured Query Language) (sql)

Podzapytanie zwraca listę identyfikatorów pracowników, którzy znajdują się w Kanadzie. Zapytanie zewnętrzne używa IN operatora, aby znaleźć klientów, którzy mają identyfikator przedstawiciela handlowego na liście.

2) Podzapytanie SQLite w FROM przykład klauzuli

Czasami chcesz wielokrotnie zastosować funkcje agregujące do kolumny. Na przykład najpierw chcesz zsumować rozmiar albumu, a następnie obliczyć średni rozmiar wszystkich albumów. Możesz wymyślić następujące zapytanie.

SELECT AVG(SUM(bytes) 
FROM tracks
GROUP BY albumid;Code language: SQL (Structured Query Language) (sql)

To zapytanie jest nieprawidłowe.

Aby to naprawić, możesz użyć podzapytania w FROM klauzula w następujący sposób:

SELECT
	AVG(album.size)
FROM
	(
		SELECT
			SUM(bytes) SIZE
		FROM
			tracks
		GROUP BY
			albumid
	) AS album;Code language: SQL (Structured Query Language) (sql)
AVG(album.size)
---------------
  338288920.317

W tym przypadku SQLite najpierw wykonuje podzapytanie w FROM klauzula i zwraca zestaw wyników. Następnie SQLite używa tego zestawu wyników jako tabeli pochodnej w zewnętrznym zapytaniu.

skorelowane podzapytanie SQLite

Wszystkie podzapytania, które do tej pory widziałeś, mogą być wykonywane niezależnie. Innymi słowy, nie zależy to od zewnętrznego zapytania.

Skorelowane podzapytanie to podzapytanie, które używa wartości z zapytania zewnętrznego. W przeciwieństwie do podzapytania porządkowego, skorelowane podzapytanie nie może być wykonane niezależnie.

Skorelowane podzapytanie nie jest wydajne, ponieważ jest oceniane dla każdego wiersza przetwarzanego przez zapytanie zewnętrzne.

Poniższe zapytanie używa skorelowanego podzapytania, aby zwrócić albumy, których rozmiar jest mniejszy niż 10 MB.

SELECT albumid,
       title
  FROM albums
 WHERE 10000000 > (
                      SELECT sum(bytes) 
                        FROM tracks
                       WHERE tracks.AlbumId = albums.AlbumId
                  )
 ORDER BY title;Code language: SQL (Structured Query Language) (sql)

Jak działa zapytanie.

  • Dla każdego wiersza przetworzonego w zapytaniu zewnętrznym skorelowane podzapytanie oblicza rozmiar albumów na podstawie utworów należących do bieżącego albumu za pomocą SUM funkcja.
  • Predykat w WHERE Klauzula filtruje albumy o rozmiarze większym lub równym 10 MB (10000000 bajtów).

skorelowane podzapytanie SQLite w SELECT przykład klauzuli

Poniższe zapytanie używa skorelowanego podzapytania w SELECT klauzula zwracająca liczbę utworów w albumie.

SELECT albumid,
       title,
       (
           SELECT count(trackid) 
             FROM tracks
            WHERE tracks.AlbumId = albums.AlbumId
       )
       tracks_count
  FROM albums
 ORDER BY tracks_count DESC;Code language: SQL (Structured Query Language) (sql)

W tym samouczku wprowadziliśmy Cię do podzapytania i pokazaliśmy różne sposoby użycia podzapytania w zapytaniu w celu wybrania danych z tabel.


  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 JSON_INSERT()

  2. Jak zainstalować najnowszą wersję Sqlite aar podczas korzystania z Room na Androidzie?

  3. Biblioteka Android Room nie może skopiować bazy danych z zasobu

  4. Zwróć listę baz danych w SQLite

  5. Jak przywrócić bazę danych Sqlite po wykonaniu kopii zapasowej Androida?