sql >> Databáze >  >> RDS >> Database

12 Běžně používané SQL operátory

V SQL je operátor speciální znak nebo klíčové slovo určující akci, která se provádí s jedním nebo více výrazy.

Operátory SQL jsou nedílnou součástí SQL a umožňují nám psát dotazy, které vracejí relevantní výsledky.

V tomto článku uvádím 12 nejčastěji používaných SQL operátorů při psaní SQL dotazů.

Je rovno (= ) Operátor

Operátor se rovná (= ) je pravděpodobně nejběžněji používaný operátor v SQL. Porovnává rovnost dvou výrazů. I když jste s SQL jen matně obeznámeni, pravděpodobně tento operátor znáte.

Představte si, že máme databázi pro hotel pro domácí mazlíčky a chceme získat informace o všech mazlíčcích jménem Fluffy.

V tom případě bychom mohli udělat toto:

SELECT PetId, PetName, DOB 
FROM Pets
WHERE PetName = 'Fluffy';

Výsledek:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

Náš dotaz používá operátor rovná se (= ) k porovnání rovnosti hodnoty PetName sloupec a řetězec Fluffy .

V našem případě vidíme, že hotel pro domácí mazlíčky má v současnosti dva mazlíčky jménem Fluffy.

Větší než (> ) Operátor

Operátor větší než (> ) porovná dva výrazy a vrátí TRUE má-li levý operand hodnotu vyšší než pravý operand; jinak je výsledek FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB > '2020-01-01';

Výsledek:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

V tomto případě se porovnává hodnota DOB sloupec a datum 2020-01-01 abyste zjistili, zda DOB sloupec je větší.

Méně než (< ) Operátor

Operátor menší než (< ) dělá opak. Porovná dva výrazy a vrátí TRUE má-li levý operand hodnotu nižší než pravý operand; jinak je výsledek FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB < '2020-01-01';

Výsledek:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

Větší než nebo rovno (>= ) Operátor

Operátor větší než nebo rovno (>= ) porovná dva výrazy a vrátí TRUE jestliže levý operand má hodnotu větší nebo rovnou pravému operandu; jinak vrátí FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB >= '2020-09-17';

Výsledek:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Všimněte si, že vrátil 2020-09-17 a všechna data větší než to. Pokud bychom použili operátor větší než (> ), byly by vráceny pouze první dva řádky.

Menší než nebo rovno (<= ) Operátor

Operátor menší nebo rovno (<= ) porovná dva výrazy a vrátí TRUE pokud má levý operand hodnotu nižší nebo rovnou pravému operandu; jinak je výsledek FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB <= '2020-09-17';

Výsledek:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
| Wag       | 2020-03-15 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Všimněte si, že vrátil 2020-09-17 a všechna data méně než to. Pokud bychom použili operátor Less Than (< ), byly by vráceny pouze první tři řádky.

AND Operátor

AND operátor kombinuje dva booleovské výrazy a vrací TRUE když jsou oba výrazy TRUE .

Zde je příklad.

SELECT PetId, DOB 
FROM Pets
WHERE PetName = 'Fluffy'
AND DOB > '2020-01-01';

Výsledek:

+---------+------------+
| PetId   | DOB        |
|---------+------------|
| 1       | 2020-11-20 |
| 6       | 2020-09-17 |
+---------+------------+

V tomto případě dostaneme pouze podrobnosti o mazlíčcích, jejichž jméno je Fluffy a jejich datum narození je mezi těmito dvěma daty.

OR Operátor

OR operátor kombinuje dva booleovské výrazy a vrací TRUE když je některá z podmínek TRUE .

Zde je příklad.

SELECT 
    PetId, 
    PetName,
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Bark';

Výsledek:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Toto je v podstatě opak AND operátor. Pokud bychom použili AND , nebyly by vráceny žádné řádky, protože v jednom sloupci nemůžeme mít současně dvě různé hodnoty.

BETWEEN Operátor

BETWEEN operátor nám umožňuje specifikovat rozsah, který se má testovat. Můžeme jej například použít k vrácení domácích mazlíčků, kteří se narodili mezi dvěma daty.

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB BETWEEN '2018-01-01' AND '2020-01-01';

Výsledek:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

NOT Operátor

NOT operátor neguje booleovský vstup (obrátí hodnotu libovolného booleovského výrazu). Proto vrací TRUE když je výraz FALSE .

Zde je to, co se stane, když přidáme NOT operátor k našemu předchozímu příkladu.

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB NOT BETWEEN '2018-01-01' AND '2020-01-01';

Výsledek:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Tentokrát jsme dostali všechny ostatní domácí mazlíčky – mazlíčky, které nebyly narození mezi těmito daty.

V MariaDB NOT je omezeno na negaci IN , BETWEEN a EXISTS doložky. Většina ostatních DBMS umožňuje NOT negovat jakýkoli výraz.

IN Operátor

IN operátor určuje, zda zadaná hodnota odpovídá jakékoli hodnotě v poddotazu nebo seznamu.

Zde je příklad.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

Výsledek:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 4       | Wag       | 2020-03-15 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Stejného výsledku bychom mohli dosáhnout použitím dvou OR operátoři:

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' 
    OR PetName = 'Bark' 
    OR PetName = 'Wag';

Nicméně IN operátor je stručnější způsob, jak to udělat. IN Operátor je zvláště výhodný, když máte dlouhý seznam hodnot, se kterými můžete porovnávat.

IN Operátor se téměř vždy provádí rychleji než více OR operátorů, zejména u větších datových souborů.

