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