Laboratorium 3
Transkrypt
Laboratorium 3
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 o schematach przedstawionych poniżej. klasy: id_klasy integer PRIMARY KEY, nazwa char(2), rok_szkolny char(5) uczniowie: id_ucznia integer PRIMARY KEY, nazwisko varchar(15), imie varchar(10), data_urodzenia date, czy_chlopak char(1), id_klasy integer, klucz obcy: id_klasy rodzaje_ocen: id_rodzaju_oceny integer PRIMARY KEY, nazwa varchar(10) przedmioty: id_przedmiotu integer PRIMARY KEY, nazwa varchar(15) nauczyciele: id_nauczyciela integer PRIMARY KEY, imie varchar(10), nazwisko varchar(15), data_ur date, tytul varchar(3) 6 Laboratorium Bazy danych SQL1 oceny: id_oceny integer PRIMARY KEY, id_nauczyciela integer, id_przedmiotu integer, id_rodzaju_oceny integer, ocena decimal(2,1), data date, klucze obce: id_nauczyciela, id_ucznia, id_rodzaju_oceny, id_przedmiotu 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 uczniowie. select * from uczniowie; Przykład 2. Wyświetlić wartości kolumny imie wszystkich wierszy tabeli uczniowie. select imie from uczniowie; 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 imie tabeli uczniowie. select distinct imie from uczniowie; 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. 7 Laboratorium Bazy danych SQL1 Przykład 4. Z tabeli oceny wyświetlić id_ucznia oraz datę otrzymania oceny przedzoną literałem ' otrzymana w dniu ' stanowiącym odrębną kolumnę. select id_ucznia, ' otrzymana w dniu ', data from oceny; ➢ 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). Przykład 5. Wyświetlić id_ucznia oraz podwojoną ocenę z tabeli oceny. select id_ucznia, ocena*2 from oceny; ➢ 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 id_ucznia, ocena*2 as podwojona from oceny; select id_ucznia, ocena*2 podwojona from oceny; 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( id_ucznia, ' otrzymana w dniu ', data) A from oceny; Klauzula order by – występuje jako ostatnia klauzula w poleceniu select, powoduje posortowanie wierszy będących wynikiem zapytania według wartości atrybutu w niej wskazanego. Domyślnie sortowanie jest według narastającego porządku (asc), desc sortuje malejąco. 8 Laboratorium Bazy danych SQL1 select... from... where... ORDER BY nazwy(a)_kolumn(y) lub numer(y)_kolumn(y) [ASC/DESC]; Przykład 1. select distinct nazwisko, imie from uczniowie order by nazwisko; select distinct nazwisko, imie from uczniowie order by 1, 2 desc; 9 Laboratorium Bazy danych SQL1 Zadania do samodzielnego rozwiązania: Zad 1. Wyświetlić unikalne wartości kolumny imie z tabeli nauczyciele. Zad 2. Wyświetlić identyfikatory tych uczniów, którzy otrzymali oceny: 5 lub 6. Zad 3. Wyświetlić identyfikatory tych nauczycieli, którzy wystawili ocenę z przedmiotu o identyfikatorze 2. Zad 4. Wyświetlić identyfikator, imię i nazwisko, tych uczniów, którzy urodzili się pomiędzy '200501-01' a '2005-12-31'. Zad 5. Wyświetlić identyfikator ucznia, identyfikator nauczyciela oraz identyfikator rodzaju oceny tych ocen które są ocenami pozytywnymi. Zad 6. Wyświetlić nazwiska i imiona tych uczniów, których nazwisko zawiera literę 'a' na dowolnym miejscu w łańcuchu znaków lub imię to 'Adam' lub 'Iwona'. Zad 7. Wyświetlić nazwisko tych uczniów, którzy są chłopcami. Zad 8. Wyświetlić nazwisko oraz datę urodzenia tych nauczycieli, których imię zaczyna się na 'e' i są starsi niż 30 lat. (Użyj funkcji year(), która wyodrębnia rok z daty.) Zad 9. Wyświetlić identyfikator oceny oraz nazwisko i imię uczniów, którzy otrzymali ją przed '2016-10-01'. Zad.10 Wyświetlić nazwisko nauczyciela, który wystawił oceny z przedmiotu o identyfikatorze 3. Zad.11 Do każdego z rozwiązań powyższych zadań dodać klauzulę sortowania na przemian rosnąco i malejąco według samodzielnie wybranej kolumny. 10