2010-10-21 STANDARDY JĘZYKA SQL CECHY JĘZYKA SQL WADY I ZALETY



Podobne dokumenty
Paweł Rajba

Przestrzenne bazy danych Podstawy języka SQL

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

Systemy GIS Tworzenie zapytań w bazach danych

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

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

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

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Bazy danych. Dr inż. Paweł Kasprowski

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

SQL Structured Query Language

SQL Structured Query Language

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

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

Wykład 4. SQL praca z tabelami 1

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

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

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

Relacyjne bazy danych. Podstawy SQL

Wstęp do SQL. copyright: KGiIS WGGiOŚ AGH

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

SQL Structured Query Language

Oracle11g: Wprowadzenie do SQL

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

Model relacyjny. Wykład II

Wykład 5. SQL praca z tabelami 2

Wykład 8. SQL praca z tabelami 5

Wykład 2. SQL 1 Structured Query Lenguage

SQL (ang. Structured Query Language)

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

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

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

Język SQL. Rozdział 2. Proste zapytania

Relacyjne bazy danych. Podstawy SQL

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

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

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

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

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

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.

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

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

Język SQL podstawy zapytań

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

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

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

Model relacyjny. Wykład II

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

Język SQL, zajęcia nr 1

Widok Connections po utworzeniu połączenia. Obszar roboczy

Bazy danych - Materiały do laboratoriów VIII

1 Wstęp do modelu relacyjnego

Wprowadzenie do języka SQL

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

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

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

Wykład 6. SQL praca z tabelami 3

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

PLAN WYKŁADU BAZY DANYCH MODEL DANYCH. Relacyjny model danych Struktury danych Operacje Integralność danych Algebra relacyjna HISTORIA

Typy Oracle atrybutów relacji Typ NUMBER (1)

Typy Oracle atrybutów relacji Typ NUMBER (1)

Microsoft SQL Server Podstawy T-SQL

Bazy danych. Polecenia SQL

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

Aspekty aktywne baz danych

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

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

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

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

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

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

Program szkoleniowy Efektywni50+ Moduł IV Podstawy relacyjnych baz danych i język SQL

Współczesne systemy baz danych

Bazy danych 10. SQL Widoki

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

Autor: Joanna Karwowska

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

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Projektowanie systemów baz danych

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

SIECI KOMPUTEROWE I BAZY DANYCH

Współczesne systemy baz danych

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

BAZY DANYCH. Wykład 1: Wprowadzenie do baz danych. Marcin Czajkowski. Przygotowanie wykładu: Małgorzata Krętowska

mail: strona: konsultacje: na stronie (po wcześniejszym umówieniu drogą mailową)

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

Podstawy języka SQL cz. 2

Autor: Joanna Karwowska

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

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

Bazy danych 7. SQL podstawy

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

Wykład 05 Bazy danych

Bazy danych - wykład wstępny

Wprowadzenie do baz danych

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

Instrukcja CREATE TABLE

Transkrypt:

PLAN WYKŁADU BAZY DANYCH Wykład 3,4 dr inż. Agnieszka Bołtuć Definicja, historia, cechy SQL Standardy SQL Formy i podzbiory SQL Typy danych Składnia DML DDL DCL Perspektywy Definicja dziedziny, asercja DEFINICJA SQL SQL (ang. Structured Query Language) - strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych. Strukturalny język zapytań jest zbiorem komend używanych do wprowadzania, modyfikowania i przeglądania zawartości relacyjnych baz danych, Język SQL pełni trzy główne funkcje: tworzenie bazy i definiowanie jej struktur, wykonywanie zapytań na bazie w celu uzyskania danych niezbędnych do wygenerowania odpowiedzi oraz kontrolowanie bezpieczeństwa bazy danych. HISTORIA SQL Historia SQL sięga początku lat 70-tych, gdy w IBM powstał język Sequel, Pierwszy SZBD wykorzystujący Sequel powstał w 1973 roku w firmie IBM i nazywał się System R, Pierwsza komercyjna wersja SZBD (opracowana dla wojska, CIA i agencji rządowych) została wypuszczona przez firmę Oracle w 1977 roku; wykorzystywała język SQL. 1

STANDARDY JĘZYKA SQL W 1986 roku Amerykański Narodowy Instytut Normalizacji (ANSI), a w 1987 Międzynarodowa Organizacja Normalizacyjna (ISO) oficjalnie przyjęły standard języka SQL, Nadal jednak istnieją różnice w wersjach języka SQL biorąc pod uwagę różnych producentów. STANDARDY JĘZYKA SQL Rok Nazwa Zmiany 1986 SQL-86/SQL-87 Pierwsza publikacja standardu organizacji ANSI i ISO 1989 SQL-89 Małe udoskonalenia w stosunku do oryginału 1992 SQL-92/SQL2 Zasadnicze zmiany w stosunku do oryginału (najbardziej popularny standard do dziś) 1999 SQL-99/SQL3 Aktualizacja standardu z 1992 poprzez: nowe sposoby selekcji, nowe reguły integralności, pewne elementy struktury obiektowej 2003 SQL-2003 Obsługa formatu XML i pól z automatycznie generowanymi wartościami 2008 SQL-2008 CECHY JĘZYKA SQL jest językiem wysokiego poziomu (4GL), jest językiem deklaratywnym, jest językiem ustandaryzowanym, jest podjęzykiem danych, jest językiem interpretowanym, jest językiem zbliżonym konstrukcją do naturalnego języka angielskiego, jest oparty na algebrze relacji, zawiera logikę trójwartościową. WADY I ZALETY Zalety: deklaratywny charakter, standaryzacja, przejrzystość, czytelność, dobre podstawy matematyczne, Wady: nie przestrzeganie standardu przez dostawców, ograniczenie do danych atomowych. 2

