MagnusArias

BD | datetime, sequence, view

May 16th, 2016
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 8.82 KB | None | 0 0
  1. DATE AND TIME
  2. 1) Utwórz tabelę przechowującą w oddzielnych kolumnach datę, czas oraz datę i czas ze strefą czasową.
  3. Wstaw do tabeli bieżącą datę i czas ze strefą czasową o wysokiej precyzji. Pobierz dane z tabeli.
  4. 2) Pobierz bieżącą datę i czas ze strefą czasową.
  5. 3) Pobierz z bieżącej daty i czasu(czas uniwersalny) rok, miesiąc i dzień. Zastosuj odpowiednie funkcje.
  6. 4) Za pomocą odpowiedniej funkcji pobierz nazwę dnia tygodnia i miesiąca w postaci łańcucha znakowego
  7. z bieżącej daty.
  8. 5) Pobierz datę w postaci ostatniego dnia miesiąca na podstawie bieżącej daty, zastosuj
  9. odpowiednią funkcję.
  10. 6) Podaj za pomocą odpowiedniej funkcji różnicę w postaci miesięcy między datami:
  11. 2015-03-22 oraz 2016/05/08
  12. 7) Podaj datę, po dodaniu 23 dni do daty 2015-10-25, zastosuj odpowiednią funkcję.
  13. SEQUENCE
  14. 1) Stwórz najprostszą sekwencję o nazwie basicSeq, która zaczyna się wartością jeden oraz zwiększa się
  15. o jeden.
  16. 2) Wypisz kolejną wartość z basicSeq (użyj NEXT VALUE FOR).
  17. 3) Utwórz tablicę o nazwie Alfa, przechowującą literę oraz liczbę. Wprowadź rekord do tablicy Alfa
  18. używając kolejnej wartości basicSeq dla kolumny liczba oraz dowolnej litery. Sprawdź zawartość tablicy
  19. Alfa.
  20. 4) Sprawdź systemowe właściwości stworzonej sekwencji (użyj sys.sequences).
  21. 5) Stwórz kolejną sekwencję advanceSeq, która będzie typem danych BIGINT, zaczynać się od wartości 5
  22. oraz zwiększać się o 7. Warunkiem jest, aby najmniejszą wartością BYło 5, a maksymalną 6000.
  23. VIEW
  24. 1) Stwórz widok o nazwie basicView, który będzie zawierał pierwsze 3 rekordy osób o najwyższej sumie
  25. zarobków. Sprawdź działanie widoku.
  26. 2) Zmień widok o nazwie basicView, tak żeby zwracał 10 rekordów o najniższej sumie zarobków.
  27. 3) Stwórz widok o nazwie moreBasicView, który będzie wyświetlał 20 pierwszych nazwisk, imion i dat
  28. urodzenia z tablicy Osoby (uporządkowane wg nazwiska alfabetycznie).
  29. 4) Zaktualizuj rekord w widoku moreBasicView poprzez zmienienie nazwiska BARDEN na CAT. Sprawdź
  30. wynik w widoku oraz w bazowej tablicy.
  31. 5) Utwórz widok o nazwie KlienciMiastaFaktury przechowujący nazwisko i imię klienta wraz z nazwą
  32. miasta, z którego pochodzi oraz liczbą faktur(kolumnę nazwij liczba_faktur). Nazwisko i imię klienta
  33. powinno znajdować w jednej kolumnie o nazwie nazwisko_imie. Pobierz dane z widoku sortując rekordy
  34. malejąco wg liczby faktur.
  35. 6) Utwórz widok o nazwie LiczbaTowarowProducenta, przechowujący nazwę producenta oraz liczbę
  36. towarów, które sprzedaje.
  37. 7) Za pomocą CTE utwórz zbiór danych przechowujących nazwisko, imię, rok urodzenia oraz wzrost osoby
  38. i SUMę jego wynagrodzeń, a następnie za pomocą polecenia SELECT pobierz średnie wynagrodzenie tych
  39. osób.
  40. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  41.  
  42. ----- DATE TIME
  43. Ćw 1
  44. CREATE TABLE daty
  45. (
  46.     d DATE,
  47.     t TIME,
  48.     dt datetimeoffset
  49. );
  50.  
  51. INSERT INTO daty VALUES( sysdatetimeoffset(),sysdatetimeoffset(),sysdatetimeoffset());
  52.  
  53. SELECT * FROM daty
  54.  
  55. Ćw 2
  56. SELECT sysdatetimeoffset();
  57.  
  58. Ćw 3
  59. SELECT YEAR(SYSUTCDATETIME()), MONTH(SYSUTCDATETIME()),  DAY(SYSUTCDATETIME());
  60.  
  61. Ćw 4
  62. SELECT  datename(MONTH, getdate()), datename(weekday, getdate());
  63.  
  64. ćw5
  65. SELECT eomonth(CURRENT_TIMESTAMP)
  66.  
  67. Ćw 6
  68. SELECT datediff (MONTH, '2015-03-22', '2016-05-08');
  69.  
  70. Ćw 7
  71. SELECT dateadd (DAY, 23, '2015-10-25')
  72.  
  73.  
  74. ----- SEQUENCE
  75. Ćw 1
  76. CREATE SEQUENCE basicSeq
  77.     START WITH 1
  78.     INCREMENT BY 1;
  79.  
  80. Ćw 2
  81. SELECT NEXT VALUE FOR basicSeq;
  82.  
  83. ćw 3
  84. CREATE TABLE Alfa
  85. (
  86.     nr INT,
  87.     litera VARCHAR(2)
  88. )
  89.  
  90. INSERT INTO Alfa VALUES ( NEXT VALUE FOR basicSeq, 'A')
  91. SELECT * FROM Alfa
  92.  
  93. Ćw 4
  94. SELECT * FROM sys.sequences
  95.         WHERE name='basicSeq';
  96.  
  97. ćw 5
  98. CREATE SEQUENCE advancedSeq AS BIGINT
  99.     START WITH 5
  100.         INCREMENT BY 7
  101.         minvalue 5
  102.         maxvalue 6000
  103.  
  104.     SELECT * FROM sys.sequences
  105.         WHERE name='advancedSeq';
  106.  
  107.  
  108.  
  109. ----- VIEW
  110. Ćw 1
  111. CREATE VIEW basicView
  112. AS
  113. SELECT top 3 Nazwisko, Imie, SUM(Brutto) wynagrodzenie
  114. FROM Osoby o
  115. JOIN Zarobki z ON o.IdOsoby=z.IdOsoby
  116. GROUP BY Nazwisko, Imie
  117. ORDER BY wynagrodzenie DESC
  118.  
  119. SELECT * FROM basicView
  120.  
  121. Ćw 2
  122. ALTER VIEW basicView AS
  123. SELECT top 10 Nazwisko, Imie, SUM(Brutto) wynagrodzenie
  124. FROM Osoby o
  125. JOIN Zarobki z ON o.IdOsoby=z.IdOsoby
  126. GROUP BY Nazwisko, Imie
  127. ORDER BY wynagrodzenie ASC
  128.  
  129. SELECT * FROM basicView
  130.  
  131. Ćw 3
  132. CREATE VIEW moreBasicView AS
  133.     SELECT top 20 Nazwisko, Imie, RokUrodz FROM Osoby
  134.     ORDER BY Nazwisko ASC
  135.  
  136. SELECT * FROM moreBasicView;
  137.  
  138. Ćw 4
  139. UPDATE moreBasicView
  140. SET Nazwisko = 'BARDEN' WHERE Nazwisko = 'CAT'
  141.  
  142. Ćw 5
  143. CREATE VIEW KlienciMiastaFaktury AS
  144.     SELECT k.Nazwisko + ' ' + k.Imie AS [nazwisko_imie], m.Miasto, COUNT(f.IdFaktury) [liczba_faktur] FROM Klienci k
  145.     JOIN Miasta m ON m.IdMiasta = k.IdMiasta
  146.     JOIN Faktury f ON f.IdKlienta = k.IdKlienta
  147.     GROUP BY  k.Nazwisko, k.Imie, m.Miasto;
  148. SELECT * FROM KlienciMiastaFaktury;
  149.  
  150. Ćw 6
  151. CREATE VIEW LiczbaTowarowProducenta
  152. AS
  153.     SELECT p.NazwaProducenta, COUNT(t.IdTowaru) liczba_towarow FROM Producenci p
  154.     JOIN Towar t ON t.IdProducenta=p.IdProducenta
  155.     GROUP BY p.NazwaProducenta;
  156. SELECT * FROM LiczbaTowarowProducenta
  157.  
  158. Ćw 7
  159. WITH Zbior AS (
  160.     SELECT o.Nazwisko, o.Imie, o.RokUrodz, o.Wzrost, SUM(z.Brutto) suma
  161.     FROM Osoby o
  162.     JOIN Zarobki z ON z.IdOsoby= o.IdOsoby
  163.     GROUP BY o.Nazwisko, o.Imie, o.RokUrodz, o.Wzrost
  164. )
  165.  
  166. SELECT  avg(suma) FROM Zbior z;
  167.  
  168.  
  169. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  170. CREATE TABLE dataiczas
  171. (
  172.     d DATE,
  173.     t TIME,
  174.     dts smalldatetime,
  175.     dt datetime2
  176. );
  177.  
  178. INSERT INTO dataiczas VALUES(getdate(), getdate(), getdate(), getdate() );
  179.  
  180. SELECT *FROM dataiczas;
  181.  
  182. SELECT YEAR(getdate()), MONTH(getdate()),  DAY(getdate());
  183.  
  184. SELECT  datename(YEAR, getdate()),
  185.         datename(MONTH, getdate()),
  186.         datename(DAY, getdate()),
  187.         datename(dayofyear, getdate()),
  188.         datename(weekday, getdate());
  189.  
  190. SELECT  datepart(YEAR, getdate()),
  191.         datepart(MONTH, getdate()),
  192.         datepart(DAY, getdate()),
  193.         datepart(dayofyear, getdate()),
  194.         datepart(weekday, getdate());
  195.  
  196. SELECT datediff (MONTH, '2016-04-17', getdate()), datediff (DAY, '2016-04-24', getdate());
  197.  
  198. SELECT dateadd (MONTH, 1, '2016-05-13'),
  199.         dateadd (DAY, 11, getdate() );
  200.  
  201. SELECT datefromparts(2016, 2, 4)
  202.  
  203. SELECT eomonth (getdate(), 3);
  204.  
  205. SELECT  @@servername AS 'Server Name',
  206.         @@servicename AS 'service name',
  207.         @@version AS 'sql version',
  208.         @@LANGUAGE AS 'lengłydż';
  209.  
  210. /*identity (seed, increment) */
  211.  
  212. CREATE TABLE test_ident(
  213.     nr INT IDENTITY,
  214.     nazwa VARCHAR(50)
  215. );
  216.  
  217. INSERT INTO test_ident(nazwa) VALUES ('ksiazka');
  218.  
  219. SET identity_insert Studia.dbo.test_ident ON
  220. INSERT INTO test_ident(nr, nazwa) VALUES (5, 'cd');
  221. SET identity_insert Studia.dbo.test_ident OFF
  222.  
  223. SELECT * FROM test_ident;
  224.  
  225. SELECT ident_current('test_ident');
  226.  
  227. ///////////////////////////////////////////////////////
  228. USE BazaRelacyjna;
  229. CREATE SEQUENCE seq_test1
  230.     START WITH 1
  231.     INCREMENT BY 1;
  232.  
  233. CREATE SEQUENCE seq_test2 AS SMALLINT
  234.     START WITH 1
  235.         INCREMENT BY 1;
  236.  
  237.  
  238.         SELECT * FROM sys.sequences
  239.         WHERE name='seq_test2';
  240. SELECT NEXT VALUE FOR seq_test1;
  241.  
  242. CREATE TABLE t1 (nr INT, nazwa VARCHAR(50));
  243. CREATE TABLE t2 (nr INT, nazwa VARCHAR(50));
  244.  
  245. INSERT INTO t1 VALUES ( NEXT VALUE FOR seq_test1, 'val1'), (NEXT VALUE FOR seq_test1, 'val2');
  246. INSERT INTO t2 VALUES ( NEXT VALUE FOR seq_test1, 'elem');
  247.  
  248. SELECT * FROM t1;
  249. SELECT *FROM t2;
  250.  
  251. ALTER SEQUENCE seq_test1
  252. restart WITH 0;
  253.  
  254. ALTER SEQUENCE seq_test2
  255. restart WITH 122
  256. INCREMENT  BY 2
  257. minvalue 122
  258. maxvalue 2000
  259.  
  260. SELECT * FROM sys.sequences
  261.         WHERE name='seq_test2';
  262.  
  263. DROP SEQUENCE seq_test1, seq_test2;
  264.  
  265.  
  266. /////////////////////////////////////////////////////////////
  267. WITH Zbior AS (
  268.     SELECT d.Opis, o.Nazwisko, o.Imie
  269.     FROM Osoby o
  270.     JOIN Dzialy d ON d.idDzialu = o.idDzialu
  271. )
  272. SELECT Zbior.Opis, Zbior.Nazwisko, Zbior.Imie FROM Zbior
  273. JOIN Klienci k ON k.Nazwisko = Zbior.Nazwisko
  274.  
  275.  
  276. WITH Poziomy AS
  277. (
  278.     SELECT idOsoby, idSzefa, Nazwisko, Imie, 0 AS lev
  279.     FROM Osoby WHERE idSzefa IS NULL
  280.         UNION ALL
  281.     SELECT o.IdOsoby, o.IdSzefa, o.Nazwisko, o.Imie, lev + 1 FROM Osoby o
  282.     INNER JOIN poziomy p ON o.IdSzefa = p.IdOsoby
  283. )
  284. SELECT lev, Nazwisko, Imie FROM Poziomy;
  285.  
  286. ////////////////////////////////////////////////////////
  287. CREATE VIEW osoby_dzialy AS
  288. SELECT d.Opis, o.IdOsoby, o.Nazwisko, o.Imie
  289. FROM Osoby o
  290. JOIN Dzialy d ON d.IdDzialu = o.IdDzialu
  291.  
  292. ALTER VIEW osoby_dzialy AS
  293. SELECT d.Opis, o.Nazwisko
  294. FROM Osoby o
  295. JOIN Dzialy d ON d.IdDzialu = o.IdDzialu
  296.  
  297. SELECT * FROM osoby_dzialy
  298.  
  299. UPDATE osoby_dzialy
  300. SET Opis = 'Nowy dzial' WHERE Opis = 'Inny'
  301.  
  302.  
  303. CREATE VIEW widok1
  304. AS
  305. SELECT Nazwisko FROM Osoby;
  306.  
  307. INSERT INTO widok1 VALUES('Kowalska');
  308. SELECT * FROM widok1;
  309. DELETE FROM widok1
  310. WHERE Nazwisko = 'Kowalska';
  311.  
  312. DROP VIEW widok1;
Add Comment
Please, Sign In to add comment