SQLite - AND 和 OR 子句

你好,有抱负的数据库爱好者们!今天,我们将深入SQLite的世界,探索两个强大的操作符,它们将帮助你创建更复杂、更精确的数据库查询:AND 和 OR 子句。作为你友好邻里的计算机老师,我很兴奋能引导你完成这次旅程。所以,拿起你的虚拟便笺本,让我们开始吧!

SQLite - AND & OR Clauses

AND 操作符

想象一下你正在组织一个巨大的图书馆。你想找到所有由J.K. Rowling撰写并且出版于2000年之后的书籍。这时AND操作符就派上用场了!

AND 操作符是什么?

AND操作符允许你在SQL查询中组合多个条件。对于结果集中的行来说,所有通过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

解释:这个查询只选择满足两个条件的书籍:类型是'Fantasy'并且出版年份大于2000。

让我们再试一个例子。我们将找到所有由J.K. Rowling撰写并在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操作符允许你在SQL查询中组合多个条件。对于结果集中的行来说,至少有一个通过OR连接的条件必须为真。

语法

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

示例

使用之前的"books"表,让我们找到所有幻想类书籍或者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

解释:这个查询选择了满足以下任一条件的书籍:类型是'Fantasy'或者出版年份大于2005。

让我们再试一个例子。我们将找到所有由J.K. Rowling或Dan Brown撰写的书籍:

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

结合AND和OR

这里事情变得非常有趣!你可以在同一个查询中结合AND和OR操作符。但是要小心——顺序很重要!

让我们找到所有幻想类书籍或者2005年之后出版的非青少年类书籍:

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条件首先被评估,然后将结果与AND条件结合。

小贴士

当结合AND和OR时,总是使用括号来明确你的意图。这有助于你和SQLite理解你的查询逻辑。

总结

以下是AND和OR操作符的快速参考表:

操作符 描述 示例
AND 当所有条件都为真时返回真 WHERE condition1 AND condition2
OR 当至少一个条件为真时返回真 WHERE condition1 OR condition2

记住,AND操作符就像一个严格的图书管理员,只有当你满足所有条件时才会给你一本书。OR操作符则更像是宽容的朋友,只要你满足任何条件他就很高兴。

练习使用这些操作符,很快你就能像一个专业人士那样构建复杂的查询了!祝你好运,未来的数据库巫师们!

Credits: Image by storyset