Grupowanie i funkcje agregujące

Podobne dokumenty
Relacyjne bazy danych. Podstawy SQL

Relacyjne bazy danych. Podstawy SQL

SQL (ang. Structured Query Language)

Paweł Rajba

Wykład 05 Bazy danych

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

Bazy danych. dr inż. Arkadiusz Mirakowski

Wykład 5. SQL praca z tabelami 2

Przestrzenne bazy danych Podstawy języka SQL

ACESS- zadania z wykorzystaniem poleceń SQL

Autor: Joanna Karwowska

Wykład 6. SQL praca z tabelami 3

Zadania z SQLa (MS SQL Server)

Widok Connections po utworzeniu połączenia. Obszar roboczy

Autor: Joanna Karwowska

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

Systemy GIS Tworzenie zapytań w bazach danych

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Bazy danych SQL Server 2005

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Ćwiczenie zapytań języka bazy danych PostgreSQL

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Język SQL, zajęcia nr 2

Bazy danych 10. SQL Widoki

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Język SQL, zajęcia nr 1

LAB 3 (część 1 Projektu)

Bazy danych 2. Wykład 4 Structured Query Language (SQL)

Przykładowa baza danych BIBLIOTEKA

P o d s t a w y j ę z y k a S Q L

3. Podzapytania, łączenie tabel i zapytań

SQL Structured Query Language

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

CREATE TABLE logika (p BOOLEAN); INSERT INTO logika VALUES(true); INSERT INTO logika VALUES(false); INSERT INTO logika VALUES(NULL);

Podstawowe zapytania SELECT (na jednej tabeli)

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

PODZAPYTANIE (SUBSELECT)

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Laboratorium Bazy danych SQL 3 1

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

Bazy Danych. SQL Podstawy języka III: powtórzenie. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

SQL - Structured Query Language. strukturalny język zapytań

Podstawy języka SQL cz. 2

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

Technologie baz danych

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

Bazy danych. Plan wykładu. Zależności funkcyjne. Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL.

BAZY DANYCH JĘZYK ZAPYTAŃ BAZ DANYCH SQL. Microsoft Access. Adrian Horzyk. Akademia Górniczo-Hutnicza

Wprowadzenie. Tworzenie widoków

SQL w praktyce. Miłej i owocnej nauki!!!

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Język SQL podstawy zapytań

Jerzy Nawrocki, Wprowadzenie do informatyki

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Podzapytania. Podzapytania nieskorelowane i skorelowane

Relacji między tabelami klucze obce. Schemat bazy danych, wczytanej z pliku create_tables.sql. Klucz obcy jako ograniczenie dla kolumny

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa. Studia Podyplomowe dla Nauczycieli

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Laboratorium Bazy danych SQL 2

Wykład 8. SQL praca z tabelami 5

W y k ł a d SELECT. Polecenie wyświetlające zawartość tabeli. Składnia uproszczona: Temat: Polecenie SELECT. Plan wykładu:

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Struktura bazy danych

Bazy danych 6. Podzapytania i grupowanie. P. F. Góra

Kurs. Podstawy MySQL

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

SQL praca z tabelami 4. Wykład 7

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

WPROWADZENIE DO JĘZYKA SQL

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

SQL Structured Query Language

Grupowanie i funkcje agregacji

Złaczenia tablic: FROM, WHERE, JOIN

Zbiór zadań z SQLa z elementami T-SQLa. (Wersja robocza z dnia r.) (Zgłaszanie usterek Robert.Fidytek@inf.ug.edu.pl)

Wykonać najpierw bez klauzuli WHERE

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Podyplomowe Studia Systemy informatyczne w logistyce

Modelowanie wymiarów

Bazy danych 7. SQL podstawy

Obiektowe bazy danych Ćwiczenia laboratoryjne (?)

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Transkrypt:

Grupowanie i funkcje agregujące Zadanie 1. Stwórz odpowiednią tabelę Test_agr i wprowadź odpowiednie rekordy tak, aby wynik zapytania SELECT AVG(kol) avg_all, AVG(DISTINCT kol) avg_dist, COUNT(*) count_gw, COUNT(kol) count, COUNT(DISTINCT kol) count_dist, SUM(kol) sum_all, SUM(DISTINCT kol) sum_dist FROM Test_agr; zawierał parami różne liczby. Odp: CREATE TABLE Test_agr ( nazwa VARCHAR(20), kol NUMBER ); INSERT INTO Test_agr VALUES ('nazwa1','10'); INSERT INTO Test_agr VALUES ('nazwa1','20'); INSERT INTO Test_agr VALUES ('nazwa2','20'); INSERT INTO Test_agr VALUES ('nazwa2','30'); INSERT INTO Test_agr VALUES ('nazwa2','40'); INSERT INTO Test_agr (nazwa) VALUES ('nazwa3'); Zadanie 2. W której linii jest błąd? SELECT film_id "ID filmu", tytul AS "Tytuł", tytul AS Tytuł WHERE budzet > 10 AND "ID filmu" > 2 ORDER BY "ID filmu"; Odp: 4. Alias kolumny nie może być użyty w klauzuli WHERE. W ORDER BY możemy go użyć. SELECT film_id "ID filmu", tytul AS "Tytuł", tytul AS Tytul WHERE budzet > 10

AND film_id > 2 ORDER BY "ID filmu"; Zadanie 3. Który operator A-D może zastąpić OR w poniższym zapytaniu: SELECT film_id, tytul WHERE film_id = 2 OR film_id = 6; A. IN B. BETWEEN.. AND.. C. LIKE D. <= E. >= Odp: A. WHERE film_id IN (2,6) Zadanie 4. Które z poniższych SQL zapytań z tabeli Pracownicy(imie, nazwisko, pensja, wydzial, data_zatrudnienia) zwraca imie, nazwisko i pensje pracownikow z wydzialu 4. A. SELECT imie nazwisko pensja FROM Pracownicy ORDER BY nazwisko WHERE wydzial = 4; B. SELECT imie, nazwisko, pensja FROM Pracownicy ORDER BY nazwisko ASC WHERE wydzial = 4; C. SELECT imie nazwisko pensja FROM Pracownicy WHERE wydzial = 4 ORDER BY nazwisko ASC; D. SELECT imie, nazwisko, pensja FROM Pracownicy WHERE wydzial = 4 ORDER BY nazwisko; E. SELECT imie, nazwisko, pensja FROM TABLE Pracownicy WHERE wydzial IS 4 ORDER BY nazwisko ASC;

Odp: D CREATE TABLE Pracownicy ( imie VARCHAR(20), nazwisko VARCHAR(20), pensja NUMBER, wydzial NUMBER, data_zatrudnienia DATE ); Zadanie 5. Znajdź błąd w poniższym zapytaniu i popraw. SELECT tytul, AVG(ALL dochod),count(*) "liczba filmow" from Filmy where film_id > 0 and count(*) > 4 group by studio_id order by "liczba filmow" DESC; Odp: SELECT studio_id, AVG(ALL dochod),count(*) "liczba filmow" where film_id > 0 GROUP BY studio_id HAVING count(*) > 4 ORDER BY "liczba filmow" DESC; Można też tak: SELECT studio_id, AVG(ALL dochod),count(*) "liczba filmow" where film_id > 0 GROUP BY studio_id HAVING count(*) > 4 ORDER BY 3 DESC; ale tak już nie zadziała (dlaczego?): SELECT studio_id, AVG(ALL dochod),count(*) "liczba filmow" where film_id > 0

GROUP BY studio_id HAVING "liczba filmow" > 4 ORDER BY 3 DESC; Zadanie 6. Porównaj zapytania, które są błędne i dlaczego? SELECT MIN(wiek), MAX(wiek) ; SELECT MIN(wiek), MAX(wiek) GROUP BY kraj; SELECT kraj, MIN(wiek), MAX(wiek) GROUP BY kraj; SELECT kraj, MIN(wiek), MAX(wiek) GROUP BY wiek; SELECT MIN(wiek), MAX(wiek) GROUP BY wiek; Zadanie 7. Dlaczego poniższe zapytanie nie jest poprawne? SELECT nazwisko Nazwisko2, MAX(wiek) WHERE LOWER(nazwisko) LIKE '%ski%' GROUP BY kraj HAVING COUNT(*) > 2; A. GROUP BY nie zawiera kolumny. B. Warunek COUNT(*) > 20 powinien być w klauzuli WHERE. C. GROUP BY musi zawierać funkcje agregującą użytą na liście SELECT. D. HAVING może zawierać tylko funkcje agregujące użyte na liście SELECT. Odp: A. GROUP BY musi zawierać kolumnę względem, której jest grupowanie. Nie można użyć aliasów. SELECT nazwisko Nazwisko, MAX(wiek) WHERE LOWER(nazwisko) LIKE '%ski%' GROUP BY kraj, nazwisko;

Zadanie 9. Czy poprawne jest poniższe zapytanie? SELECT max(wiek) WHERE min(wiek) > 15; Odp: Nie. Nie można używać funkcji agregujących w klauzuli WHERE. Zadanie 10. Czy poprawne jest poniższe zapytanie? SELECT nazwisko, AVG(distinct wiek),count(kraj) kraj_count WHERE upper(imie) like 'j%' OR ABS(wiek) > 10 having COUNT(kraj) > 5 ORDER BY 2 DESC; Odp: Nie. Istnieje kolumna nazwisko, która nie jest stałą, ani funkcją grupującą, a więc GROUP BY jest obowiązkowe. SELECT nazwisko, AVG(distinct wiek),count(kraj) kraj_count WHERE upper(imie) like 'j%' OR ABS(wiek) > 10 GROUP BY nazwisko having COUNT(kraj) > 5 ORDER BY 2 DESC; Ponadto należy zwrócić uwagę na wyrażenie "upper(imie) like 'j%'". To nie jest błąd w języku SQL, lecz wynik tego zapytania będzie zawsze pusty. Powinno być upper(imie) like 'J%'.

Złączenia i podzapytania Złączenia SELECT tytul, imie, nazwisko, Ludzie; SELECT tytul, imie, nazwisko, Ludzie WHERE director_id=person_id; SELECT Filmy.tytul, Ludzie.imie, Ludzie.nazwisko, Ludzie WHERE Filmy.director_id=Ludzie.person_id; SELECT F.tytul, L.imie, L.nazwisko F, Ludzie L WHERE F.director_id=L.person_id; Zadanie 1. Wyświetlić filmy, w których dochód był mniejszy niż pensja pojedynczego aktora SELECT tytul, person_id, dochod, pensja, Obsada WHERE Filmy.film_id=Obsada.film_id AND Obsada.pensja > Film.dochod; Aliasy do tabel: SELECT DISTINCT P1.person_id, P1.imie, P1.nazwisko P1, Ludzie P2 WHERE P1.kraj=P2.kraj AND P1.person_id!= P2.person_id; Zadanie 2. Wyświetlić obsadę dowolnie wybranego filmu (np. Rambo) SELECT imie, nazwisko, rola F, Ludzie L, Obsada O WHERE F.film_id=O.film_id AND L.person_id=O.person_id AND F.tytul="Rambo";

Złączenia LEFT JOIN, RIGHT JOIN: SELECT imie, nazwisko, tytul, Filmy WHERE person_id=director_id; SELECT imie, nazwisko, tytul LEFT JOIN Filmy ON person_id =director_id; SELECT imie, nazwisko, tytul RIGHT JOIN Filmy ON person_id =director_id; Suma: UNION SELECT studio_id, kraj FROM Studia UNION SELECT person_id, kraj ; Podzapytania. Na poziomie WHERE lub HAVING stosujemy operatory: =,<,>, IN, NOT IN, EXISTS, NOT EXISTS, ANY, ALL Zadanie. Wyświetlić tytuł filmu o maksymalnym dochodzie to nie zadziala (dlaczego?): SELECT tytul, MAX(dochod) ; to nie jest rozwiązaniem SELECT MAX(dochod) ; rozwiazanie SELECT tytul WHERE dochod = (SELECT MAX(dochod) ); Poniższe podzapytanie SELECT tytul WHERE director_id IN ( SELECT person_id WHERE Ludzie.kraj='PL' );

jest równoważne z SELECT tytul, Ludzie WHERE director_id=person_id AND Ludzie.kraj='PL'; SELECT S.nazwa FROM Studia S WHERE NOT EXISTS (SELECT tytul WHERE studio_id=s.studio_id); SELECT imie, nazwisko L WHERE 10<= ANY (SELECT pensja FROM Obsada O WHERE L.person_id=O.person_id); Zadanie 3. Powyższe zapytanie (z "ANY") przerobić na równoważne zapytanie wykorzystując a. "EXISTS" b. złączenia Zadanie 4. Wyświetlić tytuły filmów, których reżyser jest Polakiem i ma co najmniej 40 lat. Rozwiązać na dwa sposoby, wykorzystując podzapytania i złączenia. Przykłady: 1. Filmy, których budżet był większy niż średni budżet dla wszystkich filmów: SELECT tytul, budzet WHERE budzet > (SELECT avg(budzet) ); 2. Studia filmowe, które wyprodukowały filmy, gdzie aktorom wypłacono więcej pieniędzy niż cały wypracowany przez film przychód: SELECT nazwa FROM Studia WHERE studio_id IN (SELECT studio_id WHERE budzet < (SELECT SUM(pensja) FROM Obsada WHERE Filmy.film_id=film_id) );

Zadanie 5. Zapoznać się z poniższymi zapytaniami i zinterpretować ich działanie SELECT film_id, SUM(pensja) FROM Obsada O GROUP BY film_id HAVING SUM(pensja) > (SELECT budzet WHERE film_id=o.film_id); DELETE WHERE budzet < (SELECT SUM(pensja) FROM Obsada WHERE Filmy.film_id=film_id); UPDATE Filmy SET budzet=budzet*3 WHERE studio_id IN (SELECT studio_id FROM Studia WHERE kraj='pl'); INSERT INTO Studia (studio_id,nazwa,miasto,kraj) VALUES (25,'Moje Studio','Torun',(SELECT kraj WHERE person_id=1)); Widoki (perspektywy): CREATE VIEW Film_rezyser AS SELECT tytul,director_id ; SELECT * FROM Film_rezyser; CREATE VIEW Film_rezyser (tytul,rezyser) AS SELECT tytul,director_id ;

Zadania Zadanie 1. Utwórz w SQL perpektywę, która zawiera tylko nazwy studiów filmowych, w których łączny budżet wyprodukowanych filmów jest większy niż 10. Zadanie 2. Dane są trzy tabele Przedmioty(kod_p, nazwa, prowadzacy) Studenci(nr_indeks, nazwisko, wydzial) Egzaminy(nr_indeks, kod_p, ocena) Utwórz powyższe tabele uwzględniając klucze główne. W tabeli egzaminy określ klucze obce. Zadanie 3. Utwórz w SQL zapytanie, które znajduje nazwiska wszystkich studentów, którzy nie otrzymali z żadnego egzaminu oceny > 4. Zadanie 4. Utwórz w SQL zapytanie, które dla każdego przedmiotu podaje jego nazwę i ilość osób, które zdawały egzamin z tego przedmiotu. Zadanie 5. Utwórz w SQL perspektywę, która dla każdego przedmiotu podaje jego nazwę i ilość osób, które zdały egzamin z tego przedmiotu. Zadanie 6. Utwórz w SQL zapytanie, które znajduje nazwiska wszystkich studentów, którzy nie otrzymali z żadnego egzaminu oceny > 4. Zadanie rozwiąż na dwa sposoby (złączenia i podzapytania). Zadanie 7. Utwórz w SQL kod podwyższający o 100 zł. kwotę stypendium studentom z Wydziału Matematyki i Informatyki (np. wydzial=wmii) z wyjątkiem studentów I roku. Zadanie 8. Utwórz w SQL tabelę (bez klucza głównego): Stypendia(nr_indeks, rok_stud, kwota_styp). Napisz w SQL fragment kodu podwyższający o 20% kwote_styp wszystkim studentom z wyjątkiem studentów I roku. Zadanie 9. Zmodyfikuj definicję powyższej tabeli Stypendia, określając klucz główny nr_indeks. Użyj ALTER TABLE. Zadanie 10. Usuń kolumnę rok_stud z tabeli Stypendia. Następnie dodaj kolumnę rok_stud do tabeli Studenci.