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

SQLite СЪЩЕСТВУВА

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

Въведение в SQLite EXISTS оператор

EXISTS операторът е логически оператор, който проверява дали подзаявката връща някакъв ред.

Ето основния синтаксис на EXISTS оператор:

EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)

В този синтаксис подзаявката е SELECT оператор, който връща нула или повече реда.

Ако подзаявката върне един или повече редове, EXISTS оператор връща вярно. В противен случай EXISTS операторът връща false или NULL .

Имайте предвид, че ако подзаявката върне един ред с NULL , резултатът от EXISTS операторът все още е вярно, тъй като резултатният набор съдържа един ред с NULL.

За да отричате EXISTS оператор, използвате NOT EXISTS оператор, както следва:

NOT EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)

NOT EXISTS операторът връща true, ако подзаявката не връща ред.

SQLite EXISTS пример за оператор

Вижте следните Customers и Invoices таблици от примерната база данни:

Следното изявление намира клиенти, които имат фактури:

SELECT
    CustomerId,
    FirstName,
    LastName,
    Company
FROM
    Customers c
WHERE
    EXISTS (
        SELECT 
            1 
        FROM 
            Invoices
        WHERE 
            CustomerId = c.CustomerId
    )
ORDER BY
    FirstName,
    LastName; 
Code language: SQL (Structured Query Language) (sql)

Следната снимка показва частичния набор от резултати:

В този пример, за всеки клиент, EXISTS операторът проверява дали клиентският идентификатор съществува в invoices таблица.

  • Ако да, подзаявката връща един ред със стойност 1, който причинява EXISTS оператор оценява на истина. Следователно заявката включва потребителя в набора от резултати.
  • В случай, че идентификационният номер на клиента не съществува в Invoices таблица, подзаявката не връща редове, което причинява EXISTS оператор за оценка на false, следователно заявката не включва клиента в набора от резултати.

Забележете, че можете да използвате IN оператор вместо EXISTS оператор в този случай, за да постигнете същия резултат:

SELECT
   CustomerId, 
   FirstName, 
   LastName, 
   Company
FROM
   Customers c
WHERE
   CustomerId IN (
      SELECT
         CustomerId
      FROM
         Invoices
   )
ORDER BY
   FirstName, 
   LastName;Code language: SQL (Structured Query Language) (sql)

След като подзаявката върне първия ред, EXISTS операторът спира търсенето, защото може да определи резултата. От друга страна, IN операторът трябва да сканира всички редове, върнати от подзаявката, за да определи резултата.

Най-общо казано, EXISTS операторът е по-бърз от IN оператор, ако резултатният набор, върнат от подзаявката, е голям. За разлика от това, IN операторът е по-бърз от EXISTS оператор, ако резултатният набор, върнат от подзаявката, е малък.

SQLite NOT EXISTS пример за оператор

Вижте следната таблица с изпълнители и албуми от примерната база данни:

Тази заявка намира всички изпълнители, които нямат албум в таблицата с албуми:

SELECT
   *
FROM
   Artists a
WHERE
   NOT EXISTS(
      SELECT
         1
      FROM
         Albums
      WHERE
         ArtistId = a.ArtistId
   )
ORDER BY Name;Code language: SQL (Structured Query Language) (sql)

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

В този урок научихте как да използвате SQLite EXISTS оператор за тестване за съществуването на редове, върнати от подзаявка.


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

  2. SQLite върна код за грешка 14

  3. Android Room:Как да мигрираме преименуването на колона?

  4. SQLite - Пуснете база данни

  5. Шифроване на данни в SQLite