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

Co je to porovnávací operátor?

Porovnávací operátory jsou důležitou součástí většiny programovacích jazyků.

Porovnávací operátory se používají k porovnání dvou výrazů. Výsledek je buď true nebo false . Může to být také neznámé. To může být také reprezentováno buď 1 , 0 , nebo NULL , v závislosti na jazyce. Tyto výrazy jsou obvykle známé jako „booleovské výrazy“.

Při použití s ​​databázemi lze v dotazech SQL použít operátory porovnání k filtrování dat podle určitých kritérií.

Běžné porovnávací operátory

Většina programovacích jazyků podporuje následující operátory porovnání v té či oné podobě:

OPERÁTOR SMYSL
= Rovno
> Větší než
< Méně než
>= Větší nebo rovno
<= Menší nebo rovno
<> Nerovná se

SQL používá stejnou syntaxi, jaká je uvedena v tabulce výše.

Některé jazyky používají jinou syntaxi, aby nedošlo k záměně s operátory přiřazení. Například Python a JavaScript používají == místo = . ColdFusion na druhé straně používá eq .

Různé datové typy

Některé jazyky mají speciální operátor, který určuje, že obě hodnoty musí být stejného datového typu.

Například JavaScript také obsahuje === operátor, který určuje, že se obě hodnoty rovnají a že musí mít stejný datový typ. Ale pokud je datový typ irelevantní, použijte == namísto.

Příklady

Větší než operátor

Zde je příklad použití operátoru Greater Than v dotazu T-SQL.

SELECT Name, Population
FROM country
WHERE Population > 100000000
ORDER BY Population DESC;

Výsledek:

+--------------------+--------------+
| Name               | Population   |
|--------------------+--------------|
| China              | 1277558000   |
| India              | 1013662000   |
| United States      | 278357000    |
| Indonesia          | 212107000    |
| Brazil             | 170115000    |
| Pakistan           | 156483000    |
| Russian Federation | 146934000    |
| Bangladesh         | 129155000    |
| Japan              | 126714000    |
| Nigeria            | 111506000    |
+--------------------+--------------+

V tomto příkladu jsem použil operátor Greater Than (> ) a vyberte pouze země s počtem obyvatel vyšším než 1 000 0000.

Operátor se rovná

Zde je další příklad, kde používám operátor rovná se (= ) vrátí data, která se přesně rovnají dané hodnotě.

SELECT CountryCode, Name 
FROM city 
WHERE CountryCode = 'AFG'

Výsledek:

+---------------+----------------+
| CountryCode   | Name           |
|---------------+----------------|
| AFG           | Kabul          |
| AFG           | Qandahar       |
| AFG           | Herat          |
| AFG           | Mazar-e-Sharif |
+---------------+----------------+

V tomto případě vracím pouze ta města, jejichž kód země je roven AFG .

To ukazuje, že operátory porovnání nejsou omezeny pouze na číselné datové typy.

Data

Můžete také použít porovnávací operátory pro data, například:

SELECT * FROM Artists
WHERE ActiveFrom > '1990-01-01';

Výsledek:

+------------+----------------+--------------+
| ArtistId   | ArtistName     | ActiveFrom   |
|------------+----------------+--------------|
| 5          | Devin Townsend | 1993-01-01   |
| 8          | Maroon 5       | 1994-01-01   |
| 9          | The Script     | 2001-01-01   |
| 14         | Karnivool      | 1997-01-01   |
| 15         | Birds of Tokyo | 2004-01-01   |
+------------+----------------+--------------+

Jak můžete vidět, jediné vrácené výsledky jsou ty, které jsou vyšší než (po) zadaném datu.

Větší než nebo rovno operátoru

Mohu použít operátor Větší než nebo Rovná se k zahrnutí zadaného data do výsledků.

SELECT * FROM Artists
WHERE ActiveFrom >= '1990-01-01';

Výsledek:

+------------+----------------+--------------+
| ArtistId   | ArtistName     | ActiveFrom   |
|------------+----------------+--------------|
| 5          | Devin Townsend | 1993-01-01   |
| 8          | Maroon 5       | 1994-01-01   |
| 9          | The Script     | 2001-01-01   |
| 14         | Karnivool      | 1997-01-01   |
| 15         | Birds of Tokyo | 2004-01-01   |
| 16         | Bodyjar        | 1990-01-01   |
+------------+----------------+--------------+

