Tabele są podstawowymi elementami każdej bazy danych. Używając polecenia SQL definiowania danych, można tworzyć tabele, usuwać i modyfikować. Polecenie SQL które służy do stworzenia tabeli to CREATE TABLE.

Przykład użycia polecenia CREATE TABLE które utworzy tabelę klienci:

  CREATE TABLE[klienci]

          ([id klienta] [numeric](18, 0) NOT NULL,

            [nazwisko] [nchar](20) NOT NULL,

            [imie] [nchar](10) NOT NULL,

            [kraj] [nchar](10) NULL,

            [pesel] [char](11) NULL,

            [miasto] [nchar](10) NULL,

            [ulica] [nchar](20) NULL,

            [kod pocztowy] [numeric](6, 0) NULL,

            [telefon] [char](9, 0) NULL)

Przedstawiona składnia zawiera :

W pierwszym wierszu zawiera się klauzula CREATE TABLE, po której w nawiasie kwadratowym wprowadzamy nazwę tabeli która będzie ją identyfikować. Następnie w drugim wierszu od nadania nazwy pierwszej kolumnie, a po spacji określamy typ danych. Dla niektórych typów danych należy określić skalę bądź też dokładność, zwykle jest to liczba całkowita podana w nawiasie zaraz po nazwie typu danych. Typ danych w kolumnie określa, jaki rodzaj informacji jest w niej przechowywany np. znaki, liczby daty itd.. W taki sposób system wie jak przechowywać dane oraz jak nimi operować. Znakowy typ danych służy do przechowywania liter, liczb oraz innych znaków specjalnych. Zaś typ całkowitoliczbowy stosuje się do przechowywania wyłącznie liczb całkowitych. Dane całkowitoliczbowe można potem przetwarzać za pomocą operatorów arytmetycznych.

Większość systemów pozwala przy tworzeniu tabeli nadać każdej kolumnie w tabeli status null lub not null. Przypisanie takiego statusu kolumnie informuje, że w takiej kolumnie należy wstawić null w miejsce, w które użytkownik nie wstawił żadnej wartości. Status null oznacza pewną nieznaną, nieosiągalną lub nieodpowiednią wartość lecz nie jest tym samym co spacja bądź zero. Nadani kolumnie statusu not null oznacza, że nie ma możliwości pozostawienia tej kolumny bez wprowadzonych danych. Jeśli nie wpiszemy do tej kolumny żadnej wartości system odrzuci inne modyfikacje i wyświetli komunikat o błędzie.

Tworzenie indeksów

W systemie zarządzania relacyjną bazą danych indeks jest sposobem na zwiększenie wydajności pracy z bazą danych. Indeks umożliwia szybkie odnalezienie kolumny, w której zawarte są dane. Pomaga w wyszukiwaniu interesujących nas danych, indeks może posłużyć, jako logiczny wskaźnik do fizycznej lokalizacji. Indeksy są tworzone przy projektowaniu bazy danych i potem nie widoczne dla użytkownika.Za każdym razem kiedy, modyfikujemy dane, w jednym lub w większej ilości indeksu tabeli następują zmiany które odzwierciedlają te modyfikacje. Użytkownicy nie muszą się martwić o aktualizacje indeksów, jest do wykonywane automatycznie przez system. Często zdarza się, że tabela ma więcej niż jeden indeks. Istnieje również możliwość, że tabela nie będzie zawierała żadnego indeksu. Do tworzenia indeksów służy składnia CREATE INDEX i DROP INDEX.

Aby utworzyć indeks dla kolumny Id klienta w tabeli klienci:

create index audind

on klienci (id klienta)

Najlepiej indeksy jest tworzyć podczas tworzenia tabeli. Jednak SQL pozwala nam tworzyć indeksy nawet w monecie, kiedy w tabeli są już dane.

Większość systemów pozwala na tworzenie indeksów złożonych, czyli takich które zawierają więcej niż jedną kolumnę oraz indeksów takich, które zapobiegają powtarzaniu się danych. W niektórych systemach mamy możliwość tworzenia indeksu zgrupowanego, w którym sortowanie odbywa się nie tylko w sposób logiczny, ale także fizyczny.

