SQLite - AND & OR Clauses

Здравствуйте, будущие энтузиасты баз данных! Сегодня мы окунемся в мир SQLite и рассмотрим два мощных оператора, которые помогут вам создавать более сложные и точные запросы к базе данных: это операторы AND и OR. Как ваш доброжелательный соседский компьютерный учитель, я с радостью провожу вас через это путешествие. Так что возьмите свои виртуальные блокноты, и давайте начнем!

SQLite - AND & OR Clauses

Оператор AND

Представьте, что вы организовываете огромную библиотеку книг. Вы хотите найти все книги, написанные Дж.К. Роулинг И опубликованные после 2000 года. Вот где оператор AND comes in handy!

Что такое оператор AND?

Оператор AND позволяет вам combine multiple conditions в вашем SQL запросе. Для того чтобы строка была включена в результирующий набор, ALL условия, соединенные AND, должны быть истинными.

Синтаксис

SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;

Примеры

Давайте создадим простую таблицу "books" для работы:

CREATE TABLE books (
id INTEGER PRIMARY KEY,
title TEXT,
author TEXT,
publication_year INTEGER,
genre TEXT
);

INSERT INTO books (title, author, publication_year, genre)
VALUES
('Harry Potter and the Goblet of Fire', 'J.K. Rowling', 2000, 'Fantasy'),
('The Da Vinci Code', 'Dan Brown', 2003, 'Thriller'),
('To Kill a Mockingbird', 'Harper Lee', 1960, 'Classic'),
('1984', 'George Orwell', 1949, 'Dystopian'),
('The Hunger Games', 'Suzanne Collins', 2008, 'Young Adult');

Теперь давайте используем оператор AND, чтобы найти все фэнтези-книги, опубликованные после 2000 года:

SELECT title, author, publication_year
FROM books
WHERE genre = 'Fantasy' AND publication_year > 2000;

Этот запрос вернет:

title                               | author      | publication_year
------------------------------------------------------------
Harry Potter and the Goblet of Fire | J.K. Rowling | 2000

Объяснение: Этот запрос выбирает только те книги, которые удовлетворяют обоим условиям: genre это 'Fantasy' AND publication_year больше 2000.

Давайте尝试 другой пример. Мы найдем все книги, написанные Дж.К. Роулинг и опубликованные в 2000 году:

SELECT title, author, publication_year
FROM books
WHERE author = 'J.K. Rowling' AND publication_year = 2000;

Этот запрос вернет такой же результат, как и раньше, потому что это единственная книга в нашей таблице, которая соответствует обоим условиям.

Полезный совет

Вы можете использовать столько операторов AND, сколько вам нужно в одном запросе. Например:

SELECT title, author, publication_year, genre
FROM books
WHERE author = 'J.K. Rowling' AND publication_year = 2000 AND genre = 'Fantasy';

Этот запрос добавляет одно дополнительное условие к нашему предыдущему примеру.

Оператор OR

Теперь представьте, что вам хочется или фэнтези-книгу, или триллер. Вот где на помощь приходит оператор OR!

Что такое оператор OR?

Оператор OR позволяет вам combine multiple conditions в вашем SQL запросе. Для того чтобы строка была включена в результирующий набор,至少 ONE из условий, соединенных OR, должен быть истинным.

Синтаксис

SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;

Примеры

Используя нашу таблицу "books" из предыдущего примера, давайте найдем все книги, которые являются либо в genre фэнтези, либо опубликованные после 2005 года:

SELECT title, author, publication_year, genre
FROM books
WHERE genre = 'Fantasy' OR publication_year > 2005;

Этот запрос вернет:

title                               | author           | publication_year | genre
----------------------------------------------------------------------------------
Harry Potter and the Goblet of Fire | J.K. Rowling     | 2000             | Fantasy
The Hunger Games                    | Suzanne Collins | 2008             | Young Adult

Объяснение: Этот запрос выбирает книги, которые удовлетворяют либо одному из условий: genre это 'Fantasy' OR publication_year больше 2005.

Давайте尝试 другой пример. Мы найдем все книги, написанные либо Дж.К. Роулинг, либо Дан Браун:

SELECT title, author, publication_year, genre
FROM books
WHERE author = 'J.K. Rowling' OR author = 'Dan Brown';

Этот запрос вернет:

title                               | author       | publication_year | genre
----------------------------------------------------------------------------------
Harry Potter and the Goblet of Fire | J.K. Rowling | 2000             | Fantasy
The Da Vinci Code                   | Dan Brown    | 2003             | Thriller

Combining AND и OR

Вот где事情 становятся действительно интересными! Вы можете combine AND и OR операторы в одном запросе. Но будьте осторожны - порядок имеет значение!

Давайте найдем все фэнтези-книги или книги, опубликованные после 2005 года, которые не относятся к genre "Young Adult":

SELECT title, author, publication_year, genre
FROM books
WHERE (genre = 'Fantasy' OR publication_year > 2005) AND genre != 'Young Adult';

Этот запрос вернет:

title                               | author       | publication_year | genre
----------------------------------------------------------------------------------
Harry Potter and the Goblet of Fire | J.K. Rowling | 2000             | Fantasy

Объяснение: Скобки здесь критически важны. Они обеспечивают, чтобы условие OR было оценено сначала, а затем результат combine с условием AND.

Полезный совет

При combine AND и OR, всегда используйте скобки, чтобы сделать свои намерения ясными. Это помогает как вам, так и SQLite понять логику вашего запроса.

Резюме

Вот quick reference table для операторов AND и OR:

Оператор Описание Пример
AND Возвращает истину, если все условия истинны WHERE condition1 AND condition2
OR Возвращает истину, если хотя бы одно условие истинно WHERE condition1 OR condition2

помните, что оператор AND как строгий библиотекарь, который дает вам книгу только если вы соответствуете всем критериям. Оператор OR более lenient друг, который рад, если вы соответствуете любому из условий.

Практикуйте использование этих операторов, и вскоре вы будете создавать сложные запросы, как профессион! Счастливого запроса, будущие маги баз данных!

Credits: Image by storyset