WSIcz III

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 39

Wprowadzenie do systemów

informacyjnych
Wykład IV
SQL – język relacyjnych baz
danych.

WSI 2014 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 1


Opracowanie:
Mgr inż. Krzysztof Matejewski
kaem@pjwstk.edu.pl

Przy opracowywaniu tego wykładu korzystałem z materiałów


wykładowych prof. dr. hab. Lecha Banachowskiego

WSI 2014 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 2


Temat wykładu IV

 Geneza języka SQL


 Struktura języka SQL
 Typy danych wg standardu języka
 Instrukcja SELECT
 Instrukcje podjęzyków DDL i DML

WSI 2014 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 3


Język SQL – geneza

Modele danych poprzedzające model relacyjny, czyli modele sieciowy i


hierarchiczny, opierały się na pojęciu pliku jako nazwanego zbioru rekordów. Do
operowania na takich strukturach danych wystarczały tradycyjne języki
programowania, takie jak COBOL, PL/I czy C.
Naturalną konsekwencją opublikowania koncepcji relacyjnego modelu danych
(Edgar C. Codd, Relational Model Of Data for Large Shared Data Banks, 1970) były
intensywne prace nad „językami relacyjnymi”, które miały umożliwić implementacje
założeń teoretycznych do funkcjonalnych aplikacji. Najbardziej zaawansowane prace
prowadzono w IBM, (co wynikało m. in. z faktu, że koncepcja modelu relacyjnego
danych powstała w laboratorium IBM w San Jose).
W 1974 zespół kierowany przez Donalda Chamberlin’a zaprezentował język
Structured English Query Language, zwany SEQUEL. Pierwsza prototypowa
implementacja stworzona w IBM powstała w latach 1974 – 75 i nosiła nazwę
SEQUEL-XRM.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

4
Język SQL – geneza

W wyniku doświadczeń z tym systemem, opracowano w IBM kolejną wersję


języka SEQUEL/2 i w roku 1977 uruchomiono znacznie bardziej zaawansowany
SYSTEM R, implementujący znaczną część języka SEQEL/2. Z nazwy tej zresztą dość
szybko zrezygnowano z przyczyn formalnych (nazwa była zastrzeżona przez
brytyjskiego producenta samolotów, firmę De Haviland) na rzecz nazwy SQL
(wymawianej es-kju-el), która w praktyce przestała być skrótem, stając się niezależną
nazwą języka.
Dialekt języka stworzony w IBM stał się podstawą dla zatwierdzonego w 1986
roku przez American National Standards Institute (ANSI). W 1987 roku standard ANSI
został zatwierdzony przez International Organization for Standarisation (ISO), jako
standard światowy. Od tego czasu język doczekał się kilku kolejnych standardów oraz
wielu implementacji, w różnym stopniu realizujących zapisy standardu. Można
powiedzieć, że każda implementacja posługuje się własnym dialektem języka,
zachowując zgodność ze standardem w podstawowych konstrukcjach, różniąc się w
szczegółach.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

5
Język SQL – geneza

Jak wiadomo, zaimplementowano wiele SZBD zgodnych z modelem relacyjnym.


Najbardziej znane to ORACLE, DB2, PostgreSQL, MS SQL Server, MySQL. W każdej
z implementacji nieco inaczej był implementowany język SQL, stąd też mówimy o
dialektach tego języka, związanych z poszczególnymi implementacjami.
Żaden z dialektów nie implementuje wszystkich założeń standardu ISO i żadne
dwa standardy nie są identyczne.
W dalszej części wykładu, oraz w przytaczanych przykładach opierać się będziemy
głównie na implementacji firmy Microsoft zrealizowanej w MS SQL Server (dla
uproszczenia nazywany MS SQL), dla porównania przywołując w niektórych
przypadkach implementację firmy ORACLE. Jeżeli różnice pomiędzy tymi
implementacjami nie będą sygnalizowane w treści wykładu, należy rozumieć, że nie
istnieją, lub są nieistotne z punktu widzenia prezentowanego tu materiału.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