FORMY SQL PODZBIORY SQL SQL interakcyjny (autonomiczny) Statyczny kod SQL (Static SQL) Osadzony SQL (Embedded SQL) Język modułów Dynamiczny kod SQL (Dynamic SQL) SQL DML (ang. Data Manipulation Language język manipulacji danymi ) SELECT, INSERT, UPDATE, DELETE, SQL DDL (ang. Data Definition Language język definicji danych ) CREATE, DROP, ALTER, SQL DCL (ang. Data Control Language język kontroli nad danymi ) COMMIT, ROLLBACK, etc. TYPY DANYCH W STANDARDZIE ANSI (SQL-92) CHARACTER(n), CHAR(n) - napis znakowy o stałej długości n, CHARACTER VARYING(n), VARCHAR(n) napis znakowy o zmiennej długości, nie przekraczającej podanego rozmiaru n, BIT(n) ciąg bitów długości n, do danych graficznych i dźwiękowych (usunięto w SQL-2003), BIT VARYING(n) - ciąg bitów zmiennej długości (usunięto w SQL-2003), NUMERIC, NUMERIC(p,s), DECIMAL typ dziesiętny, liczby o ustalonej precyzji p i skali s, INTEGER, INT - typ całkowity, TYPY DANYCH W STANDARDZIE ANSI (SQL-92) FLOAT, REAL typ zmiennopozycyjny, DATE - data w formacie: YYYY-MM-DD, TIME - czas w formacie: HH:MM:SS, TIMESTAMP - data wraz z czasem - znacznik czasu w formacie: YYYY-MM-DD HH:MM:SS, INTERVAL - przedział czasu, LOB duże obiekty binarne lub znakowe, BLOB dane binarne, podtyp LOB (dodano w SQL3), CLOB dane znakowe, podtyp LOB (dodano w SQL3), XML - dane w języku XML (dodano w SQL3), BOOLEN wartości logiczne: true, false, unknown. 3

TYPY DANYCH W RÓŻNYCH SZBD w Oracle mamy number(p,s) w Oracle nie mamy typu TIME w Oracle mamy typ LONG dokumenty tekstowe, w MySQL mamy YEAR- rok w formacie YYYY, w MS SQL Server mamy typ DATATIME, MONEY, etc. KATEGORIE SKŁADNI Identyfikatory nazwy obiektów stworzonych przez użytkownika lub proces systemowy, Literały wartości wprowadzone do systemu, nie będące wartościami NULL, Słowa kluczowe i zarezerwowane słowa mające specjalne znaczenie dla parsera SQL: nazwy poleceń i funkcji. IDENTYFIKATORY Zasady tworzenia nazw (SQL3): Nie dłuższy niż 128 znaków, Może zawierać cyfry, litery i symbole, Musi zaczynać się od litery (lub innego dopuszczalnego symbolu) Nie może zawierać spacji ani innych znaków specjalnych, Nie może być słowem kluczowym lub zarezerwowanym, Istnieje identyfikator ograniczony (np. rejestracja samochodu: ), który może występować spacja. LITERAŁY Każda wartość liczbowa, znakowa, łańcuchowa, czasowa czy logiczna nie będąca identyfikatorem, Dla typów liczbowych m.in.: 12, -134, 5.67, 3E2, 7E-2, Dla typów znakowych i łańcuchowych: most, tekst, Przy stosowaniu typów DATE: 2003-10-12 4

OPERATORY Arytmetyczne: +, -, *, / Łączenia napisów: Porównań: =, <, >, <=, >=, <> Przynależności do listy wartości: IN Przynależności do przedziału: BETWEEN/NOT BETWEEN Wzorca w tekście: LIKE/NOT LIKE OPERATORY Logiczne: NOT, AND, OR Algebraiczne: UNION, UNION ALL, INTERSECT, EXCEPT(MINUS) SOME, ANY, ALL dla pewnego, dla każdego EXISTS, NOT EXISTS sprawdzające czy otrzymujemy pusty czy pełny zbiór wyników Testujący NULL: IS NULL/IS NOT NULL HIERARCHIA OPERATORÓW ( ) /, * -, + =, >, <, >=, <=, <> NOT AND ALL, ANY, BETWEEN, IN, LIKE, OR, SOME PRZYKŁADOWE FUNKCJE MATEMATYCZNE ABS(x) wartość bezwględna x, POWER(podstawa,wykładnik) podnosi wartość pierwszego argumentu do potęgi, SQRT(x) pierwiastek kwadratowy, RAND() generowanie liczby zmiennoprzecinkowej z przedziału 0-1 CEILING(x) zaokrąglenie liczby do najbliższej większej liczby całkowitej, FLOOR(x) zaokrąglanie liczby do najbliższej mniejszej liczby całkowitej, ROUND(x) - zaokrąglanie liczby do najbliższej liczby całkowitej 5

