Szybki kontakt




Operatory w języku SQL.

Operatory to słowa kluczowe lub znaki, które – w przypadku języka SQL – są najczęściej używane w klauzuli WHERE. Służą one m.in. do tworzenia warunków, łączenia wielu kryteriów w klauzuli WHERE, porównywania danych i wykonywania działań arytmetycznych.

Przykłady kodu przedstawione w artykule możesz uruchomić w bazie AdventureWorks2012. Informacje, w jaki sposób zainstalować SQL Server i podłączyć bazę znajdziesz w naszym artykule pod linkiem MS SQL Server instalacja.

Rodzaje operatorów:

  • operatory arytmetyczne
  • operatory porównania
  • operatory SQL
  • operatory logiczne

Operatory arytmetyczne

Operatory arytmetyczne służą do wykonywania operacji arytmetycznych, takich jak dodawanie, odejmowanie, mnożenie i dzielenie. Wszystkie standardowe operatory arytmetyczne mogą być używane w języku SQL. Ich argumentami mogą być liczby lub dane typów, które serwer bazodanowy może automatycznie konwertować na liczby.

Do operatorów arytmetycznych należą:

  • dodawanie (+)
    SELECT OrderQty, OrderQty + 1
    FROM Production.WorkOrder;
    

    Wartość w kolumnie Ilość zamówień (OrderQty) powiększona została o 1.

  • odejmowanie (-)
    SELECT OrderQty, OrderQty - 1
    FROM Production.WorkOrder;
    

    Wartość w kolumnie Ilość zamówień (OrderQty) pomniejszona została o 1.

  • mnożenie (*)
  • SELECT  OrderQty, LineTotal, OrderQty*LineTotal
    FROM Sales.SalesOrderDetail;
    

    Wartość w kolumnie Ilość zamówień (OrderQty) została przemnożona razy wartość w kolumnie Cena katalogowa (LineTotal).

  • dzielenie (/)
    SELECT LineTotal, UnitPrice, LineTotal/UnitPrice
    FROM Sales.SalesOrderDetail;
    

    Wartość w kolumnie Cena katalogowa (LineTotal) została podzielona przez wartość z kolumny Cena jednostkowa (UnitPrice).

  • dzielenie modulo (%)
    SELECT UnitPrice, OrderQty, UnitPrice%OrderQty
    FROM Sales.SalesOrderDetail;
    

    Wartość w kolumnie Cena katalogowa (LineTotal) została podzielona przez wartość z kolumny Cena jednostkowa (UnitPrice).

Domyślna kolejność wykonywania operatorów:
1. mnożenie lub dzielenie i modulo
2. dodawanie lub odejmowanie

Działania wykonywane są od lewej do prawej. Domyślną kolejność wykonywania operacji możesz zmienić za pomocą nawiasów. Operacje umieszczone w nawiasie wykonywane są w pierwszej kolejności.

Operatory porównania

Umożliwiają one porównanie lewej strony wyrażenia do prawej. Wynikiem porównania jest wartość logiczna PRAWDA lub FAŁSZ.

Uwaga! Sprawdź w bazie danych, której używasz, ustawienia trybu sortowania i sposób obsługi małych i dużych liter. Jeżeli w Twojej bazie wielkość liter ma znaczenie, ciągi znaków „Adam” i „ADAM” będą traktowane jako różne wartości.

