eolas/Databases/SQL/4_WHERE.md
2022-08-16 15:31:07 +01:00

2.1 KiB
Raw Blame History

categories tags
Databases
Programming_Languages
SQL

SQL: The WHERE clause and compound statements

Within the SELECT statement, the WHERE clause specifies the search criterion. The WHERE clause should always be last in the syntax. The clauses are always written in this order: FROM followed by WHERE.

SELECT name, cores, release_date FROM model WHERE CORES="4";:

name                    cores       release_date
----------------------  ----------  ------------
Raspberry Pi 2 Model B  4           2015-02-01
Raspberry Pi 3 Model B  4           2016-02-01
Raspberry Pi 3 Model B  4           2018-03-14
Raspberry Pi 3 Model A  4           2018-11-01
Raspberry Pi 4 Model B  4           2019-06-24
Raspberry Pi 4 Model B  4           2019-06-24
Raspberry Pi 4 Model B  4           2019-06-24
Apple iMac              4           2019-03-19

Compound statements

Compound statements allow you to apply more filters to your clauses within an SQL statement. SQL allows you to build complex, combinatorial WHERE clauses by using Boolean and mathematical operators (i.e AND , OR , > , < , != , <= ...)

Multiple clauses:

SELECT name, ram, release_date
FROM model
WHERE release_date > '2018-01-01' AND ram > 512;

More complex logic achieve with parentheses:

SELECT name, cores, release_date
FROM model
WHERE (manufacturer_id = 1 OR manufacturer_id = 2) AND cores >= 2;

Wildcards

SQL does not use Regex. Instead it has a simpler glob-like syntax for carrying out string matching.

In order to signal that you wish to compare by a wildcard and not a value, you have to use the LIKE keyword. The actual wildcard operator is % .

In an SQL statement, the % wild card will match any number of occurrences of any character. Any characters can appear before or after MacBook and the record will still be returned:

SELECT name, cores, release_date
FROM model
WHERE name LIKE '%MacBook%';

This wildcard only filters characters that come after Raspberry :

SELECT name, cores, release_date
FROM model
WHERE name LIKE 'Raspberry%';