WYBRANE FUNKCJE PRZETWARZAJĄCE ŁAŃCUCHY WYBRANE FUNKCJE PRZETWARZAJĄCE DATY SUBSTRING(łańcuch, początek, długość) zwraca określoną cześć łańcucha, UPPER(s), LOWER(s) zmieniają wielkości znaków w łańcuchu, REVERSE(s) odwraca kolejność znaków w łańcuchu, TRIM(s) usuwa niepożądane znaki z początku lub końca łańcucha, LENGTH(s) wyznacza długość łańcucha, CURRENT_DATE(), SYSDATE(), GETDATE(), NOW(),etc. bieżąca data lub data i godzina, DAY() wydobywanie dnia z daty, MONTH() wydobywanie miesiąca z daty, YEAR() wydobywanie roku z daty, MONTH_BETWEEN(data1,data2) - ilość miesięcy pomiędzy wyspecyfikowanymi datami, etc. SKŁADNIA POLECEŃ SQL Klauzule (SELECT, FROM, etc.), Wyrażenia, Predykaty, Wielkość liter w składni nie ma znaczenia, Białe znaki są pomijane, Kończymy średnikiem. Wyrażenia w SQL: atrybuty, stałe liczbowe i łańcuchowe, konkatenacja łańcuchów, działania arytmetyczne, funkcje. DML - SELECT Służy do wydobywania danych z bazy, Najprostsza postać instrukcji SELECT SELECT [DISTINCT] wyrażenia FROM nazwa_tabeli [WHERE warunki]; Klauzule SELECT i FROM są obowiązkowe, DISTINCT i WHERE opcjonalne, 6

