sql >> Databasteknik >  >> RDS >> Database

12 vanliga SQL-operatorer

I SQL är en operator ett specialtecken eller nyckelord som anger en åtgärd som utförs på ett eller flera uttryck.

SQL-operatorer är en integrerad del av SQL, och de gör det möjligt för oss att skriva frågor som ger relevanta resultat.

I den här artikeln presenterar jag 12 av de vanligaste SQL-operatorerna när jag skriver SQL-frågor.

The Equals (= ) Operatör

Operatorn Equals (= ) är förmodligen den mest använda operatorn i SQL. Den jämför likheten mellan två uttryck. Även om du inte är mer än vagt bekant med SQL, kommer du förmodligen att känna till den här operatorn.

Föreställ dig att vi har en databas för ett djurhotell och vi vill få information om alla husdjur som heter Fluffy.

I så fall kan vi göra så här:

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

Resultat:

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

Vår fråga använder operatorn Equals (= ) för att jämföra likheten mellan värdet på PetName kolumn och strängen Fluffy .

I vårt fall kan vi se att djurhotellet för närvarande har två husdjur som heter Fluffy.

Desto större än (> ) Operatör

Operatorn Större än (> ) jämför två uttryck och returnerar TRUE om den vänstra operanden har ett värde högre än den högra operanden; annars blir resultatet FALSE .

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

Resultat:

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

I det här fallet är det att jämföra värdet på DOB kolumnen och datumet 2020-01-01 för att se om DOB kolumnen är större.

Det mindre än (< ) Operatör

Operatorn Less Than (< ) gör tvärtom. Den jämför två uttryck och returnerar TRUE om den vänstra operanden har ett lägre värde än den högra operanden; annars blir resultatet FALSE .

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

Resultat:

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

Ju större än eller lika med (>= ) Operatör

Operatorn större än eller lika med (>= ) jämför två uttryck och returnerar TRUE om den vänstra operanden har ett värde större än eller lika med den högra operanden; annars returnerar den FALSE .

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

Resultat:

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

Observera att den returnerade 2020-09-17 och alla datum större än så. Om vi ​​hade använt Greater Than-operatorn (> ), endast de två första raderna skulle ha returnerats.

Ju mindre än eller lika med (<= ) Operatör

Operatorn Mindre än eller lika med (<= ) jämför två uttryck och returnerar TRUE om den vänstra operanden har ett värde som är lägre än eller lika med den högra operanden; annars blir resultatet FALSE .

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

Resultat:

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

Observera att den returnerade 2020-09-17 och alla datum mindre än så. Om vi ​​hade använt operatorn Less Than (< ), endast de tre första raderna skulle ha returnerats.

AND Operatör

OCH operatorn kombinerar två booleska uttryck och returnerar TRUE när båda uttrycken är TRUE .

Här är ett exempel.

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

Resultat:

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

I det här fallet får vi bara information om husdjuren där deras namn är Fluffy och deras födelsedatum ligger mellan de två datumen.

ELLER Operatör

ELLER operatorn kombinerar två booleska uttryck och returnerar TRUE när något av villkoren är TRUE .

Här är ett exempel.

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

Resultat:

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

Detta är i princip motsatsen till AND operatör. Om vi ​​hade använt AND , inga rader skulle ha returnerats, eftersom vi inte kan ha två olika värden i en kolumn samtidigt.

MELLAN Operatör

BETWEEN operatör tillåter oss att ange ett intervall att testa. Till exempel kan vi använda den för att lämna tillbaka husdjur som är födda mellan två datum.

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

Resultat:

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

NOT Operatör

NOT operatorn negerar en boolesk indata (den vänder värdet på valfritt booleskt uttryck). Returnerar därför TRUE när uttrycket är FALSE .

Det här är vad som händer när vi lägger till NOT operatör till vårt tidigare exempel.

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

Resultat:

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

Den här gången fick vi alla andra husdjur – husdjuren som inte var född mellan dessa datum.

I MariaDB, NOT är begränsad till att negera IN , MELLAN och FINNS klausuler. De flesta andra DBMS tillåter NOT för att förneka alla uttryck.

IN Operatör

IN operatorn bestämmer om ett angivet värde matchar något värde i en underfråga eller en lista.

Här är ett exempel.

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

Resultat:

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

Vi skulle kunna uppnå samma resultat genom att använda två ELLER operatörer:

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