Další výhoda IN operátor je, že může obsahovat další SELECT seznam. Toto je známé jako poddotaz . Poddotaz je dotaz, který je vnořen do jiného dotazu (nebo dokonce jiného poddotazu).

Zde je příklad.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Výsledek:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Tento příklad nám ukazuje, kolik druhů zvířat je v našem hotelu pro domácí mazlíčky.

Mohli bychom použít NOT operátora otočte a uvidíte, kolik typů mazlíčků ne je v našem zvířecím hotelu.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );

Výsledek:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

Naše databáze tedy obsahuje zvířecí typ Rabbit , ale v současné době nemáme žádné králíky jako domácí mazlíčky.

Znaménko + a || Operátory zřetězení řetězců

+ a || Operátory zřetězení řetězců umožňují zřetězení řetězců. Zřetězení řetězců je operace spojování řetězců znaků end-to-end.

Důvod, proč jsem uvedl dva operátory, které dělají totéž, je ten, že + SQL Server podporuje operátor a || Operátor je podporován v DB2, Oracle, PostgreSQL, SQLite.

Zde je příklad, který funguje na serveru SQL.

SELECT 
    FirstName,
    LastName,
    FirstName + LastName
FROM Owners;

Výsledek:

+-------------+------------+--------------------+
| FirstName   | LastName   | (No column name)   |
|-------------+------------+--------------------|
| Homer       | Connery    | HomerConnery       |
| Bart        | Pitt       | BartPitt           |
| Nancy       | Simpson    | NancySimpson       |
| Boris       | Trump      | BorisTrump         |
+-------------+------------+--------------------+

V tomto případě mají vlastníci své jméno a příjmení uloženo v různých sloupcích. V našem SELECT seznam, nejprve je načteme jednotlivě, ale také je znovu načteme pomocí operátoru zřetězení k jejich spojení.

S našimi výsledky je však několik problémů.

  • Mezi jménem a příjmením není mezera.
  • Není uveden žádný název sloupce.

Naštěstí to lze snadno opravit.

Můžeme použít stejnou operaci zřetězení k vložení mezery mezi křestní jméno a příjmení.

A ke zřetězenému výsledku můžeme použít alias sloupce, abychom v sadě výsledků poskytli název sloupce.

SELECT 
    FirstName,
    LastName,
    FirstName + ' ' + LastName AS FullName
FROM Owners;

Výsledek:

+-------------+------------+---------------+
| FirstName   | LastName   | FullName      |
|-------------+------------+---------------|
| Homer       | Connery    | Homer Connery |
| Bart        | Pitt       | Bart Pitt     |
| Nancy       | Simpson    | Nancy Simpson |
| Boris       | Trump      | Boris Trump   |
+-------------+------------+---------------+

Pokud používáte DB2, Oracle, PostgreSQL, SQLite, zaměňte + pro || a mělo by to fungovat dobře.

Pokud používáte MySQL nebo MariaDB, budete muset použít CONCAT() funkce pro zřetězení řetězců.

LIKE Operátor

LIKE operátor umožňuje provádět porovnávání vzorů. Určuje, zda určitý řetězec znaků odpovídá zadanému vzoru. Vzor může obsahovat běžné znaky a zástupné znaky.

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '%.com';

Výsledek:

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
+-------------+------------+-------------------+

V tomto příkladu jsem použil LIKE operátor ve spojení s % zástupný operátor pro návrat vlastníků, jejichž e-mailové adresy končí na .com .

Bonusový operátor! % Operátor zástupných znaků

% Operátor zástupných znaků odpovídá libovolnému řetězci nula nebo více znaků. Může být použit buď jako předpona, nebo jako přípona a může být také použit uprostřed řetězce.

Obvykle se používá jako přípona a má omezené použití uprostřed vzorů, ačkoli existují některé platné případy použití pro jeho použití uprostřed vzoru, jako například následující:

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';

Výsledek:

+-------------+------------+------------------+
| FirstName   | LastName   | Email            |
|-------------+------------+------------------|
| Bart        | Pitt       | [email protected] |
+-------------+------------+------------------+

V tomto případě jsme neznali bartovu e-mailovou adresu, ale věděli jsme, že začíná [email protected] a skončil na .com . Proto jsme mohli použít LIKE ve spojení s % zástupný operátor, který doplní zbytek.

Mějte na paměti, že tato technika může vrátit mnoho irelevantních řádků v závislosti na datech a na tom, jak vytvoříte svůj příkaz SQL.

Uvědomte si také, že dotazy, které obsahují LIKE klauzule může běžet mnohem pomaleji než jiné dotazy a pravděpodobně byste se měli vyhnout použití LIKE klauzule, pokud ji opravdu nepotřebujete. Pomocí % operátor jako prefix může být obzvláště pomalý.

To neznamená, že byste to neměli používat vůbec. LIKE operátor je nedílnou součástí SQL a setkáte se s mnoha scénáři, kdy to bude jediná možnost (nebo alespoň ta nejlepší).

Více operátorů SQL

Podívejte se na můj úplný seznam operátorů SQL pro celou řadu dalších operátorů, které zde nejsou zahrnuty.


  1. Jak změnit datový typ sloupce ze znakového na číselný v PostgreSQL 8.4

  2. Co zkontrolovat, zda je využití I/O MySQL vysoké

  3. Spouštěče SQL Server – Část 2 Spouštěče DDL &LOGON

  4. Vytvořte pohled s klauzulí ORDER BY