MINI KURS SQL

 Wprowadzenie do SQL

SQL - Structured Query Language -strukturalny język zapytań

• Światowy standard przeznaczony do definiowania, operowania i sterowania danymi w relacyjnych bazach danych

•Powstał w firmie IBM pod koniec lat 70-tych

•Występuje w produktach większości firm produkujących oprogramowanie do zarządzania bazami danych

• Polecenia SQL mają postać podobną do zdań w języku angielskim

• Pomimo prób standaryzacji istnieje szereg różnych dialektów SQL

• SQL używany jest jako standardowe narzędzie umożliwiające dostęp do danych w różnych środowiskach, z różnym sprzętem komputerowym i różnymi systemami operacyjnymi

•Język SQL jest niewrażliwy na rejestr czcionki, czyli wielkie i małe litery nie są rozróżniane

• SQL zapewnia obsługę:

– zapytań - wyszukiwanie danych w bazie

– operowania danymi - wstawianie, modyfikowanie i usuwanie

– definiowania danych - dodawanie do bazy danych nowych tabel

– sterowania danymi - ochrona przed niepowołanym dostępem

•Użytkownik określa operacje jakie mają być wykonane nie wnikając w to, jak mają być wykonane

• Najprostsza postać zapytań w SQL służy do wybierania rekordów pewnej tabeli, które spełniają określony w zapytaniu warunek

• Taki typ zapytania stanowi odpowiednik operatora selekcji w algebrze relacyjnej

• Takie najprostsze zapytanie, jak zresztą prawie wszystkie zapytania w tym języku, konstruuje się za pomocą trzech słów kluczowych: SELECT, FROM i WHERE

 

Podstawowe klauzule w SQL

SELECT nazwy_kolumn

FROM nazwa_tabeli

WHERE warunek;

• Pozwalają na wybranie z tabeli określonych kolumn i rekordów spełniających ustalone warunki czyli pozwalają na realizację rzutowania i selekcji

• Warunek formułowany jest jako złożone wyrażenie porównania

Przykładowa tabela o nazwie NAZWISKA zawiera kolumny:

–NUMER

–IMIE

–NAZWISKO

–STANOWISKO

–PENSJA

–MIASTO

SELECT - podstawowa klauzula SQL - używana do wyszukiwania danych w tabeli. Występuje wraz z klauzulą FROM

SELECT * FROM nazwa-tabeli;

• Gwiazdka oznacza, że należy wyszukać wszystkie kolumny (pola czyli atrybuty) tabeli

• Jest to przykład instrukcji wybierającej całą tabelę

•W klauzuli SELECT zostają określone nazwy kolumn, których wartości, z rekordów spełniających warunek zapytania (formułowany przy pomocy klauzuli WHERE), są dołączane do odpowiedzi

• Klauzula FROM służy do określenia tabeli, której dotyczy zapytanie

Klauzula WHERE

• W klauzuli WHERE formułuje się warunek, który odpowiada warunkowi wyboru (selekcji) w algebrze relacyjnej i który określa ograniczenia, jakie mają spełniać rekordy, aby zostać wybrane w danym zapytaniu. Jeżeli rekord spełnia te ograniczenia to zostaje dołączony do tabeli wynikowej

Postać zapytania

SELECT * FROM nazwa-tabeli WHERE warunek;

•Klauzula WHERE pozwala na wybranie z tabeli tych wierszy, które spełniają określone warunki np.

SELECT * FROM NAZWISKA WHERE STANOWISKO = ‘URZEDNIK’;

• Dla podanego przykładu z tabeli zostaną wybrane tylko te rekordy, w których w polu STANOWISKO jest wpisane ‘URZEDNIK’

Formułowanie warunku

•Po  słowie kluczowym WHERE występuje wyrażenie warunkowe

• Do zapisu porównywania wartości w języku SQL służy sześć operatorów:

– równy  =

– nierówny  <> lub !=

– mniejszy  <

– większy  >

– mniejszy lub równy  <=

– większy lub równy  >=

•W wyrażeniu mogą występować stałe oraz nazwy kolumn tabel wymienionych w klauzuli FROM

•Dla wartości numerycznych można budować wyrażenia arytmetyczne korzystając z operatorów + - * / i nawiasów ()

•Stałe tekstowe w SQL są ujmowane w pojedyncze cudzysłowy ‘Przykład tekstu’

• W wyniku porównania powstaje wartość logiczna TRUE (prawda) lub FALSE (fałsz)

•Wartości logiczne można łączyć w wyrażenia logiczne za pomocą operatorów logicznych AND (koniunkcja czyli i), OR (alternatywa czyli lub) i NOT (negacja czyli nie);

• Priorytet operatorów wykorzystywanych w budowie wyrażeń:

operatory porównania, NOT, AND, OR

• Porównywanie tekstów - dwa teksty są równe, jeśli występują w nich kolejno te same znaki

•Przy teście „nierównościowym” tekstów, tzn. przy wykonywaniu porównań takich jak < lub >=, o wartości porównania decyduje, czy kolejne znaki z tekstu z lewej strony są alfabetycznie wcześniejsze, czy dalsze w stosunku do znaków z tekstu umieszczonego po prawej stronie wyrażenia

•Przykłady

Adamski > Adamowicz

Adam < Adamowicz

•Wartości NULL nie podlegają żadnym operacjom porównania, gdyż jest ona traktowana jako wartość nieznana

• SQL umożliwia testowanie pól w poszukiwaniu wartości NULL

•Użycie w klauzuli WHERE zwrotu IS NULL jest wykorzystywane do sprawdzania czy pole zawiera tę wartość

• Zamiast standardowego operatora porównania pojawia się słowo IS

•Słowo NULL nie jest zawarte w cudzysłowie

•Można dokonać przeszukania danych w celu wybrania obiektów posiadających wartości

• W tym celu używa się wyrażenia IS NOT NULL

Wykonywanie obliczeń na danych

• Jeżyk SQL pozwala na wykonywanie obliczeń na danych i pokazywanie ich wyników w postaci wykonanych zapytań

• Wykonanie obliczeń polega na zastąpieniu pozycji z listy nazw kolumn (w klauzuli SELECT) przez odpowiednie wyrażenia

• Wyrażenie nie musi koniecznie zawierać nazw kolumn, można używać tylko liczb, albo wyrażeń algebraicznych lub łańcuchów znaków

•Postać polecenia:

SELECT 'Tekst objasniajacy', Stanowisko, Pensja*2

FROM NAZWISKA

WHERE Pensja >= 900;

Użycie słowa kluczowego AS

• W zapytaniu można użyć słowa kluczowego AS, aby przypisać nazwy kolumnom i wyrażeniom (zamiast standardowych Wyr1, Wyr2)

• Nazwy te poprawiają czytelność danych zwracanych przez zapytanie oraz pozwalają odwołać się do nich przez nazwę

• Składnia polecenia wygląda następująco:

SELECT 'Tekst objasniajacy' AS KOMENTARZ,

Stanowisko, Pensja*2 AS PODWYZKA

FROM NAZWISKA

WHERE Pensja >= 900;

Wykonywanie obliczeń w klauzuli WHERE

• Podobnie jak można wykonywać obliczenia na danych wybranych z tabeli, można również wykonywać obliczenia w klauzuli WHERE, aby pomóc w filtrowaniu rekordów

•Przykład polecenia

SELECT 'Tekst objasniajacy' AS KOMENTARZ,

Stanowisko, Pensja*2 AS PODWYZKA

FROM NAZWISKA

WHERE Pensja*2 >= 2*900;

Jest oczywiste, że wyniki polecenia będą takie same jak poprzednio.

 

Cechą charakterystyczną relacyjnych baz danych jest to, że kolejność kolumn i wierszy nie jest istotna - nie są one traktowane sekwencyjnie

• Można wybierać rekordy z bazy danych w dowolnym porządku

• Domyślnie pojawiają się w kolejności, w jakiej były wprowadzone

• Jednak często przeglądając rekordy chcemy te kolejność określić, np. względem zawartości jednej z kolumn

Sortowanie wyników zapytań

• Klauzula ORDER BY jest wykorzystywana do sortowania wyników

• Wyniki zapytania będą uporządkowane względem zawartości kolumny (lub kolumn), które określimy w klauzuli ORDER BY

• Sortowanie można przeprowadzić zarówno alfabetycznie jak i względem wartości numerycznych oraz kolumn zawierających dane w formacie Date

• Kolejność kolumn nie zależy od kolumny używanej do sortowania wyników zapytań -  kolumny pozostają zawsze w tym samym porządku, bez względu na kolumnę, której używamy w klauzuli ORDER BY

• Dodanie do poprzedniego polecenia:

ORDER BY Stanowisko;

• spowoduje, że wyniki zostaną posortowane według kolumny Stanowisko (w porządku rosnącym)

• Wyniki zapytań mogą być posortowane zarówno rosnąco (opcja domyślna), jak i malejąco

• Dla sortowania malejącego, używamy w klauzuli ORDER BY słowa kluczowego DESC (dla rosnącego słowa ASC – normalnie jest pomijane)

Operatory logiczne w klauzuli WHERE

• Operacje wykonywane w klauzuli WHERE podlegają zasadom logiki boolowskiej - wynik przyjmuje zawsze jedna z wartości: prawda lub fałsz

• W przypadku, gdy wynik wyrażenia to prawda, wiersz jest wybierany, w przeciwnym przypadku – pomijany

•Operator AND zwraca wynik prawda, gdy wyrażenia po obu stronach operatora są prawdziwe - jeżeli choć jedno z nich jest nieprawdziwe, wtedy całe wyrażenie zwraca jako wynik wartość fałsz 

•Operator OR zwraca wynik prawda, gdy jedno z wyrażeń po prawej lub po lewej stronie operatora jest prawdziwe - gdy oba wyrażenia są prawdziwe, wynik tez przyjmuje wartość prawda

• Operatora NOT używamy do zaprzeczenia wartości wyrażenia

• Wielokrotne operatory logiczne mogą być wykorzystywane do utworzenia złożonych instrukcji WHERE, w których wykorzystywanych jest kilka wyrażeń jednocześnie

•Formułując takie wyrażenia należy pamiętać o priorytecie operatorów w celu zapewnienia poprawności obliczenia wartości wyrażenia

Klauzula IN

• Wzrost złożoności zapytań powoduje trudności z ustaleniem kolejności wykonywanych operacji – konieczne staje się stosowanie nawiasów wykorzystywanych do grupowania wyrażeń w klauzuli WHERE

• W poprzednim przykładzie nawiasy ustalają kolejność w ten sposób, ze najpierw wykonywane są instrukcje połączone operatorem OR, a następnie wykonana jest operacja z operatorem AND

• Język SQL dysponuje kilkoma dodatkowymi elementami, które znacznie upraszczają zapytania z wieloma operatorami logicznymi

• Klauzula IN zastępuje wiele operatorów OR w instrukcjach sprawdzających, czy wybrana grupa wartości znajduje się w kolumnie

Operator N określa, czy wartość testowana jest identyczna z przynajmniej jedna z wartości z listy

Przykład ilustruje jak można uprościć poprzednie zapytanie:

SELECT Imie, Nazwisko, Pensja, Miasto

FROM NAZWISKA

WHERE Miasto IN ('Gdansk', 'Gdynia') AND Pensja IS NOT NULL

ORDER BY Nazwisko DESC;

NOT IN

• Wartość logiczna wyrażenia zawartego wewnątrz klauzuli IN można zaprzeczyć operatorem NOT

• Klauzula IN wybiera wszystkie wiersze, w których wartość testowana jest równa jednej z wartości umieszczonych na liście

• NOT IN wybiera te wiersze, w których wartość testowana jest różna od każdej wartości z listy

• Przykład zapytania wybierającego wszystkich pracowników nie mieszkających w Gdańsku ani w Gdyni, którzy mają ustalone pensje:

SELECT Imie, Nazwisko, Pensja, Miasto

FROM NAZWISKA

WHERE Miasto NOT IN ('Gdansk','Gdynia') AND Pensja IS NOT NULL

ORDER BY Nazwisko DESC;

• Klauzula NOT IN może być zastąpiona przez operator AND

SELECT Imie, Nazwisko, Pensja, Miasto

FROM NAZWISKA

WHERE Miasto <> 'Gdansk' AND Miasto <> 'Gdynia' AND

Pensja IS NOT NULL

ORDER BY Nazwisko DESC;

Klauzula BETWEEN

• Klauzule BETWEEN i jej zaprzeczenie, NOT BETWEEN, wykorzystujemy do sprawdzenia, czy wartość należy lub nie należy do określonego przedziału wartości

• Klauzula BETWEEN służy do sprawdzenia, czy wartość należy do podanego zakresu z uwzględnieniem wartości granicznych

• Może być zastąpiona przez dwa porównania połączone operatorem AND