V tomto případě je vrácen jeden řádek navíc (poslední řádek).

Méně než operátor

Zde je to, co se stane, když změním svůj dotaz tak, aby používal operátor Menší než.

SELECT * FROM Artists
WHERE ActiveFrom < '1990-01-01';

Výsledek:

+------------+------------------------+--------------+
| ArtistId   | ArtistName             | ActiveFrom   |
|------------+------------------------+--------------|
| 1          | Iron Maiden            | 1975-12-25   |
| 2          | AC/DC                  | 1973-01-11   |
| 3          | Allan Holdsworth       | 1969-01-01   |
| 4          | Buddy Rich             | 1919-01-01   |
| 6          | Jim Reeves             | 1948-01-01   |
| 7          | Tom Jones              | 1963-01-01   |
| 10         | Lit                    | 1988-06-26   |
| 11         | Black Sabbath          | 1968-01-01   |
| 12         | Michael Learns to Rock | 1988-03-15   |
| 13         | Carabao                | 1981-01-01   |
+------------+------------------------+--------------+

Dostanu všechny řádky, které jsou menší než zadané datum.

Porovnání hodnot NULL

NULL hodnoty mohou při použití porovnávacích operátorů věci mírně zkomplikovat. Stručně řečeno, můžete získat jiný výsledek v závislosti na konfiguraci vašeho prostředí.

Například v SQL Server, pokud použijete operátor Equals (= ) nebo operátor Nerovná se (<> ) pro testování proti NULL , váš výsledek bude záviset na vašem ANSI_NULLS nastavení (tj. zda je ON nebo OFF ).

Chcete-li testovat proti NULL SQL Server také poskytuje IS NULL predikát, který funguje konzistentně bez ohledu na váš ANSI_NULLS nastavení. To také zahrnuje IS NOT NULL varianta pro testování proti jiným než NULL hodnoty.

Níže je uveden příklad, který ukazuje, co tím myslím.

ANSI_NULLS ON

Nejprve nastavíme ANSI_NULLS na ON a poté spusťte několik testů proti NULL .

SET ANSI_NULLS ON;

SELECT NULL
WHERE NULL = NULL;

SELECT NULL
WHERE 1 = NULL;

SELECT NULL
WHERE NULL IS NULL;

SELECT 'Not NULL'
WHERE 1 IS NOT NULL;

SELECT 'Not NULL'
WHERE 1 <> NULL;

Výsledek:

(0 rows affected)
(0 rows affected)
+--------------------+
| (No column name)   |
|--------------------|
| NULL               |
+--------------------+
(1 row affected)
+--------------------+
| (No column name)   |
|--------------------|
| Not NULL           |
+--------------------+
(1 row affected)
(0 rows affected)

ANSI_NULLS OFF

Nyní nastavíme ANSI_NULLS na OFF a poté spusťte stejné testy.

SET ANSI_NULLS OFF;

SELECT NULL
WHERE NULL = NULL;

SELECT NULL
WHERE 1 = NULL;

SELECT NULL
WHERE NULL IS NULL;

SELECT 'Not NULL'
WHERE 1 IS NOT NULL;

SELECT 'Not NULL'
WHERE 1 <> NULL;

Výsledek:

+--------------------+
| (No column name)   |
|--------------------|
| NULL               |
+--------------------+
(1 row affected)
(0 rows affected)
+--------------------+
| (No column name)   |
|--------------------|
| NULL               |
+--------------------+
(1 row affected)
+--------------------+
| (No column name)   |
|--------------------|
| Not NULL           |
+--------------------+
(1 row affected)
+--------------------+
| (No column name)   |
|--------------------|
| Not NULL           |
+--------------------+
(1 row affected)

  1. rake db:create throws databáze neexistuje chyba s postgresql

  2. Úvod do Failover pro replikaci MySQL – blog 101

  3. Jak přidat sloupec v SQL

  4. Jak zobrazit nebo odkrýt panel nástrojů Rychlý přístup ve Wordu, Excelu a PowerPointu