Bazy danych SQL Server 2005 TSQL Michał Kuciapski Typ zadania: Podstawowe zapytania Select Zadanie 1: Wyświetl następujące informacje z bazy: A. 1. Wyświetl informacje o klientach: nazwa firmy, imie, nazwisko, miasto i Typ. 2. Zmodyfikuj skrypt tak, aby były wyświetlane wyłącznie dane o klientach będących Firmą. (WHERE) 3. Zmodyfikuj skrypt tak, aby dane były wyświetlane rosnąco po nazwie firmy. (ORDER BY) 4. Dodaj do skryptu warunek, aby były wyświetlane firmy wyłącznie z Gdańska. (AND) 5. UŜywając like zmodyfikuj skrypt tak, aby były wyświetlane wyłącznie firmy z Gdańska lub Sopotu. W warunku like podaj tylko 3 pierwsze litery. (LIKE) 6. Zmodyfikuj skrypt tak, aby były równieŝ wyświetlane informacje o adresie firmy, ale w jednym wynikowym polu o nazwie AdresFirmy. (AS) 7. Dodaj do skryptu instrukcję powodującą wyeksportowanie wyniku do xml jako zagnieŝdŝone drzewko xml, a nie jako rekordy. (FOR XML) C. Wyświetl niepowtarzającą się listę miast, w których znajdują się siedziby klientów. (DISTINCT) D. Wyświetl listę 30% najwyŝszych transakcji sprzedaŝy. (TOP) Ogólna składnia - SELECT listapól FROM listatabel WHERE warunki ORDER BY wraŝeniesortowania Wyświetlanie - SELECT listapól FROM listatabel Warunki - WHERE wyraŝenie1 [{AND OR} wyraŝenie2 [...]] Sortowanie - ORDER BY pole1 [{ASC DESC}], pole2 [{ASC DESC}] [,...]] 1
Dopasowywanie nazwapola LIKE wyraŝenie Łączenie wartosci SELECT., wyraŝenie AS nazwa pola Wartości niepowtarzające się - DISTINCT nazwapola Zwracenie dokumentu XML - FOR XML [RAW,AUTO] AUTO zwraca Tagi xml w postaci drzewa Zwracanie najwyŝszych wartości TOP liczba [PERCENT] - RAW wypisuje rekordy, Przykład SELECT IDKlienta, IDFirmy + - + NazwaFirmy AS Firma, TOP 10 Saldo FROM Klienci WHERE kraj = 'USA' OR kraj like 'C%' ORDER BY NazwaWyrmy FOR XML RAW Typ zadania: ZłoŜone zapytania select Zadanie 2: Wyświetl następujące informacje z bazy: A. 1. Wyświetl informacje o transakcji sprzedaŝy: nazwa klienta, data sprzedaŝy, cena transakcji dla klientów, którzy dokonali zakupów. (INNER JOIN) 2. Zmodyfikuj skrypt tak, aby były wyświetlane równieŝ informacje o nazwie produktu. (zagnieŝdŝone INNER JOIN) 3. Zmodyfikuj skrypt tak, aby dane były wyświetlane dla wszystkich klientów. ( zagnieŝdŝony LEFT OUTER JOIN) 4. Sprawdź co się stanie jak wykorzystasz full join. (FULL JOIN) B. 1. Wyświetl informacje o klientach nazwa klienta - którym sprzedano towary i łącznej kwocie sprzedanych im towarów. (GROUP BY oraz SUM) 2. Zmodyfikuj skrypt tak, aby były wyświetlane były informacje równieŝ o tych klientach, którzy nie kupili Ŝadnego towaru. 3. Zmodyfikuj skrypt tak, aby były równieŝ były wyświetlane informacje o średniej oraz 2
maksimum sprzedaŝy. Zmień nazwy kolumn na bardziej przyjazne. (AVG i MAX) 4. Zmodyfikuj skrypt tak, aby wyświetlane wyłącznie o klientach, których łączna suma sprzedaŝy jest większa od 15000 zł. (HAVING) C. Wyświetl liczbę transakcji sprzedaŝy w ciągu ostatnich 3 dni. (COUNT) D. Wyświetl informacje o klientach indywidualnych (imie, nazwisko, miasto i adres jako jedno pole), którzy nie zakupili Ŝadnego towaru. (NOT IN (SELECT )). Łączenie tabel - FROM tabela1 JOIN tabela2 ON warunek1 JOIN warunek2 ON warunek3 Typy JOIN: INNER JOIN; LEFT OUTER JOIN; RIGHT OUTER JOIN; FULL JOIN Grupowanie- GROUP BY wyraŝenie1 [,wyraŝenie [,...]] Funkcje grupowania - COUNT, SUM, AVG, MIN, MAX Warunki na końcu wyraŝenia - HAVING wyraŝenie1 [{AND OR} wyraŝenie2[...]] Podzapytania - FROM tabela1, WHERE nazwapola warunek (SELECT.). Warunek np.: NOT IN Przykłady SELECT Ksizaka.Nazwa, Wypozyczajacy.Nazwa, Wypozyczajacy.Adres, Wypozyczenia.IDWypozyczenia, Wypozyczenia.DataWypozyczenia FROM (Wypozyczajacy INNER JOIN Wypozyczenia ON Wypozyczajacy.Nazwa = Wypozyczenia.NazwaWypozyczajacy) INNER JOIN Ksiazka ON Wypozyczenia.IDKsiazki = Ksiazka.IDKsiazki SELECT Klienci.Kraj, Klienci.Miasto, Sum(Zamowienia.Ladunek) AS SumaLadunkow FROM Klienci INNER JOIN Zamowienia ON Klienci.IDKlienta = Zamowienia.IDKlienta GROUP BY Klienci.Kraj, Klienci.Miasto HAVING (((Sum(Zamowienia.Ladunek))>1000)) 3
SELECT IDWypozyczajacego, Nazwa, Miasto FROM Wypozyczajacy WHERE IDWypozyczajacego Not In(Select IDWypozyczajacego FROM Wypozyczenia) Typ zadania: Zapytania modyfikacji tabel Zadanie 3: A. Za pomocą skryptu dodaj do tabeli klienci nowego klienta o danych: Andrzej, Giertych, Warszawa, Wiejska 13, Indywidualny, Klient sprawiający problemy. (INSERT INTO) B. Utwórz nową tabelę przechowującą informacje wyłącznie o klientach instytucjonalnych. (SELECT INTO) C. Zmień imie i nazwisko klienta Andrzej Giertych na Donald Kaczyński. (UPDATE) D. Usuń klienta Donald Kaczyński. (DELETE) Dodawanie danych INSERT [INTO] tabelawidok [(kol1, kol2...)] VALUES (wartość1, wartość2) Tworzenie nowej tabeli na podstawie istniejącej SELECT wyraŝenie INTO nazwatabeli FROM nazwatabeli WHERE warunek Aktualizacja danych - UPDATE nazwatabeli SET kolumna1=wartość1, [kolumna2=wartość2...] WHERE wyraŝenie Usuwanie danych - DELETE [FROM] nazwatabeli [WHERE warunekwyszukiwania] Usuwanie zawartości tabeli - TRUNCATE TABLE NazwaTabeli Typ zadania: Funcje T-SQL Zadanie 4: A. Wyświetl informacje o sprzedaŝy dla firm nazwa firmy, produkt, cena sprzedaŝy moŝesz wykorzystać skrypt z wcześniejszego zadania. Cena sprzedaŝy niech będzie wyświetlana jako zaokrąglona do wartości całkowitej. (ROUND) B. Wyświetl pierwsze 5 znaków nazw firm, znaki od 2 do 5, oraz całkowite długości nazw. (LEFT, SUBSTRING i LEN) 4
C. 1. Wyświetl informacje o wszystkich klientach tak, aby w polu typ zamiast instytucjonalny było wypisywane publiczny. Ponadto nazwy firm niech będą wypisane duŝymi literami. (REPLACE i UPPER) 2. Zmodyfikuj skrypt tak, aby miasto i adres były pisane w jednym polu bez ewentualnych spacji i kończących. (RTRIM) D. Wyświetl aktualną datę i datę, która będzie za miesiąc. (GETDATE i DATEADD) E. Wyświetl informacje o sprzedaŝy, podając oprócz podstawowych danych wybranych wg uznania, w osobnych polach: dzień, dzień tygodnia, miesiąc, rok, ilość dni która upłynęła od sprzedaŝy. (DATENAME, DAY, MONTH, YEAR, DATEDIFF) F. Wyświetl listę klientów. Klienci niekupujący jako firma mają mieć wypisywany tekst klient indywidualny w polu nazwa firmy. (ISNULL) Zaokrąglanie liczb ROUND(pole, ilośćmiejscpoprzecinku) Pobieranie początkowych znaków LEFT(pole, ilość) Pobieranie znaków - SUBSTRING(pole, indekspierwszegoznaku, ilość) Ustalanie długości tekstu LEN(pole) Zamiana tekstu - REPLACE(pole, tekstszukany, tekstzmiany) Zmiana wielkości liter UPPER(pole) Usuwanie zbędnych spacji RTRIM(pole) i LTRIM(pole) BieŜąca data GETDATE() Dodanie czasu do daty DATEADD(jednostka, ilość, pole); jednostka: dd, mm, yy Ustalenie nazwy elementu daty DATENAME(typ, pole); jednostka: dd, dw, mm, yy Wydobywanie fragmentu daty DAY(pole), MONTH(pole), YEAR(pole) Określanie róŝnic pomiędzy datami DATEDIFF(jednostka, data1, data2) Sprawdzanie czy pole jest puste ISNULL(pole, wypisywany jest tekst ) 5