• Przykład zapytania wyszukującego wszystkich pracowników których pensje mieszczą się w przedziale 1100-3000 zł, posortowane rosnąco wg pensji:

SELECT Imie, Nazwisko, Pensja, Miasto

FROM NAZWISKA

WHERE Pensja BETWEEN 1100 AND 3000

ORDER BY Pensja;

• Inaczej sformułowany warunek:

WHERE Pensja >= 1100

AND Pensja <= 3000

NOT BETWEEN

• Sprawdza czy podana wartość znajduje się poza określonym przedziałem

• Działanie tej instrukcji może być zastąpione dwoma porównaniami połączonymi instrukcja OR

• Sprawdzając czy liczba znajduje się pomiędzy innymi liczbami, logiczne wydaje się, ze musi być ona większa od dolnej wartości i mniejsza od górnej wartości.

• Przykład zapytania wyszukującego pracowników mających pensje niższe od 1100 i wyższe od 3000 zł:

SELECT Imie, Nazwisko, Pensja, Miasto

FROM NAZWISKA

WHERE Pensja NOT BETWEEN 1100 AND 3000

ORDER BY Pensja;

• Inaczej sformułowany warunek:

WHERE Pensja < 1100

OR Pensja > 3000

BETWEEN i inne typy danych

• BETWEEN stosuje się również, zęby sprawdzić czy podana data i czas należą do podanego zakresu

• BETWEEN można stosować również przy operacjach na łańcuchach, podobnie jak zwykle operatory porównania

• Postać zapytania wybierającego pracowników, których nazwiska zaczynają się od liter między ‘D’ a ‘N’:

SELECT Imie, Nazwisko, Pensja, Miasto

FROM NAZWISKA

WHERE Nazwisko BETWEEN 'D' AND 'N'

ORDER BY Pensja;

• Jak widać w MS Access z lewej jest warunek >= a z prawej <

Złożone klauzule WHERE z operatorem LIKE

• Działa na kolumnach zawierających wartości łańcuchowe.

•Operator LIKE sprawdza czy wartość tekstowa odpowiada podanemu wzorcowi, umożliwia więc wykonywanie częściowych porównań, takich jak „zaczynający się od tekstu”, „kończący się na tekście”, lub „zawierający tekst”

• Tworząc wzorce stosuje się znaki wieloznaczne:

% - zastępuje sekwencję dowolnych znaków o długości n (gdzie n może być zerem)

_ - odpowiada jednemu znakowi w przeszukiwanym tekście;

W Accessie oznaczenia te są inne:

* - zastępuje sekwencję dowolnych znaków o długości n (gdzie n może być zerem)

? – odpowiada jednemu znakowi

Ogólna postać polecenia z operatorem LIKE

WHERE tekst LIKE wzorzec

Przykład operatora LIKE

•Postać zapytania wyszukującego wszystkie rekordy, w których w polu Nazwisko występuje sekwencja znaków ‘no’:

SELECT Imie, Nazwisko, Pensja, Miasto

FROM NAZWISKA

WHERE Nazwisko LIKE '*no*'

ORDER BY Nazwisko;

•Postać zapytania, które wyszuka wszystkie rekordy, gdzie druga litera nazwiska jest „o”:

SELECT Imie, Nazwisko, Pensja, Miasto

FROM NAZWISKA

WHERE Nazwisko LIKE '?o*'

ORDER BY Nazwisko;

• Operator LIKE zmniejsza wydajność realizacji zapytań

Funkcje agregujące

• W SQL dostępnych jest kilka funkcji agregujących działających na grupie wartości zwracanych przez zapytanie a nie na pojedynczej wartości pola

• Na przykład możemy w tabeli policzyć liczbę wierszy spełniających określone kryteria lub można wyliczyć wartość średnia dla wszystkich wartości z wybranej kolumny

• Funkcje te działają na wszystkich wierszach w tabeli, na pewnej grupie wierszy wybranej klauzula WHERE lub na grupach danych wybranych klauzula GROUP BY

• Funkcja COUNT(nazwa_kolumny) czyli licznik;

• Funkcja ta zlicza ilość wierszy w zapytaniu

Jeżeli chcemy znać liczbę wierszy zwróconych przez zapytanie, najprościej użyć funkcji w postaci COUNT(*)  (gwiazdka – wszystkie kolumny tabeli)

• Są tego dwa powody:

– po pierwsze pozwalamy optymalizatorowi bazy danych wybrać kolumnę do wykonania obliczeń, co czasem nieznacznie podnosi wydajność zapytania

