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

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

Bazy danych. Dr inż. Paweł Kasprowski

Systemy GIS Tworzenie zapytań w bazach danych

Język SQL, zajęcia nr 1

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Przestrzenne bazy danych Podstawy języka SQL

Tworzenie baz danych i tabel

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Paweł Rajba

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

Relacyjne bazy danych. Podstawy SQL

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

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

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

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

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

Projektowanie systemów baz danych

Wykład 5. SQL praca z tabelami 2

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

Relacyjne bazy danych. Podstawy SQL

Bazy danych 7. SQL podstawy

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

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

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

Widok Connections po utworzeniu połączenia. Obszar roboczy

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

SQL (ang. Structured Query Language)

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

Wykład :45 BD-1 W_3

Język SQL podstawy zapytań

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Aspekty aktywne baz danych

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

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

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

Język SQL. Rozdział 2. Proste zapytania

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

Wykład 05 Bazy danych

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

Autor: Joanna Karwowska

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

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

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

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

Wykład 4. SQL praca z tabelami 1

Wprowadzenie do języka SQL

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

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

SIECI KOMPUTEROWE I BAZY DANYCH

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

Język SQL, zajęcia nr 2

Lab.8: Podstawy języka SQL.

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

SQL Structured Query Language

Bazy danych 5. Samozłaczenie SQL podstawy

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Administracja i programowanie pod Microsoft SQL Server 2000

Współczesne systemy baz danych

SQL Structured Query Language

Technologie baz danych

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

Bazy danych. Polecenia SQL

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

Współczesne systemy baz danych

ACESS- zadania z wykorzystaniem poleceń SQL

Oracle11g: Wprowadzenie do SQL

Instrukcja CREATE TABLE

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

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

Wykład 8. SQL praca z tabelami 5

Bazy danych. dr inż. Arkadiusz Mirakowski

Wprowadzenie do baz danych

Wykład 2. SQL 1 Structured Query Lenguage

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

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

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

Bazy danych Ćwiczenia projektowe

Dr Michał Tanaś(

LAB 3 (część 1 Projektu)

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

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

Bazy danych - wykład wstępny

Przykładowa baza danych BIBLIOTEKA

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

Autor: Joanna Karwowska

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

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

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

Bazy Danych. SQL Podstawy języka III: powtórzenie. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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

Grupowanie i funkcje agregujące

Bazy danych 4. SQL podstawy. P. F. Góra

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

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

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

Ćwiczenie zapytań języka bazy danych PostgreSQL

Transkrypt:

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

SQL strukturalny język zapytań SQL (Structured Query Language) strukturalny język zapytań używany do tworzenia, modyfikowania relacyjnych baz danych oraz do umieszczania, modyfikowania i wyszukiwania danych w tych bazach (standard od 1986 r). SQL jest językiem deklaratywnym - decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi zarządzania bazą danych (SZBD) (użytkownik deklaruje, co chce uzyskać, a nie jak to chce realizować). SQL jest językiem wysokiego poziomu (4GL) opartym na języku angielskim.

SQL - historia Początek lat 70-tych XX w. System/R z językiem SEQUEL (IBM) (Structured English Query Language) Koniec lat 70-tych XX w. ORACLE pierwszy SZBD oparty na SQL 1986 pierwszy standard SQL (SQL-86) (ANSI) 1987 standard SQL-1 (ISO) 1989 SQL-89 1992 SQL-2 (SQL-92) (ANSI, ISO) (m.in. sterowanie transakcjami, sesjami) 1999 SQL-3 (SQL-99) (elementy obiektowości) 2003 SQL-2003 2006 SQL-2006 2008 SQL-2008 2011 SQL-2011

Transact-SQL (T-SQL) Zmodyfikowana wersja standardu SQL-92 wykorzystywana w produktach Microsoft SQL Server, uzupełniona o elementy typowe dla proceduralnych języków programowania, takie jak zmienne i instrukcje sterujące.

Podzbiory języka SQL SQL DDL (Data Definition Language) umożliwia tworzenie, modyfikowanie i usuwanie baz i tabel - struktur, w których przechowywane są dane (CREATE, DROP, ALTER) SQL DML (Data Manipulation Language) umożliwia operowanie na danych, ich umieszczanie w bazie, wyszukiwanie, modyfikowanie i usuwanie (INSERT, SELECT, UPDATE, DELETE) SQL DCL (Data Control Language) pozwala na kontrolowanie dostępu użytkowników do obiektów bazy danych (GRANT, DENY, REVOKE)

Alfabet języka SQL Zestaw znaków SQL jest zwykle charakterystyczny dla implementacji - obejmuje duże i małe litery, cyfry, oraz znaki specjalne:, ; ( ). % _ > < = + - * /? :! spacja itd. Identyfikatory (nazwy) umożliwiają dostęp do obiektów bazodanowych: tabel, kolumn (atrybutów), widoków, schematów, itp. Polecenia i funkcje rozpoczynają się słowem kluczowym (tradycyjnie zapisywanym dużymi literami (nie jest to wymóg) i mogą zawierać tzw. modyfikatory - polecenia kończą się średnikiem (nie jest to konieczne w Transact- SQL). Stałe tekstowe zapisywane są w pojedynczych cudzysłowach, np. 'Warszawa'.

Alfabet języka SQL Znak * oznacza wszystkie kolumny (atrybuty) tabeli. Komentarze: Dwa minusy (--) powodują ignorowanie wszystkich pozostałych znaków w tej linii, np. -- To jest komentarz Znaki /* i */ ograniczają blok znaków (być może w kilku wierszach), który jest pomijany przez kompilator, np.. /* Pierwsza linia komentarza Druga linia komentarza itd... */

Notacje Notacje, które będą wykorzystywane w dalszym ciągu wykładu:: [element] oznacza opcjonalne (może, ale nie musi) wystąpienie elementu {element} oznacza wielokrotne wystąpienie elementu lub jego brak element1 element2 oznacza albo element1, albo element2

Zasada poprawnych skryptów DDL Podstawowa zasada prawidłowo napisanych skryptów manipulujących obiektami SQL: Każdy skrypt musi dopuszczać możliwość jego wielokrotnego uruchamiania bez wystąpienia błędów. W szczególności przed utworzeniem lub usunięciem każdego obiektu musi być wykonane sprawdzenie czy tworzony obiekt nie istnieje lub czy usuwany obiekt istnieje.

DDL Tworzenie i usuwanie baz danych Tworzenie bazy danych o podanej nazwie IF DB_ID('MojaBaza') IS NULL CREATE DATABASE MojaBaza; Usuwanie bazy o podanej nazwie IF DB_ID('MojaBaza') IS NOT NULL DROP DATABASE MojaBaza

DDL Tworzenie tabeli CREATE TABLE nazwa-tabeli ( nazwa-kolumny typ-danych [NOT NULL] [UNIQUE] [CHECK (warunek)] {, nazwa-kolumny typ-danych [NOT NULL] [UNIQUE] [CHECK (warunek)]} [, PRIMARY KEY (nazwa-kolumny {, nazwa-kolumny} )] [, FOREIGN KEY (nazwa-kolumny {, nazwa-kolumny} ) REFERENCES nazwa-tabeli (nazwa-kolumny {, nazwa-kolumny} )] ); Zapytanie tworzy tabelę o podanej nazwie i określonych nazwach kolumn, określa ograniczenia nakładane na charakter i wartości danych, które mogą wystąpić w poszczególnych kolumnach oraz definiuje powiązania z innymi tabelami.

Typy danych Typ danych charakteryzuje, jakiego rodzaju wartość możemy umieścić jako wartość danej w określonej kolumnie. Poszczególne typy danych można zakwalifikować do różnych grup, według funkcjonalności, jaką mogą spełniać: dane tekstowe: CHAR, NCHAR, VARCHAR, NVARCHAR, TEXT, NTEXT dane liczbowe: INT, SMALLINT, BIGINT, TINYINT, FLOAT, REAL, DECIMAL, NUMERIC dane typu data/czas: DATETIME, SMALLDATETIME dane binarne: BINARY, VARBINARY, BLOB dane walutowe (pieniężne): MONEY, SMALLMONEY dane specjalne: IMAGE, XML, UNIQUEIDENTIFIER, TIMESTAMP. Konkretne implementacje różnią się wykorzystywanymi typami danych

Przykłady typów danych SMALLINT dwubajtowa liczba całkowita INT czterobajtowa liczba całkowita FLOAT liczba rzeczywista DOUBLE liczba rzeczywista podwójnej precyzji DECIMAL (m,n) liczba zapisywana na m pozycjach z n cyframi po kropce CHAR (n) ciąg znaków o stałej długości n VARCHAR (n) ciąg znaków o zmiennej długości, maksymalnie n TEXT ciąg znaków ASCII BLOB dane binarne DATE dane określające datę TIME dane określające czas DATETIME dane określające datę i czas

Ograniczenia Poszczególne kolumny w tworzonej tabeli mogą posiadać ograniczenia co do dopuszczalnych danych: NOT NULL zastosowanie tego ograniczenia wymusi, aby w każdej krotce występująca w tej kolumnie wartość była niepusta, UNIQUE zastosowanie tego ograniczenia wymusi, aby w każdej krotce występująca w tej kolumnie wartość była unikalna dla tej kolumny, CHECK (warunek) zastosowanie tego ograniczenia wymusi, aby w każdej krotce występująca w tej kolumnie wartość spełniała podany warunek (do budowy warunku możemy użyć operatorów logicznych, between, in, like itp.).

Powiązania Fraza PRIMARY KEY określa nazwy kolumn, które w danej tabeli tworzą klucz główny. Fraza FOREIGN KEY określa nazwy kolumn, które w danej tabeli tworzą klucz obcy. Fraza REFERENCES określa nazwę tabeli powiązaną z tworzoną tabelą podanym kluczem obcym, określając jednocześnie nazwy kolumn odpowiadających temu powiązaniu.

Zasady tworzenia tabel Każda tabela powinna posiadać autoinkrementowaną kolumnę ID typu INT. Pozwala ona w łatwy sposób posortować wiersze wg kolejności ich wstawiania do tabeli. Tylko w wyjątkowych przypadkach kolumna ID może być kluczem własnym tabeli. Klucz własny tabeli powinien być oparty albo o wyróżniający unikalny atrybut (np. numer indeksu) lub, w przypadku braku takiego atrybutu, o kolumnę sysguid opisaną poniżej.

Zasady tworzenia tabel Każda tabela powinna posiadać kolumnę Sysguid automatycznie wypełnianą wartościami typu UNIQUEIDENTIFIER. Tego typu kolumna może być wykorzystywana jako klucz własny tabeli i automatycznie zapewnia 2NF bazy danych. Każda tabela powinna posiadać kolumny DataUtworzenia (Syscreated) i DataModyfikacji (sysmodified) typu DATETIME. Każda tabela powinna posiadać kolumny Utworzył (Syscreator) i Zmodyfikował (Sysmodifier) typu VARCHAR. Kolumny te pozwalają na wprowadzenie podstawowych mechanizmów śledzenia zmian na tabelach.

Zasady tworzenia tabel Podczas tworzenia tabeli powinien być wyspecyfikowany jej właściciel. Zwykle tym właścicielem jest dbo (database owner). Jeśli właściciel nie zostanie podany w definicji tabeli, automatycznie właścicielem staje się użytkownik tworzący tabelę. W konsekwencji tabela może nie być dostępna dla żadnego innego użytkownika poza właścicielem, co w zdecydowanej większości przypadków nie jest pożądane. Jeśli tabela ma być porównywana lub replikowana z inną tabelą, wtedy należy do niej dodać kolumnę typu TIMESTAMP. Ta kolumna będzie automatycznie wypełniana znacznikiem czasu przy każdej zmianie wartości w danym wierszu.

TIMESTAMP Timestamp jest autoinkrementowaną wartością zależną od bazy danych. Nie jest ona w żaden sposób związana z fizycznym czasem utworzenia lub zmiany kolumny w wierszu tabeli. Ostatnio wykorzystaną wartość Timestamp można sprawdzić komendą SELECT @@DBTS.

Przykład 1 IF OBJECT_ID('MojaBaza.dbo.Miasta','U') IS NULL CREATE TABLE MojaBaza.dbo.Miasta ( ID INT IDENTITY(1,1), ); Miasto VARCHAR (20) NOT NULL UNIQUE, Wojewodztwo VARCHAR (20) NOT NULL, Utworzyl VARCHAR (20) NOT NULL, DataUtworzenia DATETIME DEFAULT GETDATE(), Zmodyfikowal VARCHAR (20) NOT NULL, DataModyfikacji DATETIME DEFAULT GETDATE(), Sysguid UNIQUEIDENTIFIER DEFAULT NEWID(), Timestamp TIMESTAMP, PRIMARY KEY (Miasto)

Przykład 2 IF OBJECT_ID('dbo.Studenci','U') IS NULL CREATE TABLE dbo.studenci ( ID INT IDENTITY(1,1), NrIndeksu INT NOT NULL UNIQUE, Imie VARCHAR (15) NOT NULL, Nazwisko VARCHAR (20) NOT NULL, Miasto VARCHAR (20) NOT NULL, Utworzyl VARCHAR (20) NOT NULL, DataUtworzenia DATETIME DEFAULT GETDATE(), Zmodyfikowal VARCHAR (20) NOT NULL, DataModyfikacji DATETIME DEFAULT GETDATE(), Sysguid UNIQUEIDENTIFIER DEFAULT NEWID(), Timestamp TIMESTAMP, PRIMARY KEY (NrIndeksu), FOREIGN KEY (Miasto) REFERENCES Miasta (Miasto) );

Przykład 3 IF OBJECT_ID('dbo.Egzaminy','U') IS NULL CREATE TABLE dbo.egzaminy ( ID INT IDENTITY(1,1), NrIndeksu INT NOT NULL, Przedmiot VARCHAR (20) NOT NULL, DataEgzaminu DATETIME NOT NULL, Ocena DECIMAL (3,1) NOT NULL, Utworzyl VARCHAR (20) NOT NULL, DataUtworzenia DATETIME DEFAULT GETDATE(), Zmodyfikowal VARCHAR (20) NOT NULL, DataModyfikacji DATETIME DEFAULT GETDATE(), Sysguid UNIQUEIDENTIFIER DEFAULT NEWID(), Timestamp TIMESTAMP, PRIMARY KEY (NrIndeksu, Przedmiot, DataEgzaminu), FOREIGN KEY (NrIndeksu) REFERENCES Studenci (NrIndeksu) );

DDL Modyfikowanie tabeli ALTER TABLE nazwa-tabeli [ADD nazwa-kolumny typ-danych [NOT NULL] [UNIQUE] [CHECK (warunek)]] [ADD nazwa-ograniczenia] [ALTER [COLUMN] stara-nazwa-kolumny nowa-nazwakolumny typ-danych [NOT NULL] [UNIQUE] [CHECK (warunek)]] [DROP nazwa-kolumny] [DROP CONSTRAINT nazwa-ograniczenia]

Modyfikowanie tabeli Komenda ALTER TABLE pozwala modyfikować strukturę tabeli o podanej nazwie, w szczególności: dodawać nowe kolumny i określać dla ich ograniczenia dodawać nowe ograniczenia dla istniejących kolumn zmieniać kolumny i określone dla nich ograniczenia usuwać kolumny

Przykład dodania kolumny IF OBJECT_ID('dbo.Miasta','U') IS NOT NULL IF COL_LENGTH ('Miasta', 'KodPocztowy') IS NULL ALTER TABLE Miasta ADD KodPocztowy VARCHAR(10) NULL

DDL - Usuwanie tabeli DROP TABLE MojaTabela Przykład: Usunąć tabelę Egzaminy. IF OBJECT_ID('dbo.Egzaminy','U') IS NOT NULL DROP TABLE dbo.egzaminy

Usuwanie zawartości tabeli Poniższa komenda usuwa całą zawartość tabeli, ale nie usuwa samej tabeli. Dodatkowo kolumny autoinkrementowane typu całkowitego (np. ID) są resetowane do początkowej wartości. TRUNCATE TABLE MojaTabela Przykład: Usunąć zawartość tabeli Egzaminy. IF OBJECT_ID('dbo.Egzaminy','U') IS NOT NULL TRUNCATE TABLE dbo.egzaminy

Usuwanie wybranych wierszy z tabeli Poniższa komenda usuwa te wiersze z tabeli, które spełniają podany warunek. Jeśli warunek jest spełniony dla wszystkich wierszy (np. 1=1), to z tabeli usunięte zostaną wszystkie wiersze, ale sama tabela nie zostanie usunięta. Uwaga: w tym przypadku kolumny autoinkrementowane typu całkowitego (np. ID) nie są resetowane do początkowych wartości. DELETE FROM MojaTabela WHERE MojWarunek Przykład: Usunąć z tabeli Egzaminy informacje o egzaminach studenta o numerze indeksu 2100089. IF OBJECT_ID('dbo.Egzaminy','U') IS NOT NULL DELETE FROM TABLE dbo.egzaminy WHERE NrIndeksu = 2100089

Zasady usuwania danych Nigdy nie usuwaj danych z tabeli opierając się na warunku w którym nie występuje klucz własny tej tabeli. Taki sposób usuwania danych prowadzi do zablokowania całej tabeli na czas usuwania, a w konsekwencji grozi zablokowaniem (deadlock) całej bazy danych. Przed wywołaniem komendy DELETE należy wstępnie wyznaczyć klucze wierszy, które mają zostać usunięte i dopiero wtedy rozpocząć usuwanie danych. Najbardziej optymalną metodą jest posłużenie się tabelą tymczasową, w której zapisujemy klucze wierszy do usunięcia.

Usuwanie danych przykład Usunąć miasta z tych województw, których nazwy zawierają tekst polska. IF OBJECT_ID('tempdb.dbo.#MiastaDoUsuniecia','U') IS NOT NULL DROP TABLE #MiastaDoUsuniecia CREATE TABLE #MiastaDoUsuniecia ( Miasto VARCHAR (20) COLLATE DATABASE_DEFAULT, PRIMARY KEY (Miasto)) INSERT INTO #MiastaDoUsuniecia SELECT Miasto FROM Miasta WITH (NOLOCK) WHERE Wojewodztwo LIKE '%polska' DELETE FROM Miasta WHERE Miasto IN (SELECT Miasto FROM #MiastaDoUsuniecia) IF OBJECT_ID('tempdb.dbo.#MiastaDoUsuniecia','U') IS NOT NULL DROP TABLE #MiastaDoUsuniecia

Zasady wstawiania danych Przed wstawieniem wiersza należy obowiązkowo sprawdzić, czy wstawiany wiersz posiada klucz, który jeszcze nie pojawił się w tabeli. Jeśli klucz wstawianego wiersza nie jest nowym kluczem, wstawianie zakończy się błędem. W takim przypadku zamiast wstawiania zwykle wykonujemy modyfikację istniejącego wiersza w tabeli w oparciu o nowe dane. Kolumny autoinkrementowane i typu TIMESTAMP nie mogą mieć ręcznie przypisanych wartości.

DML Wstawianie pojedynczych wierszy INSERT INTO nazwa-tabeli [(nazwa-kolumny {, nazwa-kolumny} )] VALUES (wartość {, wartość} [(wartość {, wartość}] ); Powyższa komenda wstawia nowy wiersz (rekord) w tabeli o podanej nazwie, złożony z podanych wartości umieszczonych w kolumnach o podanych nazwach lub wszystkich kolumnach w przypadku, gdy nie podamy nazw kolumn (lista wartości musi być zgodna z listą nazw kolumn co do ilości, jak i typów danych).

DML Wstawianie wielu wierszy INSERT INTO nazwa-tabeli [(nazwa-kolumny {, nazwakolumny} )] SELECT [(nazwa-kolumny {, nazwa-kolumny} )] FROM nazwa-tabeli2 WHERE warunek ; Ta komenda wstawia nowe wiersze do tabeli o podanej nazwie, złożone z wyników podanego zapytania SELECT

Przykład 1 Usunąć całą zawartość tabeli Miasta i wstawić nowe trzy wiersze. IF OBJECT_ID('dbo.Miasta','U') IS NOT NULL BEGIN TRUNCATE TABLE dbo.miasta INSERT INTO dbo.miasta (Miasto,Wojewodztwo) VALUES ('Konin','Wielkopolskie'), ('Poznan','Wielkopolskie'), ('Warszawa','Małopolskie') END

Przykład 2 Wstawić do tabeli Studenci nowego studenta Adama Kowalskiego urodzonego w Koninie. Nadać mu numer indeksu 103628. IF OBJECT_ID('dbo.Studenci','U') IS NOT NULL BEGIN IF NOT EXISTS (SELECT ID FROM Studenci WITH (NOLOCK) WHERE NrIndeksu = 103628) INSERT INTO Studenci (NrIndeksu, Imie, Nazwisko, Miasto) VALUES (103628, 'Adam', 'Kowalski', 'Konin') END

Zasady aktualizowania danych Aktualizowanie danych zawsze związane jest z zablokowaniem wiersza (lub całej tabeli!) dla innych użytkowników. Dlatego konieczne jest wstępne ustalenie klucza lub kluczy wyznaczającej wiersze, które mają zostać uaktualnione i wykonanie aktualizacji dokładnie na tych wierszach, które mają być zmienione. Warunek w komendzie UPDATE musi odnosić się do klucza tabeli (chociaż nie jest to wymagane przez standard języka SQL).

DML Aktualizacja danych UPDATE nazwa-tabeli SET nazwa-kolumny = nowa-wartość {, nazwa-kolumny = nowa-wartość} [WHERE warunek]; Powyższa komenda w tabeli o podanej nazwie zmienia wartości na nowe w kolumnach o podanych nazwach w wierszach określonych przez warunek.. Gdy nie podamy warunku selekcji, zmienione zostaną wartości w podanych kolumnach we wszystkich wierszach.

Przykład 1 Zmienić miasto urodzenia studenta Adama Kowalskiego na Kraków. DECLARE @NrIndeksu VARCHAR(20) IF OBJECT_ID('dbo.Studenci','U') IS NOT NULL BEGIN SET @NrIndeksu = (SELECT NrIndeksu FROM Studenci WITH (NOLOCK) WHERE Imie = 'Adam' AND Nazwisko = 'Kowalski'); UPDATE Studenci SET Miasto = 'Kraków' WHERE NrIndeksu = @NrIndeksu; END Uwaga: NrIndeksu jest kluczem własnym tabeli Studenci.

Przykład 2 Uaktualnić dane w tabeli Miasta dodać informację, że wpisy o miastach z tych województw, których nazwy zawierają tekst polska, zostały utworzone przez użytkownika Kowalski. IF OBJECT_ID('tempdb.dbo.#MiastaDoAktualizacji','U') IS NOT NULL DROP TABLE #MiastaDoAktualizacji CREATE TABLE #MiastaDoAktualizacji ( Miasto VARCHAR (20) COLLATE DATABASE_DEFAULT, PRIMARY KEY (Miasto)) INSERT INTO #MiastaDoAktualizacji SELECT Miasto FROM Miasta WITH (NOLOCK) WHERE Wojewodztwo LIKE '%polska' UPDATE Miasta SET Utworzył = 'Kowalski' WHERE Miasto IN (SELECT Miasto FROM #MiastaDoAktualizacji) IF OBJECT_ID('tempdb.dbo.#MiastaDoAktualizacji','U') IS NOT NULL DROP TABLE #MiastaDoAktualizacji

Wyszukiwanie informacji SELECT [DISTINCT] * nazwa-kolumny {, nazwakolumny} FROM nazwa-tabeli {, nazwa-tabeli} [WHERE warunek] [GROUP BY nazwa-kolumny {, nazwa-kolumny}] [HAVING warunek] [ORDER BY nazwa-kolumny [ASC DESC] {, nazwakolumny [ASC DESC]}]

Komenda SELECT Wyszukuje i zwraca jako wyniki dane zapisane w kolumnach o nazwach podanych po SELECT, zawarte w tabelach o nazwach podanych po FROM, spełniające warunek podany po WHERE, przy czym wyniki mogą być grupowane wg kolumn, których nazwy podano po GROUP BY, po zgrupowaniu spełniające warunek podany po HAVING i uporządkowane rosnąco (ASC) lub malejąco (DESC) wg kolumn, których nazwy podano po ORDER BY DISTINCT powoduje usuwanie powtarzających się wierszy wyniku.

Przykłady SELECT * FROM Studenci; SELECT Miasto FROM Miasta WHERE Wojewodztwo = 'wielkopolskie'; SELECT Studenci.NrIndeksu, Imie, Nazwisko, Przedmiot, Ocena FROM Studenci, Egzaminy WHERE Studenci.NrIndeksu = Egzaminy.NrIndeksu;

Projekcja i selekcja Projekcja: SELECT nazwa-kolumny {, nazwa-kolumny} FROM nazwa-tabeli; Selekcja: SELECT * FROM nazwa-tabeli WHERE warunek;

Złączenie tabel SELECT nazwa-kolumny {, nazwa-kolumny} FROM nazwa-tabeli1 INNER JOIN nazwa-tabeli2 ON nazwa-tabeli1.nazwa-kolumny = nazwatabeli2.nazwa-kolumny;

Zasady łączenia tabel Złączenia tabel wykonuj przede wszystkim na kolumnach, które są kluczami własnymi tabel. Złączenia wykonane na kolumnach, które nie są kluczami własnymi niesie niebezpieczeństwa: Znacznego wydłużenia czasu wykonania zapytania (może być konieczne przeskanowanie całych tabel). Nieoczekiwanego przez programistę zwielokrotnienia wyników zapytania. Po złączeniu tabel zawsze sprawdzaj ilość zwracanych wierszy kontroluj czy nie zostały one zwielokrotnione.

Wyrażenia i funkcje agregujące W zapytaniu SELECT zamiast nazwy-kolumny możemy napisać wyrażenie zbudowane z nazw kolumn połączonych operatorami arytmetycznymi (+, -, *, /) lub użyć wywołania funkcji agregującej: MIN (nazwa-kolumny) najmniejsza wartość w podanej kolumnie MAX (nazwa-kolumny) największa wartość w podanej kolumnie COUNT (*) liczba wierszy w tabeli SUM (nazwa-kolumny) suma wartość w podanej kolumnie AVG (nazwa-kolumny) średnia arytmetyczna wartość w podanej kolumnie.

Zmiana nazwy kolumny Gdy w poleceniu SELECT, zamiast nazwy-kolumny napiszemy wyrażenie zbudowane z nazw kolumn połączonych operatorami arytmetycznymi lub użyjemy wywołania funkcji agregującej, możemy po słowie AS podać nazwę, która zostanie przyjęta dla kolumny wyniku, np. SELECT Przedmiot, AVG (Ocena) AS [Średnia ocena] FROM Egzaminy GROUP BY Przedmiot; SELECT Przedmiot, [Średnia ocena] = AVG (Ocena) FROM Egzaminy GROUP BY Przedmiot;

Aliasy W przypadku złączeń kilku tabel możemy określić aliasy (skrótowe nazwy tych tabel), aby wykorzystać je przed nazwą kolumny, w celu określenia, z której tabeli pochodzi dana kolumna. Aliasy są niezbędne, gdy łączona jest ze sobą ta sama tabela. SELECT nazwa-kolumny {, nazwa-kolumny} FROM nazwa-tabeli1 INNER JOIN nazwa-tabeli2 WHERE nazwa-tabeli1.nazwa-kolumny = nazwa-tabeli2.nazwakolumny; możemy zastąpić poleceniem z aliasami SELECT nazwa-kolumny {, nazwa-kolumny} FROM nazwa-tabeli1 t1, nazwa-tabeli2 t2 WHERE t1.nazwa-kolumny = t2.nazwa-kolumny;

Warunek WHERE Do budowy warunku po słowie WHERE możemy wykorzystać: operatory porównania: =, <>,!=, <, <=, >, >= operatory logiczne: AND, OR, NOT operator BETWEEN wartość AND wartość operator IN (wartość {, wartość}) operator IS NULL operator LIKE ciąg-znaków - sprawdza, czy dana wartość tekstowa jest zgodna ze wzorcem podanego ciągu znaków (we wzorcu % oznacza dowolny ciąg znaków, a _ oznacza dowolny, pojedynczy znak)

Zasady filtrowania danych Zawsze w warunku WHERE staraj się korzystać z pól zawartych w kluczu własnym tabeli (lub w kluczach tabel złączonych). Jeśli to nie jest możliwe rozważ dodanie nowego indeksu do tabeli tak, aby kolumny użyte w warunku WHERE były elementami nowego indeksu.

GROUP BY Aby pogrupować wyniki polecenia SELECT wg określonych nazw kolumn, używamy GROUP BY. Najczęściej wykorzystujemy wówczas funkcje agregujące. Lista nazw kolumn występujących po słowie SELECT a nie będących funkcjami agregującymi, musi zostać powtórzona po słowie GROUP BY, przy czym kolejność nazw kolumn tu występujących będzie określała kolejność grupowania. SELECT Przedmiot, [Średnia ocena] = AVG (Ocena) FROM Egzaminy GROUP BY Przedmiot

HAVING HAVING występuje wyłącznie w połączeniu z GROUP BY i służy do selekcji (przy pomocy podanego warunku) zbioru pogrupowanych wyników. SELECT Przedmiot, Egzaminator, [Średnia ocena] = AVG (Ocena) FROM Egzaminy WHERE Przedmiot = 'Bazy danych' GROUP BY Przedmiot, Egzaminator HAVING AVG (Ocena) > 3.8

Zasady filtrowania danych Bez wyraźnej konieczności nie używaj warunków HAVING. Warunki HAVING wpływają na znaczne zmniejszenie prędkości wykonywania zapytania.

ORDER BY Wyniki wykonania polecenia SELECT mogą zostać uporządkowane wg określonych nazw kolumn przy pomocy ORDER BY. Porządek może być rosnący (ASC) (domyślny) lub malejący (DESC), dla każdej nazwy kolumny z osobna. Kolejność nazw kolumn po słowie ORDER BY będzie określała kolejność porządkowania. SELECT Przedmiot, Egzaminator, [Średnia ocena] = AVG (Ocena) FROM Egzaminy GROUP BY Przedmiot, Egzaminator HAVING AVG (Ocena) > 3.8 ORDER BY Przedmiot

Kontrola dostępu DCL - GRANT GRANT prawo-do-operacji (nazwa-kolumny {, nazwakolumny} ) ON nazwa-tabeli TO użytkownik IDENTIFIED BY 'haslo'; Powyższa komenda nadaje prawo do wykonywania określonych operacji określonemu użytkownikowi

DENY Komenda odmawiająca prawa do wykonywania określonych operacji określonemu użytkownikowi: DENY prawo-do-operacji (nazwa-kolumny {, nazwakolumny} ) ON nazwa-tabeli TO użytkownik;

REVOKE REVOKE prawo-do-operacji (nazwa-kolumny {, nazwakolumny} ) ON nazwa-tabeli TO użytkownik; Komenda wycofująca nadanie prawa lub odebranie prawa do wykonywania określonych operacji określonemu użytkownikowi.

Wybrane prawa do operacji ALL wszystkie operacje, CREATE tworzenie tabeli ALTER zmiana struktury tabeli, DROP usuwanie tabeli, INSERT wstawianie danych SELECT wyszukiwanie danych, UPDATE modyfikowanie danych DELETE usuwanie danych z tabeli