Laboratorium 2

Transkrypt

Laboratorium 2
Laboratorium Bazy danych SQL1
CREATE DATABASE nazwa_bazy;
tworzy bazę danych
DROP DATABASE nazwa_bazy;
usuwa istniejącą bazę danych
USE nazwa_bazy;
wybór bazy danych
SHOW DATABASES;
pokazuje nazwy wszystkich baz danych
CREATE TABLE nazwa_tabeli;
tworzy strukturę tabeli
DESCRIBE nazwa_tabeli;
wyświetla opis struktury tabeli
SHOW COLUMNS FROM nazwa_tabeli
LIKE 'wzorzec'
ALTER TABLE nazwa_tabeli;
rozszerzanie i modyfikowanie schematu tabeli
EXIT wyjście z programu
UWAGI:
•
Polecenia SQL mogą być rozmieszczone w kilku wierszach.
•
Polecenia SQL zakończ średnikiem.
•
Dobrym zwyczajem jest umieszczanie klauzul od nowych linii.
•
Nie wolno dzielić słowa pomiędzy wiersze.
•
Dozwolone jest używanie małych lub wielkich liter, chyba że sprawdzamy zawartość pola.
TWORZENIE TABEL
create table [IF NOT EXISTS] nazwa_relacji (
nazwa_atrybutu typ (rozmiar) [default wartość domyślna] [,]
[ [ constraint nazwa_ogr.] ograniczenie_atr ],
…
[ [ constraint nazwa_ogr.] ograniczenie_rel,…]
);
Ograniczenia:
•
null wartości puste;
•
not null bez wartości pustych;
•
unique klucz unikalny relacji;
•
primary key klucz podstawowy relacji (nie występuje przy ograniczeniu unique i
odwrotnie);
•
foreign key | references referencja do klucza podstawowego lub unikatowego innej relacji
(do definicji klucza obcego);
1
Laboratorium Bazy danych SQL1
•
on delete cascade ograniczenie definiowane dla klucza obcego; przy usuwaniu krotki z
relacji z kluczem podstawowym, usuwane są automatycznie krotki z relacji, w której
wartość klucza obcego jest równa wartości klucza podstawowego usuwanej krotki;
•
check ( warunek) warunek, który musi być spełniony przez wszystkie wartości atrybutu;
operatory ( =, <, !=, is null, like ( % - łańcuch o długości >= 0; _- pojedynczy znak) ,
between…and, in (…), and, or, not );
check jest ignorowany przez mysql;
•
default wartość domyślna kolumny.
Przykład 1
create table dydaktycy (
id_dydaktyka int(2) primary key,
nazwisko varchar(15) not null,
tytuł varchar(10)
);
create table przedmioty (
id_przedmiotu int(2),
nazwa varchar(15) not null,
constraint id_przedmiotu_pk primary key (id_przedmiotu)
);
create table zajecia (
id_zajec int(2) primary key,
rodzaj_zaj varchar(15) check (rodzaj_zaj in ( 'wykl', 'lab', 'cw', 'konw' )),
id_dyd int(2) ,
id_prz int(2) ,
data_rozpoczecia date
foreign key ( id_dyd ) references dydaktycy ( id_dydaktyka ),
foreign key ( id_prz ) references przedmioty ( id_przedmiotu )
);
2
Laboratorium Bazy danych SQL1
Rozszerzanie i modyfikowanie schematu tabeli
ALTER TABLE nazwa_tabeli rozszerzanie i modyfikowanie schematu tabeli
ADD nazwa_atrybutu typ (rozmiar) [default wartość domyślna]
[ [constraint nazwa_ogr] ograniczenie_atr ]; dodanie kolumny do tabeli
ADD [ constraint nazwa_ogr] ograniczenie_atr; dodanie ograniczenia integralnościowego
MODIFY nazwa_atrybutu typ (rozmiar) [default wartość domyślna]
[ null | not null ]; modyfikowanie typu kolumny
DROP unique | index | primary [foreing] key | constraint nazwa_ogr [cascade] usunięcie
ograniczenia
integralnościowego
Przykład2
alter table dydaktycy add etat varchar(20);
alter table dydaktycy
add constraint dyd_etat check (etat in ('dyrektor', 'profesor', 'adiunkt',
'asystent','wykladowca','starszy wykladowca' ));
alter table dydaktycy modify tytuł varchar(8) default 'mgr' not null;
alter table dydaktycydrop constraint dyd_etat;
Usuwanie tabeli
drop table nazwa_tabeli [cascade constraint];
Przykład 3
DROP TABLE osoby;
CREATE TABLE osoby(
id_osoby INT NOT NULL,
imie VARCHAR(15),
nazwisko VARCHAR(15),
wiek INT,
CONSTRAINT id_pk PRIMARY KEY (id_osoby)
);
3
Laboratorium Bazy danych SQL1
DESCRIBE osoby;
Wstawianie wiersza do tabeli:
INSERT INTO nazwa_relacji [(kolumna,kolumna,...)]
VALUES [(wartość,wartość, …), ...];
Przykład 4. Wstawianie wszystkich wartości pól w wierszu:
INSERT INTO osoby VALUES(1,'Adam','Nowak',19);
INSERT INTO osoby VALUES(1,'Adam','Nowak',22);
INSERT INTO osoby VALUES(2,'Iwona','Kowalska',56);
INSERT INTO osoby VALUES(3,'Lech','Nowakowski',56);
INSERT INTO osoby(pesel,imie,nazwisko,wiek)
VALUES(4,'Kazimierz','Kot',6);
INSERT INTO osoby VALUES
(10,'Adam','Nowak',19),
(20,'Adam','Nowak',19),
(40,'Adam','Nowak',19),
(60,'Adam','Nowak',19),
(70,'Adam','Nowak',19),
(80,'Adam','Nowak',19)
Wypisanie zawartości tabeli:
SELECT * FROM nazwa_tabeli;
Przykład 5:
SELECT * FROM osoby;
Przykład 6: Wstawianie wartości dla wybranych pól w wierszu:
INSERT INTO osoby(imie) VALUES('Kazimierz');
INSERT INTO osoby(id_osoby,imie) VALUES(5,'Jan');
INSERT INTO osoby(id_osoby,nazwisko) VALUES(6,'Niezbędny');
INSERT INTO osoby(id_osby,wiek) VALUES(7,41);
SELECT * FROM osoby;
4
Laboratorium Bazy danych SQL1
Do tabeli osoby dodać atrybut (kolumnę) plec, dla której dopuszczamy tylko dwie wartości 'K' –
kobieta, 'M' – mężczyzna.
DESCRIBE osoby;
Wypełnij pola następującymi wartościami:
INSERT INTO osoby VALUES(8,'Joanna','Wyzwolona',29,'F');
INSERT INTO osoby VALUES(8,'Joanna','Wyzwolona',29,'K');
SELECT * FROM osoby;
DESCRIBE osoby;
INSERT INTO osoby VALUES(9,'Zenon','Laskowik',26,'M','1981-04-12');
INSERT INTO osoby VALUES(10,'Helena','Lis',2,'K',DEFAULT);
INSERT INTO osoby VALUES(11,'Mateusz','Rybka',44,'M');
SELECT * FROM osoby;
Modyfikowanie wartości pól w wierszu:
UPDATE nazwa_tabeli
SET kolumna[,kolumna] = {wyrażenie | podzapytanie}
[WHERE waunki];
Wypełnić wszystkie puste pola w tabeli:
UPDATE osoby
SET nazwisko = 'Bryza', wiek = '33', plec = 'M', data_ur = '1974-06-05'
WHERE id_osoby = 5;
SELECT * FROM osoby;
Zamienić wartości w kolumnie plec tabeli osoby na 'K';
Zamienić wartości pól w kolumnie plec na 'M' wszystkim osobom, których imię nie kończy się na
'a'.
Usuwanie wierszy z tabeli:
DELETE FROM nazwa_tabeli
[WHERE warunki];
5
Laboratorium Bazy danych SQL1
Usuniecie wierszy spełniających warunek;
DELETE FROM osoby WHERE plec = 'K';
Usunięcie wszystkich wierszy:
DELETE FROM osoby;
\
Zadania do samodzielnego rozwiązania:
Zad. 1 Zdefiniować tabele zespol, etat i pracownik o schematach przedstawionych poniżej.
t_dostawca:
id_dostawcy integer(2) PRIMARY KEY,
nazwa varchar(30),
ulica varchar(30),
miejscowosc varchar(30),
wojewodztwo varchar(40),
kod varchar(15),
telefon varchar(15)
t_wydawca:
id_wydawcy integer(2) PRIMARY KEY,
nazwa varchar(10),
adres varchar(40)
t_ksiazka:
ISBN integer(2) PRIMARY KEY,
tytul varchar(40),
wydawca integer(2),
rok varchar(4),
oprawa varchar(10),
dostawca integer(2),
cena decimal(4,2),
ilosc integer,
klucze obce: wydawca, dostawca
6
Laboratorium Bazy danych SQL1
t_autor:
id_autora integer(2) PRIMARY KEY,
imie varchar(40),
nazwisko varchar(40)
t_a_ksiazki:
id_autora integer(2),
ISBN integer(2),
klucz główny: id_autora, ISBN
klucze obce: ISBN i id_autora
t_klient:
id_klienta integer(2) PRIMARY KEY,
imie varchar(30),
nazwisko varchar(40),
ulica varchar(30),
miasto varchar(30),
wojewodztwo varchar(30),
kod varchar(30),
telefon varchar(30)
t_zamowienie:
id_zam integer(2) primary key,
id_klienta integer(2),
data_Zam DATE,
karta integer(1),
zrealizowane integer(1),
klucz obcy: id_klienta
t_z_ksiazka:
id_zam integer(2),
isbn integer(2),
data_Wys DATE,
ilosc integer,
klucze obce: id_zam, ISBN
7
Laboratorium Bazy danych SQL1
Polecenie select umożliwia wyszukiwanie informacji w bazie danych przy użyciu operatorów
algebry relacji. Zawiera:
•
klauzulę select wskazującą atrybuty (kolumny), których wartości mają być wyświetlone,
•
klauzulę from wskazującą relację (tabelę), której dotyczy polecenie,
•
Klauzulę where umożliwiającą operację selekcji z algebry relacji.
Przykład 1. Wyświetlić zawartość wszystkich kolumn w tabeli t_ksiazka.
select * from t_ksiazka;
Przykład 2. Wyświetlić wartości kolumny wydawca wszystkich wierszy tabeli t_ksiazka.
select wydawca from t_ksiazka;
Wynikiem projekcji ograniczonej do małego zbioru kolumn (lub pojedynczej kolumny) może być
wyświetlenie tych samych informacji. Aby wyeliminować powtarzanie wierszy stosujemy w
klauzuli select operator distinct.
Przykład 3. Wyświetlić unikalne wartości kolumny wydawca tabeli t_ksiazka.
select distinct wydawca from t_ksiazka;
Klauzula select może zawierać:
➢ literały – dowolny łańcuch znaków, data lub liczba; jest dołączany automatycznie do każdego
wyświetlanego wiersza, zgodnie z umiejscowieniem w klauzuli select oraz do nagłówka kolumny,
której dotyczy.
Przykład 4. Z tabeli t_ksiazka wyświetlić tytuły oraz rok wydania poprzedzoną literałem ' wydany
w roku ' stanowiącym odrębną kolumnę.
select tytul, ' wydany w roku ', rok from t_ksiazka;
➢ wyrażenia arytmetyczne - konstruowane są z nazw kolumn i literałów numerycznych z użyciem
operatorów: dodawania (+), odejmowania (-), mnożenia (*) i dzielenia (/ ) (* i / maja wyższy
priorytet od + i -; w przypadku operatorów o tej samej ważności wyrażenie wartościowane jest od
lewej do prawej lub za pomocą nawiasów).
8
Laboratorium Bazy danych SQL1
Przykład 5. Wyświetlić tytuł oraz wartość iloczynu ceny i ilości z tabeli t_ksiazka.
select tytul, cena*ilosc from t_ksiazka;
➢ funkcje – przekształcają wartości kolumn i literałów, do których są stosowane.
Typ wynikowy
Opis
Przykład
COALESCE(list)
wartość niepusta zwraca pierwszą niepustą
wartość z listy (list)
wartość niepusta zwraca wartość (subst), gdy
not-NULL subst) nie da się odnaleźć szukanej
wartości
COALESCE(r,l,c)
IFNULL(input)
IFNULL(c, 'N/A')
➢ aliasy nazw atrybutów (kolumn) – alternatywna nazwa kolumny, występuje bezpośrednio po
nazwie kolumny.
Przykład 6. select tytul, cena* ilosc stan from t_ksiazka;
funkcja konkatenacji ( concat() ) - umożliwia łączenie wyświetlanych wartości różnych atrybutów
w pojedyncze łańcuchy znaków.
Przykład 7. select concat(ISBN, ': ', tytul, ' wydana w roku: ', rok) from t_ksiazka;
9
Laboratorium Bazy danych SQL1
Zadania do samodzielnego rozwiązania:
Zad 1. Wyświetlić unikalne wartości kolumny dostawca tabeli t_ksiazka.
Zad 2. Wyświetlić ISBN książek oraz wysokość marży, która stanowi 15% ceny ksiązki.
Zad 3. Wyświetlić ISBN oraz wydawców książek dostarczanych przez dostawcę o identyfikatorze
2.
Zad 4. Wyświetlić ISBN, cenę oraz ilość książek, których ilość nie przekracza 20 egzemplarzy.
Zad 5. Wyświetlić ISBN tych książek oraz cenę, których ilość znajduje się w przedziale od 1 do 5.
Zad 6. Wyświetlić nazwiska i imiona tych klientów, których identyfikator równy jest 1 lub 3.
Zad 8. Wyświetlić nazwisko tych klientów, których imię zawiera literę 'a' na dowolnym miejscu w
łańcuchu znaków.
Zad 9. Wyświetlić nazwisko oraz dane adresowe tych klientów, którzy mają na imię 'Adam' i ich
identyfikator jest nie większy niż 5.
Zad 10. Wyświetlić ISBN tych książek wydanych przez 'PWN' i 'HELION', których cena jest z
zakresu 8 do 30 zł..
10