Indeksy złożone

Indeksy złożone stosujemy wtedy, gdy lepiej nam jest przeszukiwać jednocześnie dwie lub więcej kolumn ze względu na ich logiczne powiązanie. Tabela klienci zawiera indeks złożony utworzony dla kolumn imie i nazwisko.

Składnia polecenia służącego do stworzenia indeksu złożonego zapewniać wyszczególnienie wszystkich kolumn. Instrukcja stworzenia indeksu złożonego w tabeli klienci powinna wyglądać następująco

create index aunameid

on klienci (nazwisko, imie)

W języku SQL kolumny indeksu złożonego nie muszą być w takim samym porządku jak kolumny w poleceniu CREATE TABLE. Kolejność imie i nazwisko w pokazanej instrukcji mogły by być odwrócone. Jednak mając na uwadze wydajność systemu, lepszym sposobem jest umieszczanie na początku nazwy kolumny, która jest częściej używana w wyszukiwaniu.

Indeksy jednoznaczne

Indeks jednoznacznym nazywamy indeksem, który nie dopuszcza takiej sytuacji w której dwa wiersze miały by taką samą wartość. Sprawdzane jest czy nie ma powtórzeń wartości, kiedy tworzony jest indeks oraz zawsze, kiedy dane są dodawane. Zazwyczaj indeksy jednoznaczne tworzone są dla kolumn klucza głównego mając na celu wymuszenie unikalności dla identyfikatorów wiersza. Tworzenie takiego indeksu ma tylko sens gdy nasz wiersz musi być unikatowy sam w sobie. Tworzenie takiego indeksu dla marki samochodu czy nazwiska nie miało by sensu, gdyż na naszej wypożyczalni na pewno pojawi się kilka samochodów tej samej marki czy też kilku klientów o nazwisku Kowalski. Jedna założenie indeksu jednoznacznego dla kolumny która zawiera numery rejestracyjne samochodów będzie bardzo dobrym pomysłem. Ponieważ jest to numer  unikatowy który jest nadawany jest każdemu samochodowi z osobna. Taki indeks służy również do sprawdzania poprawności wprowadzonych danych.
W SQL tworzenie indeksów jednoznacznych wymusza istnienie danych o charakterze jednoznacznym. Gwarantuje to odrzucenie poleceń które powodowały utworzenie jednoznacznego dla istniejących danych które zawierają powtarzające się wartości czy też zmianę danych w taki sposób aby uniknąć powtórzenia.

Indeksy zgrupowane

Język SQL oferuje możliwość zakładania indeksów zgrupowanych i niezgrupowanych. Kiedy tworzymy indeks zgrupowany oznacza, to, że w systemie nie będzie sortowania i przesortowania wierszy tabel w zależności od przebiegającego w tym momencie procesu, co zapewni nam porządek fizyczny tych wierszy w urządzeniu bazodanowym będzie zawsze taki sam jak porządek logiczny.
Indeks zgrupowany naznacza fizyczne rozmieszczenie danych, dlatego dla tabeli może istnieć tylko jeden taki indeks. Często używa się go dla klucza głównego, lecz lepszym rozwiązaniem jest używanie go dal kolumny najczęściej przeszukiwanej. Jeżeli używamy indeksu niezgrupowanego, to rozmieszczenie fizyczne wierszy jest inne niż rozmieszczenie logiczne czyli indeksowe. Użycie indeksu niezgrupowanego dla tabeli pozwoli zapewnić dostęp do różnie posortowanych danych.
Szuanie danych przy pomocy indeksu zgrupowanego jest szybsze niż w przypadku użycia indeksu niezgrupowanego. Indeksu zgrupowanego warto używać przy wyszukiwaniu wierszy z bliskimi wartościami kluczowymi czyli dla wyszukiwania danych z zakresu jakiejś wartości. Jeżeli został znaleziony odpowiedni wiersz z pierwsza wartością klucza, to kolejne wiersze o wartościach indeksowanych są do niego fizycznie przyległe i dalsze przeszukiwanie już nie jest potrzebne.

 Tworzenie tabel z ograniczeniami

