sql2.pdf

(224 KB) Pobierz
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
1
JĘZYK SQL - powtórzenie
Uwaga
W zamieszczonych poniżej przykładach zapytań wykorzystane zostaną dwie przykładowe
tabele: pracownicy i placowki. Zawartość tabel można obejrzeć na stronie (część
MATERIAŁY -> NIEZBĘDNIK -> tabele ) . Skrypt do ich generowania znajduje się w tej
samej części (plik tabele.pdf ) oraz na końcu wykładu. Wykorzystywaną bazą danych jest
ORACLE 10g.
Wyświetlenie informacji o budowie tabeli
Aby wyświetlić informacje o budowie tabeli (liczbie i nazwach jej kolumn, przypisanych im
typach danych oraz nałożonych więzach NOT NULL) należy użyć polecenia DESCRIBE .
DESCRIBE nazwa_tabeli;
lub krócej
DESC nazwa_tabeli;
Przykład 1.
DESC pracownicy;
Nazwa
Wartość NULL?
Typ
ID_PRACOWNIKA
NOT NULL
NUMBER(2)
IMIE
NOT NULL
VARCHAR2(15)
NAZWISKO
NOT NULL
VARCHAR2(30)
PLEC
NOT NULL
CHAR(1)
DATA_URODZENIA
NOT NULL
DATE
PESEL
NOT NULL
VARCHAR2(11)
DATA_ZATRUDNIENIA
NOT NULL
DATE
ZAWOD
NOT NULL
VARCHAR2(25)
PENSJA
NOT NULL
NUMBER(7,2)
DODATEK
NUMBER(7,2)
ID_SZEFA
NUMBER(2)
ID_PLACOWKI
NOT NULL
NUMBER(2)
Aleksandra Stasiak © 2008
852490213.021.png 852490213.022.png 852490213.023.png 852490213.024.png 852490213.001.png 852490213.002.png 852490213.003.png 852490213.004.png 852490213.005.png 852490213.006.png 852490213.007.png 852490213.008.png 852490213.009.png 852490213.010.png 852490213.011.png 852490213.012.png 852490213.013.png 852490213.014.png 852490213.015.png 852490213.016.png
2
DESC placowki;
Nazwa
Wartość NULL?
Typ
ID_PLACOWKI
NOT NULL
NUMBER(2)
NAZWA
NOT NULL
VARCHAR2(20)
MIEJSCOWOSC
NOT NULL
VARCHAR2(20)
KOD
VARCHAR2(6)
ULICA
NOT NULL
VARCHAR2(30)
NR_ULICY
VARCHAR2(8)
Więz NOT NULL sprawia, iż wartość NULL nie jest w danej kolumnie dozwolona (przy
wprowadzaniu nowego wiersza pole we wskazanej kolumnie nie może pozostać
niewypełnione).
Uwagi
Nazwy tabel i kolumn:
–mogą składać się z co najwyżej 30 znaków,
–mogą zawierać litery, cyfry i znaki podkreślenia,
–muszą rozpoczynać się od litery.
Wielkość liter jakiej użyjemy przy podawaniu nazw kolumn lub tabel nie ma znaczenia, o ile
przy ich tworzeniu nie używaliśmy znaków cudzysłowu. Używanie znaków cudzysłowu przy
tworzeniu tabel, a co za tym idzie zmuszenie systemu do rozróżniania wielkości liter
w nazwach, nie jest zalecane, gdyż może łatwo prowadzić do błędów i nieporozumień.
W wewnętrznym słowniku danych nazwy tabel i kolumn są zapisywane za pomocą wielkich
liter.
Wielkość liter będzie miała znaczenie w momencie wyszukiwania danych odpowiadających
podanym przez użytkownika łańcuchom znakowym.
W nazwach kolumn i tabel nie należy używać polskich znaków.
Podstawowe typy danych
Podstawowymi typami służącymi do przechowywania łańcuchów znakowych są
CHAR(n) , gdzie n oznacza długość łańcucha znakowego (n<= 2000, domyślnie
n=1),
VARCHAR2(n) , gdzie n oznacza maksymalną długość łańcucha znakowego
(n<=4000).
Uwaga
Ciągi znaków typu CHAR(n) mają zawsze stałą długość n. W przypadku wpisania przez
użytkownika mniejszej niż n liczby znaków, system automatycznie uzupełnia go do długości
n spacjami. Typ VARCHAR2(n) jest ciągiem znaków o zmiennej długości i przechowuje
dokładnie tyle znaków, ile zostało wprowadzonych przez użytkownika.
Do p rzechowywania dat służy typ DATE a do przechowywania danych numerycznych typ
NUMBER(n, m) (gdzie n oznacza liczbę wszystkich użytych cyfr, zaś m - liczbę cyfr po
przecinku).
Aleksandra Stasiak © 2008
852490213.017.png 852490213.018.png 852490213.019.png 852490213.020.png
3
Klucz główny i klucze obcy
Dla każdej tabeli musi zostać określony klucz główny , czyli „zbiór złożony z jednej lub
więcej kolumn, w których wartości jednoznacznie identyfikują cały wiersz” (wybrany
spośród kluczy jednoznacznych). W tabeli może istnieć wiele kluczy jednoznacznych lecz
określa się zawsze jeden klucz główny.
Klucz obcy to „zbiór złożony z jednej lub więcej kolumn, których wartości występują jako
wartości ustalonego klucza głównego lub jednoznacznego w tej samej lub innej tabeli i są
interpretowane jako wskaźniki do wierszy w tej drugiej tabeli”.
Wybieranie danych z bazy - polecenie SELECT
Do wybierania danych z tabel umieszczonych w bazie danych służą zapytania, które
w najprostszym przypadku mają postać
SELECT [DISTINCT] nazwa_kolumny_1, nazwa_kolumny_2, ...
FROM nazwa_tabeli
[WHERE warunek];
Uwaga
Nawiasy kwadratowe [] oznaczają elementy opcjonalne.
Grupy słów związane z konkretnymi słowami kluczowymi nazywamy klauzulami . Dla
uzyskania większej przejrzystości i czytelności zapytania klauzule są zazwyczaj umieszczane
w osobnych linijkach i wyróżniane wielkimi literami (nie ma to znaczenia dla systemu, ale
przyjęcie pewnych konwencji zdecydowanie ułatwia pracę informatykowi).
Tylko dwie spośród wszystkich klauzul są obowiązkowym elementem każdego zapytania. Są
to: klauzula SELECT i klauzula FROM. Klauzula FROM wskazuje tabelę lub tabele,
z których wybierane będą dane, a klauzula SELECT pozwala wskazać kolumny i/lub
wyrażenia, które mają zostać wyświetlone.
Zastosowanie na liście SELECT słowa kluczowego DISTINCT powoduje usunięcie
z wyniku powtarzających się wierszy.
Omówiona dalej opcjonalna klauzula WHERE pozwala na wybór tylko tych wierszy tabeli,
które spełniają zamieszczony w klauzuli warunek.
Przykład 2.
SELECT id_pracownika, imie, nazwisko
FROM pracownicy;
Uwaga
Każde zapytanie, tak jak i każde polecenie języka SQL, powinno być zakończone średnikiem.
Poprzedzanie nazw kolumn nazwą tabeli
Można spotkać się z konwencją, w której nazwy kolumn w zapytaniu są poprzedzone nazwą
tabeli, z której pochodzą lub też aliasem - nową (zazwyczaj krótszą) nazwą nadaną tabeli na
czas wykonania zapytania. Nie jest to konieczne, dopóki wybieramy dane pochodzące tylko
z jednej tabeli. Poprzedzanie kolumn nazwą tabeli lub nadanym jej aliasem będzie niezbędne
w przypadku, gdy wybieramy dane z kilku tabel i interesujące nas kolumny w obu tabelach
mają taką samą nazwę oraz w przypadku podzapytań skorelowanych.
Aleksandra Stasiak © 2008
4
Poprzedzanie nazw kolumn nazwą tabeli lub zastępującym ją na czas zapytania aliasem nawet
wtedy, gdy nie jest to konieczne, świadczy o przyjętej przez autora konwencji mającej na celu
ujednolicenie stylu zapisu wszystkich zapytań i poprawienie ich czytelności.
Przykład 3.
SELECT pracownicy.id_pracownika, pracownicy.imie,
pracownicy.nazwisko
FROM pracownicy;
SELECT p.id_pracownika, p.imie, p.nazwisko
FROM pracownicy p;
Uwaga
Jeśli w zapytaniu zdecydujemy się na nadanie tabeli aliasu, to nie możemy już poprzedzać
kolumny pierwotną nazwą (jest ona na czas zapytania przykryta aliasem).
Przykład błędu
SELECT pracownicy.id_pracownika, p.imie, p.nazwisko
FROM pracownicy p;
SELECT pracownicy.id_pracownika, p.imie, p.nazwisko
*
BŁĄD w linii 1:
ORA-00904: "PRACOWNICY"."ID_PRACOWNIKA": niepoprawny
identyfikator
Możemy w takim przypadku, o ile oczywiście nie będzie to powodowało braku
jednoznaczności, nadal używać samych nazw kolumn.
SELECT id_pracownika, p.imie, p.nazwisko
FROM pracownicy p;
Wybór wszystkich danych z tabeli
W przypadku wybierania wszystkich kolumn z danej tabeli można posłużyć się zapisem
skróconym
SELECT *
FROM nazwa_tabeli;
Perspektywa USER_TABLES
Wykonanie zapytania
SELECT *
FROM USER_TABLES;
spowoduje wyświetlenie informacji dotyczących wszystkich tabel znajdujących się na koncie
użytkownika bazy danych.
Aleksandra Stasiak © 2008
5
Lista SELECT
W miejscu nazwy kolumny na liście SELECT może wystąpić stała, wartość liczbowa, funkcja
lub wyrażenie zbudowane za pomocą operatorów arytmetycznych +, -, *, /.
Przykład 4.
Dla każdego pracownika wypisz jego imię, nazwisko oraz roczną pensję podstawową.
SELECT imie, nazwisko, 12*pensja
FROM pracownicy;
Wyrażeniom występującym na liście SELECT można nadawać aliasy (proste lub ograniczone
- ujęte znakami cudzysłowu), które odtąd będą wyświetlane w nagłówku kolumny w wyniku.
W przypadku aliasów prostych (tzn. jednowyrazowych) użyte słowo zostanie wyświetlone
wielkimi literami. Aliasy wielowyrazowe muszą być ujęte w znaki cudzysłowu, a wielkość
liter użyta przy wyświetlaniu będzie identyczna z wielkością użytą przez użytkownika.
Przykład 5.
SELECT imie, nazwisko, 12*pensja zarobki
FROM pracownicy;
SELECT imie, nazwisko, 12*pensja "Roczna pensja"
FROM pracownicy;
Uwaga
Alias nadany kolumnie może być poprzedzony nieobowiązkowym słowem kluczowym AS.
Przykład 6.
SELECT imie, nazwisko, 12*pensja AS zarobki
FROM pracownicy;
Operator konkatenacji, czyli łączenia łańcuchów znakowych
Łańcuchy znakowe możemy łączyć ze sobą używając operatora konkatenacji || (lub funkcji
CONCAT - zobacz plik funkcje.pdf ) .
Przykład 7.
W jednej kolumnie wypisz imię i nazwisko pracownika.
SELECT imie || ' ' || nazwisko
FROM pracownicy;
Przykład 8.
W jednej kolumnie wypisz nazwisko pracownika, tekst: „pracuje jako” i zawód pracownika.
SELECT nazwisko || ' pracuje jako ' || zawod
FROM pracownicy;
Funkcja NVL i wyrażenia zawierające wartość NULL
Nieco kłopotów sprawia użytkownikowi bazy danych wartość NULL.
Aleksandra Stasiak © 2008
Zgłoś jeśli naruszono regulamin