sql >> Database teknologi >  >> RDS >> Database

Hvad er en sammenligningsoperatør?

Sammenligningsoperatører er en vigtig del af de fleste programmeringssprog.

Sammenligningsoperatorer bruges til at sammenligne to udtryk. Resultatet er enten true eller falsk . Det kan også være ukendt. Dette kan også repræsenteres af enten 1 , 0 eller NULL , afhængigt af sproget. Disse er typisk kendt som "boolske udtryk".

Når det bruges sammen med databaser, kan sammenligningsoperatorer bruges i dine SQL-forespørgsler til at filtrere data til et bestemt kriterium.

Almindelige sammenligningsoperatører

De fleste programmeringssprog understøtter følgende sammenligningsoperatører i en eller anden form:

OPERATOR BETYDNING
= Lige med
> Større end
< Mindre end
>= Større end eller lig med
<= Mindre end eller lig med
<> Ikke lig med

SQL bruger den samme syntaks som angivet i ovenstående tabel.

Nogle sprog bruger en anden syntaks for at undgå forveksling med tildelingsoperatorer. For eksempel bruger Python og JavaScript == i stedet for = . ColdFusion på den anden side bruger eq .

Forskellige datatyper

Nogle sprog har en speciel operator til at angive, at begge værdier skal være af samme datatype.

For eksempel inkluderer JavaScript også === operator, der angiver, at begge værdier er lig med og at de skal være af samme datatype. Men hvis datatypen er irrelevant, skal du bruge == i stedet.

Eksempler

Større end operatør

Her er et eksempel på brug af Greater Than-operatoren i en T-SQL-forespørgsel.

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

Resultat:

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

I dette eksempel brugte jeg operatoren Greater Than (> ) for kun at vælge lande med en befolkning på over 100000000.

Er lig med operatør

Her er et andet eksempel, hvor jeg bruger lig-operatoren (= ) for at returnere data, der er nøjagtigt lig med en given værdi.

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

Resultat:

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

I dette tilfælde returnerer jeg kun de byer, hvis landekode er lig med AFG .

Dette viser, at sammenligningsoperatører ikke kun er begrænset til numeriske datatyper.

Datoer

Du kan også bruge sammenligningsoperatorer på datoer, for eksempel:

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

Resultat:

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

Som du kan se, er de eneste resultater, der returneres, dem, der er større end (efter) den angivne dato.

Større end eller lig med operatøren

Jeg kan bruge operatoren Større end eller Lige til til at inkludere den angivne dato i resultaterne.

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

Resultat:

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

I dette tilfælde returneres en ekstra række (den sidste række).

Mindre end operatør

Her er, hvad der sker, hvis jeg ændrer min forespørgsel til at bruge en mindre end-operator.

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

Resultat:

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

Jeg får alle rækker, der er mindre end den angivne dato.

Sammenligning af NULL-værdier

NULL værdier kan komplicere tingene lidt, når du bruger sammenligningsoperatorer. I en nøddeskal kan du få et andet resultat, afhængigt af hvordan dit miljø er konfigureret.

For eksempel, i SQL Server, hvis du bruger Equals-operatoren (= ) eller Not Equal-operatoren (<> ) for at teste mod NULL , vil dit resultat afhænge af din ANSI_NULLS indstilling (dvs. om den er ON eller OFF ).

For at teste mod NULL værdier, giver SQL Server også IS NULL prædikat, som fungerer konsekvent, uanset din ANSI_NULLS indstilling. Dette inkluderer også IS NOT NULL variation til test mod ikke-NULL værdier.

Nedenfor er et eksempel, der viser, hvad jeg mener.

ANSI_NULLS TIL

Først indstiller vi ANSI_NULLS til ON , kør derefter et par test mod 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;

Resultat:

(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 FRA

Nu indstiller vi ANSI_NULLS til OFF , og kør derefter de samme tests.

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;

Resultat:

+--------------------+
| (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. Hybrid OLTP/Analytics Database Workloads i Galera Cluster ved hjælp af asynkrone slaver

  2. Postgres:INDSÆT hvis den ikke allerede eksisterer

  3. Sådan automatiseres SQL-databasevedligeholdelsesopgaver ved hjælp af SQLCMD

  4. 'adgangskodegodkendelse mislykkedes for bruger postgres'