Projekcja – klauzula SELECT – operacje na jednej tablicy

Aby wydobyć informacje z bazy danych musimy o nie jakoś zapytać. Skupimy się na razie na jednej tablicy czy jak kto woli tabeli.

Aby zacząć pytać musimy wiedzieć co chcemy otrzymać oraz gdzie się to znajduje.

Zakładając, że mamy dane osobowe: imię, nazwisko, adres znajdujące się w tabeli ADRESY – zapytajmy tabelę o wyświetlenie imion z naszej tabeli. Posłuży nam do tego SELECT:

SELECT imie FROM adresy

czyli: wybierz imiona z tabeli adresy – w ten sposób otrzymamy wynik, którym jest kolumna ‚imie’ z jej zawartością.

!WAŻNE! – bazę możemy skonfigurować w dowolny sposób, między innymi tak aby tolerowała znaki narodowe czyli tzw ogonki czy np. tak aby ignorowała kapitaliki czyli wielkie litery. W naszym kursie zakładamy, że nie mamy polskich znaków oraz, że bazie danych jest wszystko jedno czy zapytamy o IMIE, imie, Imie, czy ImiE – w przeciwnym razie wszystkie te nazwy oznaczały by co innego. Dla uproszczenia przyjmiemy w kursie, że tylko instrukcję będziemy pisać wielkimi literami a nazwy obiektów (kolumn, tabel itp) małymi. Pamiętajmy jednak, że w przypadku baz danych – wielkość MA znaczenie :)

———————-

Możemy oczywiście wybrać więcej niż jedną kolumnę – załóżmy, że chcemy tym razem mieć imię i nazwisko – w tym przypadku oddzielamy nazwy kolumn przecinkiem

SELECT imie, nazwisko FROM adresy

Wybierać możemy nie tylko kolumny ale także ‚stałe’. Stałe to właściwie słowa, które wyświetlą nam się kiedy spełnimy odpowiednie warunki – ponieważ do warunków jeszcze nie doszliśmy, zakładamy że spełniamy wszystkie :)

Przykład: wybiezmy z naszej tabeli adresy ale w taki sposób aby poprzedzał je wyraz ‚adres’. Nic prostrzego:

SELECT ‚ADRES’, adres FROM adresy

w wyniku otrzymamy coś w ten deseń:

ADRES   warszawa kolejowa 3

ADRES  starachowice szkolna 2

ADRES  kielce sienkiewicza 18

Czyli każdy nasz rekord (pojedyńczy wynik, wiersz) zostanie poprzedzony wyrazem ADRES.

Czasami musimy wybrać wszystkie kolumny z danej tabeli. W naszym przykładzie jest ich 3 ale co kiedy było by ich 120? Oczywiście nie musimy ich wszystkich wypisywać – możemy zastąpić je wszystkie gwiazdką:

SELECT * FROM klienci

w wyniku otrzymamy wszystkie kolumny z tabeli klienci :)

——————-

Czasami kiedy tworzymy jakieś zestawienie dla naszego szefa – musimy wykonać ładną prezentację. Problem pojawia się kiedy w jakiejś kolumnie nie ma wartości. Na przykład mamy w tabeli imię i nazwisko ale nie wpisaliśmy adresu bądź jest nam on nieznany. Jeżeli w tabelce nie ma wartości to przyjmuje ona domyślną wartość NULL (o nullach więcej i szerzej pomówimy w przyszłości). Jak teraz wyglądał by przykładowy wiersz w naszym wyniku?

imie|nazwisko|adres

Jacek |Ołowiak |NULL

nie wygląda to uroczo, może dało by się zastąpić ten NULL czymś sensownym? Ano dało by się. Służy nam funkcja NVL – sprawdza ona czy w danej kolumnie jest wartość NULL, jeżeli jest to zastępuje ją jakimś słowem lub inną daną

Zróbmy to w taki sposób aby dla wpisów nie posiadających adresu umieścić informację „brak adresu”. Ok? No to do dzieła:

SELECT imie , nazwisko , NVL(adres, ‚brak adresu’) FROM adresy

czyli NVL(nazwa_kolumny, wartosc_zastepcza)

!WAŻNE! – wartość zastępcza MUSI być tego samego typu co badana kolumna – czyli jeżeli tutaj mamy tekst to nie moglibyśmy wstawić tutaj np. kolumny wiek, która była by numerem

