OPERACJA DZIELENIA W SQL

Slides:



Advertisements
Podobne prezentacje
Indeksy w bazie danych Oracle
Advertisements

Optymalizacja zapytań
Język C/C++ Funkcje.
Podział i zastosowanie
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Bazy danych i inżynieria oprogramowania
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Relacyjny model danych
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
Domknięcie przechodnie (również) w bazach danych
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Język SQL – zapytania zagnieżdżone (podzapytania)
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 7: Relacje i ograniczenia integralnościowe Język definiowania danych - DDL (Data Definition.
Rozdział 2: Język bazy danych - SQL
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 8: Perspektywy i sekwencery.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 9: Język manipulowania danymi DML (Data Manipulation Language)
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 4: Język bazy danych - SQL Połączenia.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 3: Język bazy danych - SQL Funkcje grupowe.
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
SQL-owskie szlaki górskie
SQL select kredytobiorca,bank, rodzaj, data_zawarcia, klasyfikacja,kwota, terminzapadalnosci-data_zawarcia iledni from tab_kredyt where (terminzapadalnosci-data_zawarcia)>1095.
POWTÓRZENIE Metodologia : Pojęcia:
Zapytania SQL: wydajność i optymalizacja
BD-LAB6 Wojciech Pieprzyca
Instrument Finansowy LIFE+ Formularz A wniosku Nabór wniosków 2011
Macierz incydencji Macierzą incydencji grafu skierowanego D = (V, A), gdzie V = {1, ..., n} oraz A = {a1, ..., am}, nazywamy macierz I(D) = [aij]i=1,...,n,
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Język SQL – ciąg dalszy DML (Data Manipulation Language)
Relacyjny model danych
Język SQL (Structured Query Language) DDL (Data Definition Language)
Structured Query Language
Teoria relacyjnych baz danych
Bazy Danych II prowadzący: mgr inż. Leszek Siwik
Zależności funkcyjne.
ROZMYTE BAZY DANYCH.
RODZAJE ALGORYTMÓW Źródło: Jolanta Pańczyk - Informatyka Europejczyka. Podręcznik dla gimnazjum. Część II.
SQL – zapytania posumowanie
SQL – Structured Query Language (3)
Instrukcje sterujące część 1
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Wyrażenia w Turbo Pascalu.
Algorytmy i struktury danych
dr hab. Ryszard Walkowiak prof. nadzw.
SQL - Structured Query Language
Opracowała: Iwona Kowalik
Instrukcja warunkowa i wyboru
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
Model relacyjny.
Łódź 2008 Banki danych WYKŁAD 2 dr Łukasz Murowaniecki T-109.
ALGORYTMY Co to jest algorytm ? Cechy algorytmu Budowa algorytmów
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Model obiektowy bazy danych
URZĄDZENIA TECHNIKI KOMPUTEROWEJ
Komendy SQL do pracy z danymi
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 5: Operatory zbiorowe.
Zagadnienie i algorytm transportowy
Język SQL – polecenie Select
Relacja (ang.relation) Po podzieleniu danych na tabele i zdefiniowaniu pól kluczy podstawowych trzeba wprowadzić do systemu bazy danych informacje na temat.
Pętle – instrukcje powtórzeń
BAZY DANYCH Microsoft Access Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i.
Instrukcje warunkowe w php. Pętla FOR Czasem zachodzi potrzeba wykonania jakiejś czynności określoną ilość razy. Z pomocą przychodzi jedna z najczęściej.
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
Temat: Tworzenie bazy danych
Zapytania ( 3.0 ) wyrażenia zapytaniowe - querry expressions przestrzeń nazw LINQ - Language-Integrated Query 3 etapy : 1. określenie źródła danych, 2.
Transformacja modelu EER do modelu relacyjnego
Rozpatrzmy następujące zadanie programowania liniowego:
Widoki (views) - Perspektywy:
Własności relacji: Baza danych jest zbiorem relacji, o następujących własnościach: każda relacja w bazie danych jest jednoznacznie określona przez swoją.
Zapis prezentacji:

OPERACJA DZIELENIA W SQL

PRZYKŁADY Przedstawione przykłady dotyczą następującej bazy danych: D( D# , NAZWISKO, STATUS, D_MIASTO) -dostawcy C( C# , NAZWA, KOLOR, MASA, C_MIASTO) - części DC( D#, C#, ILOŚĆ) - dostawy

PRZYKŁAD 1 Podać nazwiska dostawców dostarczających wszystkie części. Sformułujmy to zapytanie inaczej: Podać nazwiska dostawców, dla których nie istnieje część, której by oni nie dostarczali

PRZYKŁAD 1 SELECT NAZWISKO FROM D WHERE NOT EXISTS ( SELECT * FROM C FROM DC WHERE D# = D.D# AND C# = C.C#))

PRZYKŁAD 1 Najbardziej wewnętrzny blok określa dostawę identyfikowaną przez atrybuty pochodzące z bloków zewnętrznych. W poszczególnych blokach wykorzystywano różne relacje. Zastosowanie synonimów nie było więc potrzebne.

PRZYKŁAD 2 Podać numery dostawców dostarczających wszystkie części. Możemy zastosować konstrukcję podobną do rozwiązania z przykładu 1.

PRZYKŁAD 2 SELECT D# FROM D WHERE NOT EXISTS ( SELECT * FROM C FROM DC WHERE D# = D.D# AND C# = C.C#))

PRZYKŁAD 2 – inne rozwiązanie Można zauważyć, że do uzyskania odpowiedzi relacja D nie jest potrzebna. Atrybut D# możemy uzyskać z relacji DC.

PRZYKŁAD 2 – inne rozwiązanie SELECT DISTINCT D# FROM DC X WHERE NOT EXISTS ( SELECT * FROM C (SELECT * FROM DC WHERE D# = X.D# AND C# = C.C#));

PRZYKŁAD 2 – inne rozwiązanie Najbardziej wewnętrzny blok określa dostawę identyfikowaną przez dostawcę występującego w dostawie z bloku najbardziej zewnętrznego oraz przez część z bloku pośredniego. DISTINCT jest potrzebne, ponieważ dostawca może występować wielokrotnie w relacji DC. W przykładach 3 i 4 zastosowano podobną metodologię.

PRZYKŁAD 3 Podać numery dostawców wszystkich części czerwonych. SELECT DISTINCT D# FROM DC X WHERE NOT EXISTS ( SELECT * FROM C WHERE KOLOR = ‘Red’ AND NOT EXISTS (SELECT * FROM DC WHERE D# = X.D# AND C# = C.C#));

PRZYKŁAD 4 Podać numery dostawców wszystkich części dostarczanych przez D2. SELECT DISTINCT D# FROM DC X WHERE NOT EXISTS ( SELECT * FROM C WHERE C# IN (SELECT C# FROM DC WHERE D# = ‘D2’) AND NOT EXISTS (SELECT * FROM DC WHERE D# = X.D# AND C# = C.C#));

PRZYKŁAD 5 Podać numery części dostarczanych przez wszystkich dostawców z Londynu SELECT C# FROM C WHERE NOT EXISTS (SELECT * FROM D WHERE MIASTO = ‘LONDYN’ AND NOT EXISTS (SELECT * FROM DC WHERE D# = D.D# AND C# = C.C#));

ASERCJE

ASERCJE Ogólne ograniczenia integralnościowe definiuje się za pomocą asercji. Ograniczenia takie dotyczą najczęściej więcej niż jednej relacji. Asercje definiuje się za pomocą instrukcji CREATE ASSERTION nazwa CHECK (P), gdzie P oznacza wyrażenie logiczne opisujące warunek asercji. Warunek ten musi być spełniony. Instrukcje, które go naruszają, nie są wykonywane.

PRZYKŁAD 1 Całkowita dostawa żadnej części nie może przekraczać 100 egzemplarzy CREATE ASSERTION suma_dostaw CHECK (100 >= ALL (SELECT SUM(ILOSC) FROM DC GROUP BY C#));

PRZYKŁAD 1 – inne rozwiązanie Zastosujemy predykat NOT EXISTS. Predykat ten jest dość często stosowany przy definiowaniu asercji. Zgodnie z poleceniem nie może istnieć część, dla której suma dostaw jest większa niż 100. Takiemu sformułowaniu warunku odpowiada następująca definicja:

PRZYKŁAD 1 – inne rozwiązanie CREATE ASSERTION suma_dostaw CHECK (NOT EXISTS (SELECT * FROM C X WHERE (SELECT SUM(ILOSC) FROM DC WHERE C# = X.C# ) > 100));

PRZYKŁAD 2 Każda część waży przynajmniej 1 kg CREATE ASSERTION A1 CHECK ((SELECT MIN(MASA) FROM C) >= 1);

PRZYKŁAD 3 Status dostawcy jest liczbą dodatnią (Nie istnieje dostawca, którego status nie jest dodatni) CREATE ASSERTION A2 CHECK (NOT EXISTS (SELECT * FROM D WHERE NOT (STATUS>0)));

PRZYKŁAD 4 Wszyscy dostawcy ze statusem >=100 mieszkają w Londynie (Nie istnieje dostawca ze statusem >= 100, który nie mieszka w Londynie) CREATE ASSERTION A3 CHECK (NOT EXISTS (SELECT * FROM D WHERE STATUS >= 100 AND MIASTO <> ‘LONDYN’));

PRZYKŁAD 5 Masa dostawy nie może przekraczać 10 000 Masa dostawy jest równa iloczynowi masy jednostkowej części (relacja C – atrybut MASA) oraz wielkości dostawy (relacja DC – atrybut ILOSC). Należy połączyć obydwie relacje i wyeliminować krotki, w których MASA*ILOSC > 10 000. Dostawa z takimi wartościami atrybutów nie może istnieć.

PRZYKŁAD 5 CREATE ASSERTION A4 CHECK (NOT EXISTS (SELECT * FROM C, DC WHERE DC.C# = C.C# AND (MASA * ILOSC) > 10 000));

PRZYKŁAD 6 Dostawcy z Londynu muszą dostarczać części w ilości większej niż 100 Mogą istnieć dostawcy z Londynu, którzy nie dostarczają żadnej części. Jeżeli jednak coś dostarczają, to wielkość dostawy musi przekraczać 100. Zatem nie istnieje dostawca z Londynu, który dostarcza coś w ilości mniejszej niż 100.

PRZYKŁAD 6 Dostawcy z Londynu muszą dostarczać części w ilości większej niż 100 CREATE ASSERTION A5 CHECK (NOT EXISTS (SELECT * FROM D, DC WHERE MIASTO = ‘LONDYN’ AND DC.D# = D.D# AND ILOSC < = 100));

PRZYKŁAD 7 Ten przykład dotyczy następującej bazy: LEKI( L#, PRODUCENT#, OPIS_L) - Leki FARM( P#, MIASTO, OPIS_P) – producenci leków Warunek integralności: Nie akceptujemy leków z Londynu (nie może być w relacji LEKI leków produkowanych przez producentów z Londynu)

PRZYKŁAD 7 CREATE ASSERTION A6 CHECK (NOT EXISTS (SELECT * FROM LEKI, FARM WHERE PRODUCENT# = P# AND MIASTO = ‘LONDYN’));