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



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

Paweł Rajba

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

Bazy danych. Dr inż. Paweł Kasprowski

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Relacyjne bazy danych. Podstawy SQL

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Ref. 7 - Język SQL - polecenia DDL i DML

Relacyjne bazy danych. Podstawy SQL

Systemy GIS Tworzenie zapytań w bazach danych

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Przestrzenne bazy danych Podstawy języka SQL

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Język SQL, zajęcia nr 1

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Wykład 4. SQL praca z tabelami 1

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

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

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

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

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

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

Wykład 05 Bazy danych

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

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

Bazy danych - Materiały do laboratoriów VIII

Instrukcja CREATE TABLE

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

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

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

Bazy danych 7. SQL podstawy

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Aspekty aktywne baz danych

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Wykład 5. SQL praca z tabelami 2

Widok Connections po utworzeniu połączenia. Obszar roboczy

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Bazy danych 10. SQL Widoki

Autor: Joanna Karwowska

Bazy danych. Polecenia SQL

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

SQL (ang. Structured Query Language)

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

Wykład 8. SQL praca z tabelami 5

ACESS- zadania z wykorzystaniem poleceń SQL

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

Język SQL, zajęcia nr 2

040 STRUCTURED QUERY LANGUAGE. Prof. dr hab. Marek Wisła

Wykład 2. SQL 1 Structured Query Lenguage

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Język SQL. Rozdział 2. Proste zapytania

Autor: Joanna Karwowska

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

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

Grupowanie i funkcje agregujące

Projektowanie systemów baz danych

Bazy danych 2. Wykład 5 Structured Query Language (SQL) c.d. DDL

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

Po prawidłowym podłączeniu do serwera MySQL należy wybrać bazę, na której będziesz pracować:

Autor: Joanna Karwowska

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

Język SQL podstawy zapytań

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

Bazy danych Ćwiczenia projektowe

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

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Typy Oracle atrybutów relacji Typ NUMBER (1)

Wprowadzenie do języka SQL

Typy Oracle atrybutów relacji Typ NUMBER (1)

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

Bazy danych Język SQL część 1 Wykład dla studentów matem

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

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

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

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

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

Projektowanie Baz Danych GiG-2-KG Ćw. 5. Podstawy języka SQL

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

Bazy danych 5. Samozłaczenie SQL podstawy