KLAUZULA SELECT Określa jakie kolumny znajdą się w relacji wynikowej, Słowo DISTINCT oznacza eliminację powtarzających się wierszy, * oznacza wypisanie danych ze wszystkich kolumn tabeli, KLAUZULA FROM, WHERE FROM - określa tabele z których będą pobierane dane, WHERE określa warunki jakie muszą spełniać wiersze relacji wyjściowej, SELECT * FROM samochody WHERE marka= mercedes ; SELECT * FROM samochody; SELECT rejestracja, marka FROM samochody; SELECT DISTINCT marka, kolor FROM samochody; SELECT * FROM samochody WHERE marka= mercedes AND kolor= srebrny ; SELECT * FROM samochody WHERE rocznik> 1980 ; SELECT * FROM samochody WHERE rejestracja LIKE BI% ; SELECT - ALIASY Wyrażeniom na liście SELECT mogą zostać nadane nazwy aliasy, Aliasem mogą być proste identyfikatory oraz ograniczone identyfikatory, SELECT - SORTOWANIE Wyniki zapytania mogą być posortowane w porządku rosnącym ASC (domyślnym) lub malejącym DESC, W klauzuli ORDER BY mogą występować atrybuty relacji wejściowej, aliasy, numer na liście wyrażeń SELECT, SELECT [DISTINCT] wyrażenie [[AS] alias] FROM nazwa_tabeli [WHERE warunki]; SELECT marka, Sysdate()-rocznik AS ile FROM samochody; SELECT marka, Sysdate()-rocznik AS ile lat FROM samochody; SELECT [DISTINCT] wyrażenie [[AS] alias] FROM nazwa_tabeli [WHERE warunki] [ORDER BY wyrażenie [ASC DESC]; SELECT * FROM samochody ORDER BY rocznik DESC; 7

SELECT - GRUPOWANIE W SQL istnieje możliwość podziału wynikowych wierszy na grupy i wykonania funkcji sumarycznych na wartościach należących do tych grup, SELECT [DISTINCT] wyrażenie [[AS] alias] FROM nazwa_tabeli [WHERE warunki] [GROUP BY wyrażenie [HAVING warunki]] [ORDER BY wyrażenie [ASC DESC]; SELECT - GRUPOWANIE Na liście GROUP BY mogą być tylko nazwy kolumn, Na liście klauzuli SELECT mogą znaleźć się jedynie: stałe, kolumny grupujące, funkcje sumaryczne oraz wyrażenie zawierające wszystkie powyższe, Dwa wiersze o takich samych wartościach kolumn grupujących wliczając w to NULL idą do tej samej grupy, FUNKCJE SUMARYCZNE COUNT AVG SUM MAX, MIN Argumentami funkcji może być wyrażenie, bądź DISTINCT wyrażenie, W przypadku COUNT możemy użyć także * - będą to wszystkie wiersze spełniające warunek WHERE, Wyrażenia o wartości NULL nie są brane pod uwagę przy obliczaniu wartości funkcji (oprócz COUNT), SELECT GROUP BY - PRZYKŁADY SELECT rocznik, COUNT (*) FROM samochody GROUP BY rocznik; SELECT marka, kolor, COUNT(rejestracja) FROM samochody GROUP BY marka, kolor; SELECT marka, SUM(cena) FROM samochody GROUP BY marka; 8

KLAUZULA HAVING Określa warunki jakie muszą być spełnione aby podzbiór trafił do relacji wynikowej (dotyczy tylko danych po agregacji), SELECT marka, SUM(cena), COUNT(*) FROM samochody GROUP BY marka HAVING COUNT(*)>=3; OPERATORY ALGEBRAICZNE NA ZAPYTANIACH instrukacja_select operator instrukcja_select Operatory: UNION, UNION ALL sumowanie zbiorów będących wynikami zapytań, INTERSECT przecięcie zbiorów wyników, EXCEPT różnica zbiorów wyników. Dodajemy ALL jeśli chcemy otrzymać wyniki bez eliminacji powtarzających się wierszy. OPERATORY ALGEBRAICZNE NA ZAPYTANIACH Mogą być stosowane gdy liczba i typy kolumn w składowych zapytania są takie same, Relacja wynikowa nie posiada nazw kolumn, a nazwy atrybutów w zbiorze wynikowym pochodzą z listy pierwszej klauzuli SELECT, Zapytania wykonywane są w kolejności ich wystąpienia, Klauzula ORDER BY może wystąpić jedynie na samym końcu całego zapytania, a do wynikowych kolumn odwołujemy się używając kolejnych numerów, OPERATORY ALGEBRAICZNE NA ZAPYTANIACH SELECT wlasciciel FROM samochody WHERE marka= mercedes EXCEPT SELECT wlasciciel FROM samochody WHERE marka= fiat ; SELECT marka FROM samochody WHERE data_rejestracji= 1999 INTERSECT SELECT marka FROM samochody WHERE data_rejestracji= 1998 ; 9

OPERATORY ALGEBRAICZNE NA ZAPYTANIACH SELECT rejestracja * FROM samochody WHERE marka= mercedes UNION SELECT rejestracja FROM samochody WHERE marka<> mercedes ORDER BY 1; ZŁĄCZENIA RELACJI W ZAPYTANAICH Złączenie tabel odbywa się poprzez wstawienie więcej niż jednej relacji w klauzuli FROM, Najczęściej złączenie uzyskujemy biorąc pod uwagę naturalne powiązania między wierszami tabel klucz główny <-> klucz obcy, Typy złączeń: iloczyn kartezjański (CROSS JOIN) złączenie naturalne (NATURAL JOIN) złączenie zewnętrzne (RIGHT LEFT FULL JOIN) samozłączenie (JOIN) ILOCZYN KARTEZJAŃSKI Daje w wyniki wszystkie możliwe kombinacje wierszy, Liczba krotek wynikowych jest iloczynem ilości krotek w obu relacjach wejściowych, Rzadko stosowany gdyż ze względu na ogrom rozmiaru może wystąpić błąd zapytania, SELECT * FROM relacja1 CROSS JOIN relacja2 [WHERE warunki] [ORDER BY wyrażenie]; SELECT * FROM samochody CROSS JOIN wypadki; SELECT * FROM samochody, wypadki; ZŁĄCZENIE NATURALNE daje w wyniku iloczyn kartezjański łączonych relacji ograniczony do tych krotek, dla których atrybuty o tych samych nazwach i typach w obu relacjach miały równe wartości, Można wprowadzać aliasy nazw relacji, wówczas należy pamiętać o tym, że nazw oryginalnych nie można już używać, SELECT * FROM samochody JOIN wypadki w ON rejestracja=w.rejestracja; SELECT * FROM samochody NATURAL JOIN wypadki; SELECT * FROM samochody JOIN wypadki USING (rejestracja); 10

ZŁĄCZENIE ZEWNĘTRZNE Złączenie zewnętrzne rozszerza wynik prostego złączenia o te wiersze z jednej tabeli, dla których w trakcie złączania nie znaleziono odpowiadających wierszy w drugiej tabeli, Jest to możliwe dzięki wirtualnym krotkom wypełnionym wartością NULL, Wyróżniamy złączenie: lewostronne (LEFT JOIN), prawostronne (RIGHT JOIN) i pełne będące sumą wyników dwóch pierwszych złączeń (FULL JOIN), ZŁĄCZENIE ZEWNĘTRZNE SELECT * FROM relacja1 [alias1] [NATURAL] {LEFT RIGHT FULL} [OUTER] JOIN relacja2 [alias2] {ON (warunek_połączenia) USING (atrybut) } [WHERE warunki] [ORDER BY wyrażenia]; ZŁĄCZENIE ZEWNĘTRZNE - PRZYKŁADY SELECT w.data,w.strata, s.model FROM samochody s LEFT JOIN wypadki w ON s.rejestracja=w.rejestracja WHERE w.rejestracja IS NULL; SELECT s.marka, COUNT(w.rejestracja) FROM wypadki w RIGHT JOIN samochody s ON s.rejestracja=w.rejestracja GROUP BY s.marka; SAMOZŁĄCZENIE Złączenie tabeli z nią samą, Ta sama tabela występuje w dwóch (lub więcej) rolach wskazywanych przez aliasy dołączone do nazwy tabeli w klauzuli FROM, SELECT prac.nazwisko, kier.nazwisko FROM pracownicy prac JOIN pracownicy kier ON prac.nrboss=kier.nrpracownika; SELECT s.rejestracja FROM samochody s JOIN samochody c ON s.cena>c.cena WHERE c.rejestracja= BID123 ; 11

PODZAPYTANIA Podzapytania mogą występować wewnątrz klauzul WHERE, HAVING, SELECT i FROM, Maja taką samą postać jak zapytania, są ujęte w nawiasy, Mogą być częścią wyrażeń, Mogą być wielokrotnie zagnieżdżane, Podzapytanie może wystąpić jako argument predykatów porównań oraz przynależności do listy wartości, W podzapytaniu nie można używać klauzul ORDER BY, UNION. Często używa się operatorów IN, NOT IN, SOME, ALL, EXISTS, NOT EXIST PODZAPYTANIA WIERSZOWE I TABLICOWE Wierszowe zwraca jeden rekord wynikowy SELECT * FROM samochody WHERE rocznik= (SELECT DISTINCT max(rocznik) FROM samochody WHERE marka= fiat ); Tablicowe zwraca zbiór wynikowy złożony z jednego lub wielu rekordów SELECT rejestracja FROM samochody WHERE (marka, cena) IN (SELECT marka, max(cena) FROM samochody GROUP BY marka); OPERATORY ANY I ALL stosowane w zapytaniach z podzapytaniami tablicowymi, warunek z operatorem ANY jest prawdziwy, jeśli jest spełniony dla chociaż jednej wartości, zwracanej przez podzapytanie do zapytania zewnętrznego, warunek z operatorem ALL jest prawdziwy wtedy, gdy spełniony jest dla wszystkich wartości odczytywanych przez podzapytanie. OPERATORY ANY I ALL - PRZYKŁAD SELECT rejestracja FROM samochody WHERE cena > ANY (SELECT cena FROM samochody WHERE marka= mercedes ); SELECT rejestracja FROM samochody WHERE cena > ALL (SELECT cena FROM samochody WHERE marka= mercedes ); 12

PODZAPYTANIE ZWYKŁE Zbiór wynikowych wierszy nie zmienia się i nie zależy do wierszy w głównym zapytaniu, Wykonywane w pierwszej kolejności (tylko raz), jako wynik pośredni trafiają do zapytania zewnętrznego. SELECT rejestracja FROM samochody WHERE cena < (SELECT avg(cena) FROM samochody); SELECT rejestracja FROM samochody WHERE cena < (SELECT avg(cena) FROM samochody) AND rocznik = (SELECT min(rocznik) FROM samochody) ; PODZAPYTANIE SKORELOWANE Zbiór wyników podzapytania zależy od wartości występujących w wierszach w głównym zapytaniu, Wykonywane dla każdego wiersza z zapytania zewnętrznego (wielokrotnie). SELECT rejestracja, cena FROM samochody s WHERE cena > (SELECT avg(cena) FROM samochody z WHERE z.marka=s.marka); OPERATOR EXIST Występuje w podzapytaniach skorelowanych, Przyjmuje wartość prawdy gdy podzapytanie zwróci przynajmniej jeden rekord, Podzapytanie może zwracać również literał. SELECT nazwisko FROM pracownicy p WHERE EXISTS (SELECT * FROM pracownicy WHERE id_szefa = p.id_prac); SELECT nazwisko FROM pracownicy p WHERE EXISTS (SELECT 1 FROM pracownicy WHERE id_szefa = p.id_prac); PODZAPYTANIA W KLAUZULI HAVING obowiązują te same zasady co w przypadku klauzuli WHERE SELECT marka, AVG(cena) FROM samochody GROUP BY marka HAVING AVG(cena) > (SELECT AVG(cena) FROM samochody); 13

PODZAPYTANIA W KLAUZULI FROM PODZAPYTANIE W KLAUZULI SELECT Podzapytanie tworzy zbiór danych dla zapytania zewnętrznego: SELECT marka, srednia_cena FROM (SELECT marka, avg(cena) FROM samochody GROUP BY marka); Takie podzapytanie jest źródłem danych dla nowego atrybutu w wyniku zapytania zewnętrznego. Podzapytanie musi zwracać co najwyżej jedną wartość dla rekordu przeglądanego przez zapytanie zewnętrzne. Należy również zdefiniować alias dla atrybutu definiowanego przez podzapytanie. SELECT s.wlasciciel, (SELECT COUNT(*) FROM samochody z WHERE z.wlasciciel=s.wlasciciel) AS L_sam FROM wlasciciele s; DDL CREATE TABLE CREATE TABLE - PRZYKŁAD Najprostsza postać deklaracji schematu relacyjnego przyjmuje następującą postać: CREATE TABLE nazwa_tabeli (nazwa_kolumny typ_danych (rozmiar) [DEFAULT wartośc_domyślna]); rejestracja Char(7), rocznik Date DEFAULT Sysdate, właściciel Numeric, marka Varchar(10) DEFAULT Fiat ); CREATE TABLE zwierzeta ( gatunek CHARACTER VARYING (100), jajorodny CHAR(1) DEFAULT T, liczba_konczyn NUMERIC(2), data_odkrycia DATE); 14

CREATE TABLE - WIĘZY CREATE TABLE nazwa_tabeli (nazwa_kolumny typ_danych (rozmiar) [ [CONSTRAINT nazwa] więzy_atr] [ [CONSTRAINT nazwa] więzy_rel]); Podstawowe rodzaje więzów: PRIMARY KEY NOT NULL REFERENCES nazwa_tabeli () UNIQUE CHECK CREATE TABLE PRIMARY KEY rocznik Date, właściciel Numeric, data_rejestracji Date); rejestracja Char(7), rocznik Date, właściciel Numeric, data_rejestracji Date, PRIMARY KEY (rejestracja)); CREATE TABLE - UNIQUE rocznik Date, właściciel Numeric, vin char(13) UNIQUE); rocznik Date, właściciel Numeric, vin char(13), UNIQUE (vin)); CREATE TABLE NOT NULL rocznik Date, właściciel Numeric NOT NULL, vin char(13) UNIQUE NOT NULL); 15

CREATE TABLE KLUCZ OBCY rocznik Date, właściciel Numeric REFERENCES właściciele(nr), data_rejestracji Date NOT NULL); rocznik Date, właściciel Numeric, data_rejestracji Date NOT NULL FOREIGN KEY właściciel REFERENCES właściciele(nr)); KLUCZ OBCY INTEGRALNOŚĆ REFERENCYJNA ON DELETE SET NULL usunięcie krotki z relacji z kluczem głównym spowoduje zapisanie do wskazujących na nią atrybutów tworzących klucz obcy wartości NULL, ON DELETE CASCADE usunięcie krotki j.w. spowoduje usunięcie wszystkich krotek, które zawierają klucz obcy wskazujący na usuwaną krotkę, ON DELETE SET DEFAULT usunięcie krotki j.w. spowoduje zapisanie do wskazujących na nią atrybutów tworzących klucz obcy ich wartości domyślnych, KLUCZ OBCY INTEGRALNOŚĆ REFERENCYJNA ON UPDATE SET NULL modyfikacja wartości klucza głównego w krotce spowoduje zapisanie do wskazujących na nią atrybutów tworzących klucz obcy wartości NULL, ON UPDATE CASCADE modyfikacja wartości j.w. w krotce spowoduje zapisanie do wskazujących na nią atrybutów tworzących klucz obcy nowej wartości klucza głównego lub wartości unikalnej, ON UPDATE SET DEFAULT - modyfikacja j.w. w krotce spowoduje zapisanie do wskazujących na nią atrybutów tworzących klucz obcy ich wartości domyślnych. KLUCZ OBCY INTEGRALNOŚĆ REFERENCYJNA rocznik Date, data_rejestracji Date NOT NULL, właściciel Numeric REFERENCES właściciele(nr), ON DELETE SET NULL, ON UPDATE CASCADE ); 16

CREATE TABLE OGRANICZENIE ATRYBUTU rocznik Date CHECK (rocznik> 1970 ), właściciel Numeric REFERENCES właściciele(nr), data_rejestracji Date NOT NULL); rocznik Date CHECK (rocznik> 1970 ), właściciel Numeric REFERENCES właściciele(nr), rodzaj Char(1) CHECK (rodzaj IN ( s, h )) ); CREATE TABLE OGRANICZENIE RELACJI rocznik Date NOT NULL, data_rejestracji Date, CHECK (rocznik<data_rejestracji)); rocznik Date NOT NULL, rodzaj Char(1), CHECK (rodzaj= h OR rejestracja NOT LIKE BI% )); CREATE TABLE NADAWANIE NAZW WIĘZOM rejestracja Char(7) CONSTRAINT numer_sam PRIMARY KEY, data_rejestracji Date); rocznik Date NOT NULL, rodzaj Char(1), CONSTRAINT rodzaj_rej CHECK (rodzaj= h OR rejestracja NOT LIKE BI% )); CREATE TABLE PODZAPYTANIE (ORACLE) CREATE TABLE nazwa_tabeli (nazwa_kolumny [DEFAULT wartosc] [ [CONSTRAINT nazwa] więzy_atr] [ [CONSTRAINT nazwa] więzy_rel]) AS SELECT zapytanie; CREATE TABLE auta (rejestracja PRIMARY KEY, marka, kolor,cena) AS SELECT rejestracja, marka, kolor, 1.25*cena FROM samochody; 17

RENAME Zmiana nazwy relacji RENAME stara_nazwa TO nowa_nazwa; RENAME samochody TO auta; DROP TABLE DROP TABLE nazwa_tab [CASCADE]; Gdy inne tabele zawierają klucze obce do usuwanej tabeli to usunięcie nie powiedzie się, Np. DROP TABLE samochody; - nie powiedzie się, DROP TABLE samochody CASCADE; - usunie tabele razem z wiązami spójności referencyjnej dla odpowiedniej kolumny. ALTER TABLE ALTER TABLE nazwa_tab klauzula_zmiany_schem; Możliwości: dodanie nowej kolumny wraz z ograniczeniami atrybutu lub definicji ograniczenia relacji ADD, modyfikacja definicji atrybutu ALTER COLUMN/ MODIFY, usunięcie kolumny lub ograniczenia integralnościowego DROP COLUMN. ALTER TABLE - ADD ALTER TABLE nazwa_tabeli ADD [COLUMN nazwa typ(rozmiar) [DEFAULT wartość] ograniczenia CONSTRAINT nazwa ograniczenie]; ALTER TABLE samochody ADD COLUMN vin Char (17) UNIQUE; ALTER TABLE samochody ADD CONSTRAINT ogr_mark CHECK (marka IN ( fiat, seat )); 18

ALTER TABLE - DROP ALTER TABLE ALTER COLUMN ALTER TABLE nazwa_tabeli DROP [ COLUMN ( nazwa ) CONSTRAINT ( nazwa ) ]; ALTER TABLE nazwa_tabeli MODIFY ( nazwa typ(rozmiar) [DEFAULT wartość] ograniczenia ); ALTER TABLE samochody DROP CONSTRAINT numer_sam; ALTER TABLE samochody DROP COLUMN cena; ALTER TABLE samochody ALTER COLUMN vin CHARACTER VARYING (20) NOT NULL; DML- INSERT INTO Wstawianie wierszy do tabeli, Można ograniczyć się do kolumn o podanych nazwach (w reszcie wstawiamy NULL), Wiersz można wypełnić wartościami zwróconymi przez podzapytanie. INSERT INTO INSERT INTO samochody VALUES ( BIR5678, 2002, 2, 2002-10-09, biały, opel ); INSERT INTO samochody (rejestracja, kolor, marka) VALUES ( BIR5678, biały, NULL); INSERT INTO nazwa_tabeli [(nazwy_kolumn)] VALUES (wartości [DEFAULT] [NULL]); INSERT INTO samochody_new (SELECT * FROM samochody WHERE cena<20000); 19

UPDATE Modyfikacja (aktualizacja) wartości zapisanych w bazie danych, UPDATE nazwa_tabeli SET nazwy_kolumn=wyrażenia [DEFAULT] [NULL] [WHERE warunek]; UPDATE samochody SET cena=cena*1.05; UPDATE samochody SET cena=cena*1.05 WHERE marka= mercedes ; UPDATE samochody SET właściciel=3, kolor= czerwony WHERE rejestracja= SER2345 ; UPDATE - PODZAPYTANIE UPDATE nazwa_tabeli SET nazwy_kolumny= (SELECT nazwa_kolumny2 FROM nazwa_tabeli2 [WHERE warunki]) [WHERE warunek]; UPDATE samochody SET cena=cena+ (SELECT avg(cena) FROM samochody) WHERE marka= mercedes ; DELETE Usuwanie danych z tabeli, DELETE FROM nazwa_tabeli [WHERE warunek]; DELETE FROM samochody; DELETE FROM samochody WHERE data_rej IS NULL; COMMIT, ROLLBACK Utrwalenie zmian wprowadzonych przez polecenia INSERT, DELETE, UPDATE, inaczej wyniki wykonanych poleceń są widoczne jedynie w ramach bieżącej sesji, COMMIT; Rezygnacja z wprowadzenia zmian do bazy danych, ROLLBACK; 20