Do operatorów porównania należą:

  • równe (=) – zwraca prawdę, jeżeli porównywane wartości są takie same.

    SELECT FirstName, LastName
    FROM  Person.Person
    WHERE LastName = 'Adams';
    

    Z tabeli Person.Person wybrane zostaną tylko te rekordy, w przypadku których Nazwisko (LastName) jest równe „Adams”.

  • większe niż (>) – zwraca prawdę, jeżeli pierwsza wartość jest większa od drugiej

    SELECT *
    FROM  Production.Product
    WHERE ListPrice > 0;
    

    Z tabeli Production.Product wybrane zostaną tylko te rekordy, w przypadku których Cena katalogowa (ListPrice) jest większa od zera.

  • mniejsze niż (<) – zwraca prawdę, jeżeli pierwsza (umieszczona po jego lewej stronie) wartość jest mniejsza od drugiej (umieszczonej po jego prawej stronie).

    SELECT *
    FROM  Production.Product
    WHERE ListPrice < 100;
    

    Z tabeli Production.Product wybrane zostaną tylko te rekordy, w przypadku których Cena katalogowa (ListPrice) jest mniejsza od stu.

  • większy lub równy (>=) – zwraca prawdę, jeżeli pierwsza wartość nie jest mniejsza od drugiej.

    SELECT *
    FROM  Production.Product
    WHERE ListPrice >= 100;
    

    Z tabeli Production.Product wybrane zostaną tylko te rekordy, w przypadku których Cena katalogowa (ListPrice) jest większa lub równa sto.

  • mniejszy lub równy (<=) – zwraca prawdę, jeżeli pierwsza wartość nie jest większa od drugiej.

    SELECT *
    FROM  Production.Product
    WHERE ListPrice <= 100;
    

    Z tabeli Production.Product wybrane zostaną tylko te rekordy, w przypadku których Cena katalogowa (ListPrice) jest mniejsza lub równa sto.

  • różny (<> lub !=) – zwraca prawdę, jeżeli porównywane wartości są różne.

    SELECT *
    FROM  Production.Product
    WHERE ListPrice <> 0;
    

    Z tabeli Production.Product wybrane zostaną tylko te rekordy, w przypadku których Cena katalogowa (ListPrice) jest różna od zera.

Nazwy kolumn mogą być użyte w wyrażeniach znajdujących się po obu stronach operatorów porównania. Wówczas będą porównywane ze sobą wartości z różnych pól tego samego wiersza.

SELECT BusinessEntityID, VacationHours, SickLeaveHours
FROM HumanResources.Employee
WHERE VacationHours < SickLeaveHours;

Z tabeli HumanResources.Employee wybrane zostaną tylko te rekordy, w przypadku których Liczba godzin urlopu (VacationHours) pracownika jest mniejsza niż liczba godzin zwolnienia lekarskiego (SickLeaveHours).

Operatory SQL

Oprócz standardowych operatorów porównania, w klauzuli WHERE możesz użyć operatorów specyficznych dla języka SQL.

Do operatorów SQL należą:

  • IN– zwraca prawdę, jeśli argument znajdujący się z lewej strony operatora jest równy jednej z wartości wymienionych w nawiasie za operatorem.

    SELECT * 
    FROM Person.Person
    WHERE LastName  IN ( 'Walters', 'Miller');
    

    Z tabeli Person.Person wybrane zostaną tylko te rekordy, w przypadku których Nazwisko (LastName) jest równe „Walters” lub „Miller”.

  • BEETWEN .. AND – zwraca prawdę, jeśli argument znajdujący się z lewej strony operatora ma wartość z przedziału podanego po prawej stronie operatora. Końce przedziału są włączone do zakresu.

    SELECT * 
    FROM Production.Product
    WHERE ListPrice BETWEEN 50 AND 200;
    

    Z tabeli Production.Product wybrane zostaną tylko te rekordy, w przypadku których Cena katalogowa (ListPrice) znajduje się w zakresie od 50 do 200. Kwoty 50 i 200 również będą zwrócone w wyniku zapytania.

  • LIKE – za jego pomocą możesz przeszukiwać dane tekstowe pod kątem ich zgodności z podanym wzorcem. Do tworzenia wzorca możesz użyć dwóch symboli o specjalnym znaczeniu:

    • symbol % (procent) – zastępuje dowolny ciąg znaków
    • symbol _ (podkreślenie) — zastępuje jeden dowolny znak
    SELECT * 
    FROM Person.Person
    WHERE LastName LIKE 'M%';
    

    Z tabeli Person.Person wybrane zostaną tylko te rekordy, w przypadku których Nazwisko (LastName) rozpoczyna się na literę „M”.

  • operator ciągu znaków – umożliwia łączenie ciągów znakowych
    SELECT FirstName + ' '+ LastName
    FROM Person.Person;
    

    W tabeli Person.Person połączone zostało imię (FirstName) i nazwisko (LastName). Pomiędzy imię i nazwisko wstawiona została spacja.

  • IS NULL – zwraca prawdę, jeśli argument znajdujący się z jego lewej strony ma wartość specjalną NULL.

    SELECT * 
    FROM Person.Person
    WHERE MiddleName IS NULL;
    

    Z tabeli Person.Person wybrane zostaną tylko te rekordy, w przypadku których brakuje drugiego imienia (MiddleName).