6
Język SQL – struktura

Zgodnie z nazwą, przyjęło się mówić, że SQL to język ZAPYTAŃ kierowanych do


bazy danych. Nie jest to do końca prawdziwe stwierdzenie, gdyż poza zapytaniami,
korzystając ze składni SQL kierujemy do bazy także POLECENIA. W tym wykładzie
wykorzystywane będą oba te pojęcia i traktowane, jako jednoznaczne.
Język SQL jest językiem danych, używanym wyłącznie do wykonywania operacji
na bazie danych. Nie jest językiem programowania – nie zawiera struktur
programistycznych wymaganych od takich języków (zmienne, instrukcje warunkowe,
instrukcje pętli).
Język SQL jest językiem deklaratywnym – o sposobie przechowywania i
operowania danymi decyduje SZBD.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

7
Język SQL – struktura

Zapytania - polecenia można zaliczyć do jednego z trzech głównych podzbiorów:


 SQL DML (ang. Data Manipulation Language – „język manipulacji danymi”),
 SQL DDL (ang. Data Definition Language – „język definicji danych”),
 SQL DCL (ang. Data Control Language – „język kontroli nad danymi”).
 SQL DQL (ang. Data Query Language – „język definiowania zapytań”).
Powyższe tłumaczenia angielskich zwrotów (za Wikipedią) nie do końca
precyzyjnie oddają ich istotę.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

8
Język SQL – struktura

DQL – Data Query Language


Zestaw poleceń odczytania danych z bazy – wszystkie polecenia rozpoczynają się
od słowa kluczowego SELECT, a ich realizacja nie ma wpływu na stan danych.
DML – Data Manipulation Language
Zestaw poleceń odpowiedzialnych za operowanie danymi.
 INSERT – wpisywanie nowych danych (rekordów) do bazy danych
 UPDATE – aktualizacja (zmiana) danych już istniejących
 DELETE – usuwanie danych (rekordów) z bazy

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

9
Język SQL – struktura

DDL – Data Definition Language


Zestaw poleceń odpowiedzialnych za operacje na obiektach bazy danych
 CREATE – polecenie utworzenia nowego obiektu bazy danych
 ALTER – zmiana struktury obiektu już istniejącego
 DROP – polecenie usunięcia z bazy istniejącego obiektu
DCL – Data ControlLanguage
Zestaw poleceń odpowiedzialnych za nadawanie uprawnień do operacji na bazie
danych
 GRANT – przyznawanie uprawnień do operacji na obiektach bazy
danych
 REVOKE – odebranie uprawnień do operacji na obiektach bazy danych
 DENY – zabrania operacji na obiektach bazy danych (nie
implementowane w ORACLE).
RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów
Lecha Banachowskiego

10
Język SQL – typy danych (standard)

Standard języka SQL przewiduje (ogólnie) typy:


 Napisowy (tekstowy) stałej długości CHARACTER(n)
 Napisowy (tekstowy) zmiennej długości CHARACTER VARYING
 Liczbowy stałoprzecinkowy INTEGER
 Liczbowy zmiennoprzecinkowy NUMERIC
Poszczególne implementacje realizują wytyczne standardu, niemniej każda stosuje
własny sposób tej realizacji. Poniżej przedstawiamy typy danych dla MS SQL Server
oraz ORACLE.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

11
Język SQL – typy danych

Najważniejsze typy danych:


Typy napisowe:
 Char(n) – napis o stałej długości n znaków
 Varchar(n) – napis o zmiennej długości max. n znaków

Typy liczb całkowitych:


 Integer – liczba całkowita, ze znakiem
 Smallint – liczba całkowita, ze znakiem

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

12
Język SQL – typy danych (standard)