PERSPEKTYWY Są zapytaniami zapewniającymi użytkownikowi właściwe widoki na dane składowane w bazie danych, Są wyrażeniami języka SQL przechowywanymi w bazie danych i określonymi nazwą, Wyniki zapytania tworzącego perspektywę nie są fizycznie składowane na dysku, ale są generowane za każdym razem, gdy do perspektywy zostanie skierowane zapytanie, Umożliwiają wykonywanie podobnych operacji jakie są wykonywane na tabelach: przeglądanie, wyszukiwanie zawsze, wstawianie, modyfikowanie i usuwanie danych pod pewnymi warunkami. Perspektywy pozwalają na: definiowanie struktur, które umożliwią wygodne korzystanie z systemu pojedynczym użytkownikom lub ich klasom, ograniczenie dostępu do danych, uproszczenie pracy administratora, podsumowywania składowych danych. PERSPEKTYWY KONKRETNE ZASTOSOWANIA Zapewnienie bezpieczeństwa przez ograniczenie zbiorów wynikowych do tych danych, które rzeczywiście są potrzebne użytkownikowi, Mogą stanowić podstawę dla innych perspektyw, co pozwala na swobodne operowanie danymi, Oferowanie danych użytkownikowi w bardziej przystępnej formie. PERSPEKTYWY - TWORZENIE CREATE VIEW nazwa [ (nazwa1, nazwa2,...)] AS SELECT zapytanie definiujące perspektywę [ WITH CHECK OPTION ]; CREATE VIEW kabriolety AS SELECT rejestracja, marka, kolor, cena FROM samochody; CREATE VIEW terenowe (marka, data, cena) AS SELECT marka, data, cena*1.2 FROM samochody WHERE kolor= czerwony ; PERSPEKTYWY - USUWANIE DROP VIEW nazwa [RESTRICT CASCADE]; DROP VIEW terenowe; DROP VIEW terenowe CASCADE; - usunięcie razem wszystkich perspektyw zależnych, DROP VIEW terenowe RESTRICT; - odrzucenie usunięcia perspektywy, jeśli istnieją inne zależne. 21

PERSPEKTYWY MODYFIKOWALNE oparte na jednej relacji ( w Oracle i Access może być więcej niż jedna), bez słowa DISTINCT, bez wywołań funkcji podsumowujących, bez funkcji operujących na zbiorach, bez operatorów zbiorów, bez klauzuli ORDER BY, GROUP BY, HAVING, Klauzula WHERE nie może zawierać podzapytań. są modyfikowane przez polecenia UPDATE i DELETE, aby można było korzystać z INSERT, konieczne jest, aby perspektywy udostępniały wszystkie atrybuty klucza podstawowego oraz wszystkie atrybuty obowiązkowe relacji bazowej, jeżeli perspektywa zawiera atrybuty stanowiące wynik wyrażeń, to polecenia INSERT i UPDATE nie mogą dotyczyć tych atrybutów. PERSPEKTYWY Z OPCJĄ SPRAWDZANIA Zapewnia ograniczenie danych operowanych przy użyciu perspektywy do danych określonych przez jej warunek WHERE. CREATE VIEW drogie (rejestracja, marka, data, cena) AS SELECT marka, data, cena FROM samochody WHERE cena>100000 WITH CHECK OPTION; INSERT INTO drogie (rejestracja, marka, data, cena) VALUES ( TY789, seat,2007,45000); UPDATE drogie SET cena=30000 WHERE marka= fiat ; DEFINICJA DZIEDZINY ATRYBUTÓW Są to typy danych definiowane łącznie z więzami spójności. CREATE DOMAIN nazwa typ (rozmiar) [CHECK (VALUE warunek)] [DEFAULT wartosc]; CREATE DOMAIN rej CHAR(6) CHECK (VALUE LIKE BI ) DEFAULT BI1111 ; CREATE TABLE samochody (rejestracja DOMAIN rej PRIMARY KEY, ); ALTER DOMAIN, DROP DOMAIN DEFINICJA ASERCJI Więzy spójności definiowane poza instrukcjami CREATE TABLE, ALERT TABLE. CREATE ASSERTION nazwa CHECK (warunek); CREATE ASSERTION suma_ceny CHECK ( 1000000>=ALL (SELECT SUM(cena) FROM samochody GROUP BY marka)); DROP ASSERTION 22

TWORZENIE SYNONIMÓW NAZW Konstrukcja pozwalająca na tworzenie synonimów nazw tabel i perspektyw. CREATE SYNONYM nazwa FOR nazwa_tabeli_lub_perspektywy; CREATE SYNONYM pomoc FOR samochody; DROP SYNONYM TWORZENIE SEKWENCJI Niektóre SZDB (np. Oracle) oferują konstrukcję (przechowywana jako obiekt) służącą do generowania jednoznacznych numerów dla wartości kluczy głównych i jednoznacznych. CREATE SEQUENCE nazwa [INCREMENT BY k] [START WITH n]; n pierwsza generowana liczba naturalna, k wartość o jaką wzrasta każdy kolejno generowany numer. UŻYCIE SEKWENCJI nazwa_sewkwencji.nextval generowanie kolejnej wartości w sekwencji, nazwa_sewkwencji.currval ostatnio wygenerowana wartość w sekwencji, CREATE SEQUENCE numery_prac INCREMENT BY 3 START WITH 10; INSERT INTO pracownicy (nr, nazwisko, stanowisko) VALUES (numery_prac.nextval, adam, bobrowski ); WYKŁAD PRZYGOTOWANO NA PODSTAWIE L. Banachowski, E. Mrówka-Matejewska, K. Stencel, Systemy baz danych. Wykłady i ćwiczenia, PJWSTK, 2004, K. Kline, D. Kline, SQL. Almanach. Opis poleceń języka, Helion, 2004, P. Wilton, J. Colby, SQL od podstaw, Helion, 2006, J. D. Ullman, J. Widom, Podstawowy wykład z systemów baz danych, WNT, 1999, http://wazniak.mimuw.edu.pl/ 23