86 Bazy danych. Język T-SQL

Podobne dokumenty
Przestrzenne bazy danych Podstawy języka SQL

Relacyjne bazy danych. Podstawy SQL

Wyzwalacze. Bazy danych 201

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

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Systemy GIS Tworzenie zapytań w bazach danych

Relacyjne bazy danych. Podstawy SQL

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

Projektowanie systemów baz danych

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

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

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

Język SQL, zajęcia nr 1

Język SQL. Rozdział 2. Proste zapytania

Wykład 5. SQL praca z tabelami 2

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

Wyświetl imie i nazwisko ucznia, nazwę przedmiotu z którego otrzymał ocenę niedostateczną. Nazwij tę kwerendę oceny niedostateczne.

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

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

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

Wykład 5 Charakterystyka języka SQL. Elementy obliczeń relacyjnych.

Bazy danych. Polecenia SQL

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

Wprowadzenie do języka SQL

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

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

CREATE USER

Microsoft SQL Server Podstawy T-SQL

ITA-101 Bazy Danych. Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski. Moduł 5. Wersja 1.0

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

SQL (ang. Structured Query Language)

Widok Connections po utworzeniu połączenia. Obszar roboczy

Bazy danych. Dr inż. Paweł Kasprowski

W tej części zajmiemy się ćwiczeniami dotyczącymi modyfikacji rekordów.

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

BAZY DANYCH laboratorium 2 tworzenie bazy danych, podstawy języka SQL

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

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

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

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

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Wykład 05 Bazy danych

Laboratorium nr 7. Temat: Podstawy języka zapytań SQL (część 1) 1. Wprowadzenie do laboratorium

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

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

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

15. Funkcje i procedury składowane PL/SQL

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Paweł Rajba

Oracle11g: Wprowadzenie do SQL

SIECI KOMPUTEROWE I BAZY DANYCH

Bazy danych SQL Server 2005

252 Bazy danych. Praca z językiem XML

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

Wprowadzenie do baz danych

Cele. Definiowanie wyzwalaczy

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

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

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

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

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

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

Język SQL podstawy zapytań

Bazy danych Access KWERENDY

Wykład :45 BD-1 W_3

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

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

5. Administracja kontami uŝytkowników

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

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

INFORMATOR TECHNICZNY WONDERWARE. Ograniczenie wyświetlania listy zmiennych w przeglądarce zmiennych ActiveFactory

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

Tworzenie zapytań do Microsoft SQL Server

124 Bazy danych. Zaawansowane programowanie w T- SQL

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

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

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

ITA-101 Bazy Danych. Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski. Moduł 6. Wersja 1.0. Język SQL DML

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

Komunikacja z bazą danych psql

Autor: Joanna Karwowska

Systemowe aspekty baz

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

Bazy danych Ćwiczenia projektowe

Bazy danych Access KWERENDY

Podstawowe zapytania SELECT (na jednej tabeli)

