sobota, 6 listopada 2010

Kurs Oracle SQL. Instrukcja SELECT

Instrukcja SELECT


Instrukcja select służy do pobierania danych z bazy. W połączeniu z funkcjami może wykonywać operacje na danych, m.in. obliczenia, formatować wyniki i tworzyć podsumowania. Pracujemy na połączeniu jako użytkownik HR w którego schemacie istnieją tabele z których korzystamy w dalszej części kursu.


Najprostsza postać instrukcji SELECT


Instrukcja select w najprostszej postaci pobiera wszystkie dane z wybranej tabeli.






W „wolnym tłumaczeniu” instrukcja

select * from departments;

oznacza „pobierz wszystko z tabeli departments”.

Znak „*” oznacza wybranie zawartości wszystkich kolumn do wyświetlenia. Po słowie „from” następuje nazwa tabeli lub widoku z której mają zostać pobrane dane.



SELECT wybranych kolumn


Poza wyświetleniem zawartości wszystkich kolumn tabeli/widoku możemy zechcieć wyświetlić zawartość jedynie wybranych.
Po wyrażeniu select określamy nazwy kolumn które mają zostać wybrane do wyświetlenia.




W wyniku zapytania wyświetlać możemy również stałą:

 

NVL



Zdarza się iż tak jak w poniższym przykładzie zawartość pól zwróconych przez zapytanie jest pusta. Możemy wtedy skorzystać z funkcji NVL zamieniającej puste wartości na wartość zastępczą. Wartość zastępcza musi być tego samego typu, co badana kolumna.






To samo zapytanie z użyciem funkcji NVL.



Aliasy kolumn


          Czasem zdarza się że nazwy kolumn są mało zrozumiałe lub „przyjazne” dla użytkownika. W takim wypadku w wyniku zapytania możemy zamienić je na własne aliasy.




W powyższym przykładzie zastosowałem dwa sposoby użycia „as”. Z cudzysłowami i bez.
Bez cudzysłowów piszemy w przypadku gdy alias składa się z jednego słowa, jak np. numer. Jeśli chcemy nadać alias składający się z dwóch lub więcej słów musimy użyć cudzysłowów lub znaku _ w miejsce spacji.




Słowo kluczowe DISTINCT


Słowo kluczowe distinct służy do wyświetlenia wartości lub szeregu wartości bez powtórzeń. Stosuje się je w przypadku gdy chcemy wiedzieć jakie w ogóle wartości występują w danej kolumnie a nie interesuje nas ich częstotliwość występowania.
Poniżej wyświetlenie zawartości kolumny location_id z tabeli departments bez zastosowania DISTINCT, z powtórzeniami.





To samo zapytanie, tym razem już z użyciem DISTINCT




Jak widać w tym wypadku wartości pojawiają się tylko raz.
Słowo kluczowe distinct możemy również zastosować dla wielu kolumn. Przyjrzyjmy się różnicy:




Koniec wyniku który widać na górze jest efektem zapytania „select manager_id, department_id from employees”. Wyświetlona została zawartość tych kolumn z wszystkich (107) wierszy. Pojawia się wiele powtórzeń jak np. kombinacja 124 i 50 odpowiednio dla manager_id oraz department_id. Dodając słowo distinct sprawiamy że ilość wierszy zmniejsza się do 28. Dzieje się tak ponieważ wyświetlane są możliwe kombinacje wybranych kolumn bez powtórzeń.



Ten temat omawiam na poniższych szkoleniach:
Podstawy Oracle SQL
Podstawy SQL i PL/SQL
Możesz w nich uczestniczyć, a jako czytelnik tego bloga otrzymasz 10% zniżki - poinformuj o tym fakcie konsultanta.

5 komentarzy:

  1. Czy można ograniczyć ilość rekordów, tak jak w MSSQL ("SELECT TOP 10 mutant_power FROM x_men") albo MySQL ("SELECT mutant_power FROM x_men LIMIT 0, 10")?

    OdpowiedzUsuń
  2. Można to zrobić wpisując coś takiego:
    SELECT kolumna FROM tabela WHERE ROWNUM <= x;
    gdzie x określa liczbę kolumn.

    OdpowiedzUsuń
  3. Można dodać:

    Ogólna składnia polecenia SELECT:

    SELECT [lista pól/kolumn, które chcemy wyświetlić] FROM [lista źródeł danych];

    gdzie:
    - polami mogą być: kolumny tabel bazy danych, będących na liście źródeł danych; wartości stałe; wyniki operacji na danych.
    - źródłami danych mogą być: tabele bazy danych; widoki/perspektywy bazy danych; a także wyniki uzyskane z zapytań zagnieżdżonych.

    OdpowiedzUsuń
  4. Dzień dobry.
    Chciałem przetestować funkcję NVL na jednej z kolumn, w której oprócz wartości NULL są same zera.
    Pojawia mi się taki komunikat błędu:

    ORA-01722: niepoprawna liczba
    01722. 00000 - "invalid number"
    *Cause: The specified number was invalid.
    *Action: Specify a valid number.

    Dla innej kolumny, gdzie oprócz wartości NULL jest tekst działa poprawnie.
    Pozdrawiam

    OdpowiedzUsuń
    Odpowiedzi
    1. Jeżeli jest to kolumna numeryczna to w NVL nie może być tekstu tylko też jakiś numeric np. 0.

      Usuń