Na dzisiejszych zajęciach nauczymy się, jak zmieniać zawartość bazy danych używając języka SQL. --------------------------------------------------------------------- Zadanie 1 ========= Nowe wiersze do istniejącej tabeli wstawia się poleceniem INSERT INSERT INTO tabela VALUES (wartość, wartość, ...); na przykład aby umieścić krowy w naszym zwierzyńcu INSERT INTO Gatunki VALUES ('krowa', 'nie', 'Europa', 'siano'); Możemy dodać nowy rekord podając tylko niektóre wartości, wówczas pozostałe ustawią się domyślnie (najczęściej na NULL). Jeśli pomijamy końcowe kolumny, to nic specjalnego nie musimy robić. INSERT INTO Gatunki VALUES ('koza', 'nie', 'Europa'); Inaczej będzie, gdy pomijamy inne kolumny, na przykład pierwszą. Musimy wtedy po nazwie tabeli wymienić kolumny, których wartości podajemy. Tak musimy zrobić dla tabeli Zwierzaki, poniważ wartość w pierwszej kolumnie (id) jest tworzona automatycznie INSERT INTO Zwierzaki(gatunek,imie,plec,wiek,waga) VALUES ('krowa', 'Mećka', 'z', 2, 248); Ponadto można wstawić cały wynik jakiegoś zapytania, pod warunkiem, że typy kolumn i ich ilość będą zgadzały się z tabelą do jakiej wstawiamy. Przykładowo jeżeli żony wszystkich sprzedawców zostały zatrudnione do rozwożenia pizzy możemy je wstawić wykonując zapytanie: INSERT INTO emp (empno, ename, job, hiredate, sal, deptno) (SELECT empno+1000, CONCAT('MRS.', ename), 'PIZZA GUY', sysdate, 500, 10 FROM emp WHERE job = 'SALESMAN'); UPDATE emp SET sal = sal/2; Wiersze w tabeli modyfikuje się poleceniem UPDATE: UPDATE tabela SET pole = wartość, pole = wartość, ... WHERE warunek; Przykładowo: UPDATE Zwierzaki SET wiek = wiek + 1; -- znów minął rok UPDATE Zwierzaki SET waga = waga * 1.2 WHERE gatunek = 'szympans'; Kasowanie rekordów także jest bardzo proste, wystarczy podać nazwę tabeli i warunek na wiersze do skasowania. DELETE FROM tabela WHERE warunek; na przykład pozbywamy się lwów DELETE FROM Zwierzaki WHERE gatunek = 'lew'; Uważajcie jednak, to też działa DELETE FROM Zwierzaki; (i nie ma cofnij). ------------------------------------------------------------------------- Zadanie 2 ========= 1. Do tabeli z gatunkami wstaw likaona z Afryki. 2. Wstaw nowego jednorocznego zwierzaka tego gatunku (jakoś go nazwij). 3. Utucz wszystkie slonie o 10%. 4. Usuń wszystkie zwierzaki, których imię zaczyna się literą ,G'. ------------------------------------------------------------------------- Zadanie 3 ========= Polecenie tworzące tabelę w SQL ma następującą postać: CREATE TABLE tabela ( kolumna_1 typ_danych [dodatkowe warunki], kolumna_2 typ_danych [dodatkowe warunki], ... kolumna_n typ_danych [dodatkowe warunki], [dodatkowe warunki] ); Podstawowe typy danych W SQL to: CHAR(n) - napis o stałej długości n VARCHAR(n) - napis o zmiennej długości nieprzekraczającej n INTEGER - liczba całkowita NUMERIC(n,k) - liczba mająca n cyfr, z czego k znajduje się po kropce (u nas po przecinku) DATE - data TIME - czas TIMESTAMP - data wraz z czasem TEXT - długi napis, w zasadzie o nieograniczonej długości (unikać) Na kolumnach można określić dodatkowe warunki. Pp pierwsze, możemy zażądać, żeby wartoć była wymagana. Robi się to deklaracją NOT NULL Czasami chcemy, żeby każda wartość w kolumnie była różna od pozostałych, na przykład numer linii tramwajowej. Robi się to deklaracją UNIQUE W szczególności zaleca się, żeby w każdej tabeli określić kolumnę (lub kilka kolumn), będącą unikalnym identyfikatorem wiersza. Taką kolumnę można zadeklarować jako UNIQUE NOT NULL ale istnieje na to oddzielna deklaracja PRIMARY KEY Taką kolumnę nazywamy kluczem głównym, klucz główny tabeli może być tylko jeden. Deklaracja wartości domyślnej (używanej, gdy nie podano wartości podczas wstawiania) to DEFAULT ... Domyślną wartością domyślną jest NULL (o ile nie było deklaracji NOT NULL). Wszelkie inne warunki podajemy deklaracją CHECK No to zdefiniujmy tabelę Pokarmy CREATE TABLE Pokarmy ( nazwa VARCHAR(10) PRIMARY KEY, dostawca VARCHAR(50) NOT NULL, waga_paczki INTEGER ); Pod definicją kolumn możemy dodać dodatkowe warunki dla kombinacji kolumn, na przykład unikalność UNIQUE(dostawca, waga_paczki) oznacza, że dla danego dostawcy waga paczki jest ustalona (i nie zależy od pokarmu. Jeżeli coś źle zdefiniujemy, np. ustawimy za krótkie pole tekstowe, możemy to zmienić poleceniem ALTER TABLE: ALTER TABLE Gatunki ALTER przysmak TYPE VARCHAR(12); ALTER TABLE Pokarmy ALTER nazwa TYPE VARCHAR(12); Zadanie 4. ========== Stwórz tabelę Student(imie, nazwisko, nr_indeksu, plec, aktywny, data_przyjecia) nie zapominając o odpowiednich warunkach na kolumny. Tabelę kasuje się (bezpowrotnie) poleceniem DROP TABLE tabela ------------------------------------------------------------------ SQL zawiera nieco wbudowanych funkcji. Obejrzyj format dat, funkcje na datach oraz funkcje na napisach, na przykład w przewodniku po Postgresie (rozdział 2) albo w oficjalnej dokumentacji. Zadanie 5. ========== Dla każdego gatunku wypisz tekst postaci " z kontynentu " ========================================================== Odpowiedzi: 2.1 INSERT INTO Gatunki VALUES ('likaon', NULL, 'Afryka'); 2.2 INSERT INTO Zwierzaki(imie, gatunek) VALUES('Likuś', 'likaon'); 2.3 UPDATE Zwierzaki SET waga = waga * 1.1 WHERE gatunek = 'słoń'; 2.4 DELETE FROM Zwierzaki WHERE imie LIKE 'G%'; 4 CREATE TABLE Student ( imie VARCHAR(15) NOT NULL, nazwisko VARCHAR(30) NOT NULL, nr_indeksu CHAR(6) PRIMARY KEY, plec CHAR(1) CHECK (plec IN ('m','z')), aktywny BOOLEAN DEFAULT TRUE, data_przyjecia DATE);