2. Język SQL SQL jest językiem deklaratywnym (Charakterystyczną cechą języków

Bazy danych 7. SQL podstawy

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

ZAPOZNANIE SIĘ ZE SPOSOBEM PRZECHOWYWANIA

Podstawy języka SQL Co to jest SQL? Możliwości SQL SQL*Plus

Bazy danych. dr inż. Arkadiusz Mirakowski

Ćwiczenie zapytań języka bazy danych PostgreSQL

Transkrypt:

86 Bazy danych Język T-SQL

Bazy danych 87 Przegląd zagadnień Charakterystyka jezyka SQL Polecenia DDL Polecenia DCL Polecenia DML Podsumowanie Laboratorium W tym wykładzie poznasz podstawy uniwersalnego języka słuŝącego do manipulacji danymi w bazach relacyjnych - język SQL (ang. Structured Query Language).

88 Bazy danych Charakterystyka języka SQL Język SQL narodził się w latach siedemdziesiątych w laboratoriach IBM w San Jose. Pierwszy standard ANSI tego języka ujrzał światło dzienne w roku 1987, a obecny noszący nazwę SQL2 (lub SQL92) w roku 1992. Obecnie trwają prace nad kolejną wersją tego języka, ale nie zostały one jeszcze zakończone. Język SQL - strukturalny język zapytań - został opracowany z myślą o relacyjnych bazach danych. Jest on tak skonstruowany, Ŝe pozwala definiowanie, usuwanie i manipulację danymi w relacyjnych bazach danych bez konieczności wchodzenia w szczegóły implementacyjne i konstrukcyjne konkretnego środowiska baz danych. Prawie wszystkie bazy danych i SZBD wspierają język SQL, choć w jego róŝnych odmianach. Istnieją bowiem róŝne dialekty tego języka opracowane na potrzeby konkretnych SZBD. Jeśli jednak będziemy posługiwać się jego wersją ANSI, to powinien on być zrozumiały dla większości SZBD. Język SQL składa się z trzech składowych: języka definiowania danych - języka DDL (ang. Data Definition Language), języka sterowania danymi - języka DCL (ang. Data Control Language), języka operowania na danych - języka DML (ang. Data Manipulation Language). Rysunek 4.1 pokazuje składniki języka SQL wraz z najwaŝniejszymi poleceniami z kaŝdej części, które będziesz poznawać. Rys. 4.1 Składowe języka SQL

Bazy danych 89 Polecenia DDL Instrukcje języka DDL słuŝą do manipulowania bazą danych i jej obiektami. Pozwalają na: - tworzenie nowych obiektów, - modyfikowanie obiektów juŝ istniejących, - usuwanie obiektów. Tworzenie tabel Rys. 4.2 Główne polecenia języka DDL Rysunek 4.3 przedstawia przykład składni polecenia CREATE TABLE oraz przykład uŝycia tego polecenia. Rys. 4.3 Przykład składni i polecenia CREATE TABLE Przy definiowaniu tabeli naleŝy podać jej nazwę, nazwy jej atrybutów oraz typ danych, które atrybuty te mogą przyjmować. Dodatkowo określa się, czy dany atrybut moŝe przyjąć wartość NULL, czy nie. Typy danych, które mogą przyjmować atrybuty według standardu ANSI, podano w tabeli 4.4. KaŜdy atrybut musi mieć przypisany typ.

90 Bazy danych NaleŜy jednak pamiętać, Ŝe występują róŝne w typach w zaleŝności od systemu zarządzania bazą danych, z którym mamy do czynienia. Tabela 4.4 Typy danych ANSI Typ danych ANSI Opis Tekstowy Binarny CHAR(n) VARCHAR(n) BIT(n) BIT VARYING(n) tekst o długości n tekst o długości co najwyŝej n ciąg bitów o długości n ciąg bitów o długości co najwyŝej n Całkowity INT, SHORTINT wartości całkowite Numeryczne Modyfikacja tabel FLOAT,REAL DECIMAL(n,d) liczby zmiennopozycyjne wartośc na n pozycjach dziesiętnych z d miejscami po przecinku Do modyfikacji obiektów słuŝy polecenie ALTER. W celu modyfikacji istniejącej tabeli naleŝy zastosować polecenie ALTER TABLE, którego uproszczona składnia pokazana jest na rysunku. Rys. 4.5 Składnia częściowa polecenia ALTER TABLE Najczęściej polecenie ALTER TABLE stosuje się do zmiany schematu relacji. Przykład zastosowania tego polecenia do dodania lub usunięcia kolumny z tabeli pokazano poniŝej. Rys. 4.6 Przykład zastosowania polecenia ALTER TABLE

Bazy danych 91 Usuwanie tabeli Do usuwania tabeli słuŝy polecenie DROP TABLE. Usuwa ono schemat tabeli (relacji). Rys. 4.7 Przykład uŝycia polecenia DROP TABLE

92 Bazy danych Polecenia DCL Instrukcje języka DCL słuŝą do zarządzania uprawnieniami dostępu do obiektów bazy. NajwaŜniejsze polecenia języka DCL zebrano w tabeli 4.8. Tabela 4.8 Polecenia języka DCL Instrukcja Znaczenie Opis GRANT Nadanie Nadaje uprawnienia DENY Odmowa Odmawia uprawnień REVOKE Cofnięcie Usuwa nadane lub cofnięte uprawnienia Czym róŝni się odmowa uprawnień od cofnięcia uprawnień? Chodzi o to, Ŝe mamy dwa rodzaje uprawnień (podobnie jak w systemie Windows XP/2000/2003) - uprawnienia pozytywne (coś moŝna zrobić) i negatywne (coś jest zabronione). Do nadawania uprawnień pozytywnych słuŝy polecenie GRANT, zaś uprawnienia negatywne nadajemy poleceniem DENY. Polecenie REVOKE pozwala cofnąć uprawnienia nadane poleceniami GRANT i DENY. NaleŜy zapamiętać, Ŝe uprawnienia negatywne (nadane poleceniem DENY) nadpisują uprawnienia pozytywne (nadane przez polecenie GRANT).

Bazy danych 93 Polecenia DML Pobieranie zestawu wyników Operatory porównania Operatory logiczne Wyszukiwanie z listy wartosci Wyszukiwanie wartosci nieznanych Modyfikowanie danych Instrukcje języka DML słuŝą do: pobieranie danych, formatowania zestawu wyników, modyfikowania danych. NajwaŜniejsze instrukcje języka DML zebrano w tabeli 4.9. Tabela 4.9 Polecenia języka DML Instrukcja Znaczenie Opis SELECT Pobierz Pobiera zestaw danych INSERT Wstaw Wstawia dane do tabeli UPDATE Modyfikuj Modyfikuje dane w tabeli DELETE Usuń Usuwa rekordy z tabeli

94 Bazy danych Pobieranie zestawu wyników Do pobierania zestawu wyników słuŝy polecenie SELECT. Rys. 4.10 Składnia częściowa polecenia SELECT Jeśli chcemy pobrać wszystkie kolumny z tabeli, to w jako listę wyboru podajemy gwiazdkę. Przykład takiego zastosowania pokazuje rysunek 4.11. Rys. 4.11 Polecenie SELECT - pobranie wszystkich kolumn z tabeli Jeśli natomiast interesują nas tylko niektóre, z kolumn danej tabeli, to naleŝy po słowie SLECT wymienić nazwy tych kolumn w takiej kolejności, w jakiej chcemy aby zostały wyświetlone. Rys. 4.12 Polecenie SELECT - pobranie wybranych kolumn z tabeli

Bazy danych 95 MoŜemy równieŝ ograniczyć liczbę zwracanych wierszy, czyli dokonać filtrowania rekordów. SłuŜy do tego warunek WEHRE, który moŝemy umieścić w instrukcji SELECT. Rys. 4.13 Polecenie SELECT - uŝycie warunku WHERE Warunki wyszukiwania, które moŝemy stosować po słowie WEHRE są róŝnorodne i dają duŝą swobodę filtrowania rekordów. Warunki te mogą: - korzystać z operatorów porównania, - korzystać z porównywania ciągów, - korzystać z operatorów logicznych, - pobierać zakresu wartości, - korzystać z listy wartości jako kryterium wyszukiwania, - pobierać wartości nieznanych. Operatory porównania Operator = Operator porównania (=) powoduje, Ŝe zwracane są tylko te rekordy, których wartość w zadanej kolumnie jest równa podanej. Rys. 4.14 Polecenie SELECT - uŝycie operatora porównania

96 Bazy danych Operator LIKE Operator LIKE porównuje ciągi znaków, które powinny być do siebie podobne. Wraz z operatorem LIKE moŝna stosować znaki maskujące: % - zastępuje dowolny ciąg znaków (odpowiednik w MS Access - *), _ - zastępuje jeden dowolny znak (odpowiednik w MS Access -?). Rys. 4.15 Polecenie SELECT - uŝycie operatora LIKE Rys. 4.16 Przykłady wykorzystania operatora LIKE Operatorem negującym wynik operatora LIKE jest operator NOT LIKE. Jego zastosowanie powoduje zwrócenie rekordów, które nie spełniają podanego warunku podobieństwa.

Bazy danych 97 Rys. 4.17 Przykład wykorzystania operatora NOT LIKE Operatory logiczne Wraz ze słowem WHERE moŝna teŝ stosować operatory logiczne AND i OR, co znacznie poszerza moŝliwości budowania warunków filtrowania. Rys. 4.18 Przykład wykorzystania operatorów logicznych

98 Bazy danych Wyszukiwanie z listy wartości Do wyszukiwania wartości z podanej listy słuŝy słowo IN. Rys. 4.19 Przykład wyszukiwania z listy wartości Wyszukiwanie wartości nieznanych Wyszukiwanie rekordów o nieznanych lub nie podanych wartościach ma wiele praktycznych zastosowań. Przykład takiego wyszukiwania z zastosowaniem słowa IS NULL podano na rysunku 4.20. Rys. 4.20 Przykład wyszukiwania wartości nieznanych

Bazy danych 99 Formatowanie wyników Kiedy zestaw wyników zostanie juŝ przefiltrowany i zostaną wybrane odpowiednie kolumny, warto jest go odpowiednio sformatować, aby był on lepiej czytelny. Formatowanie wyników moŝe polegać na: - sortowaniu danych, - eliminowaniu duplikatów, - zmianie nazw kolumn, - zastosowaniu literałów, Sortowanie wyników Do sortowania wyników naleŝy zastosować składnię ORDER BY. Sortować moŝemy rosnąco (słowo kluczowe - ASC) lub malejąco (słowo kluczowe - DESC). Rys. 4.21 Przykład sortowania wyników Eliminowane duplikatów Do eliminowania duplikatów w wynikach słuŝy słowo DISTINCT. Rys. 4.22 Przykład eliminowania duplikatów

100 Bazy danych Zmiana nazw kolumn Nazwę kolumny w zestawie wyników moŝemy osiągnąć bardzo prosto stosując słowo AS w sposób, jak pokazano poniŝej. Literały Rys. 4.23 Przykład zmiany nazw kolumn Literały słuŝą do dodawania do zestawu wyników pewnych ciągów znaków, jak pokazuje to poniŝszy przykład. Poprawia to czytelność wyniku. Rys. 4.24 Przykład uŝycia literału

Bazy danych 101 Modyfikowanie danych Modyfikowanie danych moŝe polegać na: wstawianiu wierszy, usuwaniu wierszy, aktualizowaniu wierszy. Wstawianie wierszy Do wstawiania wierszy uŝywamy polecenia INSERT. Usuwanie wierszy Rys. 4.25 Przykład wstawienia wiersza Do usunięcia wierszy w tabeli moŝna zastosować dwa polecenia: DELETE lub TRUNCATE TABLE. Nie powodują one usunięcia schematu relacji, ale jedynie jej instancji. Instrukcja DELETE 1. UŜywana do usunięcia jednego lub więcej wierszy z tabeli. 2. Zawsze naleŝy umieszczać klauzulę WHERE. 3. KaŜdy usunięty wiersz jest rejestrowany w dzienniku transakcji. Instrukcja TRUNCATE TABLE 1. UŜywana do usunięcia wszystkich wierszy z tabeli. 2. Serwer SQL zachowuje strukturę tabeli i skojarzone obiekty. 3. Jedynie zwolnienie stron danych jest rejestrowane w dzienniku transakcji. Aktualizowanie wierszy 1. Klauzula WHERE określa wiersze, które mają być zmienione. 2. Słowo kluczowe SET określa nowe dane. 3. Wartości wejściowe muszą być tego samego typu danych, co kolumny. Rys. 4.26 Przykład aktualizacji wiersza

102 Bazy danych Podsumowanie Charakterystyka jezyka SQL Polecenia DDL Polecenia DCL Polecenia DML Do manipulowania na obiektach i danych w relacyjnej bazie danych najwygodniej jest stosować strukturalny język zapytań SQL. Składa się on z trzech podstawowych części słuŝących do manipulacji obiektami bazy danych (np. tabelami), zarządzania uprawnieniami (nie wszystkie bazy tę część wspierają) oraz do manipulowania danymi i sposobem ich prezentacji. SQL jest prostym, uniwersalnym językiem. Jest niezbędnym elementem pracy kaŝdego programisty baz danych.

Bazy danych 103 Laboratorium W tym ćwiczeniu przyjrzymy się praktycznemu zastosowaniu języka T-SQL

104 Bazy danych Polecenia języka DDL Poznawanie języka SQL rozpoczniesz od zapoznania się z poleceniami z działu DDL (ang. Data Definition Language): CREATE, ALTER i DROP. Krok 1 - Utwórz tabelę za pomocą polecenia CREATE TABLE Zaloguj się do maszyny wirtualnej ZBD jako uŝytkownik Administrator z hasłem P@ssw0rd. Kliknij Start. Z grupy programów Microsoft SQL Server 2005 uruchom SQL Server Management Studio. W oknie logowania kliknij Connect. Kliknij w menu głównym programu Management Studio na File. Kliknij Open - File. Odszukaj plik C:\Labs\Lab4\ddl_1.sql i kliknij Open. Zaznacz i uruchom (klawisz F5) fragmenty kodu oznaczone w komentarzach jako (1) oraz (2). -- (1) ustawmy Biblioteke jako baze robocza USE Biblioteka -- (2) utworzmy w bazie danych tabele Tabela1 CREATE TABLE Tabela1 ( ID_tabeli int IDENTITY(1,1) PRIMARY KEY, kolumna1 varchar(10), kolumna2 varchar(20), kolumna3 varchar(30) ) PowyŜszy kod ustawia bazę danych Biblioteka jako bazę roboczą oraz tworzy w tej bazie danych tabelę Tabela1 o czterech kolumnach (ID_tabeli, kolumna1, kolumna2, kolumna3). Polecenie CREATE słuŝy do tworzenia wszystkich obiektów baz danych: tabel (CREATE TABLE), widoków (CREATE VIEW), procedur składowanych (CREATE PROCEDURE), indeksów (CREATE INDEX), wyzwalaczy (CREATE TRIGGER). Tylko tymczasowe twory, takie jak zmienne czy kursory, deklarujesz (nie tworzysz) za pomocą polecenia DECLARE. Krok 2 - Modyfikuj strukturę tabeli za pomocą polecenia ALTER TABLE Mając otwarty skrypt demo_4_1_1 w oknie Query zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (3). -- (3) zmienmy definicje kolumny kolumna1 ALTER TABLE Tabela1 ALTER COLUMN kolumna1 varchar(10) NOT NULL

Bazy danych 105 PowyŜszy kod modyfikuje istniejącą kolumnę (kolumna1) tabeli Tabela1 tak, by nie moŝna było w niej zapisywać wartości pustych. ZauwaŜ, Ŝe przy zmianie czegokolwiek w istniejącej kolumnie musisz koniecznie podać typ danych kolumny (niezaleŝnie od tego, czy się zmienia, czy nie). (4). -- (4) dodajmy kolumne kolumna4 ALTER TABLE Tabela1 ADD kolumna4 int PowyŜszy kod dodaje do istniejącej tabeli Tabela1 kolumnę kolumna4 typu danych int. MoŜna dodać jednorazowo więcej niŝ jedną kolumnę oddzielając definicje nowych kolumn przecinkami. (5). -- (5) dodajmy ograniczenie na kolumnie kolumna4 ALTER TABLE Tabela1 ADD CONSTRAINT CK_kolumna4 CHECK (kolumna4 > 5) PowyŜszy kod powoduje dodanie w istniejącej tabeli Tabela1 ograniczenia nazwanego CK_kolumna4 na istniejącą kolumnę kolumna4. Ograniczenie to wymusza wstawianie w kolumnie kolumna4 liczb całkowitych (kolumna jest typu całkowitego) większych od 5. (6). -- (6) usunmy ograniczenie na kolumnie kolumna4 ALTER TABLE Tabela1 DROP CONSTRAINT CK_kolumna4 PowyŜszy kod spowoduje usunięcie uprzednio utworzonego ograniczenia CK_kolumna4 z tabeli Tabela1. (7). -- (7) usunmy kolumne kolumna4 ALTER TABLE Tabela1 DROP COLUMN kolumna4

106 Bazy danych PowyŜszy kod spowoduje usunięcie kolumny kolumna4 z tabeli Tabela1. Krok 3 - Usuń tabelę za pomocą polecenia DROP TABLE Mając otwarty skrypt ddl_1 w oknie Query zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (8). -- (8) usunmy tabele Tabela1 DROP TABLE Tabela1 PowyŜszy kod spowoduje usunięcie tabeli Tabela1. Pamiętaj, Ŝe usunięcie tabeli oznacza usunięcie nie tylko danych z tabeli, ale równieŝ struktury samej tabeli.

Bazy danych 107 Polecenia języka DCL Aby móc wykonywać operacje na danych, uŝytkownik musi mieć nadane odpowiednie uprawnienia. Do zarządzania uprawnieniami uŝytkowników słuŝą polecenia języla DDL (ang. Data Control Language): GRANT, REVOKE oraz DENY. Krok 1 - Dodaj nowych uŝytkowników bazy danych i sprawdź ich domyślne uprawnienia Zaloguj się do maszyny wirtualnej ZBD jako uŝytkownik Administrator z hasłem P@ssw0rd. Kliknij Start. Z grupy programów Microsoft SQL Server 2005 uruchom SQL Server Management Studio. W oknie logowania kliknij Connect. Kliknij w menu głównym programu Management Studio na File. Kliknij Open - File. Odszukaj plik C:\Labs\Lab4\dcl_1.sql i kliknij Open. Zaznacz i uruchom (klawisz F5) fragmenty kodu oznaczone w komentarzach jako (1) oraz (2). -- (1) ustawmy Biblioteke jako baze robocza USE Biblioteka -- (2) dodajmy dwoch nowych uzytkownikow serwera i bazy danych, -- Czytelnik1 i Czytelnik2, umiescmy ich w grupie Czytelnicy EXEC sp_addlogin Czytelnik1 EXEC sp_addlogin Czytelnik2 EXEC sp_grantdbaccess Czytelnik1 EXEC sp_grantdbaccess Czytelnik2 EXEC sp_addrole Czytelnicy EXEC sp_addrolemember Czytelnicy, Czytelnik1 EXEC sp_addrolemember Czytelnicy, Czytelnik2 PowyŜszy kod dodaje dwóch uŝytkowników serwera - Czytelnik1 oraz Czytelnik2 (loginy serwera SQL, nie zaś logowanie w systemie Windows). Dodatkowo nadajemy uŝytkownikom dostęp do bazy (czyli inaczej mówiąc mapujemy loginy do bazy pod tymi samymi nazwami). Wreszcie tworzymy grupę w bazie danych i dodajemy do niej uprzednio utworzonych uŝytkowników. Nie przejmuj się, Ŝe nie bardzo rozumiesz na razie mechanizmy bezpieczeństwa (loginy, grupy itd.). Dokładniej zapoznamy Cię z tymi zagadnieniami w rozdziale 9 ćwiczeń). Na razie musisz tylko wiedzieć, jakie operacje wykonaliśmy.

108 Bazy danych Kliknij przycisk New Query. Zaloguj się uŝywając uwierzytelniania SQL Server jako Czytelnik1 (hasło pozostaw puste). W menu głównym programu wybierz File - Open. W oknie Open Query File wybierz plik dcl_2.sql. Zaznacz i uruchom (klawisz F5) fragmenty kodu oznaczone w komentarzach jako (1) oraz (2). -- (1) ustawmy Biblioteke jako baze robocza USE Biblioteka -- (2) sprawdzmy, czy mamy uprawnienia do wykonania -- polecenia SELECT na tabeli Wydawnictwa SELECT * FROM Wydawnictwa PowyŜszy kod ustawi bazę danych Biblioteka jako bazę roboczą i spróbuje wykonać polecenie SELECT na tabeli Wydawnictwa w kontekście uŝytkownika Czytelnik1. Wynikiem działania powinien być komunikat: Server: Msg 229, Level 14, State 5, Line 1 SELECT permission denied on object 'Wydawnictwa', database 'Biblioteka', owner 'dbo'. Domyślne uprawnienia nowego uŝytkownika nie pozwalają na wykonanie Ŝadnego polecenia w bazie danych. Skoro nie mamy uprawnień do wykonywania poleceń, tym bardziej nie moŝemy ich nadawać. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (3). -- (3) sprobujmy nadac uprawnienia innemu uzytkownikowi GRANT SELECT ON Wydawnictwa TO Czytelnik2 Podjąłeś nieudaną próbę nadania innemu uŝytkownikowi (Czytelnik2) uprawnień do wykonywania polecenia SELECT w tabeli Wydawnictwa. Wynikiem próby jest komunikat: Server: Msg 4613, Level 16, State 1, Line 2 Grantor does not have GRANT permission. Krok 2 - Nadaj uprawnienia uŝywając polecenia GRANT Przełącz się do okna dcl_1.sql). (3).

Bazy danych 109 -- (3) nadaj uprawnienia do wykonywania polecenia SELECT -- w tabeli Wydawnictwa uzytkownikowi Czytelnik1 GRANT SELECT ON Wydawnictwa TO Czytelnik1 PowyŜszy kod powoduje nadanie uŝytkownikowi Czytelnik1 uprawnień do wykonywania polecenia SELECT w tabeli Wydawnictwa. Przełącz się do okna dcl_2.sql uruchomionego w kontekście uŝytkownika Czytelnik1 Zaznacz i uruchom (F5) ponownie fragmenty kodu oznaczone w komentarzach jako (1) i (2). Tym razem powinno wynikiem działania kodu powinno być wyświetlenie zawartości tabeli Wydawnictwa. Zaznacz i uruchom (F5) ponownie fragment kodu oznaczony w komentarzu jako (3). I tym razem nie udaje się nadać praw innemu uŝytkownikowi. Czyli nadanie uprawnień do wykonywania polecenia nie jest równoznaczne z umoŝliwieniem nadawania uprawnień innym uŝytkownikom. Nie musisz nadawać uprawnień do wykonywania kaŝdego polecenia SQL osobno. Jeśli na przykład chcesz nadać uŝytkownikowi Czytelnik1 uprawnienia do wykonywania wszystkich poleceń SQL w tabeli Wydawnictwa, uŝyj składni: GRANT ALL ON Wydawnictwa TO Czytelnik1 Krok 3 - Cofnij uprawnienia uŝywając polecenia REVOKE Przełącz się do okna dcl_1.sql). (4). -- (4) cofnij uprawnienia do wykonywania polecenia SELECT -- w tabeli Wydawnictwa uzytkownikowi Czytelnik1 REVOKE SELECT ON Wydawnictwa FROM Czytelnik1 PowyŜszy kod spowoduje cofnięcie uprzednio nadanych uŝytkownikowi Czytelnik1 uprawnień do wykonywania polecenia SELECT w tabeli Wydawnictwo. Przełącz się do okna dcl_2.sql). Zaznacz i uruchom (F5) ponownie fragment kodu oznaczony w komentarzu jako (3).

110 Bazy danych Po cofnięciu uprawnień do wykonania polecenia SELECT uruchomienie tego fragmentu skryptu zwraca informację o błędzie. Krok 4 - Odbierz uprawnienia uŝywając polecenia DENY Przełącz się do okna dcl_1.sql). Zaznacz i uruchom (F5) ponownie fragment kodu oznaczony w komentarzu jako (3) (polecenie GRANT). Przełącz się do okna dcl_2.sql). Zaznacz i uruchom (F5) ponownie fragment kodu oznaczony w komentarzu jako (2) (polecenie SELECT). PoniewaŜ juŝ tą operację wykonywaliśmy, wiesz doskonale, Ŝe uruchomienie kodu z poleceniem SELECT spowoduje wyświetlenie zawartości tabeli Wydawnictwa (uŝytkownik ma nadane uprawnienia). Przełącz się ponownie do okna dcl_1.sql). (5). -- (5) zabron wykonywania polecenia SELECT -- w tabeli Wydawnictwa grupie Czytelnicy DENY SELECT ON Wydawnictwa TO Czytelnicy PowyŜszy kod spowoduje zabronienie wszystkim uŝytkownikom w grupie Czytelnicy (czyli u nas konkretnie uŝytkownikom Czytelnik1 i Czytelnik2) wykonywania polecenia SELECT w tabeli Wydawnictwa. Przełącz się ponownie do okna dcl_2.sql). Zaznacz i uruchom (F5) ponownie fragment kodu oznaczony w komentarzu jako (2) (polecenie SELECT). Tym razem okaŝe się, Ŝe nie moŝemy wykonać polecenia SELECT. Dzieje się tak dlatego, Ŝe przed momentem zabroniliśmy grupie Czytelnicy, do której naleŝy uŝytkownik, w którego kontekście pracujemy, wykonywania polecenia SELECT.

Bazy danych 111 Zapamiętaj, Ŝe uprawnienia do wykonywania poleceń SQL mogą mieć trzy ustawienia: - brak nadanych i odebranych uprawnień (nie wykonaliśmy Ŝadnego polecenia DDL, albo polecenie REVOKE), - nadane uprawnienia (wykonaliśmy polecenie GRANT), - odebrane uprawnienie (wykonaliśmy polecenie DENY). Polecenie REVOKE słuŝy do wycofywania uprawnień pozytywnych (nadanych poleceniem GRANT) i negatywnych ("odebranych" poleceniem DENY). Pamiętaj, Ŝe uprawnienia uŝytkownika sumują się z uprawnieniami grupy. Przy czym uprawnienia negatywne biorą górę nad pozytywnymi. Stąd jeśli odbierzemy grupie uprawnienia do wykonywania polecenia, to uŝytkownicy mimo indywidualnie nadanych uprawnień nie będą mogli tego polecenia wykonywać.

112 Bazy danych Najczęściej wykonywanymi w bazach danych poleceniami SQL są polecenia języka DML: SELECT,INSERT,UPDATE oraz DELETE. Krok 1 - Przygotuj tabelę testową do ćwiczeń z poleceniami DML Zaloguj się do maszyny wirtualnej ZBD jako uŝytkownik Administrator z hasłem P@ssw0rd. Kliknij Start. Z grupy programów Microsoft SQL Server 2005 uruchom SQL Server Management Studio. W oknie logowania kliknij Connect. Kliknij w menu głównym programu Management Studio na File. Kliknij Open - File. Odszukaj plik C:\Labs\Lab4\dml_1.sql i kliknij Open Zaznacz i uruchom (klawisz F5) fragment kodu -- (1) przygotujmy tabele do testowania -- polecen jezyka DML USE Northwind SELECT EmployeeID, LastName, FirstName, BirthDate INTO Employees_kopia FROM Employees INSERT INTO Employees_kopia(LastName,FirstName,BirthDate) VALUES ('Smith','Michael','1960-05-29 12:30') W powyŝszym kodzie ustawiamy bazę danych Northwind (wybraliśmy ją, poniewaŝ jest gotowa do uŝycia - jest w niej duŝo danych) jako bazę roboczą. Następnie skopiowaliśmy cztery kolumny tabeli Employees do nowej tabeli Employees_kopia (Ŝeby nie "popsuć" tabeli oryginalnej, będziesz pracować na kopii). Ostatnią operacją jest dodanie jednego rekordu do utworzonej tabeli. Krok 2 - Zapoznaj się z działaniem polecenia SELECT (2). -- (2) wyswietlmy cala zawartosc tabeli SELECT * FROM Employees_kopia Wynikiem działania tego kodu jest wyświetlenie całej zawartości (gwiazdka wybiera wszystkie kolumny) tabeli Employees_kopia:

Bazy danych 113 EmployeeID LastName FirstName BirthDate ----------- -------------------- ---------- ----------------------- 10 Smith Michael 1960-05-29 12:30:00.000 1 Davolio Nancy 1948-12-08 00:00:00.000 2 Fuller Andrew 1952-02-19 00:00:00.000 3 Leverling Janet 1963-08-30 00:00:00.000 4 Peacock Margaret 1937-09-19 00:00:00.000 5 Buchanan Steven 1955-03-04 00:00:00.000 6 Suyama Michael 1963-07-02 00:00:00.000 7 King Robert 1960-05-29 00:00:00.000 8 Callahan Laura 1958-01-09 00:00:00.000 9 Dodsworth Anne 1966-01-27 00:00:00.000 Zaznacz i wykonaj (F5) fragment kodu oznaczony w komentarzu jako (3). -- (3) wybierzmy kolumny, ktore chcemy wyswietlic SELECT LastName, FirstName FROM Employees_kopia Wynikiem działania tego kodu jest wyświetlenie wszystkich kolumn LastName oraz FirstName dla wszystkich rekordów (czyli ograniczenie liczby kolumn): LastName FirstName -------------------- -------- Smith Michael Davolio Nancy Fuller Andrew Leverling Janet Peacock Margaret Buchanan Steven Suyama Michael King Robert Callahan Laura Dodsworth Anne (4). -- (4) dodajmy literal i alias SELECT 'Imie i nazwisko: ' + FirstName + ' ' + LastName AS Osoba FROM Employees_kopia Wynikiem działania tego kodu jest wyświetlenie jako pojedynczej kolumny tekstu "Imie i nazwisko: " oraz imienia i nazwiska osoby oddzielonych spacją:

114 Bazy danych Osoba --------------------------------- Imie i nazwisko: Michael Smith Imie i nazwisko: Nancy Davolio Imie i nazwisko: Andrew Fuller Imie i nazwisko: Janet Leverling Imie i nazwisko: Margaret Peacock Imie i nazwisko: Steven Buchanan Imie i nazwisko: Michael Suyama Imie i nazwisko: Robert King Imie i nazwisko: Laura Callahan Imie i nazwisko: Anne Dodsworth Stałe łańcuchy tekstowe wstawiane w wynik zapytania (jak w tym wypadku "Imie i nazwisko: " oraz spacja) nazywamy literałami. Natomiast nazwę wyświetlanej kolumny nadaną przy pomocy słowa kluczowego AS nazywamy aliasem. Alias nie jest nazwą własną. Jest to tylko tymczasowy (istniejący tylko dla zapytania, w którym został zdefiniowany; nigdzie nie zapisywany na stałe) nagłówek kolumny. MoŜe zawierać napis będący nazwą innej kolumny lub obiektu bazy danych. (5). -- (5) nie wyswietlajmy duplikatow SELECT DISTINCT FirstName FROM Employees_kopia Wynikiem działania tego kodu jest wyświetlenie listy imion osób z usunięciem imion powtarzających się (w tabeli są dwie osoby o imieniu Michael - słowo DISTINCT powoduje wyświetlenie powtarzającego się wyniku tylko raz): FirstName ---------- Andrew Anne Janet Laura Margaret Michael Nancy Robert Steven Słowo DISTINCT oprócz usunięcia duplikatów z wyników, ignoruje takŝe wartości puste w zbiorze rekordów (tzn. gdy w wybranym zestawie zdarzy się wiersz o pustych wszystkich polach, nie zostanie on wyświetlony).

Bazy danych 115 (5). -- (6) sortujmy rekordy rosnaco (ASC) i malejaco (DESC) SELECT LastName, FirstName, BirthDate FROM Employees_kopia ORDER BY BirthDate Wynikiem działania tego kodu jest wyświetlenie listy osób (nazwisk, imion i dat urodzenia) posortowanej wg daty urodzenia (od najstarszej osoby do najmłodszej). LastName FirstName BirthDate -------------------- ---------- ----------------------- Peacock Margaret 1937-09-19 00:00:00.000 Davolio Nancy 1948-12-08 00:00:00.000 Fuller Andrew 1952-02-19 00:00:00.000 Buchanan Steven 1955-03-04 00:00:00.000 Callahan Laura 1958-01-09 00:00:00.000 King Robert 1960-05-29 00:00:00.000 Smith Michael 1960-05-29 12:30:00.000 Suyama Michael 1963-07-02 00:00:00.000 Leverling Janet 1963-08-30 00:00:00.000 Dodsworth Anne 1966-01-27 00:00:00.000 Teraz usuń znaki komentarza (dwa myślniki) poprzedzające słowo DESC w powyŝszym fragmencie i ponownie zaznacz i uruchom fragment oznaczony jako (6). -- (6) sortujmy rekordy rosnaco (ASC) i malejaco (DESC) SELECT LastName, FirstName, BirthDate FROM Employees_kopia ORDER BY BirthDate DESC Wynikiem działania tego kodu jest wyświetlenie listy osób (nazwisk, imion i dat urodzenia) posortowanej wg daty urodzenia. Ale tym razem sortowanie następuje od najmłodszej osoby do najstarszej. LastName FirstName BirthDate -------------------- ---------- ----------------------- Dodsworth Anne 1966-01-27 00:00:00.000 Leverling Janet 1963-08-30 00:00:00.000 Suyama Michael 1963-07-02 00:00:00.000 Smith Michael 1960-05-29 12:30:00.000 King Robert 1960-05-29 00:00:00.000 Callahan Laura 1958-01-09 00:00:00.000 Buchanan Steven 1955-03-04 00:00:00.000 Fuller Andrew 1952-02-19 00:00:00.000 Davolio Nancy 1948-12-08 00:00:00.000 Peacock Margaret 1937-09-19 00:00:00.000

116 Bazy danych Sortowanie następuje wg kolejności alfabetycznej. Cyfry w alfabecie znajdują się przed literami. Kierunek sortowania określa słowo kluczowe ASC lub DESC występujące po nazwie kolumny w klauzuli ORDER BY. ASC oznacza sortowanie rosnąco (domyślny kierunek sortowania, słowo ASC jest opcjonalne), zaś DESC oznacza sortowanie malejąco. (7). -- (7) ograniczmy liczbe rekordow SELECT LastName, FirstName FROM Employees_kopia WHERE LastName = 'Davolio' Wynikiem działania tego kodu jest wyświetlenie nazwisk i imion wszystkich osób o nazwisku Davolio (tu - jedna osoba). LastName FirstName -------------------- ---------- Davolio Nancy Zapamiętaj, Ŝe klauzula WHERE słuŝy do ograniczenia liczby zwracanych przez zapytanie rekordów. Klauzula ta występuje w większości zapytań budowanych dla baz danych i aplikacji bazodanowych. Warunki w klauzuli nie muszą dotyczyć jednej kolumny. (8). -- (8) wyprobujmy operator wiekszosci SELECT LastName, FirstName, BirthDate FROM Employees_kopia WHERE Birthdate >= '1960-01-01' Wynikiem działania tego kodu jest wyświetlenie wszystkich osób urodzonych 1 stycznia 1960 roku lub później. LastName FirstName BirthDate -------------------- ---------- ----------------------- Smith Michael 1960-05-29 12:30:00.000 Leverling Janet 1963-08-30 00:00:00.000 Suyama Michael 1963-07-02 00:00:00.000 King Robert 1960-05-29 00:00:00.000 Dodsworth Anne 1966-01-27 00:00:00.000

Bazy danych 117 Dwuargumentowe operatory porównania w T-SQL to: = ("równe"), > ("większe"), < ("mniejsze"), >= ("większe/równe"), <= ("mniejsze/równe"), <> ("nie równe"). (9). -- (9) trick z data + operator AND SELECT LastName, FirstName, BirthDate FROM Employees_kopia WHERE BirthDate = '1960-05-29' SELECT LastName, FirstName, BirthDate FROM Employees_kopia WHERE BirthDate >= '1960-05-29' AND BirthDate < '1960-05-30' Wynikiem działania pierwszego zapytania SELECT w powyŝszym kodzie jest wyświetlenie osoby urodzonej 29 maja 1960 roku ale dokładnie o godzinie 0:00. LastName FirstName BirthDate -------------------- ---------- ----------------------- King Robert 1960-05-29 00:00:00.000 Wynikiem działania drugiego zapytania SELECT w powyŝszym kodzie jest wyświetlenie listy wszystkich osób urodzonych 29 maja 1960 roku o dowolnej godzinie. Zwróć uwagę na operator AND, który słuŝy do łączenia wrunków (spełnione muszą być wszystkie warunki łączone operatorami AND). LastName FirstName BirthDate -------------------- ---------- ----------------------- Smith Michael 1960-05-29 12:30:00.000 King Robert 1960-05-29 00:00:00.000 Pamiętaj, Ŝe typ danych datetime zawiera oprócz daty takŝe godzinę. Oznacza to, Ŝe aby wyszukać pola zawierające konkretną datę (nie uwzględniając godziny), musisz uŝyć chwytu z drugiego zapytania SELECT w powyŝszym kodzie. Dotyczy to w szczególności sytuacji, gdy do wstawiania daty uŝywasz jakiejkolwiek funkcji pobierającej aktualną datę i godzinę (np. funkcji języka T-SQL GetDate).

118 Bazy danych (10). -- (10) wyprobujmy operator OR SELECT LastName, FirstName, BirthDate FROM Employees_kopia WHERE BirthDate < '1950-01-01' OR BirthDate >= '1960-01-01' Wynikiem działania powyŝszego kodu jest wyświetlenie listy osób urodzonych przed 1 stycznia 1950 roku lub po 1 stycznia 1960 roku (włącznie z tą datą). Zwróć uwagę na operator OR, który powoduje, Ŝe spełnienie któregokolwiek z warunków kwalifikuje rekord do wyświetlenia (inaczej niŝ w przypadku operatora AND, gdzie wszystkie warunki musiały być jednocześnie spełnione). LastName FirstName BirthDate -------------------- ---------- ------------------------------------------------------ Smith Michael 1960-05-29 12:30:00.000 Davolio Nancy 1948-12-08 00:00:00.000 Leverling Janet 1963-08-30 00:00:00.000 Peacock Margaret 1937-09-19 00:00:00.000 Suyama Michael 1963-07-02 00:00:00.000 King Robert 1960-05-29 00:00:00.000 Dodsworth Anne 1966-01-27 00:00:00.000 (11). -- (11) wyszukajmy w zbiorze wartosci SELECT LastName, FirstName FROM Employees_kopia WHERE LastName IN ('Davolio','Smith') Wynikiem działania powyŝszego kodu jest wyświetlenie listy osób o nazwiskach naleŝących do zbioru umieszczonego w nawiasie po słowie kluczowym IN. LastName FirstName -------------------- ---------- Smith Michael Davolio Nancy Zapytania SELECT ze słowem kluczowym IN są wykonywane tak samo jak zapytania SELECT z operatorem OR i rozdzielającym warunki przyrównania (=). Na przykład odpowiednikiem powyŝszego kodu jest zapytanie: SELECT LastName, FirstName FROM Employees_kopia WHERE LastName = 'Davolio' OR LastName = 'Smith' Zaletą uŝycia słowa IN jest bardziej zwięzła forma (szczególnie, gdy lista ma więcej niŝ dwie pozycje).