Ćwiczenia > Język T-SQL > Polecenia języka DML

4.3 Polecenia języka DML



Najczęściej wykonywanymi w bazach danych poleceniami SQL są polecenia języka DML (ang. Data Modification Language): SELECT,INSERT,UPDATE oraz DELETE.

Krok 1 - Przygotuj tabelę testową do ćwiczeń z poleceniami DML

1. Uruchom program Query Analyzer.
2. Zaloguj się używając uwierzytelnienia systemu Windows.
3. W menu głównym programu wybierz File - Open.
4. W oknie Open Query File wybierz plik demo_4_3_1.sql.
5. Zaznacz i uruchom (klawisz F5) fragment kodu oznaczony w komentarzu jako (1).


-- (1) przygotujmy tabele do testowania
-- polecen jezyka DML
USE Northwind
GO

SELECT EmployeeID, LastName, FirstName, BirthDate
INTO Employees_kopia 
FROM Employees
GO

INSERT INTO Employees_kopia(LastName,FirstName,BirthDate)
VALUES ('Smith','Michael','1960-05-29 12:30')
GO


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

1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (2).


-- (2) wyswietlmy cala zawartosc tabeli
SELECT * 
FROM Employees_kopia
GO


Wynikiem działania tego kodu jest wyświetlenie całej zawartości (gwiazdka wybiera wszystkie kolumny) tabeli Employees_kopia:

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

(10 row(s) affected)
2. Zaznacz i wykonaj (F5) fragment kodu oznaczony w komentarzu jako (3).


-- (3) wybierzmy kolumny, ktore chcemy wyswietlic
SELECT LastName, FirstName 
FROM Employees_kopia
GO


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

(10 row(s) affected)
3. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (4).


-- (4) dodajmy literal i alias
SELECT 'Imie i nazwisko: ' + FirstName + ' ' + LastName AS Osoba
FROM Employees_kopia
GO


Wynikiem działania tego kodu jest wyświetlenie jako pojedynczej kolumny tekstu "Imie i nazwisko: " oraz imienia i nazwiska osoby oddzielonych spacją:

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

(10 row(s) affected)
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.


4. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (5).


-- (5) nie wyswietlajmy duplikatow
SELECT DISTINCT FirstName
FROM Employees_kopia
GO


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

(9 row(s) affected)
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).


5. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (5).


-- (6) sortujmy rekordy rosnaco (ASC) i malejaco (DESC)
SELECT LastName, FirstName, BirthDate
FROM Employees_kopia ORDER BY BirthDate
GO 


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

(10 row(s) affected)
6. 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
GO 


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

(10 row(s) affected)
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. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (7).


-- (7) ograniczmy liczbe rekordow
SELECT LastName, FirstName 
FROM Employees_kopia 
WHERE LastName = 'Davolio'
GO


Wynikiem działania tego kodu jest wyświetlenie nazwisk i imion wszystkich osób o nazwisku Davolio (tu - jedna osoba).

LastName             FirstName  
-------------------- ---------- 
Davolio              Nancy

(1 row(s) affected
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. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (8).


-- (8) wyprobujmy operator wiekszosci
SELECT LastName, FirstName, BirthDate
FROM Employees_kopia 
WHERE Birthdate >= '1960-01-01'
GO


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

(5 row(s) affected)
Dwuargumentowe operatory porównania w T-SQL to: = ("równe"), > ("większe"), < ("mniejsze"), >= ("większe/równe"), <= ("mniejsze/równe"), <> ("nie równe").


9. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (9).


-- (9) trick z data + operator AND
SELECT LastName, FirstName, BirthDate
FROM Employees_kopia 
WHERE BirthDate = '1960-05-29'
GO

SELECT LastName, FirstName, BirthDate
FROM Employees_kopia 
WHERE BirthDate >= '1960-05-29' AND BirthDate < '1960-05-30'
GO


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

(1 row(s) affected)
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

(2 row(s) affected)
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).


10. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (10).


-- (10) wyprobujmy operator OR
SELECT LastName, FirstName, BirthDate
FROM Employees_kopia 
WHERE BirthDate < '1950-01-01' OR BirthDate >= '1960-01-01'
GO


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

(7 row(s) affected)
	
11. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (11).


-- (11) wyszukajmy w zbiorze wartosci
SELECT LastName, FirstName
FROM Employees_kopia
WHERE LastName IN ('Davolio','Smith')
GO


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

(2 row(s) affected)
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).


12. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (12).


