Skip to content

SQL BASICS – CZ. 2

Spis treści

  1. Klauzula WHERE
    1. Operator IN
    2. LIKE
    3. IS NULL
    4. Złożone warunki logiczne
  2. Klauzula TOP
    1. TOP … WITH TIES
    2. OFFSET
    3. FETCH NEXT (Stronicowanie)

Klauzula WHERE

Klauzula ta umożliwia nam ograniczenie zwracanego wyniku zapytania dla interesujących nas w danej chwili danych. Umieszczane w niej warunki logiczne sprawdzane są dla każdego wiersza tabeli. Jak więc łatwo się domyślić, gdy wynikiem testu logicznego będzie prawda wiersz trafi do tabeli wynikowej. Gdy natomiast otrzymamy fałsz lub wartość nieznaną to wynik zostanie usunięty. Wymienione w klauzuli WHERE nazwy kolumn nie muszą znajdować się w klauzuli SELECT.

Przykład:

SELECT ID, FirstName, LastName, Age FROM Customers WHERE Age BETWEEN 18 AND 65

Powyższe zapytanie zwróci wszystkich klientów z tabeli Customers, którzy znajdują się w przedziale wiekowym od 18 do 65 lat. Możemy korzystać również z innych operatorów, takich jak:

  1. IN
  2. LIKE
  3. IS NULL

No i oczywiście korzystać z normalnych warunków logicznych (np. Age > 18)

Operator IN

SELECT ID, FirstName, LastName, Age FROM Customers WHERE FirstName IN ('Adam', 'Ewa')

Operator IN zwróci prawdę, gdy aktualna wartość z wskazanej kolumny znajduje się w podanym zbiorze.

Operator LIKE

Umożliwia porównywanie danych tekstowych ze wskazanym wzorcem. Przykładowe zapytania mogą wyglądać następująco:

SELECT ID, FirstName FROM Customers WHERE FirstName LIKE 'Ad%';
SELECT ID, FirstName FROM Customers WHERE FirstName LIKE 'A__m';

Pierwsze przykładowe zapytania zwróci wiersze, w których imię będzie zaczynać się od „Ad”, a następnie zawierać dowolny dalszy ciąg znaków. Drugi przykład zwróci wiersze, w których imię zaczyna się na ‚A’, następnie wystąpią dwa dowolne znaki, a na końcu wystąpi ‚m’.

Operator IS NULL

Sposobu działania tego operatora możemy domyślić się po samej jego nazwie. Pomimo faktu, że nie możemy porównywać wartości NULL to możemy sprawdzić, czy pewna wartość jest nieokreślona. Przykładowo:

SELECT ID, FirstName, LastName, Age FROM Employees WHERE CompanyName IS NULL;

Powyższe zapytanie zwróci wiersze, w których nazwa firmy jest nieokreślona.

Złożone warunki logiczne

Poznane do tej pory operatory służące do tworzenia warunków logicznych można łączyć oczywiście zarówno ze sobą, jak i z klasycznymi operatorami logicznymi celem uzyskania większej złożoności zapytania. W tym celu użyjemy poznanych już wcześniej operatorów OR, AND oraz NOT.

Klauzula TOP

Dzięki tej klauzuli możemy ograniczyć wynik zapytania do określonej przez nas liczby wierszy. Wartości możemy dodawać bezwzględnie lub procentowo. Klauzula TOP musi znaleźć się bezpośrednio po instrukcji SELECT, aczkolwiek przed nazwami zwracanych kolumn. Przykładowo:

SELECT TOP 10 FirstName, LastName FROM Customers;

Z powyższym zapytaniem związana jest jednak jedna istotna kwestia. Wiemy, że otrzymamy 10 wierszy. Tylko których? Wszystko zależy od sposobu przetwarzania danych przez serwer. Dlatego warto pamiętać o dodaniu sortowania:

SELECT TOP 10 FirstName, LastName FROM Customers ORDER BY FirstName;

TOP … WITH TIES

Co jednak stanie się w sytuacji gdy w tabeli będzie więcej rekordów o takich samych wartościach? Można to lepiej pokazać na np. tabeli z produktami spożywczymi. Wyobraźmy sobie, że mamy tabelę, w której skład wchodzi nazwa produktu oraz jego cena. Chcemy stworzyć zapytanie, które zwróci nam 5 faktycznie najdroższych produktów. W tabeli jest wiele rekordów o powtórzonych cenach produktów. Chcąc wyświetlić TOP 5 rekordów, dostalibyśmy tak naprawdę 5 pozycji w tej samej cenie. Jak sprawdzić co jest dalej? Możemy wykorzystać klauzulę TOP w rozszerzonej wersji: TOP … WITH TIES:

SELECT TOP 5 WITH TIES Name, Price FROM Products;

 OFFSET

Możemy dzięki niemu po prostu pominąć określoną liczbę wierszy. W tym celu jako parametr klauzuli podajemy liczbę wierszy, które mają zostać pominięte. Przykładowo:

SELECT FirstName, LastName, Age FROM Customers ORDER BY Age DESC OFFSET 5 ROWS;

Wyświetlimy imię, nazwisko oraz wiek w kolejności malejącej względem wieku. Pominięte zostanie 5 pierwszych wierszy.

FETCH NEXT

Jest to klauzula umożliwiająca ograniczenie liczby zwracanych wierszy. Pozwala ona zwracać jedynie pewien podzbiór wierszy tabeli wynikowej, który będzie wyświetlany w programie klienckim. Właśnie ze względu na to, mechanizm ten nazywamy stronicowaniem. Przykładowo:

SELECT FirstName, LastName, Age FROM Customers OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY;

 


Wpis ten jest drugą częścią większego cyklu. Jego kontynuacja ma miejsca w kolejnych częściach, w których zostaną omówione pozostałe podstawowe elementy języka SQL.

Facebooktwitterredditlinkedinmail
Published inProgramowanie