Dr Michał Tanaś(

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

Bazy danych i usługi sieciowe

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

Wykład :45 BD-1 W_3

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

Instrukcje DML INSERT, UPDATE, DELETE. COPY

SQL/MySQL. Rafał Kern

SIECI KOMPUTEROWE I BAZY DANYCH

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Tworzenie baz danych i tabel

Struktura drzewa w MySQL. Michał Tyszczenko

Przykładowa baza danych BIBLIOTEKA

Oracle PL/SQL. Paweł Rajba.

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

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Ćwiczenie 7 - DDL. Relacje i ograniczenia integralnościowe. Ćwiczenie 7 DDL. Wymagania: Bazy Danych

Laboratorium Bazy danych SQL 3 1

Transkrypt:

SQL w praktyce Niniejsza praca objęta jest prawami autorskimi. Nielegalne jest kopiowanie żadnej częsci tej pracy w żadnej postaci. Niezgodne z prawem tym bardziej jest udostępnianie innym tej pracy odpłatnie lub nieodpłatnie. Każde naruszenie praw autorskich będzie ścigane z całą surowością prawa. Autor dołożył wszelkich starań, aby zebrany tutaj materiał był poprawny i rzetelny. Niemniej jednak nie daję gwarancji bezbłędności. Autor zrzeka się jakiejkolwiek odpowiedzialności za ewentualne straty spowodowane korzystaniem z zamieszczonych poniżej informacji. Korzystanie z niniejszej pracy jest akceptacją powyższej formuły. Miłej i owocnej nauki!!! SPIS TREŚCI 1. SQL wstępne informacje 2. DDL tworzenie,modyfikacja i usuwanie tablic, typy danych 3. DML - tworzenie,modyfikacja i usuwanie wierszy 4. DQL wyszukiwanie danych, frazy SELECT, FROM, WHERE 5. Warunki filtrujące 6. Warunki łączące 7. Warunki filtrujące z pytaniami zagnieżdżonymi 8. Funkcje agregujące 9. Grupowanie fraza GROUP BY 10. Filtracja grup fraza HAVING 11. Pytania zagnieżdżone skorelowane z funkcjami agregującymi 12. Porządkowanie wyników fraza ORDER BY 13. Perspektywy (widoki, tablice wirtualne) 14. Ochrona integralności danych 15. Więzy referncyjne 16. Zadania 17. Schemat bazy danych wykorzystany w przykładach

1. SQL STRUCTURED QUERY LANGUAGE Warianty języka SQL : - interaktywny - obsadzony (wbudowany) w innych językach o statyczny (instrukcje SQL są kompletne) o dynamiczny (instrukcje sparametryzowane) Podjęzyki : - DDL (Data Definition Language) pozwala na definiowanie tablic - DML (Data Manipulation Language) pozwala na tworzemie, aktualizację wierszy - DQL (Data Query Language) - DCL (Data Control Language) 2. DDL TWORZENIE, MODYFIKACJA I USUWANIE TABLIC, TYPY DANYCH - Tworzenie tablic CREATE TABLE <tablica> (<kolumna><typ>[<ograniczenia>],...,[<więzy integralności>]) - Typy danych: o znakowe CHARACTER(n), CHAR(n) łancuch znaków o stałej długości n CHARACTER VARYING(n), VARCHAR(n) łańcuch znaków o zmiennej długości nie większej od n LONG VARCHAR, LONG łańcuchy nieograniczone ( 2GB ) o numeryczne NUMERIC (p,q) p precyzja, q skala DECIMAL (p,q), DEC(p,q) INETEGER, INT SMALLINT FLOAT (n) REAL DOUBLE PRECISION

o o o data, czas DATE - (rrrr,mm,dd) TIME godz,min,sek TIMESTAMP data + godzina INTERVAL różnica dat i czasów łańcuch bitów BIT(n) BIT VARYING (n) inne BOOLEAN BYTE łańcuch 8 bitowy MONEY dopisuje automatycznie symbol waluty - ograniczenia o NOT NULL w kolumnie nie może być pustego elementu o NOT NULL WITH DEFAULT w puste pole automatycznie wprowadzana jest wartość domyślna o UNIQUE Przykład: CREATE TABLE uczniowie (nazwisko CHAR [15]), wzrost INT, waga DEC (5,2)) - Modyfikowanie struktury tablic ALTER TABLE <tablica> ADD <kolumna> <typ> [<ograniczenia>] ALTER TABLE <tablica> DROP <kolumna> ALTER TABLE <tablica> MODIFY <kolumna> <typ> [<ograniczenia>] ALTER TABLE <tablica> RENAME <kolumna> <nowa nazwa> ALTER TABLE <tablica> <więzy integralności> Przykład: ALTER TABLE uczniowie ADD klasa INT