W języku SQL przyjęto opcje polecenia CREATE TABLE również do PRIMARY KEY, DEFAULT, CHECK, REFERENCES i FOREIGN KEY. Są to elementu służące do zapewnienia spójności danych.

PRIMARY KEY jest stosowane przy kolumnach w których nie chcemy dopuścić wartości null jako klucz główny tabeli. Wprowadzona wartość musi być unikatowa, inaczej zostanie ona odrzucona. Jeżeli klucz główny zawarty jest w więcej niż jednej kolumnie, to PRIMARY KEY jest zdefiniowany na poziomie tabeli.

UNIQUE podobnie odpowiada za jednoznaczność wartości w każdej kolumnie lecz dopuszcza możliwość zdefiniowania kolumny jako null.

DEFAULT wartość kolumny jest definiowana automatycznie, kiedy użytkownik wprowadzający nie poda jej w sposób jawny. Jeżeli nasz klient nie poda adresu e-mail, to system automatycznie wprowadzi wartość wybraną jako domyślną, może to by przykładowo brak .

CHECK określa, jaki format mają mieć wprowadzane dane do kolumny. Możemy zdefiniować jak mają wyglądać nasze dane, przykładowo weźmy kolumnę Nr rejestracyjny możemy ją zdefiniować aby zawsze składał się z dwóch liter a następnie z pięciu cyfr. Jeżeli użytkownik wprowadzi dane, które naruszają więzy integralności nałożone przez CHECK, to system odrzuci takie polecenie. Ograniczenie wprowadzone przez regułę CHECK często nazywane jest regułą poprawności, ponieważ pozwala ona sprawdzić czy wprowadzane wartości jest elementem dziedziny kolumny. Więzy nakładane przez formułę CHECK na kilka kolumn są definiowane na poziomie tabeli.

REFERENCES i FOREIGN KEY wiążą klucze główne z kluczami obcymi. Podczas wprowadzania danych do kolumny klucza obcego zdefiniowanego przez REFERENCES, wówczas taka sama wartość musi istnieć w tabeli i kolumnie, do której jest odwołanie, w przeciwnym razie zostanie ona dorzucona.

 CREATE TABLE [klienci](

            [id klienta] [char](10) NOT NULL,

            primary key uniqe,

            [nazwisko] [nchar](20) NOT NULL,

            [imie] [nchar](10) NOT NULL,

            [kraj] [nchar](10) NULL,

            [pesel] [char](11) NULL,

            Check (pesel like ‘[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]’),

            [miasto] [nchar](10) NULL,

            [ulica] [nchar](20) NULL,

            [kod pocztowy] [numeric](6, 0) NULL,

            [telefon] [char](9) NULL,

            uniqe,

            [e-mail] [char](10) NULL,

Zmienianie baz danych

Język SQL zawiera polecenie umożliwia zmianę rozmiaru bazy danych. Możliwe jest dodanie miejsca urządzeniu bazodanowemu jest to ważne kiedy z czasem rozbudowywujemy naszą bazę. Wykorzystywana jest też możliwość zmniejszenia bazy danych w celu zaoszczędzenia nieużywanej pamięci urządzenia bazodanowego.

Zmienianie definicji tabel

W SQL dostępna jest także zmiana struktury danych za pomocą polecenia ALTER TABLE. Możemy wykonać takie polecenie nawet jak już wprowadziliśmy dane do naszej bazy. Składnia ta może zawierać polecenia oznaczające możliwość dodania oraz usunięcia kolumny lub zmiany nazwy, typu danych długości, statusu null i więzów kolumny.

alter table samochody
add  vin decimal null

Przeważnie kolumny dodane za pomocą polecenia ALTER TABLE muszą dopuszczać wartość null. Dzieje się tak ponieważ nowa kolumna jest dodawane do wszystkich istniejących wierszy, przez to musi zawierać jakąś wartość, a null jest najbezpieczniejszym wyborem.

Innym stosowanym sposobem na przeprowadzenie zmian jest utworzenie nowej tabeli z właściwą strukturą oraz usunięcie starej tabeli. Lecz zanim to zrobimy ważne jest aby wyeksportować do pliku a następnie załadować go do nowej tabeli.

Usuwanie tabeli

Polecenie które służy do usuwania tabeli z bazy danych to DROP TABLE.

DROP TABLE klienci

Kliedy użyjemy tego polecenia, wyznaczona przez nas tabela wraz z zawartością zostanie usunięta z bazy danych. Jednak jeżeli chcemy usunąć wszystkie dane z tabeli, używamy polecenia DELETE.

Dodawanie, zmienianie i usuwanie danych

W SQL są dostępne trzy podstawowe polecenia które służą do zmieniania danych, określa się je poleceniami modyfikacyjnymi.

Polecenie INSERT powoduje dodanie nowego wiersza do bazy danych

Polecenie UPDATE powoduje zmiany  istniejącego już wiersza w bazie danych.

Polecenie DELETE powoduje usuniecie wiersza z bazy danych.

Dodawanie wierszy: INSERT

Polecenie INSERT jest wykorzystywane do dodawania nowych wierszy do bazy danych przy pomocy dwóch kluczowych słów VALUES lub za pomocą polecenia SELECT.

VALEUES

Słowo to określa wartości danych we wszystkich lub w kilku kolumnach nowego wiersza. Ogólna składnia instrukcji INSERT z użyciem słowa kluczowego VALUES wygląda następująco:

insert into samochody

valuses (‘kr34433’, ‘Alfa romeo’, ‘Zegato’, ‘1999’, ‘2399’, ‘benzyna’, ‘235’)

Wprowadzając wartości musimy pamiętać, że maja być wprowadzone w takiej samej kolejności w jak występują nazwy kolumn w poleceniu CREATE TABLE. Dane za składnia VALUES są wprowadzane w nawiasach okrągłych. Przy dodawaniu każdego nowego wiersza należy uzyć oddzielnego polecenia INSERT.

Kiedy chcemy dodać dane do kilku lecz nie koniecznie wszystkich kolumn w wierszu, musimy najpierw określić te kolumny. Kolumny do których nie zamierzamy wstawić danych muszą mieć określone wartości domyślne lub być wcześniej zdefiniowane jako null.

insert into samochody (Nr rejestracyjny, marka, model)

valuses (‘kr34433’, ‘Alfa romeo’, ‘Zegato’)

Kolejność w jakiej wymieniamy kolumny nie ma żadnego znaczenia na składnie INSERT wtedy kiedy tylko kolejność w jakiej podajemy wartości danych są zgodne z kolejnością  w jakiej wpisaliśmy kolumny. Jeżeli odwrócimy kolejność marki z Nr rejestracyjny nie zmienia wyniku polecenia.

insert into samochody (marka, Nr rejestracyjny, model)

valuses (‘Alfa romeo’, ‘kr34433’, ‘Zegato’)

Oba polecenia są poprawnie i wstawiają do kolumn dokładnie te same dane (Patrz poniżej).

insert-into

Tabela Wynik zapytania INSERT INTO

System automatycznie wprowadza wartość null do kolumn dla których nie zostały zdefiniowana wartości, a ponadto tabela samochody pozwala na występowanie wartości null dla tym kolumn.

Jeżeli w składni CREATE TABLE wcześniej zdefiniowaliśmy pola rok produkcji i moc kml jako not null to takie polecenie zostanie odrzucone, ponieważ kolumny nie dopuszczają wartości null i nie zaakceptują braku danych.

SELECT w poleceniu INSERT

Polecenia SELECT możemy używać w poleceniu INSERT, w celu otrzymania wartości z jednej lub większej liczby innych tabel.  SELECT w poleceniu INSERT daje możliwość zebrania danych ze wszystkich lub kilku kolumn z jednej do drugiej tabeli. Jeżeli wstawiamy wartość podzbioru kolumn , to aby dodać wartości do reszty kolumn innym razem, możesz użyć UPDATE. Jeżeli wstawiamy wiersze z jednej do drugiej tabeli, wówczas te dwie tabele musza posiadać zgodne ze sobą struktury, czyli odpowiednie kolumny muszą mieć ten sam typ danych lub musi być możliwa automatyczna konwersja typu. Jeśli wszystkie kolumny obu tabel mają tą samą kolejność, w której pojawiły się w poleceniach CREATE TABLE, to nie musimy podawać nazw kolumn w tabelach.

insert into zamówienia

select *

from klienci

Jeżeli w kolumny w dwóch tabelach nie występują w tej samej kolejności w odpowiednich poleceniach CREATE TABLE, to możemy wtedy skorzystać z klauzuli INSERT lub klauzuli SELECT w celu zmiany ich kolejności aby była zgodna.

Jedną z korzyści  jakie daje polecenie SELECT w poleceniu INSERT jest możliwość zastosowania wyrażeń w celu zmiany wprowadzanych danych.  Możemy użyć ciągów znaków, działań matematycznych, czy też samodzielnych wyrażeń.

insert into zamówienia

select id zaplaty, typ samochodu, cena *1,5

from szczegoly zamowienia

Zmienianie istniejących danych: UPDATE

Polecenia INSERT używamy do dodawania nowych wierszy do tabeli, podczas gdy polecenia UPDATE do zmieniania istniejących wierszy. Możemy go używać do zmiany wartości w pojedynczych wierszach, grupach wierszy lub wszystkich wierszy zawartych w tabeli. Polecenie UPDATE wskazuje wiersz lub wiersze, które mają ulec zmianie i nowe dodane. Naszą daną może być stała, zdefiniowane przez nas wyrażenie lub dane wyciągnięte z innej tabeli.

UPDATE

Po wyrażeniu UPDATE podajemy nazwę tabeli lub perspektywy. W każdym poleceniu modyfikującym możemy dowolnie zmieniać dane jednorazowo tylko w jednej tabeli lub perspektywie. Jeżeli w poleceniu UPDATE zdarzy się, że naruszyliśmy więzy integralności to system nie wykona takiej modyfikacji i pojawi się komunikat o błędzie.

Klauzula SET

Klauzula SET jest wykorzystywana do określenia kolumny i zmianę jej wartości. Zaś klauzula WHERE precyzuje nam który wiersz lub wiersze będziemy modyfikować. Możemy zaobserwować, że kiedy w poleceniu nie używamy klauzuli WHERE to zostaną zmienione wszystkie wiersze na wartość podaną w klauzuli SET.

update szczegolu zaplaty

set cena = cena * 1.50

Klauzula WHERE

Klauzula WHERE w poleceniu UPDATE służy do określenia wiersze które mają być zmienione. Na przykład kiedy chcemy zmienić nazwę ulicy i kod pocztowy ponieważ ulica została przebudowana i teraz nazywa się Aleja Słowackiego a nie jak wcześniej ulicą Słowackiego

update klienci

set ulica=’Slowackiego’, kod pocztowy=’31-345’

where ulica=”Aleja Slowackiego’, kod pocztowy=’31-344’

Klauzula WHERE w poleceniu UPDATE może odnosić swoje zmiany tylko do jednej lub kilku tabel.

Usuwanie danych: DELETE

Usuwanie wierszy może nam się równie dobrze przydać jak zmienianie i dodawanie. Polecenie DELETE jest podobne jak INSERT i UPDATE, tak samo działa na pojedynczych wierszach, jak i na grupach wierszy. Podobnie jak przy użyciu innych poleceń modyfikujących dane, możemy usuwać wiersze na podstawie danych w innych tabeli. Klauzula WHERE służy do określenia, który wiersz ma byś usunięty.

delete from klienci

where Id klienta = ‘2’

Jeżeli w poleceniu DELETE nie wpiszemy klauzuli WHERE, wtedy zostaną usunięte wszystkie wiersze.

Dodaj komentarz