– po drugie, nie musimy się martwic o wartości NULL zawarte w kolumnie oraz o to, czy kolumna o podanej nazwie w ogóle istnieje.

Tworzenie nowej tabeli

• Do zdefiniowania nowej tabeli używamy instrukcji CREATE TABLE,

której najprostsza instrukcja wygląda następująco:

CREATE TABLE Nazwa_tabeli

(nazwa_kolumny typ_danych[(rozmiar)],

nazwa_kolumny typ_danych[(rozmiar)],

...);

• Każda kolumna musi mieć określony typ danych

• Dla większości typów danych wymagane jest także określenie rozmiaru

• W instrukcji CREATE TABLE istnieje możliwość zdefiniowania klucza głównego, określenie relacji z innymi tabelami, wprowadzenie ograniczeń na wartości kolumn itp.

• Typy danych w definiowaniu tabel w SQL

• Do zdefiniowania tabeli konieczne jest podanie typu danych

• Nie można stosować nazw typów używanych w Accessie, takich jak:

Autonumerowanie, Tekst, Nota, Liczba, Data/godzina, Walutowy, Tak/Nie, Obiekt OLE, Hiperlacze

Typy danych

• Typ danych determinuje nie tylko sposób przechowywania danych na dysku, ale co ważniejsze, sposób interpretacji tych danych

• Niemniej ważne są wymagania dotyczące zajmowania pamięci

• Marnotrawstwem byłoby zarezerwowanie 255 bajtów dla pola, które wykorzystuje tylko 2 bajty, a z drugiej strony zarezerwowanie 5 bajtów dla numeru telefonu, może nie być wystarczające

• Relacyjne bazy danych dostarczają bardzo bogaty zestaw typów danych

• Istnieją typy danych tekstowych, liczby, typy określające czas oraz obiekty, dane binarne czy duże teksty

• Każda baza danych posiada swoje własne zestawy typów danych, mogące się różnic pomiędzy sobą nazwami

• Niektóre systemy baz danych udostępniają również podtypy, jak np. dla typu liczbowego, może to być liczba całkowita, zmiennoprzecinkowa czy waluta

• Większość baz danych obsługuje podstawowe typy, choć pomiędzy różnymi produktami nie ma pełnej zgodności

• Cztery kategorie typów: dane łańcuchowe, numeryczne, określające czas i duże obiekty

• Dane łańcuchowe mogą przechowywać właściwie każdy typ danych z zastrzeżeniem, ze dane te są traktowane tylko jako lancach znaków

• Dane numeryczne i określenia czasu umożliwiają wykonywanie działań matematycznych oraz innych funkcji do przetwarzania danych

• Duże obiekty, śluzą do gromadzenia dużych ilości informacji - są one traktowane odmiennie od innych typów danych, np. nie można porównywać takich obiektów

• Ważna różnica miedzy typami danych polega na sposobie traktowania ich przez jeżyk SQL - dane łańcuchowe, określenia czasu i duże obiekty muszą być w instrukcjach SQL zawarte w pojedynczych cudzysłowach, natomiast dane numeryczne nie są zapisywane w cudzysłowach

• W większości baz danych mamy do dyspozycji dwa rodzaje typów łańcuchowych o ustalonej długości i o zmiennej długości

• Ustalona długość powoduje zawsze rezerwacje takiej samej ilości pamięci, bez względu na wymagania danych, natomiast zmienna długość zużywa tylko tyle pamięci, ile jest potrzebne dla konkretnej wartości

Typy danych – dane znakowe

• Typy łańcuchowe

• CHAR jest typem danych o ustalonej długości - CHAR(wymiar)

• W polu typu CHAR miejsce nie zużyte przez dane jest automatycznie uzupełniane spacjami 

• VARCHAR jest typem danych o zmiennej długości – VARCHAR(wymiar)

• Przy deklaracji tego typu danych określamy maksymalna długość

• Różnica między VARCHAR(50) a CHAR(50) polega na tym, ze pole o zmiennej długości dostosowuje potrzebna pamięć do rzeczywistej długości łańcucha danych

• W przypadku, gdy chcemy zapamiętać większa ilość danych znakowych mamy do dyspozycji specjalny typ dla dużych obiektów tekstowych

• W Oracle jest to CLOB – Character Large Object a w Microsoft SQL

Server jest typ TEXT.

