Ć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 DML1. 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).
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 SELECT1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (2).
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).
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).
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.
4. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (5).
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)
5. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (5).
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).
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)
7. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (7).
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
8. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (8).
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)
9. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (9).
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)
10. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (10).
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).
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)
12. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (12).
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).
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).
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.
15. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (15).
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)
16. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (16).
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 INSERT1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (17).
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.
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 UPDATE1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (18).
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)
Krok 5 - Zapoznaj się z metodami usuwania rekordów1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (19).
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)
3. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (20).
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)).
Przejdź dalej ![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() Ćwiczenia > Język T-SQL > Polecenia języka DML |