Operatory logiczne

Umożliwiają one połączenie kilku prostych warunków logicznych w jeden złożony.

W serwerach bazodanowych występuje znacznik NULL, który reprezentuje brakujące, nieznane lub nieistotne dane i jest różny od zera oraz od pustego ciągu znaków. Do znacznika NULL można się odnosić jak do braku jakichkolwiek danych w polu.

Z powodu występowania znacznika NULL, w serwerach bazodanowych obowiązuje logika trójwartościowa a nie dwuwartościowa. Porównanie znacznika NULL z dowolną inną wartością daje w wyniku wartość nieznaną a nie PRAWDĘ lub FAŁSZ.

Poniżej matryca logiczna uwzględniająca logikę trójwartościową

MS SQL logika trójwartościowa

Do operatorów logicznych należą:

  • AND (logiczne I, koniunkcja) – jeżeli użyjesz operatora AND wszystkie warunki, które za jego pomocą łączysz, muszą być prawdziwe, aby całość wyrażenia była prawdziwa.

    SELECT * 
    FROM Person.Person
    WHERE FirstName = 'David' AND LastName = 'Bradley';
    

    Z tabeli Person.Person wybrane zostaną tylko te rekordy, w przypadku których Imię (FirstName) jest równe „David” i Nazwisko (LastName) jest równe „Bradley”.

  • OR (logiczne LUB, alternatywa) – jeżeli użyjesz operatora OR tylko jeden z warunków, które za jego pomocą łączysz, musi być prawdziwy, aby całość wyrażenia była prawdziwa.

    SELECT * 
    FROM Person.Person
    WHERE FirstName = 'David' OR LastName = 'Bradley';
    

    Z tabeli Person.Person wybrane zostaną tylko te rekordy, w przypadku których Imię (FirstName) jest równe „David” lub Nazwisko (LastName) jest równe „Bradley”.

  • NOT (negacja) – jest to operator jednoargumentowy. W klasycznej logice jego wynikiem jest zaprzeczenie (negacja) argumentu. W języku SQL może on zwrócić również wartość UNKNOWN

    SELECT * 
    FROM Person.Person
    WHERE LastName NOT  IN ( 'Walters', 'Miller');
    

    Z tabeli Person.Person wybrane zostaną tylko te rekordy, w przypadku których Nazwisko (LastName) NIE jest równe „Walters” lub „Miller”.

Wszystkie operatory porównań możesz łączyć ze sobą za pomocą operatorów logicznych AND, OR.

W przypadku operatora AND każdy kolejny warunek logiczny zmniejsza liczbę wierszy wyniku zapytania

SELECT *
FROM Person.Person
WHERE EmailPromotion IN (1,2)
       AND NOT PersonType = 'SC'
       AND BusinessEntityID BETWEEN 99 AND 147
       AND LastName LIKE '%aker'
       AND Suffix IS NULL;

W przypadku operatora OR każdy kolejny warunek logiczny dodaje wiersze do wyniku zapytania

SELECT *
FROM Person.Person
WHERE EmailPromotion IN (1,2)
       OR NOT PersonType = 'SC'
       OR BusinessEntityID BETWEEN 99 AND 147
       OR LastName LIKE '%aker'
       OR Suffix IS NULL;

W języku SQL dostępne są również operatory związane z:

  • łączeniem tabel – SOME, ANY, ALL
  • grupowaniem danych – CUBE i ROLLUP, GROUPING SETS. Szczegółowy opis operatorów oraz informacje dotyczące grupowania znajdziesz w artykule pod linkiem MS SQL grupowanie.
  • podzapytaniami – EXISTS, IN. Informacje na temat podzapytań znajdziesz w artykule pod linkiem MS SQL – podzapytania.
  • tworzeniem raportów – PIVOT i UNPIVOT. Szczegółowy opis operatorów znajdziesz w artykule pod linkiem MS SQL – operatory niestandardowe PIVOT i UNPIVOT.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.