190 likes | 327 Views
Zapytania SQL. Kilka dodatkowych poleceń. SHOW FIELDS FROM ksiazka; - pokazuje pole z tabeli … ALTER TABLE ksiazka ADD imie VARCHAR(25); - dodaje kolumnę imię do tabeli książka ALTER TABLE ksiazka CHANGE naasswizko nazwisko VARCHAR(25); - zmiana nazwy kolumny w tabeli
E N D
Kilka dodatkowych poleceń SHOW FIELDS FROM ksiazka; - pokazuje pole z tabeli … ALTER TABLE ksiazka ADD imie VARCHAR(25); - dodaje kolumnę imię do tabeli książka ALTER TABLE ksiazka CHANGEnaasswizkonazwisko VARCHAR(25); - zmiana nazwy kolumny w tabeli ALTER TABLE ksiazka DROP nazwisko; - usuwanie z tabeli książka kolumny nazwisko
Sortowanie SELECT * FROM ksiazka ORDER BY nazwisko; - wyświetlanie po nazwisku SELECT * FROM ksiazka ORDER BY nazwisko ASC; - ASC oznacza sortowanie rosnąco według podanego pola SELECT * FROM ksiazka ORDER BY nazwisko DESC; - DESC natomiast oznacza sortowanie malejące SELECT * FROM pracownicy LIMIT 2; - spowoduje wyświetlenie się dwóch pierwszych rekordów SELECT * FROM pracownicy LIMIT 2, 5; - spowoduje wyświetlenie się rekordów od … do
Sortowanie SELECT * FROM pracownicy WHERE nazwisko LIKE 'K%'; - spowoduje wyświetlenie się wszystkich pracowników których nazwisko zaczyna się na literę K Dzięki zastosowaniu znaków globalnych (% i _) istnieje możliwość przyrównania do dowolnego ciągu znaków. Znak '%' (procent) zastępuje dowolną ilość znaków. Znak '_' (podkreślenie) zastępuje dokładnie jeden znak SELECT imie, nazwisko FROM pracownicy WHERE nazwisko LIKE 'Kowalsk_';
Sortowanie SELECT * FROM ksiazka WHERE nazwisko = ‘nowak' ANDimie = ‘jan' ANDtelefon = ‘666-666-666'; SELECT * FROM ksiazka WHERE nazwisko = ‘nowak' ORimie = jan'; SELECT * FROM ksiazka WHERE idBETWEEN ‘1' AND ‘10'; SELECT * FROM ksiazka WHERE id >= ‘1' AND id <= ‘10';
Wyróżnienia „Odczytaj wszystkie krotki z tabeli pracownicy; z każdej z tych krotek wyciągnij wartości atrybutów IMIE, NAZWISKO i PLACA_POD; IMIE i NAZWISKO skonkatenuj ze sobą i spacją (‘ ‘), a PLACE_POD pomnóż razy 12; wyniki tych operacji zwróć w relacji wynikowej.”.
Wyróżnienia – stary SQL SELECT CONCAT(`nazwa_kolumny1`,`nazwa_kolumny2`)FROM `osoby` Przykład CONCAT() Wyświetl tekst powstały z połączenia imienia z nazwiskiem SELECT CONCAT(`imię`,`nazwisko`)FROM `osoby`
Wyróżnienia Operatory: ‘*’ - operator to zwykły operator mnożenia. Prócz operatora mnożenia, na danych liczbowych (takich jak pensja), można również stosować operatory: dodawania (‘+’), odejmowania (‘-’), dzielenia (‘/’) i zmiany znaku (‘-’), oraz operatory zmiany priorytetu (‘(‘ i ‘)’). Stąd, wyrażenie PLACA_POD*12 oznacza, że dla każdej kolejno odczytywanej krotki reprezentującej pracownika z bazy danych, obliczy i zwróci jego roczną płacę (atrybut PLACA_POD reprezentuje płacę miesięczną). ‘||’ - operatorem konkatenacji. W poleceniu przedstawionym na slajdzie wykorzystano go w wyrażeniu IMIE||' '||NAZWISKO. Użycie tego wyrażenia oznacza, że dla każdej kolejnej krotki wykonuje, i zwraca w relacji wynikowej, konkatenację imienia, spacji i nazwiska pracownika. Należy tutaj zwrócić uwagę na fakt, iż stałe typu łańcuchowego są w języku SQL otaczane apostrofami (np. stała ‘ ‘ w wyrażeniu IMIE||' '||NAZWISKO oznaczająca spację). W przeciwieństwie do stałych typu łańcuchowego, stałe typu liczbowego nie wymagają żadnych dodatkowych oznaczeń. Podsumowując, nieco bardziej rozbudowana wersja polecenia SELECT wygląda następująco: SELECT {wyrażenie1, wyrażenie2,.....} FROM {nazwa relacji};
Aliasy „Odczytaj wszystkie krotki z tabeli pracownicy; z każdej z tych krotek wyciągnij wartości atrybutów IMIE, NAZWISKO i PLACA_POD; IMIE i NAZWISKO skonkatenuj ze sobą i spacją (‘ ‘), a PLACE_POD pomnóż razy 12; wyniki tych operacji zwróć w relacji wynikowej.”.
Sortowanie – współpraca tabel Jeśli chcemy wyświetlić dane z wielu tabel konieczne jest określenie sposobu łączenia krotek występujących w tych tabelach. W domyślnej postaci tworzony jest bowiem iloczyn kartezjański wszystkich krotek, co zazwyczaj nie jest pożądane. Rozwiązaniem tego problemu może być określenie warunku, który będzie wymagał aby wartości kolumn w dwóch tabelach były identyczne (np. Osoby.PESEL = Adresy.PESEL). To rozwiązanie nie jest jednak doskonałe, gdyż w wyniku zostaną pominięte krotki, których wartość (lub zbiór wartości) dla łączonych atrybutów nie występuje w łączonej tabeli. W języku SQL występuje specjalna klauzula JOIN, która pozwala rozwiązać problem tego rodzaju. Składnia polecenia SELECT z klauzulą JOIN jest następująca: SELECT * FROM table1 JOIN table2 ON condition ...
Sortowanie – współpraca tabel SELECT * FROM table1 JOIN table2 ON condition ... condition określa sposób łączenia krotek. Zazwyczaj w warunku będzie wymagało się, żeby wartość kolumny w jednej tabeli była taka sama jak wartość kolumny w innej tabeli (table1.columnA = table2.columnB). Występują trzy wersje klauzuli JOIN: INNER LEFT [OUTER] RIGHT [OUTER]
Sortowanie – współpraca tabel SELECT * FROM table1 JOIN table2 ON condition ...
Sortowanie – współpraca tabel SELECT * FROM table1 JOIN table2 ON condition ... W przypadku INNER JOIN dana krotka zostanie uwzględniona wyłącznie w wypadku, gdy w drugiej tabeli występuje krotka (lub krotki), których wartość dla kolumn określonych w warunku jest taka sama. Klauzula INNER jest opcjonalna (tzn. klauzula JOIN bez modyfikatorów działa jak INNER JOIN). Dla zapytania: SELECT Imie, Nazwisko, Osoby.PESEL, Adresy.PESEL, Ulica, Nr FROM Osoby JOIN Adresy ON Osoby.PESEL = Adresy.PESEL otrzymamy wynik:
Sortowanie – współpraca tabel SELECT * FROM table1 JOIN table2 ON condition ... W przypadku LEFT JOIN dana krotka zostanie uwzględniona w wyniku, nawet jeżeli w drugiej tabeli nie będzie krotek, które mogłyby być z nią połączone (dla których były spełniony warunek ON…). Dla zapytania: SELECT Imie, Nazwisko, Osoby.PESEL, Adresy.PESEL, Ulica, Nr FROM Osoby LEFTJOIN Adresy ON Osoby.PESEL = Adresy.PESEL otrzymamy wynik:
Sortowanie – współpraca tabel SELECT * FROM table1 JOIN table2 ON condition ... W przypadku RIGHT JOIN uwzględniane są krotki z drugiej tabeli, które nie posiadają odpowiedników wśród krotek tabeli pierwszej. Dla zapytania: SELECT Imie, Nazwisko, Osoby.PESEL, Adresy.PESEL, Ulica, Nr FROM Osoby RIGHT JOIN Adresy ON Osoby.PESEL = Adresy.PESEL otrzymamy wynik: Pozostałe klauzule opisane wyżej (np. ORDER BY, LIMIT, etc.) działają również w przypadku łączenia wielu tabel.
Aktualizowanie danych UPDATE table1 SET table1.col = table2.col1 FROM table2 WHERE table2.oldCol = table1.col
Ćwiczenia do wykonania Proszę Państwa postępy w wykonywaniu ćwiczeń dokumentować co jakiś czas w pliku txt (proszę tego pilnować, konsola ma ograniczoną długość więc wpisane przez Państwa komendy po jakimś czasie znikają). Wydrukowany plik należy dostarczyć na następne laboratorium. 1. Dodać 2 kolumny do pierwszej tabeli 2. Zmienić nazwę kolumny z takiej jaką Państwo dodali, odpowiednio na „dodana_1” i „dodana_2” 3. Usunąć kolumnę „dodana_2” 4. Skopiować kolumnę 2 z tabeli2 do kolumny „dodana_1” ,wyświeltić nowo powstałą tabelę (skopiować od pliku) 5.Wykonać po 5 różnych zapytań z poleceniami ORDER BY … ORDER BY ASC …DESC oraz LIMIT (plik) 6. Wykonać klauzurę 5 razy (dla różnych wywołań )LIKE dla każdej z tekstowych kolumn w 1 tabeli tak aby klauzura ta zawierała znacznik % oraz _ (plik) 7. Polecenie wyżej powtórzyć używając 1 raz dla każdej kolumny teksotwej polecenia LIKE i LIMIT jednoczenie, ustawiając LIMIT na mniejszą wartość niż normalnie wyświetlana.
Ćwiczenia do wykonania • 8. Użyć warunków WHERE AND , WHERE OR , WHERE BETWEEN 5razy dla • wybranej tabeli • 9. Wyświetlić z 1 tabeli kolumnę 1 i 3 z pomięciem 2 a następnie 2 i 4 z • pomięciem 3. • Wyróżnić z tabeli 1, pierwszą i druga kolumnie w jednej nowej kolumnie a obok niezmienioną kolumnę 3 z tabeli 1 • Użyć polecenia AS dla nowo powstałych kolumn z polecenia 10. • Współpraca między tabelami : • Wyświetlenie wszystkiego z tabeli 1 i 2 dla wspólnych wierszy z tożsamych kolumn z pominięciem tych kolumn • Operację powtarzamy dla tabeli 2 i 3 • Powtórz operację dodając polecenie WHERE i ORDER BY • Powtarzamy operację używając polecenia LIKE