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 e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest