Database
 sql >> Baza danych >  >> RDS >> Database

Co to jest operator porównania?

Operatory porównania są ważną częścią większości języków programowania.

Operatory porównania służą do porównywania dwóch wyrażeń. Wynik jest albo true lub false . Może też być nieznany. Może to być również reprezentowane przez 1 , 0 lub NULL , w zależności od języka. Są one zwykle znane jako „wyrażenia logiczne”.

W przypadku użycia z bazami danych operatory porównania mogą być używane w zapytaniach SQL do filtrowania danych według określonych kryteriów.

Typowe operatory porównania

Większość języków programowania obsługuje następujące operatory porównania w takiej czy innej formie:

OPERATOR ZNACZENIE
= Równe
> Większe niż
< Mniej niż
>= Większe lub równe
<= Mniejsze lub równe
<> Nie równa

SQL używa tej samej składni, jak wymieniono w powyższej tabeli.

Niektóre języki używają innej składni, aby uniknąć pomyłek z operatorami przypisania. Na przykład Python i JavaScript używają == zamiast = . Z drugiej strony ColdFusion używa eq .

Różne typy danych

Niektóre języki mają specjalny operator określający, że obie wartości muszą być tego samego typu danych.

Na przykład JavaScript zawiera również === operator, który określa, że ​​obie wartości są równe i muszą być tego samego typu danych. Ale jeśli typ danych jest nieistotny, użyj == zamiast.

Przykłady

Większy niż operator

Oto przykład użycia operatora Większe niż w zapytaniu T-SQL.

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

Wynik:

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

W tym przykładzie użyłem operatora Większe niż (> ), aby wybrać tylko kraje o liczbie ludności większej niż 100000000.

Równa operatorowi

Oto kolejny przykład, w którym używam operatora równości (= ), aby zwrócić dane, które są dokładnie równe podanej wartości.

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

Wynik:

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

W tym przypadku zwracam tylko te miasta, których kod kraju jest równy AFG .

To pokazuje, że operatory porównania nie ograniczają się tylko do liczbowych typów danych.

Daty

Możesz także użyć operatorów porównania w datach, na przykład:

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

Wynik:

+------------+----------------+--------------+
| 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 widać, jedyne zwracane wyniki to te większe niż (po) określonej dacie.

Większe niż lub równe operatorowi

Mogę użyć operatora Większe niż lub Równe do, aby uwzględnić określoną datę w wynikach.

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

Wynik:

+------------+----------------+--------------+
| 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   |
+------------+----------------+--------------+

W takim przypadku zwracany jest jeden dodatkowy wiersz (ostatni).

Mniej niż operator

Oto, co się stanie, jeśli zmienię zapytanie tak, aby używało operatora mniej niż.

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

Wynik:

+------------+------------------------+--------------+
| 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   |
+------------+------------------------+--------------+

Otrzymuję wszystkie wiersze, które są krótsze niż określona data.

Porównywanie wartości NULL

NULL wartości mogą nieco komplikować sprawy podczas korzystania z operatorów porównania. Krótko mówiąc, możesz uzyskać inny wynik, w zależności od konfiguracji twojego środowiska.

Na przykład w SQL Server, jeśli używasz operatora Equals (= ) lub operator Nie równe (<> ), aby przetestować pod kątem NULL , Twój wynik będzie zależał od Twojego ANSI_NULLS ustawienie (tzn. czy jest ON lub OFF ).

Aby przetestować z NULL wartości, SQL Server zapewnia również IS NULL predykat, który działa konsekwentnie, niezależnie od Twojego ANSI_NULLS ustawienie. Obejmuje to również IS NOT NULL odmiana do testowania pod kątem NULL wartości.

Poniżej znajduje się przykład, który pokazuje, o co mi chodzi.

ANSI_NULLS ON

Najpierw ustawiamy ANSI_NULLS na ON , a następnie uruchom kilka testów przeciwko 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;

Wynik:

(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

Teraz ustawiamy ANSI_NULLS na OFF , a następnie uruchom te same 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;

Wynik:

+--------------------+
| (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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różne plany dla identycznych serwerów

  2. SQL Pivot – Dowiedz się, jak konwertować wiersze na kolumny

  3. Generowanie danych syntetycznych

  4. Python, Ruby i Golang:porównanie aplikacji usług internetowych

  5. Włącz analizę biznesową klientów za pomocą katalogów danych, glosariuszy biznesowych i zarządzania danymi