Bazy Danych

Opis zajęć i zasad

Zajęcia 1

Wstęp i podstawy *

Podstawowe pojęcia

Bazą danych nazywamy zbiór danych w postaci tabel oraz narzędzi stosowanych do gromadzenia, przekształcania oraz wyszukiwania danych.

Tabelą w bazie danych nazywamy zbiór rekordów opisujących obiekty np. pracownicy zawierających informacje o tych obiektach w sposób ujednolicony.

Rekord pojedynczy wiersz w tabeli.

Polem nazywamy najmniejszą część rekordu, która przechowuje jedną daną.

Relacyjną bazą danych nazywamy bazę danych w postaci tabel połączonych relacjami.

Klucz podstawowy (ang. primary key) zwany też kluczem głównym to jedno lub więcej pól, których wartość jednoznacznie identyfikuje każdy rekord w tabeli. Taka cecha klucza nazywana jest unikatowością.

Klucz obcy to atrybut lub zbiór atrybutów, wskazujący na klucz główny w innej relacji (tabeli). Klucz obcy to nic innego jak związek, relacja między dwoma tabelami.

Typy danych

Typ danej (ang. data type) - rodzaj danej, czyli forma zapisu informacji:

BOOLEAN – wartości logiczne (prawda/fałsz)
DATE – daty
DECIMAL – ogólny format liczbowy
DOUBLE, FLOAT, REAL – liczby zmiennoprzecinke (o różnej precyzji)
INTEGER, SMALLINT – liczby całkowite
VARCHAR – łańcuchy znaków o zmiennej długości

Microsoft SQL Server Management Studio

W czasie naszych zajęć będziemy korzystać z MSSMS.

Lekkie alternatywy (raczej do pracy w domu):

HeidiSQL,

QueryExpress,

W domu silnik bazy danych:

MSSQL.

Wpisz w Menu Start - SQL Server i uruchom Management studio.

Na pierwszych zajęciach połączymy się z bazą lokalną na własnym komputerze, czyli po wyświetleniu okna klikamy "Connect". Jeżeli nazwa bazy nie jest zdefiniowana to wpisujemy localhost. Zobaczymy bardzo wiele okien,

Wybieramy nową bazę danych:

a1

Aby dodać zapytanie wybieramy New query:

a2

Skopiuj ze strony Prof. Wisły skrypt z kodem tworzący bazę danych.

A następnie z trzeciego paska podręcznego wybieramy Execute.

Każde kolejne zapytania SQL będziemy tworzyć jako New Query i uruchamiać poprzez Execute.

Zapytania SQL

Każde zapytanie SQL będzie zwracało jako rezultat tabelę – wirtualną (Virtual Table, VT). Każde zapytanie musi zawierać klauzulę SELECT.

Przykłady

select 2/2

select 'witaj świecie'

select 2+2

select 'Hello World !' as Kolumna1

select 'pierwsza' as Kol1, 'druga' as Kol2, 'trzecia'

Jeżeli chcemy wszystkie pobrać dane z tabeli musimy uzyć operatora '*' oraz słowa kluczowego FROM:

select * from Oddzialy

select * from Stanowiska

select * from Pracownicy

Symbol '*' zastępuje nazwy wszystkich kolumn z tabeli (lub tabel) do których odwołujemy się w klauzuli FROM.

Jeśli chcemy otrzymać zbiór elementów z tabeli źródłowej, opisany tylko poprzez kilka atrybutów (kolumn) – wymieniamy je w SELECT w postaci listy.

select nazwisko, stanowisko from Pracownicy

W SELECT możemy umieścić :

Nazwy kolumn wprost z nazw tabeli lub jako aliasy stosując słowo kluczowe AS, ale nie jest ono obowiązkowe. Jeśli nowa nazwa zawiera spacje, musi być ona ujęta w [] (nawiasy) lub „” (cudzysłów).

select nazwa as miasta from Oddzialy

select (nazwa) miasta from Oddzialy

Wyrażenia arytmetyczne, tekstowe

select Placa_min*2 as Podwojna_placa from Stanowiska

select Nazwisko + ' ' +  Stanowisko as Nazwistanowisko from Pracownicy

Zbiór wynikowy, może zawierać wiele elementów, również duplikaty wierszy. Jeśli chcesz otrzymać unikalny zbiór bez duplikatów – możesz to zrobić za pomocą DISTINCT.

select DISTINCT Stanowisko from Pracownicy

null

Wartość null. Wykonując jakiekolwiek działania na wartościach nie znanych, należy spodziewać się również, że i wynik będzie tak samo dokładny jak i wartości na których operujemy czyli UNKNOWN. Sprawdż do jakiego rezultatu doprowadzą, wszelkiego rodzaju działania z wartością nieokreśloną :

Select  100000 + NULL as wynik1,
   (5000+300) * 2 - null as wynik2,
   'Ala ma ' + 'kota' + null + '!' as wynik3

ISNULL ( wartość , wartość_zastępcza ) jedna z dwóch najczęściej stosowanych i użytecznych do pracy z NULLami. Podstawia wartość wskazaną w drugim argumencie, jeśli wykryje w danej kolumnie NULL.

Select ISNULL(Placa_dod,0) as PlacaDod from Pracownicy

order by

ORDER BY - Ostatnim krokiem logicznego przetwarzania zapytań jest operacja sortowania, którą możemy określić w ORDER BY. Zazwyczaj sortujemy zbiór wynikowy według określonych atrybutów (kolumn) elementów, znajdujących się w klauzuli SELECT. Uwaga w tym wypadku możemy także korzystać z nazw aliasów. Możemy sortować po dowolnych atrybutach tabel (zbiorów) do których odwołujemy się w klauzuli FROM zapytania, pod warunkiem, że nie używamy DISTINCTa. Możemy sortować rosnąco lub malejąco, służą do tego słowa kluczone ASC i DESC.

SELECT nazwa as miasta from Oddzialy
        ORDER BY miasta
select DISTINCT Stanowisko from Pracownicy
        ORDER BY stanowisko
SELECT stanowisko, nazwisko from Pracownicy
        ORDER BY stanowisko, nazwisko ASC
SELECT stanowisko, nazwisko from Pracownicy
        ORDER BY stanowisko, nazwisko DESC

where

W sekcji where możemy dokonywać selekcji (filtracji wierszy).

SELECT * from Pracownicy
        where stanowisko = 'Dyrektor'
SELECT * from Pracownicy
        where stanowisko = 'DYREKTOR'

Jeśli chcesz określić kilka warunków, trzeba połączyć je za pomocą operatorów logicznych AND – jeśli wszystkie, lub OR, jeśli przynajmniej jeden z nich ma być spełniony.

SELECT * from Pracownicy
        where stanowisko = 'DYREKTOR' OR stanowisko = 'MONTER'
SELECT * from Pracownicy
        where stanowisko = 'PRAKTYKANT' OR stanowisko = 'MONTER' and Placa_pod > 1450
SELECT * from Pracownicy
        where (stanowisko = 'PRAKTYKANT' OR stanowisko = 'MONTER') and Placa_pod > 1450

Jeżeli nie określimy nawiasowania, to wszystkie wymagania które połączone są operatorem AND zostaną potraktowane razem (obligatoryjnie). Pozostałe, zostaną rozpatrzone osobno.

SELECT * from Pracownicy
        where placa_pod > placa_dod + 2000

Filtrowanie na stringach dokonujemy za pomocą wzorców (maski) określanych jako LIKE.

Symbol „%” – zastępuje dowolną liczbę znaków.

SELECT * from Pracownicy
        where nazwisko LIKE 'M%'

SELECT * from Pracownicy
        where nazwisko LIKE '%M%'

symbol „_” – zstępuje jeden dowolny znak

SELECT * from Pracownicy
        where nazwisko LIKE '_A%'

Określenie zakresu znaków na wskazanej pozycji w nawiasach klamrowych []. Zakres może być ciągły [a-z] lub stanowić listę możliwych znaków [adg]. Może też określać, wykluczenie konkretnych znaków – stosujemy wtedy symbol ^.

SELECT * from Pracownicy
        where nazwisko LIKE '[MB]A%'
SELECT * from Pracownicy
        where nazwisko LIKE '[A-L]A%'

Przeszukiwania wartości liczbowych czy dat, wykonywane jest często w ramach zakresów. Służy do tego słowo BETWEEN :

SELECT *
FROM Pracownicy
WHERE placa_pod BETWEEN 1200 AND 9000
and zatrudniony BETWEEN '1990-01-01' AND '2010-06-30'

Kolejnym sposobem filtrowania wartości jest odniesienie do listy wartości za pomocą operatorów IN, ANY, ALL.

select *
from Pracownicy
where szef in (100, 110)

cast

CAST oraz CONVERT służą one do konwersji typów danych na inne (np. liczby na ciąg znaków). Składnia:

CAST (wartość_konwertowana AS typ_danych)
select nazwisko + ' Jest z nami od : ' +  CAST (Zatrudniony as varchar(100)) as Info
from Pracownicy

.

CONVERT (typ_danych, wartość_konwertowana, opcjonalnie_styl)

Potrafi wszystko to co CAST, dodatkowo możemy określić styl typu danych.

*

Wykorzystano materiały z

http://www.staff.amu.edu.pl/~psi/informatyka/kluczew/I2_Database.htm

http://www.sqlpedia.pl/relacyjne-bazy-danych-pojecia-podstawowe/

http://www.sqlpedia.pl/select-definiowanie-wyniku/