-- (12) wyszukajmy w przedziale wartosci
SELECT LastName, FirstName, BirthDate
FROM Employees_kopia 
WHERE BirthDate BETWEEN '1950-01-01' AND '1960-01-01'
GO


Wynikiem wykonania powyższego kodu jest wyświetlenie wszystkich osób urodzonych pomiędzy (ang. between) 1 stycznia 1950 roku a 1 stycznia 1960 roku (obie daty wchodzą w zakres).

LastName             FirstName  BirthDate                                              
-------------------- ---------- ------------------------------------------------------ 
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

(3 row(s) affected)
13. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (13).


-- (13) uzyjmy operatora LIKE
SELECT LastName, FirstName, BirthDate
FROM Employees_kopia
WHERE LastName LIKE '[A-F]%'
GO


Wynikiem wykonania powyższego kodu jest wyświetlenie listy osób, których nazwiska (kolumna LastName) rozpoczynają się od liter z przedziału od A do F (natomiast znak procent oznacza dowolny łańcuch znaków dowolnej długości).

LastName             FirstName  BirthDate                                              
-------------------- ---------- ------------------------ 
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
Dodsworth            Anne       1966-01-27 00:00:00.000

(5 row(s) affected)
14. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (14).


-- (14) zastosujmy funkcje T-SQL
SELECT AVG(DateDiff(year,BirthDate,GetDate())) AS [Sredni wiek pracownika]
FROM Employees_kopia
GO


Wynikiem wykonania powyższego kodu jest wyświetlenie średniego wieku osób z tabeli Employees_kopia. Wartość ta jest obliczana przy użyciu funkcji:
- AVG - oblicza średnią arytmetyczną,
- DateDiff - oblicza różnicę między datami (argument year mówi, że różnica będzie obliczona w latach),
- GetDate - zwraca aktualną datę i godzinę.

Sredni wiek pracownika 
---------------------- 
47

(1 row(s) affected)
Powyższy wynik został uzyskany w następujący sposób:
1) pobrana została aktualna data i godzina (GetDate),
2) następnie obliczono różnicę (DateDiff) między uzyskaną aktualną datą a datą urodzenia osoby (wartość pola BirthDate), różnicę tę wyrażono w latach (słowo year) - w ten sposób dla każdej osoby uzyskano wiek w latach,
3) wreszcie wyciągnięto średnią arytmetyczną (AVG) z uzyskanych wcześniej wartości.

T-SQL zawiera wiele przydatnych funkcji. Ich listę i opisy możesz obejrzeć w Books Online wchodząc w indeks i wyszukując słowa functions.


15. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (15).


-- (15) zliczmy rekordy w tabeli
SELECT Count(*) AS [Liczba osob]
FROM Employees_kopia
GO


Wynikiem wykonania powyższego kodu jest wyświetlenie liczby wszystkich rekordów z tabeli Employees_kopia przy użyciu funkcji Count.

Liczba osob 
----------- 
10

(1 row(s) affected)
Funkcja Count jest jedną z ważniejszych funkcji T-SQL. Stosuje się ją na przykład w sytuacjach, gdy liczba rekordów w tabeli nie powinna przekraczać określonej granicy (konstruuje się wyzwalacze używające tej funkcji).


16. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (16).


-- (16) ciekawostka - SQL jako kalkulator
SELECT 2*2
GO


W ramach ciekawostki spieszymy Cię poinformować, że SQL może stać się także podręcznym kalkulatorem (i do tego bardzo precyzyjnym - zależnie od ustawień precyzji serwera). Wynikiem wykonania powyższego kodu będzie wyświetlenie wyniku działania.

            
----------- 
4

(1 row(s) affected)

Krok 3 - Zapoznaj się z działaniem polecenia INSERT

1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (17).


-- (17) dodajmy nowy rekord
INSERT INTO Employees_kopia(LastName,FirstName,BirthDate)
VALUES ('Richardson','Mark','1961-03-12')
GO


Wynikiem wykonania powyższego kodu jest dodanie nowego rekordu do tabeli Employees_kopia i zwrócenie informacji o ilości dodanych rekordów. W odpowiednie pola wstawione są następujące wartości:
- w kolumnie LastName wartość Richardson,
- w kolumnie FirstName wartość Mark,
- w kolumnie BirthDate wartość 1961-03-12.

Dobrym nawykiem jest podawanie w poleceniu INSERT po nazwie tabeli nazw kolumn, w które wstawiamy wartości. Inaczej musimy znać kolejność kolumn w definicji tabeli.

Polecenie INSERT nie umożliwia wstawiania wartości w kolumny z autonumeracją (należy te kolumny pomijać w składni polecenia).


2. Zaznacz i uruchom (F5) ponownie fragment kodu oznaczony w komentarzu jako (2), by sprawdzić, czy rzeczywiście dodaliśmy rekord.

EmployeeID  LastName             FirstName  BirthDate                                              
----------- -------------------- ---------- -----------------------
10          Smith                Michael    1960-05-29 12:30:00.000
11          Richardson           Mark       1961-03-12 00:00: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

(11 row(s) affected)

Krok 4 - Zapoznaj się z działaniem polecenia UPDATE

1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (18).


-- (18) zmienmy istniejacy rekord
UPDATE Employees_kopia
SET LastName = 'Richards'
WHERE LastName = 'Richardson'
GO


Wynikiem wykonania powyższego kodu jest zmiana nazwiska osoby o nazwisku Richardson na Richards i zwrócenie informacji o liczbie zmienionych rekordów.

2. Zaznacz i uruchom (F5) ponownie fragment kodu oznaczony w komentarzu jako (2), by sprawdzić, czy rzeczywiście zmieniliśmy nazwisko osoby.

EmployeeID  LastName             FirstName  BirthDate                                              
----------- -------------------- ---------- ------------------------------------------------------ 
10          Smith                Michael    1960-05-29 12:30:00.000
11          Richards             Mark       1961-03-12 00:00: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

(11 row(s) affected)
Dość często zdarza się, że chcemy zmienić wartości w całej kolumnie. Wówczas nie używamy klauzuli WHERE. Na przykład podniesienie ceny wszystkich produktów o 20% w fikcyjnej tabeli Produkty wiąże się z wykonaniem kodu:

UPDATE Produkty
SET cena = (cena * 1.2)


Krok 5 - Zapoznaj się z metodami usuwania rekordów

1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (19).


-- (19) usunmy rekord
DELETE FROM Employees_kopia
WHERE LastName = 'Richards'
GO


Wynikiem działania powyższego kodu jest usunięcie wszystkich rekordów, które w kolumnie LastName mają wstawioną wartość Richards, oraz zwrócenie informacji o liczbie usuniętych rekordów. W naszym przykładzie usuniemy jeden rekord.

2. Zaznacz i uruchom (F5) ponownie fragment kodu oznaczony w komentarzu jako (2), by sprawdzić, czy rzeczywiście usunęliśmy rekord (poniżej na szaro zaznaczyliśmy rekord, którego nie zobaczysz zróconym zestawie rekordów, gdyż został usunięty).

EmployeeID  LastName             FirstName  BirthDate                                              
----------- -------------------- ---------- -----------------------
10          Smith                Michael    1960-05-29 12:30:00.000
11          Richardson           Mark       1961-03-12 00:00: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

(11 row(s) affected)
Jeśli chcesz usunąć wszystkie rekordy z tabeli, po prostu nie używaj klauzuli WHERE w poleceniu DELETE.


3. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (20).


-- (20) usunmy zawartosc tabeli
TRUNCATE TABLE Employees_kopia
GO


Wynikiem wykonania powyższego kodu jest usunięcie wszystkich rekordów w tabeli Employees_kopia (możesz to sprawdzić zaznaczając i uruchamiając fragment kodu oznaczony w komentarzu jako (2)).

Różnica pomiędzy poleceniami DELETE a TRUNCATE TABLE jest taka, że działanie pierwszego z wymienionych poleceń zapisywane jest w dzienniku transakcji (czyli ewentualnie może być operacją odwracalną), natomiast druga nie (jest nieodwracalna).


Najlepiej nie umieszczać w skryptach samodzielnych poleceń usuwających rekordy, a na przykład umieścić je w procedurach składowanych. W ten sposób można zabezpieczyć się przez przypadkowymi usunięciami całej zawartości tabeli (kiedy użytkownik niechcący nie podświetli klauzuli WHERE podczas wykonywania operacji usuwania).


Do projektu Prace dyplomowe dołącz skrypt o nazwie jezyk_dml.sql, w którym zapytania języka DML: co najmniej kilka najpotrzebniejszych operacji SELECT (koniecznie z ograniczeniem ilości kolumn i rekordów) i po jednym wykorzystaniu pozostałych poleceń.


Przejdź dalej



Ćwiczenia > Język T-SQL > Polecenia języka DML