Typy liczb zmiennoprzecinkowych:


 Numeric(p, q)– liczba dziesiętna ze znakiem, złożona z p cyfr, z kropką
dziesiętną po q cyfrach (licząc od prawej)
 Float(p) – liczba zmiennopozycyjna zapisywana w postaci wykładniczej

Typy daty i czasu:


 Date
 Time
 Timestamp
 Interval – specyfikacja przedziału czasowego

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

13
Przykładowa baza danych

Wszystkie przykłady poleceń SELECT zawarte w tym wykładzie będą


prezentowane na podstawie bazy danych o następującym schemacie:

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

14
Przykładowa baza danych

Ten (skromny) schemat opisuje „dydaktyczną” fimę – tabela EMP przechowuje


dane pracowników firmy, tabela DEPT dane departamentów (oddziałów) firmy, tabela
SALGRADE opisuje siatkę płac w firmie.
EMP
Empno Int Primary Key numer pracownika
Ename Varchar nazwisko pracownika
Job Varchar stanowisko pracownika
Mgr Int Foreign Key numer przełożonego (związek rekurencyjny)
HiredateDate data zatrudnienia
Sal Int płaca (miesięczna)
Comm Int prowizja (roczna)
Deptno Int Foreign Key numer departamentu zatrudniającego
pracownika

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

15
Przykładowa baza danych

DEPT
Deptno Int Primary Key numer departamentu
Dname Varchar nazwa departamentu
Loc Varchar lokalizacja (miasto) departamentu

SALGRADE
Grade Int Primary Key numer grupy zaszeregowania
Losal Int minimalna płaca w grupie
Hisal Int maksymalna płaca w grupie
Należy zwrócić uwagę na fakt, że tabela SALGRADE nie jest powiązana więzami
klucz główny – klucz obcy z tabelą EMP, a układ wartości losal i hisal to tylko
„widełki” płac. Aby stwierdzić, w której grupie zarobkowej mieści się czyjaś płaca
(Sal), należy sprawdzić w jaki przedział Losal – Hisal ta płaca trafia.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

16
Tabela EMP

EMPNO ENAME JOB MGR HIREDATE SAL


COMM DEPTNO
----------- ------------- ----------------- -------- --------------- --------
---------- -------------
7369 SMITH CLERK 7902 1980-12-17 800
NULL NULL
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300
30
7521 WARD SALESMAN 7698 1981-02-22 1250 500
30
7566 JONES MANAGER 7839 1981-04-02 2975
NULL 20
7654 MARTIN SALESMAN 7698 1981-09-28 1250
1400 30
7698 BLAKE MANAGER 7839 1981-05-01 2850
NULL 30
7782 CLARK MANAGER 7839 1981-06-09 2450
NULL 10
7788 SCOTT ANALYST 7566 1982-12-09 3000
NULL 20
7839 RBD 2013
KINGOpracował Krzysztof Matejewski
PRESIDENT NULL na podstawie
1981-11-17materiałów
5000
NULL Lecha 10
Banachowskiego
7844 TURNER SALESMAN 7698 1981-09-08 1500 0
30
7876 ADAMS CLERK 7788 1983-01-12 1100
NULL 20
7900 JAMES CLERK 7698 1981-12-03 950 17
Tabele DEPT i SALGRADE

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

18
Instrukcja SELECT

Instrukcja SELECT jest poleceniem odczytania danych zapisanych w bazie bez


jakiejkolwiek ingerencji zawartość i strukturę bazy.
Instrukcja SELECT składa się z kilku tzw. klauzul, występujących w ściśle
określonej kolejności, z których każda zaczyna się od słowa kluczowego. Pierwsza
klauzula, rozpoczynająca się od słowa kluczowego SELECT oraz druga
rozpoczynająca się od FROM, są obligatoryjne i muszą wystąpić w składni całego
polecenia przynajmniej jeden raz (mogą pojawiać się wielokrotnie).
Całość instrukcji SELECT definiuje:
 z jakich źródeł w bazie danych mają zostać odczytane dane,
 jakie warunki muszą spełniać dane, aby pojawiły się w wyniku wykonania
instrukcji,
 w jakiej postaci wynik instrukcji ma zostać zwrócony do użytkownika (aplikacji).

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

19
Instrukcja SELECT

Standard języka wymaga zakończenia instrukcji SELECT (oraz każdej innej)


średnikiem. MS SQL Server traktuje ten wymóg opcjonalnie.
Struktura instrukcji SELECT:
SELECT [DISTINCT] wyrażenie (, ...)
FROM nazwa_tabeli (, ...)
[WHERE warunek]
[GROUP BY wyrażenie (, ...)]
[HAVING warunek]
(...)
[ORDER BY wyrażenie (, ...)];

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

20
Instrukcja SELECT klauzula SELECT

Struktura instrukcji SELECT:


SELECT [DISTINCT] wyrażenie (, ...)
FROM nazwa_tabeli (,...)
(...);
Klauzula SELECT definiuje dane, które mają zostać odczytane z bazy, oraz sposób
ich prezentacji. Mogą nimi być nazwy kolumn, wyrażenia (także odwołujące się do
nazw kolumn) oraz stałe, niezwiązane z danymi zapisanymi w bazie. Wyrażenia
oddzielane są przecinkami. Nazwy kolumn są poprzedzone (kwalifikowane) nazwą
tabeli z której pochodzą:
Nazwa_tabeli.Nazwa_kolumny
Jeżeli nazwy kolumn w instrukcji SELECT są jednoznaczne, nazwę tabeli
poprzedzającą nazwę kolumny można opuścić. Jednoznaczność oznacza tu, że nazwa
kolumny występująca w klauzuli SELECT występuje tylko w jednej z tabel, z których
instrukcja odczytuje dane.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

21
Instrukcja SELECT klauzula FROM

Klauzula FROM definiuje źródła, z których dane będą odczytywane. Mogą nimi
być tabele, widoki i inne instrukcje SELECT. Nazwy tabel, widoków i instrukcji
SELECT (ujętych w okrągłe nawiasy) oddzielane są przecinkami. W tej części
wykładu ograniczamy się tylko do odczytywania danych z pojedynczej tabeli. Odczyt
danych z widoku, z punktu widzenia konstrukcji zapytania, niczym nie różni się od
odczytu z tabeli.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

22
Instrukcja SELECT – elementarne przykłady

Aby wypisać nazwiska, zarobki i


stanowiska pracowników firmy:
SELECT Ename, Sal, Job Ename Sal Job
FROM EMP; --------- ------- -------
SMITH 800 CLERK
Aby wypisać całą tabelę : ALLEN 1600 SALESMAN
WARD 1250 SALESMAN
JONES 2975 MANAGER
SELECT * MARTIN 1250 SALESMAN
FROM EMP; BLAKE 2850 MANAGER
CLARK 2450 MANAGER
SCOTT 3000 ANALYST
KING 5000 PRESIDENT
TURNER 1500 SALESMAN
ADAMS 1100 CLERK
JAMES 950 CLERK
FORD 3000 ANALYST
MILLER 1300 CLERK

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

23
Instrukcja SELECT klauzula ORDER BY

Wyniki zapytania mogą zostać posortowane w porządku rosnącym – ASCENDING


(domyślnie) lub malejącym – DESCENDING (dopuszczalne skróty ASC i DESC).
SELECT [DISTINCT] wyrażenie [[AS] alias] (,...)
FROM nazwa_tabeli
[WHERE warunek]
ORDER BY wyrażenie1 [ASC|DESC] (,...);
Klauzula ORDER BY może się pojawić w składni polecenia tylko jeden raz,
zawsze jako ostatnia. Na jej liście mogą występować wyrażenia, w tym nazwy kolumn
i ich aliasy, a także numery wyrażeń w kolejności ich występowania na liście SELECT.
Sortowanie może odbywać się według kilku wyrażeń. Hierarchia sortowania
wynika z kolejności umieszczenia wyrażeń na liście klauzuli.

Słowo ASC wskazujące na domyślny kierunek sortowania, może zostać


opuszczone w składni polecenia.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

24
Instrukcja SELECT klauzula WHERE

Klauzula WHERE jest trzecią w kolejności klauzulą w składni instrukcji SELECT.


Jest opcjonalna – nie musi się pojawić. Pozwala ona zdefiniować warunek logiczny,
ograniczający rekordy zwracane w wyniku działania instrukcji SELECT do tych tylko,
dla których przyjmuje on wartość logiczną TRUE. Rekordy, dla których warunek
przyjmuje wartość FALSE lub NULL są z wyniku eliminowane.
Przykład.
Wypisz nazwiska, stanowiska i płace pracowników, którzy pracują w dziale o
numerze 10.
SELECT Ename, Job, Sal
FROM Emp ename job sal
---------- --------- -----------
WHERE deptno = 10; CLARK MANAGER 2450
KING PRESIDENT 6000
MILLER CLERK 1300

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

25
Instrukcja SELECT – odczyt z wielu źródeł danych

W celu poznania nazw i lokalizacji departamentów, w których zatrudnieni są


poszczególni pracownicy, odczytajmy wynik polecenia
SELECT Ename, Dname, Loc
FROM EMP, DEPT;
I tutaj spotyka nas pewne zaskoczenie. W tabeli EMP jest 14 rekordów, w tabeli
DEPT rekordy 4, a wynik powyższego polecenia zawiera 56 rekordów. Przyjrzyjmy
się im dokładnie. Wynika z nich, że nazwisko każdego pracownika pojawia się
czterokrotnie – w połączeniu z nazwą i lokalizacją każdego departamentu. Z kolei
każdy departament jest wyświetlany w połączeniu z nazwiskami wszystkich
pracowników. Mamy to do czynienia z iloczynem kartezjańskim określonym na
zbiorach wierszy z tabel EMP i DEPT.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów


Lecha Banachowskiego

26
Instrukcja SELECT – odczyt z wielu źródeł danych

Czy ten wynik, jako całość, jest prawdziwy? Raczej nie! Czy zawiera w sobie
prawdziwe informacje? Oczywiście, że tak. Prawdziwymi wierszami wyniku są te,
które łączą nazwisko pracownika z nazwą i lokalizacją tego departamentu, w którym
jest faktycznie zatrudniony. A skoro w wyniku są połączone nazwiska WSZYSTKICH
pracowników z danymi WSZYSTKICH departamentów, stąd prosty wniosek, że wynik
zawiera prawdziwe rekordy. Trzeba je tylko znaleźć.
Każdy rekord w tabeli DEPT zawiera znaczącą wartość Deptno – klucz główny.
Jeżeli pracownik jest zatrudniony w jakimś departamencie, to jego rekord w tabeli
EMP zawiera wartość Deptno, klucz obcy, wskazujący na numer departamentu, w
którym zatrudniony. Zatem aby z wyniku naszego zapytania odczytać rekordy
prawdziwe, należy do polecenia dodać sformułowany powyżej warunek równości
wartości Deptno w obu tabelach:
EMP.Deptno = DEPT.Deptno
Dzięki takiej operacji, z dotychczasowego wyniku zostaną odrzucone te rekordy, w
których EMP.Deptno <> DEPT.Deptno, albo EMP.Deptno jest NULL.
RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów
Lecha Banachowskiego

27
DDL – Data Definition Language

Pod nazwą DDL rozumiemy podzbiór poleceń języka SQL odpowiedzialnych za operacje na obiektach
bazy danych – tworzenie, usuwanie oraz zmiany ich struktury. W skład DDL wchodzą trzy zestawy poleceń,
rozpoczynające się od słów kluczowych:
 CREATE – utwórz nowy obiekt
 DROP – usuń istniejący obiekt
 ALTER – zmień strukturę istniejącego obiektu
Pod pojęciem obiektu bazy danych będziemy rozumieli tabele, widoki (perspektywy), indeksy,
procedury, wyzwalacze, bazy danych i inne. W tym wykładzie omówione zostaną zagadnienia związane z
operowaniem tabelami. Zagadnieniom związanym z procedurami i innymi obiektami baz danych będzie
poświęcony cykl wykładów w ramach przedmiotu Systemy Baz Danych.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 28


Tworzenie tabeli

Polecenie utworzenia nowej tabeli:

CREATE TABLE nazwa_tabeli (


Nazwa_kolumny_1 Typ_danych [Więzy_integralności]
, Nazwa_kolumny_2 …
);
Nazwa tabeli nie może przekraczać 30 znaków (ORACLE), 128 znaków (MS SQL Server).
Liczba kolumn – max. 1000 (ORACLE), MS SQL Server przyjmuje maksymalną długość wiersza
tabeli 8060 bajtów.
W nazwach tabel, kolumn (a także innych obiektów) powinny znajdować się tylko litery alfabetu
łacińskiego, podkreślenia i cyfry. Poszczególne dialekty języka akceptują znaki narodowe i spacje (a także inne
znaki z listy ASCII), jednak w praktyce zaleca się rezygnację z ich użycia.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 29


Tworzenie tabeli – więzy spójności

Więzy spójności mogą zostać zadeklarowane bezpośrednio po definicji kolumny, nazywany deklaracją
więzów „w linii”:

CREATE TABLE nazwa_tabeli (


Nazwa_kolumny_1 Typ_danych Więzy_integralności,
…);

Przykład:

CREATE TABLE Osoba(


IdOsoby INT PRIMARY KEY,
Imie VARCHAR(20) NOT NULL,
Nazwisko VARCHAR(50)
);

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 30


Tworzenie tabeli – więzy spójności

Deklarując więzy „poza linią”, poprzez użycie słowa kluczowego CONSTRAINT, możemy nadać więzom
własną nazwę:

Przykład:

CREATE TABLE Osoba(


IdOsoby INT,
Imie VARCHAR(20),
Nazwisko VARCHAR(50),
CONSTRAINT PK_Osoba PRIMARY KEY (IdOsoby),
CONSTRAINT UQ_Osoba UNIQUE (Nazwisko)
);
Jeżeli nazwy więzów nie zostaną nadane explicite, nada je automatycznie SZBD.
Przykłady zostały zaprezentowane w dialekcie MS SQL Server. Ich składnia w ORACLE nie różni się
niczym, poza nazwami typów danych.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 31


Zmiana schematu tabeli - kolumny

Odpowiednio dodanie nowej kolumny do istniejącej tabeli, zmiana typu danych kolumny i usunięcie
kolumny.

MS SQL Server i Standard

ALTER TABLE Nazwa_tabeli ADD nazwa_kolumny Typ_danych;


ALTER TABLE Nazwa_tabeli ALTER COLUMN nazwa_kolumny Typ_danych;
ALTER TABLE Nazwa_tabeli DROP COLUMN nazwa_kolumny;

ORACLE:

ALTER TABLE Nazwa_tabeli ADD (nazwa_kolumny Typ_danych);


ALTER TABLE Nazwa_tabeli MODIFY (nazwa_kolumny Typ_danych);
ALTER TABLE Nazwa_tabeli DROP COLUMN nazwa_kolumny;
Nawiasy w składni ORACLE są opcjonalne.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 32


Usuwanie tabeli

DROP TABLE nazwa_tabeli;


Gdy inne tabele mają klucze obce odwołujące się do usuwanej tabeli operacja nie powiedzie się.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 33


DML – Data Manipulation Language

Pod nazwą DML rozumiemy podzbiór poleceń języka SQL odpowiedzialnych za operacje na danych w
strukturze bazy danych – dopisywanie nowych rekordów do tabel w bazie danych, modyfikacja już istniejących
danych, usuwanie rekordów z tabel. Używane są trzy rodzaje poleceń:

 INSERT – dopisz nowy rekord do tabeli,


 DELETE – usuń istniejący rekord,
 UPDATE – zmień dane w istniejącym rekordzie.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 34


Wstawianie danych do tabeli

Składnia podstawowa (pełna):

INSERT INTO nazwa_tabeli (lista nazw kolumn)


VALUES (lista wartości);
Składnia uproszczona:

INSERT INTO nazwa_tabeli


VALUES (lista wartości);
Dla składni pełnej liczba, kolejność i typy danych kolumn wymienionych w klauzuli INSERT musi
odpowiadać układowi listy wartości w klauzuli VALUES. Mogą zostać pominięte kolumny dopuszczające
NULL, posiadające zdefiniowaną wartość domyślną DEFAULT, kolumny wyliczane oraz te, których wartości
są realizowane przez mechanizmy autonumeracji.

W przypadku składni uproszczonej lista wartości musi odpowiadać kolejności i typom danych
wszystkich kolumn tabeli, zgodnie z instrukcją CREATE TABLE.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 35


Wstawianie danych do tabeli

Przykład:

INSERT INTO Emp (empno, ename, job, sal, deptno, comm)


VALUES (1001, 'WHITE', 'SALESMAN', 2500, 20, NULL);

MS SQL Server umożliwia wstawienie więcej niż jednego rekordu w jednej operacji INSERT:

INSERT INTO Emp (empno, ename, job, sal, deptno, comm)


VALUES (1002, 'GREEN', 'CLERK', 3100, 10, NULL),
(1003, 'YELLOW', 'MANAGER', 2500, 10, 200),
(1002, 'PINK', 'SALESMAN', 2200, 30, NULL);

Takiego rozwiązania nie implementuje ORACLE.

Lista wartości klauzuli VALUES może składać się ze stałych, funkcji lub wyrażeń.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 36


Wstawianie danych do tabeli

Źródłem danych dla instrukcji INSERT może być instrukcja SELECT odczytująca wartości z innych
tabel. Instrukcja SELECT może także zawierać wyrażenia.
Przykład:
INSERT INTO Budzet_Plac(Rok, Miesiac, Suma)
SELECT 2011, 12, Sum(sal + NVL(comm, 0))
FROM emp;

W tym przypadku tabela Budzet_plac już istnieje, a jej układ kolumn jest zgodny ze strukturą instrukcji
SELECT odczytującej rekordy, które zostaną dopisane do tabeli Budzet_Plac.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 37


Modyfikowanie danych w tabeli

UPDATE nazwa_tabeli
SET nazwa_kolumny = wyrażenie1, ...
[WHERE warunek];
np. aby zwiększyć wszystkim sprzedawcom pensję o 10%:

UPDATE Emp
SET Sal = Sal*1.1, Comm = 1000
WHERE Job = 'SALESMAN';

Pominięcie warunku WHERE spowoduje modyfikację danych we wszystkich wierszach tabeli.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 38


Usuwanie danych z tabeli

DELETE FROM nazwa_tabeli


[WHERE warunek];
np. aby usunąć wszystkich pracowników, którzy nie mają określonego stanowiska:

DELETE FROM Emp


WHERE Job IS NULL;

Pominięcie warunku WHERE spowoduje usunięcie danych ze wszystkich wierszy tabeli.

RBD 2013 Opracował Krzysztof Matejewski na podstawie materiałów Lecha Banachowskiego 39

You might also like