• W Accessie jest to typ MEMO

Typy danych - dane numeryczne

• Czasami dane numeryczne przechowuje się w polu znakowym, np. kod pocztowy, czy numer telefonu lepiej zapamiętać w polu tekstowym, mimo, że składają się z cyfr

• Większość baz danych dostarcza dwóch typów numerycznych, jeden dla liczb całkowitych, drugi dla zmiennoprzecinkowych

• Czasami mamy jeszcze bardziej szczegółowe jak MONEY, który automatycznie przydziela dwa miejsca po przecinku i znak waluty

• Liczba cyfr obsługiwana przez pole numeryczne może się różnic w zależności od bazy danych, a w wielu przypadkach można o tym zadecydować przy definicji, podobnie jak w typie CHAR

Typ danych Definicja

DECIMAL Liczba zmiennoprzecinkowa

FLOAT Liczba zmiennoprzecinkowa

INTEGER(rozmiar) Liczba całkowita o określonej długości

MONEY Liczba posiadająca dwie pozycje dziesiętne

NUMBER Standardowa liczba zmiennoprzecinkowa

 Kolejny typ danych określa datę i czas - w Accessie jest to typ DATE

 

Określanie kluczy

•Tworząc tabele, można zdefiniować zarówno klucz główny jak i klucze kandydujące

•Słowo UNIQUE śluzy do określenia, która kolumna (lub grupa kolumn) musi być unikalna i jest przez to kluczem kandydującym

• Użycie ograniczenia UNIQUE powoduje, ze próba powtórzenia danych w tych kolumnach będzie przez bazę danych powstrzymana

• Definicja klucza głównego znajduje się po definicjach pól, jeżeli klucz główny składa się z kilku pól podaje się listę nazw pól oddzielona przecinkami

• Zdefiniowanie klucza głównego wymaga użycia klauzuli PRIMARY KEY

• Oczywiście w tabeli może być zidentyfikowany jeden klucz główny

• Kolejny przykład przedstawia polecenie tworzące tabelę o nazwie NOWA zawierającą osiem pól różnych typów oraz zdefiniowany klucz główny

Przykład tworzenia nowej tabeli

•Postać polecenia, tworzącego tabelę o nazwie NOWA, w której kluczem głównym jest pole Nr_ident, a kluczem kandydującym jest pole Telefon:

CREATE TABLE NOWA definicja nazwy tabeli

(Nr_ident INTEGER, pole typu całkowitego

Zawód CHAR(20), pole znakowe o stałej długości

Telefon VARCHAR(15), pole znakowe o zmiennej długości

Data_rozp DATE, pole zapamiętujące datę i czas

Premia MONEY, pole walutowe

Prawo_jazdy LOGICAL, pole typu logicznego

Uwagi MEMO, pole dużego obiektu znakowego

UNIQUE (Telefon), definicja klucza kandydującego

PRIMARY KEY(Nr_ident)) definicja klucza głównego

• Można definiować klucze również w linii definiującej kolumnę

