Bazy Danych (informatyczna definicja) Jest to zbiór tabel spełniających określone kryteria Zbiór powiązań pomiędzy tabelami

Podobne dokumenty
Wykład 5. SQL praca z tabelami 2

Wykład 8. SQL praca z tabelami 5

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Autor: Joanna Karwowska

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

Język SQL, zajęcia nr 1

Systemy GIS Tworzenie zapytań w bazach danych

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

Wykład 6. SQL praca z tabelami 3

Relacyjne bazy danych. Podstawy SQL

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Wykład 05 Bazy danych

Przestrzenne bazy danych Podstawy języka SQL

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Wprowadzenie do baz danych

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

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

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

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

Bazy danych. Polecenia SQL

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

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

Relacyjne bazy danych. Podstawy SQL

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

SQL (ang. Structured Query Language)

WPROWADZENIE DO BAZ DANYCH

Autor: Joanna Karwowska

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

Widok Connections po utworzeniu połączenia. Obszar roboczy

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

Technologie baz danych

Wykład :45 BD-1 W_3

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

Paweł Rajba

Instrukcja CREATE TABLE

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

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

Bazy danych. Dr inż. Paweł Kasprowski

BAZY DANYCH Cz III. Transakcje, Triggery

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

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

SIECI KOMPUTEROWE I BAZY DANYCH

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

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

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

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

ACESS- zadania z wykorzystaniem poleceń SQL

Paweł Cieśla. Dokumentacja projektu

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

Wykład 4. SQL praca z tabelami 1

Język SQL. Rozdział 2. Proste zapytania

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

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

Bazy danych - wykład wstępny

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

Wdrożenie modułu płatności eservice. dla systemu Magento

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

Zasady transformacji modelu DOZ do projektu tabel bazy danych

BAZY DANYCH. CREATE TABLE dbo.wydzialy (ID INT, Akronim VARCHAR(4) NOT NULL, Wydzial VARCHAR(30) NOT NULL, CONSTRAINT Kluczyk PRIMARY KEY(ID) )

Administracja i programowanie pod Microsoft SQL Server 2000

Autor: Joanna Karwowska

Krzysztof Kadowski. PL-E3579, PL-EA0312,

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

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Informatyka Ćwiczenie 10. Bazy danych. Strukturę bazy danych można określić w formie jak na rysunku 1. atrybuty

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

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

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

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

Aspekty aktywne baz danych

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

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

Język SQL podstawy zapytań

Uzupełnij pola tabeli zgodnie z przykładem poniżej,

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

Baza danych Uczniowie.mdb

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

Autor: Joanna Karwowska

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

Tworzenie baz danych i tabel

Oracle PL/SQL. Paweł Rajba.

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

Przykładowa baza danych BIBLIOTEKA

Bazy danych - Materiały do laboratoriów VIII

Bazy danych. dr inż. Arkadiusz Mirakowski

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

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Projektowanie systemów baz danych

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Transkrypt:

Bazy Danych (informatyczna definicja) Jest to zbiór tabel spełniających określone kryteria Zbiór powiązań pomiędzy tabelami

Cechy fizyczne kolumn w tabelach Każda tabela ma unikalną nazwę w bazie danych i składa się z wierszy i kolumn Każda kolumna musi mieć swoją unikalną nazwę Nieznana jest kolejność kolumn w obrębie tabeli -> wniosek: do kolumny odwołujemy się poprzez jej nazwę a nie pozycję w tabeli Każda kolumna ma ściśle określoną dziedzinę (typ danych)

Cechy fizyczne kolumn (najczęstsze typy danych) int (typ całkowity wystarczający nawet do dużych miar) char(#) napis zajmujący dokładnie # znaków miejsca varchar(#) napisz, który może zajmować od 1 do # znaków miejsca (teoretycznie zajmuje fizycznej pamieci dokładnie tyle ile liter wpiszemy -> jest to nieprawda, każdy taki element ma najczesciej narzut od 10 do 20 znaków) money -> pieniądze bit -> 0 lub 1 (niektórzy nazywają go logicznym 0 falsz, 1 prawda) Datetime -> data z czasem (czasami występują typy date i time osobno). To jest typ binarny (kilka bajtów) na których jest zakodowana dokładna data z czasem z dokładnością do milisekund

Cechy fizyczne kolumn (typ datetime) Wewnętrzny sposób przechowywania daty nie ma nic wspólnego z jej formatem Tabela/Baza danych nie dopuści do wpisania wadliwej daty (np. dnia 32, miesiąca nr 13 itp., itd.) Zazwyczaj daty do tabeli wstawia się używając tekstowego formatu. Baza danych dokona ukrytej konwersji (tłumaczenia daty). Domyślnym formatem tekstowym daty na SQL-u jest MM.DD.YYYY. Ale ponieważ ustawienie to można zmienić dla całej bazy lepiej jest używać funkcji zamieniającej napis na datę, w której możemy podać rodzaj użytego formatu. Np.. convert(datetime, 20061025, 112) oznacza w MS-SQL zamień na datę napis w formacie YYYYMMDD (jest to format nr 112) Sposób wyświetlania daty przez program pobierający dane z tabeli nie zależy od bazy danych. Zależy od systemu operacyjnego, oprogramowania, ustawień tego oprogramowania

Cechy fizyczne kolumn właściwość NULL i NOT NULL NULL oznacza, ze tej danej nie musimy podawać NOT NULL ze wpisując wiersz tej informacji pominąć Imię Nazwisko Data_ur PESEL varchar(40) varchar(40) datetime char(11) NOT NULL NOT NULL NULL NULL Maciej Stodolski 10.03.2000 000310xxx Miś Testowy1 10.10.1970 NULL Miś Testowy2 NULL NULL

Cechy fizyczne wierszy w tabeli Nieznana jest kolejność wierszy w tabeli (nie można systemu poprosić o np. 5-ty wiersz tabeli Dlatego wiersze możemy rozpoznawać tylko poprzez ich zawartość. Np. pokaż wiersze z tabeli osoby w których w kolumnie imię jest napis Maciej a w kolumnie nazwisko jest napis Stodolski Wszystkie bazy wymagają aby istniał podzbiór kolumn w tabeli, którego zawartość nigdy się nie powtórzy. Taki podzbiór nazywamy Kluczem głównym tabeli

Cechy tabel: Klucz główny tabeli Klucz główny może się składać z dowolnej liczby kolumn. Oznacza się go jako PK (od Primary Key) Kolumny wchodzące w skład klucza muszą mieć atrybut NOT NULL Jeżeli w przykładzie na slajdzie nr 5 zdefiniujemy PK jako (imię, nazwisko) to spowoduje, że: Wynik zapytania pokaz wiersz z imieniem Maciej i nazwiskiem Stodolski będzie albo pusty (brak takiej osoby w tabeli albo będzie TYLKO jeden taki wiersz) Baza nie dopuści do powstania w tabeli dwu wierszy o tej samej wartości klucza głównego

Podsumowanie Cechy fizyczne tabeli Nazwa tabeli musi być unikalna w bazie danych (tabela rozpoznawana jest przez nazwę) Kolumny w ramach jednej tabeli muszą mieć unikalne nazwy. Dostęp do kolumn jest poprzez ich nazwy. Każda kolumna ma jeden określony typ danych i ustawiony atrybut NULL lub NOT NULL Każda tabela musi/powinna mieć zdefiniowany klucz główny

Cechy logiczne tabeli Dane w tabeli powinny dotyczyć tylko jednej logicznej całości Jeżeli dotyczą dwóch tabel to należy taką tabelę podzielić na dwie i pokazać powiązanie pomiędzy nimi (klucz obcy Foreign Key) Czasami logiczna całość wynika z potrzeby zabronienia wpisywania pewnych pól -> konieczności wybierania danych z tak zwanej tabeli słownikowej

Przykładowa tabela Nazwa kolumny Typ Danych NULL? DANE Imię varchar(40) NOT NULL Maciej Mis Maciej Nazwisko varchar(40) NOT NULL Stodolski Testowy Stodolski kod_poczt char(6) NOT NULL 05-075 00-000 05-075 ulica varchar(40) NOT NULL Kwiatowa 111 Pod mostem Kwiatowa 111 Miasto varchar(40) NOT NULL Warszawa-WESOŁA Gdańsk Warszawa-WESOŁA data_ur datetime NULL NULL 01.01.1970 NULL nazwa_firmy varchar(100) NOT NULL Politechnika-Warszawska Politechnika-Warszawska Hewlett-Packard kod_poczt char(6) NOT NULL 00-000 00-000 00-000 ulica_firmy varchar(40) NOT NULL Pl. Politechniki 1 Pl. Politechniki 1 Szturmowa 2a Miasto varchar(40) NOT NULL Warszawa Warszawa Warszawa Stanowisko varchar(40) NOT NULL adjunkt adjunkt analityk Pensja money NOT NULL 4000 3900 11000 Od datetime NOT NULL 01.01.1995 01.01.2000 01.01.2001 Do datetime NULL NULL NULL NULL

Podział tabeli na logiczne części Osoby PK Id_osoby Imię Nazwisko kod_poczt ulica miasto data_ur PK Firmy Nazwa_skr Nazwa kod_poczt ulica miasto Etaty PK FK1 FK2 id_etatu ID_firmy Id_osoby stanowisko pensja od do

Wybór PK dla tabeli ETATY (Id_osoby, Id_firmy) po takim wyborze nie będzie możliwe wpisanie osoby pracującej na dwóch etatach w jednej firmie albo nie będzie możliwe przechowywanie informacji archiwalnych (ktoś kiedyś pracował i teraz znowu pracuje na innym etacie) (id_osoby, id_firmy, od) teoretycznie powinno wystarczyć, ale jeżeli w przyszłosci planujemy powiązać etaty z innymi tabelami to może lepiej będzie wprowadzić unikalny identyfikator, nadawany przez system

Dalszy podział wynikający z potrzeb klienta Klient chce przy każdym mieście mieć informacje w jakim województwie jest to miasto Najlepiej jakby nazwa miasta i województwo było wybierane ze słownika (z osobnej tabeli) a nie wpisywane Z informacji tych wynika konieczność zastąpienia pola miasto odwołaniem do kolejnej tabeli

Ostateczny schemat bazy

Przykładowe dane Województwa Miasta nazwa kod_woj Nazwa id_miasta kod_woj MazowieckiMaz Warszawa-Weso ła 1 Maz Pomorskie Pom Warszawa 2 Maz Gdańsk 3 Pom Osoby Id_osoby Imie Nazwisko ulica kod_poczt id_miasta data_ur 1 Maciej Stodolski Kwiatowa 111 05-075 1 NULL 2 Mis Testowy Pod Mostem 00-000 3 01.01.1970 Firmy Nazwa_skrkod_poczt ulica nazwa id_miasta PW 00-000 Pl.Pol.1 Politechnika Warszawska 2 HP 02-773 Szturmowa 2a Hewlett Packard Polska 2 Etaty id_osoby id_firmy stanowisko pensja od do 1 PW adjunkt 4000 01.01.1995 NULL 2 PW adjunkt 3900 01.01.2000 NULL 1 HP analityk 11000 01.01.2001 NULL

Architektura systemów baz danych Archaiczne rozwiązanie: na każdej stacji roboczej jest program zawierający tzw. motor bazy danych (czyli programy pozwalające przeszukiwać i modyfikować zawartość tabel). Tabele są umieszczone w jednym lub wielu plikach na wspólnym dysku (Access, dbase, ) Architektura Klient-Serwer w której wszystkie operacje na tabelach wykonuje jeden program (nazwijmy go serwerem). Tylko on ma dostęp do tabel. Programy ze stacji wysyłają do tego programu polecenia a on je odpowiednio kolejkuje i wykonuje

Dlaczego w bazie powinny być powiązania między tabelami Błędnym podejściem jest traktowanie bazy danych jako zbioru tabel nad którymi czuwa tylko aplikacja Administratorzy i osoby uprawnione mają dostęp bezpośredni do bazy danych Istnieje wiele uznanych systemów raportujących opierających się na informacjach z bazy danych (między innymi pobierają one powiązania pom. tabelami) Jeżeli wystąpi błąd po stronie aplikacji to będzie miał dla bazy fatalne skutki a tak dobrze zaprojektowana baza będzie odporna na takie błędy

Cechy nowoczesnej aplikacja bazodanowej Zabezpieczenia w postaci kluczy obcych (przed utratą integralności danych) Zabezpieczenia pod postacią sprawdzania poprawności danych na poziomie bazy (oprócz weryfikacji po stronie aplikacji) Większość kodu do manipulacji danymi jest wykonana po stronie bazy poprzez procedury bazodanowe w tym triggery. Aplikacja wywołuje procedury bazodanowe a nie przesyła zapytania (mniej bezpieczne i mniej efektywne rozwiązanie) Wszystkie złożone operacje są wykonywane transakcyjnie. Większość tabel słownikowych ma możliwość ukrywania informacji, które przestały obowiązywać (np. zakres dat obowiązywania lub choćby jedna data do_kiedy_obowiązuje ) Operacje na danych słownikowych, zmiany, dezaktualizacje, tych danych, są automatycznie rejestrowane przez bazę (wykorzystanie techniki triggerów)

Krótka teoria języków do manipulacji danymi Baza danych spełnia podane wcześniej Wynikiem każdej operacji jest nowa tabela Język powinien udostępniać następujące operacje: WW (wyboru wierszy) T -> WW -> nt WK (wybór kolumn) T -> WW -> nt R (iloczyn kartezjański, relacja pomiędzy tabelami) T1 x T2 -> nt inny zapis to T1,T2 -> nt

Na czym polega operacja relacji pomiędzy tabelami Operacja relacji łączy każdy wiersz z tabeli pierwszej ze wszystkimi wierszami z tabeli drugiej Wynikowa tabela zawiera wszelkie możliwe kombinacje połączeń pomiędzy wierszami z obydwu tabel WNIOSEK w języku manipulacji danymi, wybór danych z dwu tabel powoduje otrzymanie wynikowej tabeli zawierającej wszelki możliwe połączenia wierszy z obydwu tabel

Przykład operacji relacji na tabelach miasta, województwa Pomorskie Pom Mazowieckie Maz Nazwa Kod_woj Gdańsk 3 Pom Warszawa 2 Maz W-wa-Wesoła 1 Maz Nazwa Id Kod Woj Gdańsk 3 Pom Pomorskie Pom Warszawa 2 Maz Pomorskie Pom W-wa-Wesoła 1 Maz Pomorskie Pom Gdańsk 3 Pom Mazowieckie Maz Warszawa 2 Maz Mazowieckie Maz W-wa-Wesoła 1 Maz Mazowieckie Maz Nazwa1 Id KodWoj Nazwa Kod_ woj

Operacja Relacji Wnioski Wybór danych z dwu tabel daje nieoczekiwany wynik Wybór taki ma sens tylko jak dodamy warunek łączący tabele (czyli operację Wyboru Wierszy) Poniżej użyto warunek: miasta.kod_woj = województwa.kod_woj Kod_woj Nazwa KodWoj ID Nazwa1 Maz Mazowieckie Maz 1 W-wa-Wesoła Maz Mazowieckie Maz 2 Warszawa Pom Pomorskie Pom 3 Gdańsk

Język SQL Służy do wydawania poleceń SQL-serwerowi Wysyłamy do SQL serwera polecenie a w odpowiedzi otrzymujemy: Wirtualną tabelę wynikową (jeżeli użyliśmy polecenia wyboru danych SELECT bez podania adresu tabeli docelowej). W bazie danych nie ma śladu po uzyskanym wyniku Lub komunikat o poprawności zakończenia operacji (gdy operacja inna niż wyżej opisana) Komunikat błędu w przypadku złego sformułowania polecenia lub niemożności jego wykonania

Polecenie tworzenia tabel CREATE nazwa_tabeli (definicja_kolumny [,definicja_kolejnej_kolumny]) W MS-SQL-u klucz gowny jest podawany jako rodzaj ograniczenia zadanego na kolumnę tabeli create table woj ( kod_woj char(3) not null constraint pk_woj primary key, nazwa varchar(30) not null ) GO

MS-SQL tworzenie tabeli, definiowanie kluczy obcych Klucz obcy, w MS-SQL-u, tak jak klucz główny zadawany jest w postaci ograniczenia na kolumnę w tabeli IDENTITY to właściwość autonumeracji kolumny create table miasta ( id_miasta int not null identity constraint pk_miasta primary key, kod_woj char(3) not null constraint fk_miasta woj foreign key references woj(kod_woj), nazwa varchar(30) not null )

Tworzenie tabeli, kolumny wirtualne i wartości domyślne create table osoby ( id_osoby int not null identity constraint pk_osoby primary key, id_miasta int not null constraint fk_osoby miasta foreign key references miasta(id_miasta), imię varchar(20) not null, nazwisko varchar(30) not null, imię_i_nazwisko as convert(char(24),left(imię,1)+'. ' + nazwisko), data_ur datetime null, wiek as datediff(yy,data_ur,getdate()), data_wpisania datetime not null DEFAULT (GETDATE()), stacja char(30) not null DEFAULT (LEFT(HOST_NAME(),30) )

Polecenie wyboru danych SELECT SELECT WK FROM lista_tabel (czyli Realacja) [ WHERE WW ] Przykład: SELECT o.imię_i_nazwisko, o.id_osoby AS ID FROM osoby o /* jest to przykład operacji wyboru kolumn */

Praca z prostym klientem SQLowym Przykładem takiego programu jest QueryAnalizer (program nosi nazwę isqlw.exe) współpracujący z MS-SQL-em 2000 Jest to zwykły edytor tekstowy Możemy wpisać wiele poleceń, zaznaczyć to, które chcemy wykonać i kazać je uruchomić Menu Query, opcja Execute Lub użyć jednego ze skrótów F5, Ctrl+E

Praca z SQL-Serwerem Nawiązanie połączenia z SQL-Serwerem po uruchomieniu programu QueryAnalizer

Praca z QueryAnalizerem

SELECT Wybór Wierszy SELECT o.* FROM osoby o WHERE (o.nazwisko LIKE S% ) /* wybiera osoby o nazwisku zaczynającym się na S */ Kolumna LIKE Wzorzec. We wzorcu można używać: % oznacza dowolną ilość dowolnych znaków _ oznacza dokładnie jeden dowolny znak

SELECT wybór wierszy Kolumna Operator Wartość Operator: =,!=, >, <, >=, <= /* osoby o imieniu Maciej */ SELECT o.* FROM osoby o WHERE (o.imię = Maciej ) NOT (Kolumna Operator Wartość) /* osoby o imieniu innym niż Maciej */ SELECT o.* FROM osoby o WHERE NOT (o.imię = Maciej )

Operacja Relacji Wybór danych z tabel miasta i woj. select w.kod_woj, w.nazwa AS [Województwo], m.kod_woj AS [Kod_woj z Miasta], m.nazwa AS [Miasto], m.id_miasta from miasta m, woj w

Operacja Relacji (miasta x woj.)

Operacja relacji z połączeniem pomiędzy tabelami SELECT w.kod_woj, w.nazwa AS województwo, m.nazwa AS miasto, m.id_miasta FROM woj w, miasta m WHERE (w.kod_woj = m.kod_woj)

Wybór z wielu tabel z warunkiem łączącym i dodatkowym SELECT w.kod_woj, w.nazwa AS województwo, m.nazwa AS miasto, m.id_miasta FROM woj w, miasta m WHERE AND (w.kod_woj = m.kod_woj) (m.nazwa LIKE W% )

Wady standardowych zapytań Najpoważniejszą wadą jest brak rozróżnienia warunków łączących tabele, niezbędnych do prawidłowego funkcjonowania zapytania od warunków dodatkowych Programiści warunki łączące starają się umieszczać jako pierwsze a po odpowiednim komentarzu warunki łaczące

Nowy standard ANSI zapytań SELCT lista_kolumn FROM tabela [ join tabela2 ON (warunek łaczący tabele) ] WHERE dodatkowe_warunki ORDER BY lista_kolumn Podstawowa zaleta to oddzielenie warunków łączących tabele od dodatkowych warunków W większości SQL Serwerów zamiast słowa join trzeba napisać inner join

Nowy standard ANSI Przykład select w.kod_woj, w.nazwa AS [Województwo], m.kod_woj AS [Kod_woj z Miasta], m.nazwa AS [Miasto], m.id_miasta from miasta m join woj w ON (m.kod_woj = w.kod_woj) WHERE (m.nazwa LIKE 'W%') /* to samo zapytanie, które było w starszym standardzie */

Porady tworzenia zapytań w nowym standardzie Do już wymienionych tabel w klauzuli FROM dodajemy takie tabele, które łączą się z już wymienionymi tabelami SELECT * FROM woj w join osoby ON ( ) W powyższym przykładzie nie możemy podać warunku łączącego tabele, gdyż takowy nie istnieje.

Porady tworzenia zapytań w nowym standardzie c.d. SELECT w.kod_woj, w.nazwa AS Województwo, m.nazwa AS miasto, o.imie_i_nazwisko, o.id_osoby FROM osoby o join miasta m ON (m.id_miasta=o.id_miasta) join woj w ON (w.kod_woj = m.kod_woj) ORDER BY w.nazwa,m.nazwa,o.imię_i_nazwisko

SELECT Porady tworzenia zapytań o.imie_i_nazwisko w nowym standardzie, mo.nazwa AS miasto_osoby, e.pensja, f.nazwa AS firma, mf.nazwa AS miasto_firmy FROM osoby o join miasta mo ON (mo.id_miasta=o.id_miasta) join etaty e ON (e.id_osoby = o.id_osoby) join firmy f ON (f.nazwa_skr = e.id_firmy) join miasta mf ON (mf.id_miasta = f.id_miasta) WHERE (e.do IS NULL) ORDER BY 1, 4, 3 DESC /* pokaz aktualne etaty, miasto gdzie mieszka osoba i miasta w którym znajduje się firma */

Zapytania z funkcjami agregującym Funkcje agregujące to: MAX(kolumna) -> maksymalna wartość MIN(kolumna) -> minimalna AVG(kolumna) -> średnia COUNT(*) -> liczba rekordów pobranych przez zapytanie COUNT( DISTINCT kolumna) -> liczba unikalnych wystąpień danej kolumny

Zapytania z funkcjami agregującymi W zapytaniu możemy użyć dowolnej ilości funkcji agregujących Nie możemy wybierać razem z tymi funkcjami innych danych W wyniku dostajemy ZAWSZE tabelę zawierającą jeden wiersz

SELECT Zapytania z funkcjami agregującymi - przykład COUNT(*)AS [Ile akt.etatów jest na PW], COUNT(DISTINCT e.id_osoby) AS [Ile osób jest na tych etatach], MAX(e.pensja) AS [Jaka jest maks.pensja], AVG(e.pensja)AS [Jaka jest śr.pensja] FROM etaty e WHERE (e.do IS NULL) /* aktualne */ AND (e.id_firmy = PW ) /* tylko PW*/

Funkcje agregujące Chcąc znaleźć w bazie aktualnie maksymalną pensję i zobaczyć kto aktualnie tyle zarabia musimy wykonać dwa zapytania Nie da się tego zrobić w jednym zapytaniu SELECT MAX(e.pensja), e.id_osoby FROM etaty e NIE ZADZIAŁA i słusznie

Funkcja agregujące c.d. Najpierw wybieramy do tabeli tymczasowej maksymalną pensję: SELECT MAX(e.pensja) AS mp INTO #t FROM etaty e WHERE (e.do IS NULL) Teraz pokazujemy kto tyle ma: SELECT e.pensja, o.imię_inazwisko,e.id_firmy FROM etaty e join #t ON (e.pensja=#t.mp) join osoby o ON (o.id_osoby=e.id_osoby) WHERE (e.do IS NULL)