Men IN operatör är ett mer kortfattat sätt att göra det på. IN operatören är särskilt fördelaktig när du har en lång lista med värden att jämföra med.

IN operatorn körs nästan alltid snabbare än flera ELLER operatörer, särskilt på större datamängder.

En annan fördel med IN operatorn, är att den kan innehålla en annan SELECT lista. Detta är känt som en underfråga . En underfråga är en fråga som är kapslad i en annan fråga (eller till och med en annan underfråga).

Här är ett exempel.

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

Resultat:

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

Det här exemplet visar hur många husdjurstyper som finns på vårt djurhotell.

Vi skulle kunna använda NOT operatören att vända på detta och se hur många husdjurstyper som inte är i vårt djurhotell.

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

Resultat:

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

Så vår databas innehåller en husdjurstyp av Kanin , men vi har för närvarande inga kaniner som husdjur.

+ och || Strängsammansättningsoperatorer

+ och || strängsammansättningsoperatorer låter dig sammanfoga strängar. Strängsammansättning är operationen att sammanfoga teckensträngar ände till ände.

Anledningen till att jag har listat två operatorer som gör samma sak är att + operatorn stöds i SQL Server, och || operatorn stöds i DB2, Oracle, PostgreSQL, SQLite.

Här är ett exempel som fungerar i SQL Server.

SELECT 
    FirstName,
    LastName,
    FirstName + LastName
FROM Owners;

Resultat:

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

I det här fallet har ägare sitt förnamn och efternamn lagrade i olika kolumner. I vår SELECT listan hämtar vi först dem individuellt, men vi hämtar dem också igen, genom att använda en sammanlänkningsoperator för att sammanfoga dem.

Det finns dock ett par problem med våra resultat.

  • Det finns inget mellanslag mellan för- och efternamn.
  • Det finns inget kolumnnamn.

Lyckligtvis är detta lätt att fixa.

Vi kan använda samma sammanlänkningsoperation för att inkludera mellanslag mellan förnamn och efternamn.

Och vi kan använda ett kolumnalias till det sammanlänkade resultatet för att tillhandahålla ett kolumnnamn i resultatuppsättningen.

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

Resultat:

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

Om du använder DB2, Oracle, PostgreSQL, SQLite, byt ut + för || och det borde fungera bra.

Om du använder MySQL eller MariaDB måste du använda CONCAT() funktion för att sammanfoga strängar.

LIKE Operatör

LIKE operatorn låter dig göra mönstermatchning. Det avgör om en specifik teckensträng matchar ett specificerat mönster. Ett mönster kan innehålla vanliga tecken och jokertecken.

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

Resultat:

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

I det här exemplet använde jag LIKE operatorn i kombination med % jokerteckenoperatör för att returnera ägare vars e-postadresser slutar på .com .

Bonusoperatör! % Jokertecken-operatör

% jokerteckenoperator matchar en sträng med noll eller fler tecken. Det kan användas som antingen ett prefix eller ett suffix, och det kan också användas i mitten av en sträng.

Det tenderar att användas oftare som ett suffix, och det har begränsad användning i mitten av mönster, även om det finns några giltiga användningsfall för att använda det i mitten av ett mönster, till exempel följande:

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

Resultat:

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

I det här fallet kände vi inte till barts e-postadress, men vi visste att det började med [email protected] och slutade med .com . Därför kunde vi använda LIKE i kombination med % jokerteckenoperatör för att fylla i resten.

Tänk på att den här tekniken kan returnera många irrelevanta rader, beroende på data och hur du konstruerar din SQL-sats.

Tänk också på att frågor som innehåller LIKE klausulen kan köras mycket långsammare än andra frågor, och du bör förmodligen undvika att använda LIKE klausul om du inte verkligen behöver det. Med hjälp av % operator som prefix kan vara särskilt långsam.

Därmed inte sagt att du inte ska använda det alls. LIKE operatör är en integrerad del av SQL, och du kommer att stöta på många scenarier där det kommer att vara det enda alternativet (eller åtminstone det bästa alternativet).

Fler SQL-operatörer

Se min fullständiga lista över SQL-operatorer för en hel massa andra operatorer som inte ingår här.


  1. T-SQL tisdag #33:Trickbilder:Schema Switch-A-Roo

  2. Hur man ställer in värdet på det sammansatta variabelfältet med hjälp av dynamisk SQL

  3. SYS_GUID() Funktion i Oracle

  4. Jämför datum lagrade som sträng med Datetime