- Usuwanie tablic, perspektyw, indeksów DROP TABLE <tablica> DROP VIEV <perspektywa> DROP INDEX <indeks> 3. DML WPROWADZANIE, MODYFIKACJA I USUWANIE WIERSZY - Wprowadzanie wierszy INSERT INTO <tablica> [(<lista kolumn>)] VALUES (<lista wartości> Przykład: INSERT INTO uczniowie VALUES ( NOWAK, 187, 72,5,1) INSERT INTO uczniowie (nazwisko, klasa) VALUES ( KOWALSKI, 1) - Modyfikowanie wierszy UPDATE <tablica> SET <kolumna> = <wyrażenie>[...] [WHERE <warunek>] Przykład: UPDATE uczniowie SET wzrost = wzrost + 2 WHERE nazwisko = KOWALSKI UPDATE uczniowie SET klasa = 4 WHERE klasa = 3

- Usuwanie wierszy DELETE FROM <tablica> [ WHERE <warunek>] Przykład: DELETE WHERE klasa = 4 DELETE (powoduje usunięcie całej zawartości tablicy uczniowie) 4. DQL WYSZUKIWANIE DANYCH, FRAZY SELECT, FROM, WHERE SELECT <> FROM <> WHERE <> GROUP BY <> HAVING <> ORDER BY <> UNION <> Fraza SELECT SELECT [ALL DISTINCT] {<lista elementów> *} PRZYKŁAD: SELECT * (wyświetlenie całej zawartości tabeli uczniowie) SELECT nazwisko, klasa (wyświetlenie nazwisk uczniów i klas, do których chodzą) SELECT nazwisko, waga (wzrost 100) AS nadwaga SELECT MAX (wzrost)

SELECT DISTINCT klasa Fraza FROM FROM <element> [<alias>],... Fraza WHERE WHERE <warunek> Warunki dzielimy na: - filtrujące - łączące - filtrujące z pytaniami zagnieżdżonymi 5. WARUNKI FILTRUJĄCE Warunki filtrujące zbudowane są z atrybutów (kolumn) jednej tablicy - <kolumna> <operator> <stała> SELECT * WHERE klasa = 3 - <wyrażenie> <operator> <wyrażenie> SELECT * WHERE waga (wzrost 100) > 10 - <wyrażenie> [NOT] BETWEEN <dół> AND <góra> SELECT * WHERE wzrost BETWEEN 175 AND 180 - <wyrażenie> [NOT] LIKE <wzorzec tekstowy> Symbole zastępcze: _ - zastępuje jeden znak % - zastępuje ciąg znaków SELECT * WHERE nazwisko LIKE Kowalsk_

SELECT * WHERE nazwisko LIKE Kowal% 6. WARUNKI ŁĄCZĄCE PRZYKŁAD 1: SELECT nazwisko, nazwa FROM pracownicy, zespoły WHERE pracownicy.nrz = zespoły. nrz SELECT nazwisko, nazwa FROM pracownicy p, zespoły z WHERE p.nrz = z. nrz Obydwa zapytania dadzą te same wyniki. Zapytanie drugie jest jednak krótsze. PRZYKŁAD 2: SELECT nazwisko FROM pracownicy p, dochody d WHERE p.nrp = d.nrp AND nrz=4 AND kwota > 500 PRZYKŁAD 3: SELECT nazwa FROM zespoły z, pracownicy p, dochody d, tematy t WHERE z.nrz=p.nrz AND p.nrp=d.nrp AND d.nrt=t.nrt AND t.nazwa = Pojekt generatora Wypisuje nazwy zespołów zajmujące się projektem generatora.

7. WARUNKI FILTRUJĄCE Z PYTANIAMI ZAGNIEŻDŻONYMI Ogólna postać: SELECT < > FROM < > WHERE <początek warunku> (SELECT < > FROM < > WHERE < >... ) Zastosowanie różnych początków warunków na przykładach <wyrażenie> <operator> Wyszukać nazwisko kierownika Zespołu wdrożeń SELECT nazwisko FROM pracownicy WHERE nrp= (SELECT kierownik FROM zespoły WHERE nazwa = Zespół wdrożeń ) Wyszukać nazwiska pracowników zespołu nr 3, którzy otrzymali premie wyższe niż Jaworski SELECT nazwisko FROM pracownicy WHERE nrz=3 AND premia > (SELECT premia FROM pracownicy WHERE nazwisko = Jaworski <wyrażenie> <operator> [ANY / ALL] Pozwala sprawdzić czy wartość wybrana w pytaniu zewnętrznym spełnia warunek dla jakiejkolwiek / każdej wartości wybranej w pytaniu wewnętrznym. Wyszukać nazwy tematów, dla których były jakieś wypłaty. SELECT nazwa FROM tematy WHERE nrt = ANY (SELECT nrt FROM dochody)

Znaleźć nazwiska pracowników, którzy mieli jakieś wypłaty większe niż 1000 SELECT nazwisko FROM pracownicy WHERE nrp = ANY (SELECT nrp FROM dochody WHERE kwota > 1000) Znaleźć uczniów klasy 1 wyższych niż uczniowie klasy 3 SELECT nazwisko, wzrost WHERE klasa=1 AND wzrost > ALL (SELECT wzrost WHERE klasa = 3) <wyrażenie> [NOT] IN Pozwala na sprawdzenie czy wartość wybrana w pytaniu zewnętrznym [nie] należy do zbioru wartości wybranych w pytaniu wewnętrznym Wyszukać nazwiska pracowników, którzy nie brali udziału w realizacji tematu nr 2 SELECT nazwisko FROM pracownicy WHERE nrp NOT IN (SELECT nrp FROM dochody WHERE nrt=2) Wyszukać nazwy zespołów, których pracownicy uczestniczą w temacie Projekt generatora SELECT nazwa FROM zespoly WHERE nrz IN (SELECT nrz FROM pracownicy WHERE nrp IN

(SELECT nrp FROM dochody WHERE nrt = (SELECT nrt FROM tematy WHERE nazwa = Projekt generatora ))) <wyrażenie> [NOT] EXISTS Zwraca prawdę [fałsz] gdy zbiór wierszy wybranych w pytaniu wewnętrznym nie jest pusty. Znaleźć nazwy tematów, w których były jakieś wypłaty. SELECT nazwa FROM tematy t WHERE EXISTS (SELECT * FROM dochody d WHERE d.nrt=t.nrt) Wyszukać nazwiska pracowników, którzy nie brali udziału w żadnym temacie. SELECT nazwisko FROM pracownicy p WHERE NOT EXISTS (SELECT * FROM dochody d WHERE p.nrp=d.nrp) Wyszukać nazwiska pracowników, którzy uczestniczyli we wszystkich tematach. SELECT nazwisko FROM pracownicy p WHERE NOT EXISTS (SELECT * FROM tematy t WHERE NOT EXISTS (SELECT * FROM dochody d WHERE d.nrt = t.nrt AND d.nrp = p.nrp)

8. FUNKCJE AGREGUJĄCE SUM (<argument>) AVG (<argument>) MAX (<argument>) MIN (<argument>) COUNT (<argument>) Wypisz ilość wierszy tablicy zespoły SELECT COUNT(*) FROM zespoly Znaleźć maksymalną i minimalną wypłatę w ramach tematu nr 6 oraz sumę wypłat w tym temacie. SELECT MAX (kwota), MIN (kwota), SUM (kwota) FROM dochody WHERE nrt=6 Znaleźć maksymalną wypłatę jaką otrzymali pracownicy zespołu wdrożeń w ramach projektu generatora. SELECT MAX (kwota) FROM zespoly z, pracownicy p, dochody d, tematy t WHERE z.nrz = p.nrz AND p.nrp = d.nrp AND d.nrt = t.nrt AND z.nazwa = Zespół wdrożeń AND t.nazwa = Projekt generatora Znaleźć liczbę pracowników otrzymujących wypłaty. SELECT COUNT (*) FROM dochody Jest to rozwiązanie błędne dlatego, że jeden pracownik może mieć wiele wypłat i wszystkie zostaną policzone. Prawidłowe zapytanie wyglądać będzie tak: SELECT COUNT (DISTINCT nrp) FROM dochody

9. GRUPOWANIE FRAZA GROUP BY Ogólna postać SELECT <lista kolumn 1> <lista funkcji agregujących> FROM < > WHERE < > GROUP BY <lista kolumn 2> Wyznaczyć liczbę pracowników w poszczególnych zespołach. SELECT nrz, COUNT (*) FROM pracownicy GROUP BY nrz Wyszukać maksymalną kwotę oraz sumę kwot dla poszczególnych zespołów realizujących projekt generatora SELECT z.nazwa, MAX (kwota), SUM (kwota) FROM zespoły z, pracownicy p, dochody d, tematy t WHERE z.nrz = p.nrz AND p.nrp = d.nrp AND d.nrt = t.nrt AND t.nazwa = Projekt generatora GROUP BY z.nazwa Podać nazwiska wszystkich pracowników, sumę ich wypłat i liczbę wykonywanych przez nich tematów SELECT nazwisko, SUM(kwota), COUNT(*) FROM pracownicy p, dochody d WHERE p.nrp = d.nrp GROUP BY nazwisko, p.nrp

10. FILTRACJA GRUP FRAZA HAVING Ogólna postać: HAVING <warunek filtrujący> Wyświetl numery zespołów, które mają więcej niż 15 lub mniej niż 5 pracowników. SELECT nrz, COUNT(*) FROM pracownicy GROUP BY nrz HAVING COUNT (*) > 15 OR COUNT (*) < 5 Znaleźć nazwiska pracowników (podać też sumę ich wypłat), którzy zarobili w sumie więcej niż Jaworski SELECT nazwisko, SUM(kwota) FROM pracownicy p1, dochody d1 WHERE p1.nrp = d1.nrp GROUP BY nazwisko, p1.nrp HAVING SUM (kwota) > (SELECT SUM(kwota) FROM pracownicy p2, dochody d2 WHERE p2.nrp = d2.nrp AND nazwisko = JAWORSKI 11. PYTANIA ZAGNIEŻDŻONE SKORELOWANE Z FUNKCJAMI AGREGUJĄCYMI Znaleźć najwyższego ucznia każdej klasy. SELECT klasa, nazwisko, wzrost u1 WHERE wzrost = (SELECT MAX(wzrost) u2 WHERE u2.klasa = u1.klasa

Podać numery pracowników, którzy mieli maksymalne wypłaty w poszczególnych tematach. SELECT nrt, nrp, kwota FROM dochody d1 WHERE kwota = (SELECT MAX(kwota) FROM dochody d2 WHERE d1.nrt = d2.nrt) 12. PORZĄDKOWANIE WYNIKÓW FRAZA ORDER BY Ogólna postać: ORDER BY {<wyrażenie> <nr>}[asc DESC] ASC kolejność rosnąca (domyślnie) DESC kolejność malejąca PRZYKŁAD SELECT * FROM pracownicy ORDER BY nrz,nazwisko SELECT nazwisko, waga (wzrost 100), klasa ORDER BY 3, 2 DESC Liczby 3, 2 wskazują odpowiednio na atrybuty (kolumny) klasa i waga (wzrost 100) 13. PERSPEKTYWY (WIDOKI, TABLICE WIRTUALNE) Perspektywą nazywamy konstrukcję widzianą przez użytkownika jako tablicę. Cele tworzenia perspektyw: - uproszczenie zapytań. Gdy baza składa się z wielu tablic, często zdarzają się złożone zapytania dotyczące kilku tablic. - ograniczenie dostępu do tablic. Gdy mamy dużą tablicę, z której korzystają różne grupy użytkowników o ograniczonych prawach do

danych, rozwiązaniem jest tworzenie tablicy wirtualnej udostępniającej tylko część danych. TWORZENIE PERSPEKTYW CREATE VIEV <perspektywa> [(<lista kolumn>)] AS <instrukcja SELECT> [WITH CHECK OPTION ] W definicji perspektywy niedopuszczalne są: - złączenia - grupowanie - wyrażenia, funkcje agregujące i DISTINCT na liście frazy SELECT - fraza UNION Jeśli tworzymy perspektywę na innej perspektywie i ma być ona aktualizowalna, to ta poprzednia też musi być modyfikowalna. Dopuszczalne są pytania zagnieżdżone, ale zbudowane na tej samej tablicy co pytanie zewnętrzne. 14. OCHRONA INTEGRALNOŚCI DANYCH Integralność: - semantyczna, związana z znaczeniem danych - transakcji, związana z operacjami na danych Kontrola integralności semantycznej może być realizowana przez: - ograniczenia nakładane na dziedziny atrybutów - więzy referencyjne Ograniczenia dziedziny: CREATE DOMAIN <dizedzina><typ>[<ograniczenie>] PRZYKŁAD: CREATE DOMAIN pieniadze dec (2,2) constraint

15. WIĘZY REFERENCYJNE Klucz główny (PRIMARY KEY) kolumna / grupa kolumn których wartości jednoznacznie identyfikują pola tablic. Cechy klucza głównego: - tylko jeden dla danej tablicy - ma wartości unikalne, niepuste (NOT NULL) - zazwyczaj musi istnieć unikalny indeks zdefiniowany na kluczu głównym Cechy kluczy obcych (FOREIGN KEY) - definicja klucza obcego musi odpowiadać definicji klucza głównego w innej tablicy. - niepustej wartości klucza obcego musi odpowiadać istniejąca wartość klucza głównego w tablicy nadrzędnej - dopuszcza się wartości puste kluczy obcych OGRANICZENIA NA USUWANIE DANYCH - restrykcyjne (RESTRICT), usunięcie rekordu nadrzednego jest możliwe, jeśli nie istnieje żaden rekord podrzędny z nim związany. - kaskadowe (CASCADE), usunięcie rekordu nadrzędnego powoduje automatyczne usunięcie wszystkich rekordów podrzędnych z nim związanych. - wstawianie wartości pustych (SET NULL), usunięcie rekordu nadrzędnego powoduje wstawienie rekordów pustych do rekordów podrzędnych z nim związanych w miejsce kluczy obcych. DEFINIOWANIE KLUCZY: PRIMARY KEY <nazwa klucza>(<kolumna>,...) FOREIGN KEY <nazwa klucza>(<kolumna>,...) REFERENCES <tablica nadrzędna> [ ON DELETE RESTRICT ] CASCADE SET NULL lub [ ON UPDATE...]

16. ZADANIA ZAD 1. Podac nazwy tematow i numery pracownikow o najwyzszych sumarycznych dochodach w danym temacie. select nrt,nrp from dochody d group by nrp,nrt having sum(kwota) >= all (select sum(kwota) from dochody d1 where d1.nrt=d.nrt group by nrp) order by nrt,nrp; ZAD 2; Podac nazwy tematów dla ktorych srednia pojedynczych zarobkow jest wieksza od najnizszego pojedynczego zarobku w tym temacie pracownika, ktory w tym temacie zarobil w sumie najwiecej. Mozna zalozyc, ze nie ma dwoch pracownikow o tych samych sumarycznych dochodach. select nazwatemat from temat t, dochody d where t.nrt=d.nrt group by t.nrt,nazwatemat having avg(d.kwota) > ( // min zarobek pracownika // select min(kwota) from dochody d1 where d1.nrt=t.nrt and d1.nrp = ( // nr pracownika o najwiekszym sumarycznym zarobku // select nrp from dochody d2 where d2.nrt=t.nrt group by nrp,nrt having sum(kwota) >= all ( // sumaryczne zarobki pracownikow w tym temacie // select sum(kwota) from dochody d1 where d1.nrt=d.nrt group by nrp ) ) );

17. SCHEMAT BAZY DANYCH WYKORZYSTANY W PRZYKŁADACH RELACJA ATRYBUT TYP ------------------ ------------------ -------- DOCHODY NRT INTEGER KWOTA NRP DECIMAL SMALLINT PRACOWNICY NRP SMALLINT KOBIETA DATA_UR NAZWISKO NRZ CHAR TIMESTMP CHAR SMALLINT TEMAT NAZWATEMAT CHAR DATA_ODB NRT NRPKT TIMESTMP INTEGER SMALLINT ZESPOL NAZWAZESP CHAR NRZ NRPKZ SMALLINT SMALLINT