Database
 sql >> база данни >  >> RDS >> Database

Какво е оператор за сравнение?

Операторите за сравнение са важна част от повечето езици за програмиране.

Операторите за сравнение се използват за сравняване на два израза. Резултатът е или true или false . Може също да е неизвестно. Това може да бъде представено и с 1 , 0 или NULL , в зависимост от езика. Те обикновено са известни като „булеви изрази“.

Когато се използват с бази данни, операторите за сравнение могат да се използват във вашите SQL заявки за филтриране на данни по определени критерии.

Общи оператори за сравнение

Повечето езици за програмиране поддържат следните оператори за сравнение в една или друга форма:

ОПЕРАТОР ЗНАЧЕНИЕ
= Равно на
> По-голямо от
< По-малко от
>= По-голямо или равно на
<= По-малко или равно на
<> Не е равно на

SQL използва същия синтаксис, както е изброен в горната таблица.

Някои езици използват различен синтаксис, за да се избегне объркване с операторите за присвояване. Например Python и JavaScript използват == вместо = . ColdFusion, от друга страна, използва eq .

Различни типове данни

Някои езици имат специален оператор, който указва, че и двете стойности трябва да са от един и същ тип данни.

Например JavaScript включва и === оператор, който указва, че и двете стойности са равни и че те трябва да са от един и същ тип данни. Но ако типът данни е без значение, използвайте == вместо.

Примери

По-голямо от оператор

Ето пример за използване на оператора Greater Than в T-SQL заявка.

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

Резултат:

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

В този пример използвах оператора Greater Than (> ), за да изберете само държави с население над 100000000.

Оператор Equals

Ето още един пример, където използвам оператора за равенство (= ), за да върне данни, които са точно равни на дадена стойност.

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

Резултат:

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

В този случай връщам само онези градове, чийто код на държавата е равен на AFG .

Това показва, че операторите за сравнение не са ограничени само до числови типове данни.

Дати

Можете също да използвате оператори за сравнение за дати, например:

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

Резултат:

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

Както можете да видите, единствените върнати резултати са тези, по-големи от (след) посочената дата.

По-голямо от или равно на оператор

Мога да използвам оператора По-голямо от или Равно на, за да включа посочената дата в резултатите.

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

Резултат:

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

В този случай се връща един допълнителен ред (последният ред).

По-малко от оператор

Ето какво се случва, ако променя заявката си, за да използвам оператор по-малко от.

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

Резултат:

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

Получавам всички редове, които са по-малко от посочената дата.

Сравняване на NULL стойности

NULL стойностите могат леко да усложнят нещата при използване на оператори за сравнение. Накратко, може да получите различен резултат в зависимост от това как е конфигурирана вашата среда.

Например, в SQL Server, ако използвате оператора Equals (= ) или операторът Not Equal (<> ), за да тествате срещу NULL , резултатът ви ще зависи от вашия ANSI_NULLS настройка (т.е. дали е ON или OFF ).

За тестване срещу NULL стойности, SQL Server също така предоставя IS NULL предикат, който работи последователно, независимо от вашия ANSI_NULLS настройка. Това също включва IS NOT NULL вариант за тестване срещу не-NULL стойности.

По-долу е даден пример, който демонстрира какво имам предвид.

ANSI_NULLS ON

Първо задаваме ANSI_NULLS до ON , след което изпълнете няколко теста срещу 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;

Резултат:

(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

Сега задаваме ANSI_NULLS до OFF , след което изпълнете същите тестове.

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;

Резултат:

+--------------------+
| (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. AWS RDS Методи за архивиране

  2. Как да групирате по две колони в SQL

  3. HubSpot ODBC драйвер

  4. Какво е AWS RDS

  5. Обединяване на файлове с данни със Statistica, част 1