lekcja nr 2 - lokonopnicka.pl
Transkrypt
lekcja nr 2 - lokonopnicka.pl
Lekcja 2 PODSTAWY SQL Praca z danymi: filtrowanie, grupowanie, wiązanie 1. Łączymy się z bazą danych Enter password: 2. Utworzymy bazę nowa_firma z tabelami: pracownicy, dzialy 1 *lub dodamy pole szef z danymi do tabeli o nazwie pracownicy mysql> alter table pracownicy ADD szef varchar(20); **Wprowadź dane do pola szef wprowadzanie danych do pola szef – powinny być wprowadzone dane tak jak w tabeli poniższej. Później zmodyfikuj dane tak jak w drugiej tabel mysql> show tables; 3. Widzimy 2 tabele: dzialy i pracownicy Tabela pracownicy zmieniła się, zatem ją obejrzymy mysql> desc pracownicy; 4. * W tabeli pracownicy pojawiło się dodatkowe pole o nazwie szef – określa ono, kto jest szefem danego pracownika mysql> select * from pracownicy; * Część pracowników ma ustawionych szefa na 0, inni na 1, jeszcze inni na 2 **Ci, którzy mają w polu szef ustawione 0 to ci, którzy są szefami głównymi, nikt im nie podlega. **Ci, którzy mają w polu szef ustawione 1 to ci, którzy podlegają pod Jana Nowaka **Ci, którzy mają w polu szef ustawione 2 to ci, którzy podlegają pod Adama Kowalskiego POLECENIE LIKE (like – dopasowanie), wieloznacznik (zastępuje dowolną liczbę liter) w SQL-u jest % Zadanie: a) Chcemy wyświetlić z tabeli pracownicy, imiona i nazwiska kobiet. Zakładamy, że imiona kobiet kończą się na literę a 2 Zatem wpiszemy: mysql> select imie, nazwisko from pracownicy where imie like ‘%a’; *(Wynik – Agata, Anna, Matylda) b) Chcemy wyświetlić imiona kobiet rozpoczynających się na literę a Zatem wpiszemy: mysql> select imie, nazwisko from pracownicy where imie like ‘a%a’; *(Wynik – Agata, Anna) POLECENIE BETWEEN (pomiędzy) Wpiszmy: mysql> select * from pracownicy Zadanie: Wyświetl wszystkich pracowników zarabiających pomiędzy 1000 a 3000 1 sposób mysql> select * from pracownicy where zarobki > 1000 and zarobki <3000; 2 sposób mysql> select * from pracownicy where zarobki between 1000 and 3000; Zadanie Mając podane id pracowników: 2,4,8 podaj imiona i nazwiska pracowników 1 sposób: mysql> select imie, nazwisko from pracownicy where id=2 or id=4 or id=8; 2 sposób: polecenie in (in –czyli w (zawiera się w…) mysql> select imie, nazwisko from pracownicy where id in(2,4,8); GRUPOWANIE Wpiszmy: mysql> select * from pracownicy; mysql> select * from dzialy; Zadanie: Wypisz średnie zarobki w każdym dziale (czyli w dziale Produkcja i Marketing) Musimy zatem pogrupować pracowników według dzialów (odpowiednik sum pośrednich w Excelu) mysql> select nazwa, avg(zarobki) as srednia from pracownicy, dzialy where dzial=numer group by nazwa; * avg(zarobki) as srednia stosujemy alias, czyli nazwę zastępczą dla kolumny wyświetlanej: avg(zarobki) i zamiast tej nazwy użyjemy tytułu kolumny srednia * where dzial=numer wiążemy tabele między sobą za pomocą pola dzial z tabeli pracownicy i pola numer z tabeli dzialy * group by nazwa – grupujemy według pola nazwa (Produkcja, Marketing) Funkcja round – zaokrąglenie Jeśli chcemy zaokrąglić średnią zarobków do 2 miejsc po przecinku to musimy napisać ( 2) czyli zapis: mysql> select nazwa, round(avg(zarobki),2) as srednia from pracownicy, dzialy where dzial=numer group by round avg(zarobki), nazwa; Zadanie: Wypisz wszystkich pracowników (bez szefów) wraz z ich szefami Trudność polega na tym, że szefowie i pracownicy znajdują się w jednej tabeli, czyli w tabeli pracownicy. Jak zatem powiązać tabelę samą z sobą? *Nie można zapisać select * from pracownicy, pracownicy Jak to zatem rozwiązać? Należy nadać aliasy dla tych tabel Jak??? Użyjemy aliasów dla tej samej tabeli – tabeli pracownicy. Załóżmy, że tabela a to tabela szefów, tabela b to tabela pracowników mysql> select a.imie as imieSzefa, a.nazwisko as nazwiskoSzefa, b.imie, b.nazwisko from pracownicy a, pracownicy b where b.szef=a.id; * a.imie as imieSzefa – wybieramy imie z tabeli pracownicy (nazwaliśmy ją a), stosujemy alias za imie wybieramy nazwę imieSzefa * a.nazwisko as nazwiskoSzefa – wybieramy nazwisko z tabeli pracownicy (nazwaliśmy ją a), stosujemy alias za nazwisko wybieramy nazwę nazwiskoSzefa 3 * where b.szef=a.id; - wiążemy tabelę a z tabelą b za pomocą pola szef z tabeli b (dotyczącej szefów) z polem id z tabeli a (dotyczącej pracowników) 4