a) ile wynosiła populacja najbardziej i najmniej ludnego z województw (oraz jakie były ich nazwy)

Podobne dokumenty
(kod ten służy wprowadzeniu definicji mediany, nie jest to optymalna ani nawet szczególnie dobra implementacja obliczania mediany w praktyce!

znaleźć wszystkie rekordy dotyczące adresów przy ulicy Hożej (dowolnego miasta!);

Bazy danych. dr inż. Arkadiusz Mirakowski

Wykład 05 Bazy danych

ACESS- zadania z wykorzystaniem poleceń SQL

Relacyjne bazy danych. Podstawy SQL

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Relacyjne bazy danych. Podstawy SQL

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

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

Język SQL, zajęcia nr 1

Wykład 5. SQL praca z tabelami 2

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

LAB 3 (część 1 Projektu)

Widok Connections po utworzeniu połączenia. Obszar roboczy

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

Informatyka 3 : Instrukcja 4

Bazy danych i usługi sieciowe

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

Bazy danych. Polecenia SQL

Bazy Danych i Usługi Sieciowe

Język SQL, zajęcia nr 2

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

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Podzapytania. Podzapytania nieskorelowane i skorelowane

Grupowanie i funkcje agregujące

Informatyka 3 : Instrukcja 4 / 5

Wykład 8. SQL praca z tabelami 5

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

Programowanie w języku Java. Bazy danych SQLite w Javie

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

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

Hurtownia Świętego Mikołaja projekt bazy danych

Wykład 6. SQL praca z tabelami 3

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

Paweł Rajba

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Język SQL podstawy zapytań

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Ćwiczenie zapytań języka bazy danych PostgreSQL

Programowanie w Ruby

DMX DMX DMX DMX: CREATE MINING STRUCTURE. Tadeusz Pankowski

Jerzy Nawrocki, Wprowadzenie do informatyki

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Struktura bazy danych

Bazy danych 10. SQL Widoki

Autor: Joanna Karwowska

BAZA DANYCH SIECI HOTELI

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

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

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

SQL praca z tabelami 4. Wykład 7

Kurs. Podstawy MySQL

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Przykładowa baza danych BIBLIOTEKA

Przestrzenne bazy danych Podstawy języka SQL

Systemy GIS Tworzenie zapytań w bazach danych

Bazy danych 7. SQL podstawy

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Nowe technologie baz danych

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

SQL :: Data Definition Language

Modelowanie wymiarów

SQL (ang. Structured Query Language)

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Bazy danych. Andrzej Łachwa, UJ, /15

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

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

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

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

Autor: Joanna Karwowska

Bartosz Jachnik - Kino

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

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

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

EGZAMIN MATURALNY OD ROKU SZKOLNEGO

Agregacja i Grupowanie Danych. Funkcje Agregacji. Opcje GROUP BY oraz HAVING

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

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

SIECI KOMPUTEROWE I BAZY DANYCH

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

Baza danych hotel Maciej Gerus

Bazy danych. dr Radosław Matusik. radmat

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

SQL 4 Structured Query Lenguage

Bazy danych 6. Klucze obce. P. F. Góra

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

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Język PL/SQL Procedury i funkcje składowane

Obowiązuje od wersji

Wybór EUROPEAN będzie rozpoznawał dzień przed miesiącem, natomiast US miesiąc przed dniem.

Baza danych dla potrzeb zgłębiania DMX

Transkrypt:

Spis treści 1 TI:WTBD/Ćwiczenia 14 1.1 Sprawdzian 2 - SQL. 1.1.1 Grupa 1 1.1.2 przykład rozwiązania dla zadania gr. 1 1.1.3 Grupa 2 1.1.4 przykład rozwiązania dla gr. 2 TI:WTBD/Ćwiczenia 14 Sprawdzian 2 - SQL. Grupa 1 Plik Pl_lud_2010.txt zawiera dane o ludności Polski (wg. GUS na koniec 2010 r., w rozbiciu na powiaty. Dane powiatów pogrupowane są w bloki, odpowiadające województwom, do których należą. 1. Proszę napisac program, który na podstawie tego pliku tworzy bazę SQLite z tabelą POWIATY i tabelą WOJEWODZTWA, wraz ze związkiem opisującym przynależność każdego powiatu do jednego z województw, oraz informacją o populacji każdego z powiatów. 2. Napisać zapytania SQL odpowiadające na pytania: a ile wynosiła populacja najbardziej i najmniej ludnego z województw (oraz jakie były ich nazwy b dla każdego województwa, ile wynosiła średnia liczba ludności dla jego powiatów c ile wynosił stosunek ludności powiatów miejskich (grodzkich; tj. nazwanych nazwą miasta do całkowitej ludności Polski 3. Włączyć te zapytania do powyższego programu jako wykonywane w zależności od argumentu wywołania Wynikiem powinien być pojedynczy plik 'ludnosc.py', którego wywołanie z argumentem create tworzy i wypełnia tabele, a z argumentami q1, q2 i q3 podaje odpowiednio wyniki zapytania a, b i c. przykład rozwiązania dla zadania gr. 1 #! /usr/bin/python # coding: utf-8 DEF_TABEL = (

create table if not exists WOJEWODZTWA (ID int primary key, NAZWA, create table if not exists POWIATY (ID int primary key, NAZWA, W_ID references WOJEWODZTWA, LUDNOSC int def wstaw_dane(conn, plik: lines = open(plik w_id, p_id =, for l in lines: l = l.decode('utf-8' if not l.startswith(u'\t': # to jest nagłówek, początek danych dla kolejnego województwa w_id += 1 w_nazwa = l.strip(u':\n' insert into WOJEWODZTWA (ID, NAZWA values (?,?, (w_id, w_nazwa else: # to jest linijka opisująca powiat aktualnego województwa row = l.strip(.split(u' ' if len(row == 2: p_id += 1 insert into POWIATY (ID, W_ID, NAZWA, LUDNOSC values (?,?,?,?, (p_id, w_id, row[], int(row[1] conn.commit( lines.close( QUERIES = ( select w.nazwa, sum(p.ludnosc as POPULACJA from WOJEWODZTWA w join POWIATY p on w.id=p.w_id group by w.nazwa having POPULACJA=( select sum(ludnosc from POWIATY group by W_ID order by sum(ludnosc desc limit 1 or POPULACJA=( select sum(ludnosc from POWIATY group by W_ID order by sum(ludnosc asc

limit 1 order by POPULACJA desc, # zapytanie dla podpunktu a select w.nazwa, sum(p.ludnosc/count(* as SREDNIA_POWIATU from WOJEWODZTWA w join POWIATY p on w.id=p.w_id group by w.nazwa order by w.nazwa, # zapytanie dla podpunktu b select 1.*sum(p.LUDNOSC/(select sum(ludnosc from POWIATY as ULAMEK_W_P_MIEJSKICH from POWIATY p where p.nazwa like 'm. %' # zapytanie dla podpunktu c if name == ' main ': from sqlite3 import connect from sys import argv conn = connect('pl_lud.db' if argv[1] == 'create': for command in DEF_TABEL: print command conn.execute(command print u'... wykonane'.encode('utf-8' wstaw_dane(conn, 'pl_lud_2010.txt' elif argv[1] == 'drop': conn.execute('drop table if exists POWIATY' conn.execute('drop table if exists WOJEWODZTWA' elif argv[1] in ('q1', 'q2', 'q3': c = conn.execute(queries[int(argv[1][1]-1] result = [list(x[] for x in c.description] result.extend(c.fetchall( for line in result: # nie silimy się na specjalnie wymyślną prezentację wyniku.. print u' '.join(unicode(x for x in line.encode('utf-8' else: print >> sys.stderr, u'błędny argument.'.encode('utf-8' conn.close( Grupa 2 Plik Pl_lud_2010.csv zawiera dane o ludności Polski (wg. GUS na koniec 2010 r., w rozbiciu na powiaty. Linijki zaczynające się od '##' otwierają bloki odpowiadające poszczególnym województwom.

1. Proszę napisac program, który na podstawie tego pliku tworzy bazę SQLite z tabelą POWIATY i tabelą WOJEWODZTWA, wraz ze związkiem opisującym przynależność każdego powiatu do jednego z województw, oraz informacją o liczbie ludności każdego z powiatów. 2. Napisać zapytania SQL odpowiadające na pytania: a ile wynosiła liczba ludności każdego z województw (w kolejności malejącej liczby b jaki był powiat o największej liczbie ludności w każdym z województw (jego nazwa i liczba ludności w kolejności alfabetycznej wg. nazw województw c jaka część powiatów w kraju miała zaludnienie przekraczające średnią dla powiatu w kraju 3. Włączyć te zapytania do powyższego programu jako wykonywane w zależności od argumentu wywołania Wynikiem powinien być pojedynczy plik 'ludnosc.py', którego wywołanie z argumentem 'create' tworzy i wypełnia tabele, a z argumentami 'q1', 'q2' i 'q3' podaje odpowiednio wyniki zapytania a, b i c. przykład rozwiązania dla gr. 2 #! /usr/bin/python # coding: utf-8 DEF_TABEL = ( create table if not exists WOJEWODZTWA (ID int primary key, NAZWA, create table if not exists POWIATY (ID int primary key, NAZWA, W_ID references WOJEWODZTWA, LUDNOSC int def wstaw_dane(conn, plik: lines = open(plik w_id, p_id =, for l in lines: row = tuple(x.strip( for x in l.decode('utf-8'.split(',' if row[].startswith('##': # początek kolejnego województwa w_id += 1 insert into WOJEWODZTWA (ID, NAZWA values (?,?, (w_id, + row[1:] else: # kolejny powiat z aktualnego województwa p_id += 1

insert into POWIATY (ID, W_ID, NAZWA, LUDNOSC values (?,?,?,?, (p_id, w_id, row[], int(row[1] conn.commit( lines.close( QUERIES = ( select w.nazwa, sum(p.ludnosc as SUMA_LUDNOSCI from POWIATY p join WOJEWODZTWA w on w.id=p.w_id group by w.nazwa order by SUMA_LUDNOSCI desc, # zapytanie dla podpunktu a select w.nazwa as NAZWA_W, p.nazwa as NAZWA_P, p.ludnosc as LUDNOSC_MAX from WOJEWODZTWA w join POWIATY p on w.id=p.w_id where p.ludnosc=( select max(ludnosc from POWIATY where W_ID=w.ID order by w.nazwa;, # zapytanie dla podpunktu b select 1.*count(*/(select count(* from POWIATY as DUZYCH_POWIATOW from POWIATY where LUDNOSC > (select sum(ludnosc/count(* from POWIATY # zapytanie dla podpunktu c if name == ' main ': from sqlite3 import connect from sys import argv conn = connect('pl_lud.db' if argv[1] == 'create': for command in DEF_TABEL: print command conn.execute(command wstaw_dane(conn, 'pl_lud_2010_00_03.csv' elif argv[1] == 'drop': # tego nie musiało być, ale się przydaje conn.execute('drop table if exists POWIATY' conn.execute('drop table if exists WOJEWODZTWA' elif argv[1] in ('q1', 'q2', 'q3': c = conn.execute(queries[int(argv[1][1]-1] result = [list(x[] for x in c.description] result.extend(c.fetchall( for line in result: # nie silimy się nadmiernie w prezentacji wyniku... print u' '.join(unicode(x for x in line.encode('utf-8'

else: print >> sys.stderr, u'błędny argument.'.encode('utf-8' conn.close(