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.
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ńMożna to zrobić wpisując coś takiego:
OdpowiedzUsuńSELECT kolumna FROM tabela WHERE ROWNUM <= x;
gdzie x określa liczbę kolumn.
Można dodać:
OdpowiedzUsuń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.
Dzień dobry.
OdpowiedzUsuń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
Jeżeli jest to kolumna numeryczna to w NVL nie może być tekstu tylko też jakiś numeric np. 0.
Usuń