Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Przeszukiwanie danych za pomocą operatora LIKE oraz ich sortowanie w SQL

Sortowanie (ORDER BY)

Pobrane za pomocą zapytania SELECT dane można oczywiście posortować według zawartości dowolnej kolumny. Warto tutaj zwrócić uwagę iż mamy dwie możliwości sortowania:

SortowanieOpis
ASCSortowanie od elementu najmniejszego do największego (domyślnie)
DESCSortowanie od elementu największego do najmniejszego

Weźmy przykładową tabelę (klienci):

IdImieNazwisko
1JanKowalski
3MaciejMaciejewski
2TomaszNowak
4MartaNowak
5MichałGadulski

Jak widać kolumna Id nie jest w ogóle posortowana. Posortujmy więc ją w sposób domyślny (ASC):

SELECT * FROM klienci ORDER BY Id;

to zapytanie jest równoważne temu:

SELECT * FROM klienci ORDER BY Id ASC;

Efekt:

IdImieNazwisko
1JanKowalski
2TomaszNowak
3MaciejMaciejewski
4MartaNowak
5MichałGadulski

Sortowanie od największego do najmniejszego:

SELECT * FROM klienci ORDER BY Id DESC;

Efekt:

IdImieNazwisko
5MichałGadulski
4MartaNowak
3MaciejMaciejewski
2TomaszNowak
1JanKowalski

Należy pamiętać, że zgodnie ze schematem podanym w artykule „Podstawowa wersja zapytania SELECT w SQL (SELECT … FROM … WHERE …)” klauzulę ORDER BY umieszczamy na końcu zapytania SQL.

Strony: 1 2

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , , , , , , ,

Dodaj komentarz

Komentarze (15)

  • Krzychu pisze:

    Przy tworzeniu kwerend należy pamiętać, że język SQL nie rozróżnia dużych i małych liter – taka informacja może wprowadzić w błąd początkujących.

    Owszem nie rozróżnia ale tylko dla poleceń oraz tabel, kolum, aliasów etc.

    Natomiast rozróżnia dla samych danych w zależności od ustawienia Collation!

  • Julia pisze:

    A jakiego zapytania użyć jeśli chcemy imię, które na końcu nie ma litery a?

  • Marcin pisze:

    Hej,

    Uczę się dopiero, a jak np. wyszukać w kolumnie przy użyciu LIKE, że np. nie zawiera z 10 różnych warunków odnoszącyć się do tekstu? czyli not like 'zona’, 'brat’ itd…

    • Cześć Marcin,

      Aby osiągnąć zamierzony efekt należy użyć słówka kluczowego AND (i). Poniżej przedstawiam przykład takiej kwerendy:

      SELECT * FROM MyFamily WHERE Relationship NOT LIKE '%zona%' AND Relationship NOT LIKE '%brat%';

      Zwróci ona wszystkie rekordy tabeli MyFamily gdzie kolumna Relationship nie będzie zawierała ciągu znaków „zona” oraz „brat”.

      Pozdrawiam,
      Łukasz Dudziński, autor bloga StrefaKodera.pl

      PS: Zamiast AND (i) możesz użyć również OR (lub) – w zależności od tego w jaki sposób chcesz skonstruować warunek.

  • Wiktoria pisze:

    Jakiego zapytania użyć jeżeli chcemy wyszukać osobę, której nazwisko zaczyna się np na J a kończy na A?

  • rom pisze:

    Witam,

    jak napisać wykluczenie żeby nie zawiera ciąg znaków „kra” a wyświetlić wszystkie pozostałe?

  • Dominik pisze:

    Cześć, mam podobny problem co użytkownik wyżej
    „Hej,
    Uczę się dopiero, a jak np. wyszukać w kolumnie przy użyciu LIKE, że np. nie zawiera z 10 różnych warunków odnoszącyć się do tekstu? czyli not like 'zona’, 'brat’ itd…”

    Ale nie mam 10 tylko około 500-set takich warunków, czy jest sposób aby to wyszukać w szybszy sposób niż za każdym razem dodawać warunek or/and (w moim przypadku za każdym razem dodaje or) ?

    • Hej Dominik,

      Z tego, co piszesz, to wydaje mi się, że ktoś popełnił błąd, projektując bazę danych – tutaj warto byłoby sobie poczytać o takim pojęciu jak „postać normalna”.

      Jeśli natomiast chodzi o uproszczenie zapytania SQL, to potrzebowałbyś znaleźć jakiś wspólny „wzór” i takie warunki wykorzystać w klauzuli LIKE.

      Pozdrawiam,
      Łukasz Dudziński

      • arku pisze:

        A czy w przypadku dużej liczby warunków można zastosować słownik warunków/ wykluczeń w oddzielnej tabeli, która mogłaby być jakoś połączona z naszą tabelą źródłową? Przy tym ważne, by zachować możliwość stosowania znaków ? i %.

      • Hej Arku,

        Da się to zrobić. Musisz wykorzystać zmienne. Do zmiennej przypisujesz wartość zapytania SELECT, którym „wyciągasz” dany argument, a następnie wykorzystujesz to w klauzuli LIKE:

        SELECT * FROM Table WHERE Name LIKE = '%' + @myVariable + '%';

        Pozdrawiam,
        Łukasz Dudziński, autor bloga StrefaKodera.pl

  • Darek pisze:

    Cześć,

    mam taki problem, chciałbym wyfiltrować np tylko nazwiska zaczynające się od samogłosek. Czy w takim wypadku za kazdym razem musze robić tak?

    nazwisko like 'e%’
    or nazwisko like 'u%’ itp?
    Próbowałem użyć nazwisko like '[aeiou]%’ ale to niestety nie działa

    Da się jakoś zapisać to krócej?

    Pozdrawiam,

    • Cześć Darek,

      Dlaczego LIKE '[AEIOU]%' nie działa? Według moich testów, to powinno zadziałać, jak oczekujesz. Pamiętaj, że wielkość liter ma znaczenie.

      Łukasz Dudziński, autor bloga StrefaKodera.pl

Odpowiedz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest