Zajęcia NR 6 MI14

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 5

Składnia instrukcji INSERT

INSERT INTO nazwa_tabeli (pole1, pole2,…)


VALUES (wartosc1, wartosc2,…) - wstawienie 1 rekordu
INSERT INTO nazwa_tabeli (pole1, pole2,…)
VALUES (wartosc1, wartosc2,…), (wartosc11, wartosc12,…),(….) - wstawienie kilku rekordów
INSERT INTO nazwa_tabeli (pole1, pole2,…)
SELECT poleA, poleB,.. FROM inna_tabela - wstawienie rekordów z innej tabeli
Przykład:
INSERT INTO oceny
(Iducznia, idnauczyciela,idprzedmiotu,IdRodzajuOceny,Ocena,Data)
VALUES
(1,3,4,3,6,'2022-09-26'),
(2,3,4,3,5,'2022-09-26'),
(3,3,4,3,6,'2022-09-26'),
(4,3,4,3,3,'2022-09-26'),
(4,3,4,3,6,'2022-09-26');
Wykonaj zapytania SELECT na bazie SZKOLA
1. Wyświetlenie wszystkich pól z tabeli uczniowie
SELECT * FROM uczniowie
2. Wyświetlenie pól: imie, nazwisko z tabeli uczniowie
SELECT imie, nazwisko FROM uczniowie
3. Wyświetlenie pól imie, nazwisko z tabeli uczniowie uporządkowanych wg nazwiska
SELECT imie, nazwisko FROM uczniowie ORDER BY nazwisko,imie
4. Wyświetlenie pól imie, nazwisko z tabeli uczniowie uporządkowanych wg nazwiska –dla 3
początkowych uczniów
SELECT imie, nazwisko FROM uczniowie ORDER BY nazwisko LIMIT 3
5. Wyświetlenie pól imie i nazwisko jako Uczen z tabeli uczniowie gdzie klasa=1
SELECT CONCAT(imie, ‘ ‘,nazwisko) AS uczen FROM uczniowie
6. Wyświetlenie pól imie, nazwisko z tabeli uczniowie gdzie klasa=1
SELECT imie, nazwisko FROM uczniowie WHERE klasa=1
7. Wyświetlenie pól imie, nazwisko z tabeli uczniowie gdzie nazwisko zaczyna się na literę K
SELECT imie, nazwisko FROM uczniowie WHERE nazwisko LIKE ‘K%’
8. Wyświetlenie pól imie, nazwisko z tabeli uczniowie, wszyscy uczniowie z klas pierwszych
SELECT imie, nazwisko FROM uczniowie WHERE nazwisko LIKE ‘_o%’
9. Wyświetlenie liczby uczniów w każdej klasie:
SELECT klasa, COUNT(nazwisko) AS LiczbaUczniow
FROM uczniowie
GROUP BY klasa
10. Wyświetlenie liczby uczniów w klasach gdzie uczniów jest więcej niż 5.:
SELECT klasa, COUNT(nazwisko) AS LiczbaUczniow FROM uczniowie
GROUP BY klasa HAVING COUNT(nazwisko)>5;
11. Wyświetlenie pol imie, nazwisko z tabeli uczniowie oraz nazwa z tabeli klasy
SELECT imie, nazwisko, nazwa
FROM uczniowie INNER JOIN Klasy ON uczniowie.klasa=klasy.KlasaId
ORDER BY nazwa
12. Usuń klucz obcy dla pola klasa w tabeli uczniowie.
Dopisz ucznia Emilia Zwolińska. Pole klasa pozostaw puste.
Dopisz klasę o nazwie 2pta. Będzie to klasa bez uczniow
13. Wyświetl listę wszystkich uczniów z tabeli uczniowie oraz nazwę klasy, do której są
przypisani.
SELECT imie, nazwisko, nazwa
FROM uczniowie LEFT OUTER JOIN Klasy ON uczniowie.klasa=klasy.KlasaId
14. Wyświetl listę nazw wszystkich klas oraz imiona i nazwiska uczniów
SELECT imie, nazwisko, nazwa
FROM uczniowie RIGHT OUTER JOIN Klasy ON uczniowie.klasa=klasy.KlasaId
-----------------------
15. Wyświetl informacji o ocenach uczniów w postaci:

imie 
nazwisko przedmiot kategoria ocena data

sprawdzia
Anna Nowak WF bardzo dobry 2020-09-22
n
Anna Nowak Fizyka kartkówka bardzo dobry 2020-09-24
Anna Nowak Matematyka kartkówka dopuszczajacy 2020-09-21
sprawdzia
Ewa Kos WF celujacy 2020-09-22
n
Ewa Kos Fizyka kartkówka celujacy 2020-09-24
Ewa Kos Matematyka kartkówka dopuszczajacy 2020-09-21
Jan Kowalski Matematyka kartkówka dostateczny 2020-09-21
sprawdzia
Jan Kowalski WF bardzo dobry 2020-09-22
n
Jan Kowalski Fizyka kartkówka dobry 2020-09-24

16. Wyświetl listę nazwisk z tabeli uczniowie


17. Wyświetl listę niepowtarzalnych nazwisk z tabeli uczniowie. Użyj klauzuli DISTINCT
18. Wyświetl imiona i nazwiska uczniów, którzy nie mają wypełnionego pola klasa
19. Wyświetl listę ocen wystawionych między 22.09.2022 a 24.09.2022
20. Wprowadź do tabeli uczniowie ucznia Eustachy Zaremba
Wprowadź do tabeli nauczyciele nauczyciela o takim samym imieniu i nazwisku: Eustachy
Zaremba
21. Wyświetl imiona i nazwiska uczniów i nauczycieli. Przy nazwisku określ funkcję
osoby w szkole „uczeń”/”nauczyciel”
select imie, nazwisko, "uczeń" AS Funkcja from uczniowie
UNION
select imie, nazwisko, "Nauczyciel" FROM nauczyciele
22. Zamiast UNION użyj UNION ALL – zauważ różnice w sytuacji, gdy istnieje uczeń i
nauczyciel o tym samym imieniu i nazwisku
23. Zamiast UNION użyj INTERSECT –
24. Zamiast UNION użyj EXCEPT –
Ad 15)
select uczniowie.imie, uczniowie.nazwisko, przedmioty.nazwa, rodzajeOcen.nazwa,
nazwyoceny.nazwaPelna
FROM uczniowie INNER JOIN Oceny ON uczniowie.uczen_id=oceny.IdUcznia
INNER JOIN Przedmioty ON oceny.IdPrzedmiotu=przedmioty.przedmiot_id
INNER JOIN rodzajeocen ON rodzajeocen.rodzajeOcen_Id=oceny.IdRodzajuOceny
INNER JOIN nazwyoceny ON oceny.ocena=nazwyoceny.nazwaOceny_id

WIDOKI w bazie danych

Jeżeli chcemy wielokrotnie generować takie same zapytania a w dodatku je filtrować na podstawie
np. zakresów dat, lub skomplikowane zapytania miałyby być częścią kodu PHP aplikacji
internetowej,
i w przypadku zmian struktury bazy danych, konieczna byłaby ingerencja w skrypt PHP aplikacji
internetowej, dobrze jest zapisać zapytanie do bazy. Powstają wtedy obiekty zwane WIDOKAMI
(ang. VIEWS).
Widok bazy danych to nic innego jak wirtualna tabela, która nie zawiera samych danych, ale
odwołuje się do danych zawartych w innych tabelach.
Widoki mogą one stanowić dodatkową programistyczną warstwę abstrakcyjną pomiędzy
aplikacją web a właściwym zapytaniem SQL, co daje programistom dodatkową elastyczność.
Jednak widoki mogą nam ułatwić wiele innych zadań.
Stosowanie widoków daje nam możliwość ograniczenia dostępności poufnych informacji.
Załóżmy, że tabela osoby zawiera o wiele więcej kolumn niż imię i nazwisko, a są to przykładowo
poufne kolumny takie jak numer pesel, czy numery kart kredytowych, które nie będą potrzebne
w zapytaniach do bazy.
Możemy też tworzyć różne widoki, oparte na tych samych tabelach, lecz umożliwiające dostęp
wyłącznie do wybranych kolumn tych tabel.
Dodatkowym atutem stosowania widoków, w przypadku baz danych złożonych z wielu tabel
(kilkudziesięciu albo nawet kilkuset), w których występują bardzo złożone relacje danych, jest
możliwość tworzenia idealnie zoptymalizowanych zapytań zawierających różnego rodzaju
skomplikowane łączenia i udostępniania ich mniej doświadczonym użytkownikom, w celu
ograniczenia obciążeń serwera wynikających z nieodpowiednio sformułowanych zapytań.
Zalety korzystania z widoków MariaDB
Prostota
Widoki umożliwiają hermetyzację złożonych zapytań ze sprzężeniami w celu uproszczenia
dostępu do tabeli. Zamiast wpisywać długie i złożone zapytanie w wielu aplikacjach, możesz
utworzyć widok na podstawie zapytania i użyć nazwy widoku w aplikacjach.
Bezpieczeństwo
Jeśli chodzi o bezpieczeństwo, możesz przyznać kontu użytkownika dostęp do częściowych
danych tabel bazowych za pośrednictwem widoku. W ten sposób możesz ukryć poufne dane
przed użytkownikami, którzy nie mają uprawnień do ich przeglądania.
Spójność
Widoki mogą służyć do hermetyzacji logiki biznesowej i formuł oraz zapewniania ich spójności we
wszystkich aplikacjach.
Składnia instrukcji CREATE VIEW
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW [IF NOT EXISTS] view_name [(column_list)]
AS instrukcja SELECT
[WITH [CASCADED | LOCAL] CHECK OPTION]

Zmiana istniejącego WIDOKU (musimy podać całą instrukcję SQL):


ALTER
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

Przykłady widoków
Tworzenie widoku UczniowieKlasami:
CREATE VIEW UczniowieKlasami AS
SELECT imie, nazwisko, nazwa
FROM uczniowie INNER JOIN Klasy ON
uczniowie.klasa=klasy.KlasaId
ORDER BY nazwa

Tworzenie zapytania na podstawie widoku


SELECT imie, nazwisko, nazwa FROM UczniowieKlasami

Wyświetlanie SQL tworzącego widok:


SELECT VIEW_DEFINITION FROM information_schema.VIEWS WHERE
TABLE_NAME='nazwawidoku';
Wyświetlenie instrukcji tworzenia widoku
SHOW CREATE VIEW view_name
Modyfikowanie widoku – należy podajemy cały sql tworzący widok
ALTER VIEW UczniowieKlasami AS
SELECT imie, nazwisko, nazwa
FROM uczniowie INNER JOIN Klasy ON uczniowie.klasa=klasy.KlasaId

Usuwanie widoku
DROP VIEW UczniowieKlasami

You might also like