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