Laboratorium 1
Transkrypt
Laboratorium 1
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 ) ); 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 2 Laboratorium Bazy danych SQL1 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) ); DESCRIBE osoby; Wstawianie wiersza do tabeli: INSERT INTO nazwa_relacji [(kolumna,kolumna,...)] VALUES [(wartość,wartość, …), ...]; 3 Laboratorium Bazy danych SQL1 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; Do tabeli osoby dodać atrybut (kolumnę) plec, dla której dopuszczamy tylko dwie wartości 'K' – kobieta, 'M' – mężczyzna. DESCRIBE osoby; 4 Laboratorium Bazy danych SQL1 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]; Usuniecie wierszy spełniajacych warunek; DELETE FROM osoby WHERE plec = 'K'; Usunięcie wszystkich wierszy: DELETE FROM osoby; 5 Laboratorium Bazy danych SQL1 Zadania do samodzielnego rozwiazania: Zad. 1 Zdefiniować tabele zespol, etat i pracownik o schematach przedstawionych poniżej. zespol id_zesp int(2) klucz podstawowy nazwa varchar(20) atrybut obowiązkowy etat nazwa varchar(10) klucz podstawowy placa_min decimal(6,2) atrybut obowiązkowy, wartość > 0 placa_max decimal(6,2) atrybut obowiązkowy, wartość <= 5000 pracownik numer int(4) klucz podstawowy nazwisko varchar(15) atrybut obowiązkowy etat varchar(10) klucz obcy referencja do atrybutu nazwa tabeli etat szef int(4) referencja do atrybutu numer tabeli pracownik pracuje_od date placa podst decimal(6,2) placa_dod decimal(6,2) domyślna wartość 0 id_zesp int(2) klucz obcy referencja do atrybutu id_zesp tabeli zespol Zad. 2 Do tabeli pracownik dodać opcjonalny atrybut nr_telefonu typu znakowego o długości 10 znaków. 6 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 pracownik. select * from pracownik; Przykład 2. Wyświetlić wartości kolumny etat wszystkich wierszy tabeli pracownik. select etat from pracownik; 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 etat tabeli pracownik. select distinct etat from pracownik; 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 pracownik wyświetlić nazwiska oraz datę przyjęcia do pracy (pracuje_od) poprzedzoną literałem ' pracuje od ' stanowiącym odrębną kolumnę. select nazwisko, ' pracuje od ', pracuje_od from pracownik; ➢ 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). 7 Laboratorium Bazy danych SQL1 Przykład 5. Wyświetlić nazwisko oraz potrojoną wartość sumy płacy podstawowej i dodatkowej z tabeli pracownik. select nazwisko, (placa_pod+placa_dod)*3 from pracownik; ➢ 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') Przykład 6. Wyświetlić nazwisko oraz potrojoną wartość sumy płacy podstawowej i dodatkowej z tabeli pracownik. select nazwisko, (placa_pod + ifnull(placa_dod,0))*3 from pracownik; select nazwisko, (placa_pod + coalesce(placa_dod,0))*3 from pracownik; Przykład 7. Wyświetlić nazwiska wszystkich pracowników wraz z ich dzienną płacą podstawową, którą zaokrąglono do 1 miejsca po przecinku. select nazwisko, round(placa_pod/31,1) from pracownik; ➢ aliasy nazw atrybutów (kolumn) – alternatywna nazwa kolumny, występuje bezpośrednio po nazwie kolumny. Przykład 8. select nazwisko, placa_pod/2 srednia from pracownik; Przykład 9. select nazwisko, round(placa_pod/31,1) as dniowka from pracownik; funkcja konkatenacji ( concat() ) - umożliwia łączenie wyświetlanych wartości różnych atrybutów w pojedyncze łańcuchy znaków. Przykład 10. select concat(numer, ': ', nazwisko, ' pracuje na etacie ', etat) from pracownik; 8 Laboratorium Bazy danych SQL1 Zad 1. Wyświetlić unikalne wartości kolumny nazwisko tabeli pracownik. Zad 2. Wyświetlić nazwiska pracowników oraz ich kwartalną płacę. Zad 3. Wyświetlić nazwiska oraz identyfikator zespołu pracowników zatrudnionych na etacie 'asystent'. Zad 4. Wyświetlić nazwiska, płacę podstawową oraz płacę dodatkową tych pracowników, których płaca podstawowa jest mniejsza od podwojonej płacy dodatkowej. Zad 5. Wyświetlić nazwiska pracowników nie posiadających płacy dodatkowej. Zad 6. Wyświetlić nazwiska tych pracowników oraz ich płacę dodatkową, których płaca podstawowa znajduje się w przedziale od 1000 do 2000 zł w formacie: Kowalski zarabia dodatkowo 2000 zł rocznie Zad 7. Wyświetlić nazwiska tych pracowników oraz ich płacę dodatkową, których płaca podstawowa wynosi dokładnie 1000 lub 2000 zł. Zad 8. Wyświetlić nazwisko tych pracowników, których nazwa etatu zawiera literę 'a' na dowolnym miejscu w łańcuchu znaków. Zad 9. Wyświetlić nazwisko oraz płacę podstawową tych pracowników, którzy są adiunktami i ich płaca dodatkowa jest nie większa od 2000. Zad 10. Wyświetlić nazwisko tych pracowników na etacie adiunkta lub asystenta, których płaca podstawowa jest z zakresu 800 do 2 300. Zad 11. Zmodyfikuj dodając na końcu nazwiska litery 'owa' nazwiska wszystkich tych osób w tabeli pracownik, którzy pracują od '2000-01-01'. 9