———————–

To jeszcze nie koniec poznawania zaledwie podstaw SELECTu :)

z prostrzych, które możemy tutaj poruszyć nie mącąc w głowach to:

DISTINCT – służy nam do wybrania unikatowych wartości z tabel, czyli nie interesuje nas ilość danych ale to jakie dane tam są.

Dla przykładu może się zdarzyć, że chcemy zobaczyć jakie nazwiska znajdują się w naszej tabelce – jeśli wybralibyśmy normalnie to otrzymamy pełną kolumnę nazwisko. A co jeśli mamy tam dwudziestu Ołowiaków i 40 Nowaków? Nie chcemy tego liczyć, chcemy aby pokazały się tylko raz:

SELECT DISTINCT nazwisko FROM adresy

ALIASY - to nazwy jakie możemy nadać kolumnom – nie musimy ich pokazywać szefowi tak jak się nazywają w rzeczywistości  – zwłaszcza, że często używa się skrotów w nazewnictwie kolumn.

Zakładając, że mamy w tabeli faktury, kolumny cen_net, cen_bru…. – dla przeciętnego odbiorcy takie zestawienie będzie kłopotliwe do odczytania. Nazwijmy je normalnie ceny netto i ceny brutto. Robimy to używając aliasów.

SELECT   cen_net    AS   ‚ceny netto’  , cen_bru AS   ‚ceny brutto’   FROM   faktury

I po kłopocie, dodam tylko, że słowo kluczowe AS nie jest wymagane.

————

Ostatnim elementem w tym rozdziale (aby nie było wszystkiego zbyt dużo) są operacje modyfikujące wyświetlane dane.

Jak wspomniałem na samym początku, w klauzuli SELECT możemy dokonywać obliczeń.

podam prosty przykład ponieważ szerzej omówimy to w kolejnych rozdziałach.

Dla ułatwienia przyjmijmy, że z tabeli wypłaty chcemy mieć kwoty netto i brutto. Niestety nasz durny administrator nie przewidział, że będziemy potrzebować wartości brutto…. musimy więc ją jakoś wyliczyć. Wiemy, że stawka podatku dla naszych zarobków to 17%. Co należy zrobić? No dodać wartośc podatku do wartości netto, brawo :)

więc:

SELECT netto,

netto + ((netto *17)/100) AS brutto

FROM wyplaty

Zgadza się? Jednocześnie użyliśmy aliasu aby nasz wynik nazwać brutto :)

Operacje, które ćwiczyliśmy NIE ZMIENIAJĄ WARTOŚCI W TABELI a jedynie modyfikują je przy wyświetlaniu dla uzyskania oczekiwanego wyniku – niby oczywiste ale warto wspomnieć. :)

Możesz zostawić komentarz lub wysłać sygnał trackback ze swojego bloga.

Odpowiedzi: 7 do wpisu “Projekcja – klauzula SELECT – operacje na jednej tablicy”

  1. L.K. pisze:

    fajna sprawa ten samouczek czekam na wiecej

  2. Basia pisze:

    Mnie też się podoba. Z niecierpliwością czekam na więcej :)

  3. Michał pisze:

    cieszę się, że już działa… może przydałaby się jakaś baza do potrenowania ;)

  4. ziótek pisze:

    szkoda tylko, że mając kwotę netto (pomniejszoną o podatek) wyliczenie kwoty brutto nie wygląda tak jak napisał to autor :) przykładowo od 100zł wyliczamy 17% mamy 83zł i jeśli chcemy wrócić do stówki to według tekstu wyjdzie 83+83*17/100 ;) gdzie się podziały 3 złote?:P

  5. JAcek pisze:

    no to trochę czepialstwo geeka :> Wiadomo, że nie da się wyliczyć brutto z netto nie znając wartości tych 17% :) Chodzi tu raczej o zapis działań i możliwości projekcji a nie laboratoryjne sensy obliczeń.

  6. Jacek pisze:

    chociaż można by na poczet kursu dodać możliwość z proporcjami :)
    wtedy zapis wyglądać będzie tak:

    (netto * 100) / 83 as brutto

  7. Xartas pisze:

    Wiem, że to stary artykuł… i choć bardzo dobry, to muszę się przyczepić:
    „prostrzych”??? serio?

Zostaw odpowiedź

Subskrybuj kanał RSS Follow me on Twitter!