Advertisement
S_Madanska

INTRO 29.09.22

Jan 5th, 2022 (edited)
1,235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 19.30 KB | None | 0 0
  1. --ЕДНОРЕДОВ КОМЕНТАР
  2. /*
  3. МНОГОРЕДОВ
  4. КОМЕНТАР
  5. */
  6.  
  7. ---------------------ЗАДАЧА 1: -------------------------
  8.  
  9. ----------------------------------------------
  10. ---------------1 DDL--------------------------
  11. ----------------------------------------------
  12.  
  13. --1.1 СЪЗДАВАНЕ НА БАЗА ДАННИ
  14. CREATE DATABASE MY_FISRT_DB
  15.  
  16. ---------------------------------
  17. --1.2 ИЗПОЛЗВАНЕ НА КОНКРЕТНА БАЗА ДАННИ
  18. USE  MY_FISRT_DB
  19. ---------------------------------
  20.  
  21. --1.3 СЪЗДАВАНЕ НА ТАБЛИЦА
  22. CREATE TABLE STUDENTS
  23. (
  24.     F_NUM VARCHAR(15) NOT NULL,
  25.     NAME VARCHAR(50) NOT NULL,
  26.     PHONE VARCHAR(15) NULL
  27. )
  28. ---------------------------------
  29.  
  30. --1.4 ДОБАВЯНЕ НА КОЛОНА
  31. ALTER TABLE STUDENTS
  32. ADD ADDRESS VARCHAR(50) --DEFAULT IS NULL
  33.  
  34. ---------------------------------
  35.  
  36. --1.5 ПРОМЯНА НА ТИПА НА КОЛОНА
  37. ALTER TABLE STUDENTS
  38. ALTER COLUMN ADDRESS TEXT
  39.  
  40. ---------------------------------
  41.  
  42. ---1.6 ИЗТРИВАНЕ НА КОЛОНА
  43. ALTER TABLE STUDENTS
  44. DROP COLUMN PHONE
  45.  
  46. ---------------------------------
  47.  
  48. --1.7 ИЗТРИВАНЕ НА ТАБЛИЦА
  49. DROP TABLE STUDENTS
  50.  
  51. ---------------------------------
  52.  
  53. --1.8 ИЗТРИВАНЕ НА БАЗА ДАННИ
  54. DROP DATABASE  MY_FISRT_DB
  55.  
  56. --------------------------------------------------
  57. --------------------------------------------------
  58. --------------------------------------------------
  59.  
  60. --1.9 СЪЗДАВАНЕ НА БАЗА ДАННИ
  61. CREATE DATABASE MY_FISRT_DB
  62.  
  63. ---------------------------------
  64.  
  65. --1.10 ИЗПОЛЗВАНЕ НА БАЗА ДАННИ
  66. USE  MY_FISRT_DB
  67.  
  68. ---------------------------------
  69.  
  70. --1.11 СЪЗДАВАНЕ НА ТАБЛИЦА
  71. CREATE TABLE STUDENTS
  72. (
  73.     F_NUM VARCHAR(15) NOT NULL,
  74.     NAME VARCHAR(50) NOT NULL,
  75.     PHONE VARCHAR(15),
  76.     GENDER CHAR(1) NULL DEFAULT 'M' CHECK(GENDER IN ('M','F'))
  77. )
  78.  
  79. ----------------------------------------------
  80. ---------------2 DML--------------------------
  81. ----------------------------------------------
  82. --2.1 ДОБАВЯНЕ НА ЗАПИСИ:
  83.  
  84. --2.1.1.NULLABLE COLUMNS МОЖЕ ДА СЕ ПРОПУСКАТ ПРИ
  85. --      ВЪВЕЖДАНЕ НА СТОЙНОСТИ:
  86. INSERT INTO STUDENTS(F_NUM, NAME, PHONE)
  87. VALUES('100', 'IVAN IVANOV', '0324567')
  88.  
  89. ---------------------------------
  90.  
  91. --2.1.2 КОГАТО НЕ СПОМЕНАВАМЕ В КОИ КОЛОНИ ВЪВЕЖДАМЕ
  92. --      СЕ ПОДРАЗБИРАТ ВСИЧКИ:
  93. INSERT INTO STUDENTS
  94. VALUES('101', 'IVAN ILIEV', '0324567',  NULL)
  95.  
  96. ---------------------------------
  97.  
  98. --2.1.3 ВЪВЕЖДАНЕ НА ПОВЕЧЕ ОТ 1 РЕДА НАВЕДНЪЖ
  99. INSERT INTO STUDENTS(F_NUM, NAME, PHONE,  GENDER)
  100. VALUES('102', 'IVA MARINOVA',     '032/ 456 767',  'F'),
  101.       ('103', 'GEORGI APOSTOLOV', '0892 456 768', DEFAULT),
  102.       ('104', 'MIRA STOEVA',      '+359 596 668', 'F'),
  103.       ('105', 'MARIYA ILIEVA',    '0895667678',  NULL),
  104.       ('105', 'MARIYA ILIEVA',    '0894566768',  NULL),
  105.       ('106', 'PETAR PETROV',     NULL,           'M')
  106.  
  107. ---------------------------------
  108.  
  109. --2.2.1  ПРОМЕНИ ИМЕТО НА СТУДЕНТ С F_NUM ='104'
  110. UPDATE STUDENTS
  111. SET NAME = 'MIRA STOEVA-PETKOVA'
  112. WHERE F_NUM = '104'
  113.  
  114. ---------------------------------
  115.  
  116. --2.2.2  ПРОМЕНИ  ТЕЛ. НА СТУДЕНТ С F_NUM ='102'
  117. UPDATE STUDENTS
  118. SET PHONE = '032 455 675'
  119. WHERE F_NUM = '102'
  120.  
  121.  
  122. --PK МОЖЕ ДА СЕ ДОБАВИ ВПОСЛЕДСТВИЕ СТИГА КОЛОНАТА ДА Е NOT NULL
  123. --И ЗАПИСИТЕ В НЕЯ ДА НЕ СЕ ДУБЛИРАТ
  124. ALTER TABLE STUDENTS
  125. ADD CONSTRAINT PK_STUDENTS PRIMARY KEY (F_NUM)
  126.  
  127. --> виж грешката ->
  128. ---поради дублирането на едниквите стойности в колоната, която
  129. ---целим в бъдеще да е уникална, не можем да дефинираме PK -->
  130. ---затова изтриваме дублиращите се клетки в атрибут/колона "F_NUM"
  131.  
  132. ---------------------------------
  133.  
  134. --2.3.1 ИЗТРИЙ СТУДЕНТ С F_NUM = '105'
  135. DELETE FROM STUDENTS
  136. WHERE F_NUM = '105'
  137.  
  138.  
  139. --вече може да бъде създаден primary key:
  140. ALTER TABLE STUDENTS
  141. ADD CONSTRAINT PK_STUDENTS PRIMARY KEY (F_NUM)
  142. ---------------------------------
  143.  
  144. --2.4.1 ИЗВЛИЧАНЕ НА ВСИЧКИ КОЛОНИ
  145. SELECT * FROM STUDENTS
  146.  
  147. ---------------------------------
  148.  
  149. --2.4.2 ИЗВЛИЧАНЕ НА ИМЕ И ТЕЛЕФОН, ПРИ СТУДЕНТИ С ПОЛ МЪЖ,
  150. --ИМАЩИ СТОЙНОСТ В КОЛОНАТА ЗА ТЕЛЕФОН
  151. SELECT NAME, PHONE
  152. FROM STUDENTS
  153. WHERE GENDER = 'M' AND PHONE IS NOT NULL
  154.  
  155.  
  156. ----------------------------------------------------------------------
  157. --1. Функции за преобразуване на типове
  158. ----------------------------------------------------------------------
  159. --Пояснение към примерите:
  160.     -- expression – валиден израз, резултатът от който да бъде преобразуван;
  161.     -- string_value - nvarchar(4000) стойност, представяща форматираната стойност, която
  162.     --да бъде преобразувана;
  163.     -- data_type – тип, към който се прави преобразуване;
  164.     -- length – опционен параметър за символните типове данни (низове);
  165.     -- style – стил, използван при преобразуване на дати в низове;
  166.     -- culture – опционен низ, който идентифицира как стойността на string_value да бъде форматирана.
  167.  
  168. ----------CAST (expression AS data_type [ ( length ) ]) ;
  169. -- преобразува стойност (от който и да е тип) в специфициран тип
  170. SELECT CAST(10.3496847 AS money)
  171.  
  172. ----------CONVERT (data_type [ ( length ) ] , expression [ , style])
  173. -- преобразува стойност (от който и да е тип) в специфициран тип
  174. SELECT CONVERT(varchar, GETDATE(), 103)
  175. SELECT CONVERT(datetime, '2019-08-25', 105) -- out-of-range value.
  176. SELECT CONVERT(datetime, '2019-25-08', 105)
  177.  
  178. ----------PARSE (string_value AS data_type [ USING culture ])
  179. -- връща резултата от израз, преведен в искания тип данни          
  180. SELECT PARSE('08/17/2019' AS datetime2) AS Result;
  181. SELECT PARSE('Saturday, 17 August 2019' AS date USING 'en-US') AS Result;
  182. SELECT PARSE('Sat, 17 August 2019' AS date USING 'en-US') AS Result;
  183.  
  184. ------------TRY_CAST (expression AS data_type [ ( length ) ])
  185. --връща стойност, подадена към посочения тип данни, ако промяната успее; в противен случай връща null
  186. SELECT TRY_CAST('08/17/2019' AS date);
  187. SELECT TRY_CAST('08/17/2019 09:54:45' AS date) AS Result;
  188. SELECT TRY_CAST('08/17/2019 09:54:45' AS datetime) AS Result;
  189. SELECT TRY_CAST('08/17/2019 09:54:45' AS datetime2) AS Result;
  190.  
  191. ------------TRY_CONVERT (data_type [ ( length ) ], expression [, style ])
  192. --връща стойност, подадена към посочения тип данни, ако промяната успеe; в противен случай връща null.
  193. SELECT TRY_CONVERT(VARCHAR(15),'08/17/2019',101);
  194. SELECT TRY_CONVERT(date, '08/17/2019') AS Result;
  195. SELECT TRY_CONVERT(date, '08/17/2019 10:05:20') AS Result;
  196. SELECT TRY_CONVERT(datetime, '08/17/2019 10:05:20') AS Result;
  197. SELECT TRY_CONVERT(datetime2, '08/17/2019 10:05:20') AS Result;
  198.  
  199. ------------TRY_PARSE (string_value AS data_type [ USING culture ])
  200. --преобразува израз от string към date/time и number types
  201. SELECT TRY_PARSE('08/17/2019' AS date USING 'en-us');
  202. SELECT TRY_PARSE('08/17/2019 10:18:10 AM' AS date USING 'en-us');
  203.  
  204. SELECT TRY_PARSE('08/17/2019 10:18:10 AM' AS datetime USING 'en-us');
  205. SELECT TRY_PARSE('08/17/2019 10:18:10 AM' AS datetime2 USING 'en-us');
  206.  
  207. ----------------------------------------------------------------------
  208. --2. Функции за дата
  209. ----------------------------------------------------------------------
  210. ------------CURRENT_TIMESTAMP – връща системната дата на сървъра в тип DATETIME;
  211. SELECT CURRENT_TIMESTAMP AS current_date_time;
  212. SELECT CONVERT(char(25), CURRENT_TIMESTAMP) as System_date;
  213.  
  214. ------------GETUTCDATE() – връща текущото UTC време, изчислява се от
  215. --операционната система, на която работи сървъра, в тип DATETIME;
  216. select getutcdate() as System_date;
  217.  
  218. ------------GETDATE() – връща системната дата на сървъра в тип DATETIME;
  219. select getdate()
  220.  
  221. ------------SYSDATETIME() – връща системната дата на сървъра в тип DATETIME2;
  222. SELECT CONVERT (date, SYSDATETIME()) as Date,
  223.        CONVERT (time, SYSDATETIME()) as Time,
  224.        SYSDATETIME() as SysDateTime;
  225.  
  226. ------------SYSUTCDATETIME() – връща текущото UTC време на сървъра в тип DATETIME2;
  227. SELECT CONVERT (date, SYSUTCDATETIME()) as Date,
  228.         CONVERT (time, SYSUTCDATETIME()) as Time,
  229.         SYSDATETIME() as SysDateTime,
  230.         SYSUTCDATETIME() as SysUtcDateTime
  231.  
  232. ------------SYSDATETIMEOFFSET() – връща системната дата и часовия пояс на сървъра в тип DATETIMEOFFSET;
  233. SELECT CONVERT (date, SYSDATETIMEOFFSET()) as Date,
  234.         CONVERT (time, SYSDATETIMEOFFSET()) as Time,
  235.         SYSDATETIMEOFFSET() as SysDateTimeOffSet;
  236.  
  237. ------------DATEADD (datepart, number, date) – връща дата, образувана чрез добавяне към
  238. --датата date, number на брой части datepart;
  239. SELECT DATEADD(year, 1, '2020/08/25') AS DateAdd
  240.  
  241. --DATEDIFF (datepart , startdate , enddate) – връща число, разликата в части от вид
  242. --datepart, между две дати;
  243. SELECT DATEDIFF(MONTH, '2019/08/25', '2018/08/25') AS DateDiff
  244.  
  245. --DATEDIFF_BIG (datepart, startdate, enddate) – връща число, разликата в части от вид
  246. --datepart, между две дати, като върнатото число е от тип BIGINT;
  247. SELECT DATEDIFF_BIG(year,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
  248. SELECT DATEDIFF_BIG(quarter,     '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
  249. SELECT DATEDIFF_BIG(month,       '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
  250. SELECT DATEDIFF_BIG(dayofyear,   '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
  251. SELECT DATEDIFF_BIG(day,         '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
  252. SELECT DATEDIFF_BIG(week,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
  253. SELECT DATEDIFF_BIG(hour,        '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
  254. SELECT DATEDIFF_BIG(minute,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
  255. SELECT DATEDIFF_BIG(second,      '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
  256. SELECT DATEDIFF_BIG(millisecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
  257.  
  258. /*DATENAME (datepart, date) – връща като низ съдържанието на конкретна част от
  259. дата. Напр. February, ако месеца в date е февруари и datepart е mm;*/
  260. SELECT DATENAME(month, '2017/08/25') AS DatePartString
  261.  
  262. /*DATEPART (datepart, date) – връща като число съдържанието на конкретна част от
  263. дата. Напр. 2, ако месеца в date е февруари и datepart е mm;*/
  264. SELECT DATEPART(year, '2017/08/25') AS DatePartInt
  265.  
  266. --DAY (date) – връща като число ден от определена дата;
  267. SELECT DAY('2014-02-22') as Day_1,
  268.         DAY('2014-02-22 08:23:49.1234567 +07:10') as Day_2,
  269.         DAY(SYSDATETIME()) as Day_3;
  270.  
  271. --MONTH (date) – връща като число месец от определена дата;
  272. SELECT MONTH('2014-03-01') as Month_1,
  273.         MONTH('2014-03-01 08:38:49.1234567 +07:10') as Month_2,
  274.         MONTH(SYSDATETIME()) as Month_3;
  275.  
  276. --YEAR (date) – връща като число година от определена дата.
  277. SELECT YEAR('2014-03-01') as Result_1,
  278.         YEAR('2014-03-01 17:01:25.1234567 +07:10') as Result_2,
  279.         YEAR(SYSDATETIME()) as Result_3;
  280.  
  281. ----------------------------------------------------------------------------------------------------
  282. --3. Математически функции
  283. ----------------------------------------------------------------------------------------------------
  284. --ABS (numeric_expression) – връща абсолютна стойност, променя отрицателните
  285. --стойности в положителни стойности;
  286. SELECT Abs(-243.5) AS AbsNum;
  287.  
  288. --DEGREES (numeric_expression) – връща съответния ъгъл в градуси, по зададени
  289. --радиани;
  290. SELECT DEGREES(1.5);
  291.  
  292. --RAND ([seed]) – генератор на случайни числа между 0 и 1 или цяло ако е указано
  293. --цялото число seed;
  294. SELECT RAND()
  295.  
  296. --ROUND (numeric_expression, length [, function]) – връща числова стойност,
  297. --закръглена до определена дължина или точност;
  298. SELECT ROUND(235.415, 2) AS RoundValue;
  299.  
  300. --SQRT (float_expression) – връща корен квадратен на зададеното число;
  301. SELECT SQRT(121);
  302.  
  303. --PI() – връща стойността на числото Пи.
  304. SELECT pi() as [Pi number]
  305.  
  306. --SQUARE (float_expression) – връща квадрат на посочената стойност;
  307. SELECT SQUARE(11);
  308.  
  309. --POWER (float_expression , y) – връща стойността на посоченото число на посочената
  310. --степен;
  311. SELECT POWER(4, 2)
  312.  
  313. ----------------------------------------------------------------------------------------------------
  314. --4. Функции за работа с низове
  315. ----------------------------------------------------------------------------------------------------
  316.  
  317. --CONCAT (string_value1, string_value2 [, string_valueN])
  318. -- – връща низ, който е резултат от конкатенацията
  319. -- или сливането на два или повече низа;
  320. SELECT CONCAT ('Ivan', ' ','Asenov') AS FullName;
  321. --LEN (string_expression) – връща броя символи в низа;
  322.  
  323. --LTRIM (character_expression) – премахва интервалите в началото на низа;
  324. SELECT LTRIM('          Four spaces are after the period in this sentence.            ') + 'Next string.'
  325. --RTRIM (character_expression) – премахва интервалите в края на низа;
  326. SELECT RTRIM('          Four spaces are after the period in this sentence.            ') + 'Next string.'
  327. --TRIM(character_expression) – премахва интервалите в началото и края на низа;
  328. SELECT TRIM('          Four spaces are after the period in this sentence.            ') + 'Next string.'
  329.  
  330. --REPLACE (string_expression, string_pattern , string_replacement) – заменя всички
  331. --съвпадения на определен низ с друг низ;
  332. SELECT REPLACE('abcD','abc','3');
  333.  
  334. --REVERSE (character_expression) – обръща низа;
  335. SELECT REVERSE('SQL Tutorial')
  336.  
  337. --SUBSTRING (expression, start, length) – връща част от символен или бинарен израз;
  338. SELECT SUBSTRING('SQL Tutorial', 2, 3) AS ExtractString
  339.  
  340. --LOWER (character_expression) – връща низа, като преобразува главните букви в малки;
  341. SELECT LOWER('SQL Tutorial is FUN!')
  342. --UPPER (character_expression) – връща низа, като преобразува малките букви в главни;
  343. SELECT UPPER('SQL Tutorial is FUN!')
  344.  
  345. ----------------------------------------------------------------------------------------------------
  346. --5.    Системни функции
  347. ----------------------------------------------------------------------------------------------------
  348. --ISNULL (expression, replacement) – ако параметърът expression бъде изчислен до
  349. --NULL, той се заменя от израза replacement;
  350. SELECT ISNULL(NULL, 'W3Schools.com');
  351.  
  352. --ISNUMERIC (expression) – връща 1, ако изразът се изчислява до числов тип, и 0 - в противен случай;
  353. SELECT ISNUMERIC(4567);
  354.  
  355. --IIF (boolean_expression, true_value, false_value) – изчислява първия аргумент и връща
  356. --втория аргумент, ако първият аргумент е true, в противен случай връща втория аргумент;
  357. SELECT IIF(500<1000, 'YES', 'NO');
  358.  
  359. --HOST_NAME() – връща името на работната станция;
  360. --select HOST_NAME() as Host_name;
  361.  
  362. --HOST_ID() – връща идентификатора на работната станция. Идентификационният
  363. --номер на работната станция е идентификационният номер на процеса (PID) на
  364. --приложението на клиентския компютър, който се свързва към SQL Server.
  365. --select HOST_ID() as Host_number;
  366.  
  367. ----любознателните могат да намерят още примери тук: tsql.info;  w3schools.com
  368.  
  369.  
  370.  
  371.  
  372. ---------------------ЗАДАЧА 2: -------------------------
  373.  
  374. --Задача 2-1. Да се създаде база от данни с име TESTDB.
  375.  
  376.  CREATE DATABASE TESTDB
  377.  USE TESTDB
  378.  
  379. --Задача 2-2. Да се създаде таблица в тази база данни с име COUNTRIES и следните колони:
  380. --country_code – с тип char(3);
  381. --name – тип varchar(40);
  382. --population – тип int.
  383.  
  384. CREATE TABLE COUNTRIES
  385. (
  386.     country_code char(3) not null,
  387.     name varchar(40) not null,
  388.     population  int,
  389.     constraint pk_COUNTRIES PRIMARY KEY (country_code)
  390. )
  391.  
  392. --Задача 2-3.
  393. --Да се добави нов атрибут в таблицата COUNTRIES
  394. --с име phone_code, което да съдържа цели числа до 3 цифри.
  395.  
  396.  ALTER TABLE COUNTRIES
  397.  ADD phone_code char(3)
  398.  
  399. --Задача 2-4. Да се добави ред в таблицата COUNTRIES със следните данни:
  400. --country_code: BGR;
  401. --name: Bulgaria;
  402. --population: 7500000;
  403. --phone_code: 359.
  404.  
  405. insert into COUNTRIES(country_code, name, population, phone_code)
  406. values('BGR', 'Bulgaria', 7500000, '359')
  407.  
  408. --Задача 2-5. Да се промени населението на България на 6 милиона.
  409.  
  410. UPDATE COUNTRIES
  411. SET population = 6000000
  412. WHERE country_code ='BGR'
  413.  
  414. --Задача 2-6. Да се изтрият всички редове в таблицата COUNTRIES.
  415.  
  416. DELETE FROM COUNTRIES
  417.  
  418. --Задача 2-7. Да се изтрие таблицата COUNTRIES от базата данни.
  419.  
  420. DROP TABLE COUNTRIES
  421.  
  422. --Задача 2-8. Да се изтрие базата данни TESTDB.
  423.  
  424. DROP DATABASE TESTDB
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement