bd w1 id 81977 Nieznany (2)

background image

Pawel@Kasprowski.pl Bazy danych

Bazy danych

Dr inż. Paweł Kasprowski

pawel@kasprowski.pl

Podstawy języka SQL

background image

Pawel@Kasprowski.pl Bazy danych

Plan wykładu

Plan wykładu

• Relacyjne bazy danych
• Język SQL
• Zapytania SQL (polecenie select)
• Bezpieczeństwo danych
• Integralność danych
• Współbieżność dostępu do danych
• Projektowanie schematu bazy danych (ERD)

background image

Pawel@Kasprowski.pl Bazy danych

Literatura

Literatura

• Jeffrey D. Ullman, J. Widom

Podstawowy wykład z systemów baz danych
WNT 2001

• Ramez Elmasri, Shamkant B. Navathe

Wprowadzenie do systemów baz danych
Helion 2004

• Marcin Szeliga

ABC języka SQL
Helion 2002

background image

Pawel@Kasprowski.pl Bazy danych

Sposób przechowywania danych

Sposób przechowywania danych

• Plik – zawiera rekordy (dane pracowników)
• Rekord – składa się z pól (pracownik Kowalski)
• Pole – zawiera pojedynczą wartość (nazwisko, imie,

data urodzenia)

• Pola mogą być różnych typów:

– tekstowe
– numeryczne
– daty i czasu

background image

Pawel@Kasprowski.pl Bazy danych

Nomenklatura

Nomenklatura

• Plik –> tablica
• Rekord –> wiersz
• Pole –> kolumna

background image

Pawel@Kasprowski.pl Bazy danych

Przykład

Przykład

• Pracownicy

pensja

dataur

adres

imie

nazwisko

background image

Pawel@Kasprowski.pl Bazy danych

Dodanie nazwy zespołu

Dodanie nazwy zespołu

• Pracownicy

• Problemy:

– redundancja danych
– problem ze zmianą nazwy zespołu
– zespół bez pracowników nie istnieje
– co jeśli chcemy przechować więcej informacji o zespołach?

pensja

nazwa

dataur

adres

imie

nazwisko

background image

Pawel@Kasprowski.pl Bazy danych

Przykład

Przykład

• Pracownicy

pensja

nazwa

dataur

adres

imie

nazwisko

background image

Pawel@Kasprowski.pl Bazy danych

Rozwiązanie

Rozwiązanie

druga tabela

druga tabela

• Pracownicy

• Zespoły

kierownik

telefon

budynek

nazwa

pensja

dataur

adres

imie

nazwisko

background image

Pawel@Kasprowski.pl Bazy danych

Problem

Problem

jak połączyć dwie

jak połączyć dwie

tablice?

tablice?

• Konieczna jest reguła mówiąca który wiersz "pasuje"

do którego

• Każdy wiersz musi więc mieć identyfikator – klucz
• Klucz to zbiór atrybutów unikalnych (różnych) dla

każdego wiersza

• Możemy przechowywać pary kluczy z dwóch tablic w

osobnej strukturze (model sieciowy)

background image

Pawel@Kasprowski.pl Bazy danych

Model relacyjny

Model relacyjny

• 1971 E.F. Codd – laboratoria IBM
• Tylko dane – brak innych struktur
• Nie ma specjalnych połączeń
• Połączenia wynikają z podobnych wartości atrybutów

w różnych tabelach

• W przypadku związku 1-N wystarczy przechować

klucz jednej tabeli w drugiej

background image

Pawel@Kasprowski.pl Bazy danych

Realizacja

Realizacja

• Dodajemy kolumnę nazwa zespołu do tablicy

pracowników (czy można odwrotnie?)

• Co jeśli nazwa zespołu nie jest unikalna?
• Odpowiedź:

należy w tablicy pracownicy umieścić klucz a więc
zbiór kolumn zapewniający jednoznaczną
identyfikację zespołu (np. nazwa, budynek, telefon)

• Jest to niewygodne – znowu redundancja – dlatego

często tworzy się specjalną kolumnę kluczową (np.
numer zespołu: idz)

background image

Pawel@Kasprowski.pl Bazy danych

Przykład

Przykład

• Pracownicy

idz

pensja

dataur

adres

imie

nazwisko

• Zespoły

idz

kierownik

telefon

budynek

nazwa

background image

Pawel@Kasprowski.pl Bazy danych

Przykład

Przykład

• Pracownicy

idz

pensja

dataur

adres

imie

nazwisko

• Zespoły

idz

kierownik

telefon

budynek

nazwa

background image

Pawel@Kasprowski.pl Bazy danych

Zalety rozwiązania

Zalety rozwiązania

• Nie ma redundancji
• Łatwo znaleźć zespół w którym pracuje pracownik
• Łatwo znaleźć wszystkich pracowników zespołu
• Zmiana atrybutów zespołu (nie licząc idz!) jest

bezproblemowa

• Baza składa się tylko z tablic – żadnych dodatkowych

struktur

background image

Pawel@Kasprowski.pl Bazy danych

Język SQL

Język SQL

1972 - Codd, model relacyjny
1974 - baza SYSTEM/R i język SEQUEL
1979 - Relational Software Inc. tworzy system Oracle
1986 - Ingres RDBMS – język QUEL
1989 - standard ANSI SQL (SQL-89)
1992 - ANSI SQL-92 – podstawowy standard

– stał się także standardem ISO

1999 - ANSI SQL-99 (6 części)

background image

Pawel@Kasprowski.pl Bazy danych

Język SQL

Język SQL

• Język deklaratywny – składa się poleceń
• Elementy języka:

– DDL Data Definition Language

• CREATE, ALTER, DROP

– DML Data Manipulation Language

• INSERT, UPDATE, DELETE

– DQL Data Query Language

• SELECT

– DCL Data Control Language

• GRANT, REVOKE, DENY

background image

Pawel@Kasprowski.pl Bazy danych

Tworzenie tabeli

Tworzenie tabeli

CREATE TABLE <nazwa>

(<kolumna> <typ> [<ograniczenia>] [,...])

Typy kolumn:
- tekstowe
- numeryczne
- datowe

Pomimo istnienia standardu istnieją różnice

w dostępnych typach dla różnych serwerów

background image

Pawel@Kasprowski.pl Bazy danych

Najważniejsze typy danych

Najważniejsze typy danych

• Typy tekstowe

– CHAR(n)
– VARCHAR(n)

• Typy numeryczne

– INT, SMALLINT, BIGINT
– DECIMAL(m, n)
– FLOAT, DOUBLE

• Typy datowe

– DATE, DATETIME, TIME, INTERVAL

• Inne typy

– BIT, BYTE, BOOLEAN
– SERIAL, AUTOINCREMENT
– BLOB, TEXT

background image

Pawel@Kasprowski.pl Bazy danych

Rodzaje ograniczeń

Rodzaje ograniczeń

• [ NOT ] NULL
• DEFAULT <wartość>
• UNIQUE
• CHECK (warunek)
• PRIMARY KEY
• FOREIGN KEY

background image

Pawel@Kasprowski.pl Bazy danych

Tworzenie tabeli

Tworzenie tabeli

CREATE TABLE prac (

idp int primary key,
nazw varchar(20) not null,
dataur date,
pensja decimal(7,2) default 2000

);

background image

Pawel@Kasprowski.pl Bazy danych

Modyfikacja tabeli

Modyfikacja tabeli

ALTER TABLE <nazwa> <opis_zmiany>

Przykłady:

ALTER TABLE prac ADD COLUMN idz INT
ALTER TABLE prac MODIFY COLUMN nazw varchar(50)

Składnia może się różnić dla różnych serwerów!

background image

Pawel@Kasprowski.pl Bazy danych

Usunięcie tabeli

Usunięcie tabeli

DROP TABLE <nazwa_tabeli>

Usuwa tabelę ze wszystkimi danymi

background image

Pawel@Kasprowski.pl Bazy danych

Praca z danymi

Praca z danymi

• INSERT – wstawienie wiersza/wierszy

INSERT INTO <tabela>[(<kolumny>)]

VALUES (<wartości>)

• UPDATE – modyfikacja wiersza/wierszy

UPDATE <tabela>

SET <kolumna>=<wartość>[, <kolumna>=<wartość>...]
WHERE <warunek>

• DELETE – usunięcie wiersza/wierszy

DELETE FROM <tabela>

WHERE <warunek>

background image

Pawel@Kasprowski.pl Bazy danych

Wstawianie wierszy

Wstawianie wierszy

CREATE TABLE prac (idp int unique, nazw varchar(20) not null,

dataur date, pensja decimal(7,2) default 2000 );

INSERT INTO prac VALUES(1,'Kowalski','1-1-1980',3000);
INSERT INTO prac(idp,nazw) VALUES(

1

,'Nowak');

-- Błąd: idp nie jest unikalny!

INSERT INTO prac(idp,nazw) VALUES(2,'Nowak');

-- OK: pola dataur=null, pensja=2000

INSERT INTO prac(idp,pensja) VALUES(3,5000);

-- Błąd: nazw nie może być null!

INSERT INTO prac(idp,nazw) <polecenie SELECT>

background image

Pawel@Kasprowski.pl Bazy danych

Modyfikacja wierszy

Modyfikacja wierszy

UPDATE prac SET nazw='Nowak' WHERE nazw='Kowalski'

-- Uwaga! Zmieni nazwiska WSZYSTKICH Kowalskich!

UPDATE prac SET nazw='Nowak' WHERE idp=8
UPDATE prac SET nazw='Nowak, dataur='1-1-1975' WHERE

pensja > 2000

Warunek WHERE nie jest obowiązkowy – można zmodyfikować
wszystkie wiersze. Można także używać wyrażeń:

UPDATE prac SET pensja=pensja+100

-- globalna podwyżka! – bardzo użyteczne

background image

Pawel@Kasprowski.pl Bazy danych

Usuwanie wierszy

Usuwanie wierszy

Usuń najlepiej zarabiających:

DELETE FROM prac WHERE pensja>3000

Usuń najstarszych:

DELETE FROM prac WHERE dataur<'1950'

Usuń starych dobrze zarabiających:

DELETE FROM prac WHERE dataur<'1950' AND pensja>3000

Warunek WHERE nie jest obowiązkowy

DELETE FROM prac

-- usuwa wszystkie rekordy z tablicy prac

background image

Pawel@Kasprowski.pl Bazy danych

Wyszukiwanie danych

Wyszukiwanie danych

• Najczęściej wykonywana operacja (wyrocznia!)
• Polecenie: SELECT
• Możliwości sporej rozbudowy tego polecenia
• Podstawowa składnia:

SELECT <kolumny>
FROM <tablice>
WHERE <warunki>

background image

Pawel@Kasprowski.pl Bazy danych

Przykłady SELECT

Przykłady SELECT

• Podaj nazwiska i pensje pracowników zakładu nr 5

SELECT nazw,pensja FROM prac WHERE idz=5

-- wynik: tablica w dwóch kolumnach

• Podaj nazwisko pracownika nr 8

SELECT nazw FROM prac WHERE idp=8

-- wynik: jeden wiersz, jedna kolumna

• Zamiast listy kolumn można podać *, WHERE jest

nieobowiązkowe:

SELECT * FROM prac

-- wynik: zawartość całej tablicy prac

background image

Pawel@Kasprowski.pl Bazy danych

Warunki

Warunki

• Porównania: =,<>,<,>,>=,<=
• [NOT] BETWEEN a AND b
• [NOT] IN (<lista wartości>)
• [NOT] LIKE 'tekst'

% - dowolny ciąg znaków
_ - dowolny znak

• Warunki logiczne: AND, OR

– AND ma wyższy priorytet!

• Wyrażenia algebraiczne (pensja*2>1000)

background image

Pawel@Kasprowski.pl Bazy danych

Przykłady warunków

Przykłady warunków

select * from prac where idp between 2 and 5
select * from prac where nazw in ('Wolski','Niemczyk')
select * from prac where nazw like 'Kro%'
select * from prac where nazw like 'Kowalsk_'
select * from prac where pensja/1000>2
select * from prac where nazw='Wolski' OR

nazwisko='Niemczyk'

select * from prac where nazw like 'A%' and

pensja=1000 or pensja=3000

background image

Pawel@Kasprowski.pl Bazy danych

Złączenia w select

Złączenia w select

• Podaj nazwiska pracowników zespołu

'Oprogramowanie'

Pracownicy
idp
nazw
dataur
idz

Zespoły
idz
nazwa
kierownik

Filtr na nazwę

Złączenie

wypisanie
nazwisk

background image

Pawel@Kasprowski.pl Bazy danych

Złączenia w select

Złączenia w select

• Podaj nazwiska pracowników zespołu

'Oprogramowanie'

select nazwiska
from prac

join

zesp

on prac.idz = zesp.idz

where nazwa= 'Oprogramowanie'

background image

Pawel@Kasprowski.pl Bazy danych

Złączenia w select

Złączenia w select

• Podaj nazwiska pracowników zespołu

'Oprogramowanie'

select nazwiska
from prac

p

join zesp

z

on

p

.idz =

z

.idz

where nazwa= 'Oprogramowanie'

Jeśli nie ma warunku połączenia – iloczyn kartezjański

(każdy wiersz z każdym)

warunek połączenia

background image

Pawel@Kasprowski.pl Bazy danych

Dziękuję za uwagę

Dziękuję za uwagę

Do zobaczenia...

materiały dostępne pod adresem:

www.kasprowski.pl


Wyszukiwarka

Podobne podstrony:
MSI w1 id 309783 Nieznany
KZ BD w09 id 256667 Nieznany
bd lab2 id 81995 Nieznany (2)
bd dbastudio id 81961 Nieznany (2)
BD 408e id 130025 Nieznany (2)
po w1 id 364234 Nieznany
PO W1 2 id 364238 Nieznany
KZ BD w07 id 256666 Nieznany
KZ BD w14 2 id 256670 Nieznany
4OS 2011 w1 id 39381 Nieznany (2)
KZ BD w12 id 256669 Nieznany
KZ BD w03 2 id 256664 Nieznany
Analiza finansowa w1 id 60384 Nieznany
KZ BD w11 2 id 256668 Nieznany
po w1 id 557610 Nieznany
MSIZ w1 id 309829 Nieznany
Fund w1 2 id 181442 Nieznany
MSI w1 id 309783 Nieznany
KZ BD w09 id 256667 Nieznany

więcej podobnych podstron