• np.: (Nr_ident INTEGER PRIMARY KEY,

• Klucze obce - klauzula REFERENCES służy do ustalenia relacji pomiędzy tabelami

Przykład tworzenia nowej tabeli

• Odrzucanie wartości NULL - zapobiega wprowadzaniu wartości NULL do kolumny. Użycie NOT NULL w definicji kolumny wymusza podanie wartości dla takiej kolumny przy każdym wprowadzaniu nowego wiersza

• Zapobiega to zmianie wartości na NULL przy aktualizacji danych w tabeli

• Taki sam efekt daje zdefiniowanie klucza głównego.

• Postać polecenia tworzącego tabelę z ustaleniem relacji miedzy polem

Nr_ident z tabeli NOWA z polem Numer z tabeli NAZWISKA oraz zabezpieczeniem przed wartościami NULL dla pól Zawód i Data_rozp:

  CREATE TABLE NOWA

  (Nr_ident INTEGER PRIMARY KEY REFERENCES Nazwiska(Numer),

  Zawód CHAR(20) NOT NULL,

  Telefon VARCHAR(15),

  Data_rozp DATE NOT NULL,

  Premia MONEY,

  Prawo_jazdy LOGICAL,

  Uwagi MEMO);

Tworzenie, zmienianie i usuwanie rekordów

• Dane wprowadza się przy pomocy instrukcji INSERT

• Do wprowadzania zmian służą instrukcje UPDATE i DELETE (do kasowania)

• Do usuwania tabeli z bazy danych służy instrukcja DROP

• Instrukcja INSERT - jest to jedyna instrukcja jeżyka SQL służąca do dopisywania nowych rekordów do tabel

• Podstawowa struktura instrukcji INSERT jest następująca:

INSERT INTO nazwa_tabeli

[(lista kolumn)]

VALUES

(lista wartosci)

• Nazwa_tabeli określa tabele, do której wprowadza się nowy rekord

• W przypadku, gdy wprowadza się wartości tylko dla niektórych kolumn, należy podać nazwy kolumn, do których mają być wprowadzone wartości

• Pominiecie listy kolumn w instrukcji INSERT wymusza podanie wartości dla wszystkich kolumn w tabeli

• Postać polecenia wprowadzającego pełny rekord danych

  INSERT INTO NOWA

  VALUES (3, 'prawnik', '345 89 98', '1999-08-05', 1200, 1, 'wyjazd w grudniu');

• Postać polecenia wprowadzającego dane do wybranych kolumn

  INSERT INTO NOWA (Nr_ident, Zawód, Data_rozp)

  VALUES (4, 'ekonomista', '2002-01-01');

• Musza być wypełnione te pola, które są NOT NULL i klucz główny

•Pole Zawód jest dopełniane spacjami do długości 20 znaków

• Instrukcja DELETE - służy do usuwania rekordów z tabeli.

• Podstawowa struktura instrukcji DELETE:

DELETE FROM tabela

[WHERE warunek]

• Opcjonalna cześć z klauzula WHERE jest wykorzystywana do ograniczania rekordów, które zostaną usunięte;

• Pominięcie tej części powoduje, ze wszystkie rekordy są usuwane

• Postać polecenia usuwającego z tabeli NOWA, wszystkie rekordy pracowników nie będących ekonomistami:

DELETE FROM NOWA

WHERE Zawód <> 'ekonomista';

•Postać polecenia usuwającego wszystkie rekordy z tabeli NOWA:

DELETE FROM NOWA

• Instrukcja UPDATE - jest wykorzystywana do wprowadzania zmian w istniejących rekordach

• Struktura instrukcji jest następująca:

UPDATE tabela

SET kolumna = wartosc, ...

[WHERE warunek]

• Instrukcja składa się z trzech części:

– W pierwszej części określa się, jaka tabela będzie aktualizowana

– Druga cześć – klauzula SET – służy do podania listy kolumn, które będą zmieniane i nowych wartości, które zostaną przypisane tym kolumnom

– W ostatniej części za pomocą klauzuli WHERE określa się wiersze tabeli, w których nastąpi zmiana

• Postać polecenia zmieniającego zawartość pola Premia (było 1200) na 500 dla pracownika o Nr_ident równym 3:

UPDATE NOWA

SET Premia = 500

WHERE Nr_ident = 3;

• Instrukcja DROP - służy do usuwania tabel z bazy danych

• Przy ustalaniu nowych wartości określonego pola można zastosować wyrażenia arytmetyczne

•Przykładowe polecenie spowoduje zwiększenie wszystkim pracownikom premii o 100 zł

UPDATE NOWA

SET Premia = Premia+100;

• Postać polecenia usuwającego tabelę z bazy:

DROP TABLE Nazwa_tabeli

Łączenie tabel

• W wielu przypadkach w trakcie wyszukiwania informacji z bazy danych okazuje się, ze potrzebne dane przechowywane są w kilku tabelach

• W celu polaczenia danych z wielu tabel w jednym zapytaniu wymagane jest złączenie

• Polaczenia i normalizacja

• Efektem normalizacji jest rozbicie bazy danych na wiele tabel

• Używając złączeń miedzy tabelami można wybierać informacje z wielu tabel za pomocą pojedynczej instrukcji SELECT

• Daje to efekt ponownego polaczenia danych, które zostały rozdzielone do wielu tabel w trakcie normalizacji

• Złączenie to zapytanie, które łączy dane z wielu tabel

• Struktura standardowego zapytania jest następująca:

SELECT lista_kolumn

FROM tabela1, [tabela2, ...]

WHERE warunek;

• W części FROM pojawiają się deklaracje kilku tabel, reszta nie różni się od polecenia działającego na jednej tabeli

_________________________________________

KONIEC

mini KURSu SQL-a

by Kasprzak

Komentarze