Advertisement
shek_shek

Database

Mar 26th, 2015
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 27.73 KB | None | 0 0
  1. USE [Basketball]
  2.  
  3. CREATE TABLE basketball_league (
  4.         id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  5.         name nvarchar (100),
  6.         number_of_teams INT,
  7.         region nvarchar (100)
  8. )
  9.  
  10. CREATE TABLE date_match (
  11.         id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  12.         date_day INT,
  13.         date_month INT,
  14.         date_year INT,
  15.         date_hour INT,
  16.         date_minute INT
  17. )
  18.  
  19. CREATE TABLE basketball_club (
  20.         id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  21.         name nvarchar (50),
  22.         country nvarchar (50),
  23.         city nvarchar (50),
  24.         club_budget INT,
  25.         id_in_basketball_league INT FOREIGN KEY REFERENCES basketball_league(id)
  26. )
  27.  
  28. CREATE TABLE color_team (
  29.         id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  30.         home_color nvarchar(100),
  31.         guest_color nvarchar(100),
  32.         id_basketbal_club INT FOREIGN KEY REFERENCES basketball_club(id)
  33. )
  34.  
  35. CREATE TABLE club_president (
  36.         id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  37.         name nvarchar (100),
  38.         wage INT,
  39.         id_basketball_club INT FOREIGN KEY REFERENCES basketball_club(id)
  40. )
  41.  
  42. CREATE TABLE club_coach (
  43.         id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  44.         name nvarchar (100),
  45.         wage INT,
  46.         id_basketball_club INT FOREIGN KEY REFERENCES basketball_club(id)
  47. )
  48.  
  49. CREATE TABLE club_players (
  50.         id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  51.         name nvarchar (100),
  52.         nation nvarchar(50),
  53.         wage INT,
  54.         id_basketball_club INT FOREIGN KEY REFERENCES basketball_club(id),
  55. )
  56.  
  57. CREATE TABLE transfer_market (
  58.         id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  59.         price INT,
  60.         id_basketbal_club_from INT FOREIGN KEY REFERENCES basketball_club(id),
  61.         id_basketbal_club_to INT FOREIGN KEY REFERENCES basketball_club(id),
  62.         id_player INT FOREIGN KEY REFERENCES club_players(id),
  63.         id_date INT FOREIGN KEY REFERENCES date_match(id)
  64. )
  65.  
  66. CREATE TABLE schedule (
  67.         id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  68.         id_basketball_club_home INT FOREIGN KEY REFERENCES basketball_club(id),
  69.         id_basketball_club_guest INT FOREIGN KEY REFERENCES basketball_club(id),
  70.         id_date INT FOREIGN KEY REFERENCES date_match(id),
  71.         id_league INT FOREIGN KEY REFERENCES basketball_league(id)
  72. )
  73.  
  74. CREATE TABLE arena (
  75.         id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  76.         capacity INT,
  77.         name nvarchar (100),
  78.         id_basketbal_club INT FOREIGN KEY REFERENCES basketball_club(id)
  79. )
  80.  
  81. INSERT INTO basketball_league VALUES
  82. ('Высшая лига', 17 , 'Russia'),
  83. ('VTB United League', 16,'Europe')
  84.  
  85. INSERT INTO basketball_club VALUES
  86. ('Nymburk', 'Czech Republic', 'Nymburk', 1000, 2),
  87. ('CSKA', 'Russia', 'Moscow', 10000, 2),
  88. ('Khimki', 'Russia', 'Moscow Region', 3453, 2),
  89. ('Avtodor', 'Russia', 'Saratov', 2131, 2),
  90. ('Krasnye Krylia', 'Russia', 'Samara', 4533, 2),
  91. ('Строитель', 'Russia', 'Энгельс', 2342, 1),
  92. ('Динамо', 'Russia', 'Челябинск', 3453, 1),
  93. ('Рускон', 'Russia', 'Мордовия', 2342, 1),
  94. ('Муссон', 'Russia', 'Севастополь', 5765, 1),
  95. ('Союз', 'Russia', 'Заречный', 2342, 1)
  96.  
  97. INSERT INTO arena VALUES
  98. (11650, 'Tipsport Arena', 1),
  99. (13126, 'Megasport Arena', 2),
  100. (6200, 'Basketball Center', 3),
  101. (10000, 'FOK Zvezdny', 4),
  102. (3000, 'MTL Arena', 5),
  103. (200, 'ДК Дружба', 6),
  104. (300, 'ФОК Челяба', 7),
  105. (200, 'ДС Мордовия', 8),
  106. (400, 'ФОК Севастополь', 9),
  107. (200, 'ФОК Заречный', 10)
  108.  
  109. INSERT INTO club_president VALUES
  110. ('Miroslav Jansta', 100, 1),
  111. ('Andrey Vatutin', 200, 2),
  112. ('Dmitry Golubkov', 300, 3),
  113. ('Vladimir Rodionov', 400, 4),
  114. ('Vladislav Kapustin', 200, 5),
  115. ('Колесниченко Дмитрий', 400, 6),
  116. ('Лебенков Дмитрий', 200, 7),
  117. ('Осипов Дмитрий ', 100, 8),
  118. ('Двинянинов Роман ', 200, 9),
  119. ('Дранков Александр', 400, 10),
  120. ('колян', 400, 10)
  121.  
  122. INSERT INTO color_team VALUES
  123. ('Red', 'White', 1),
  124. ('Red', 'Blue', 2),
  125. ('Blue', 'Yellow', 3),
  126. ('Black', 'White', 4),
  127. ('Red', 'White', 5),
  128. ('White', 'Blue', 6),
  129. ('White', 'Red', 7),
  130. ('Blue', 'Red', 8),
  131. ('Black', 'Red', 9),
  132. ('Green', 'Yellow', 10)
  133.  
  134. INSERT INTO club_coach VALUES
  135. ('Kestutis Kemzura', 10, 1),
  136. ('Dimitrios Itoudis', 100, 2),
  137. ('Rimas Kurtinaitis', 20, 3),
  138. ('Sergey Mokin', 30, 4),
  139. ('Sergei Bazarevich', 25, 5),
  140. ('Кобылинский Андрей', 30, 6),
  141. ('Михайлов Александр ', 120, 7),
  142. ('Осипов Дмитрий ', 200, 8),
  143. ('Двинянинов Роман ', 90, 9),
  144. ('Филин Олег Игоревич', 80, 10)
  145.  
  146. INSERT INTO club_players VALUES
  147. (NULL, 'Cez', 50, 1),
  148. ('Stutz', 'USA', 70, 1),
  149. ('Burns', 'USA', 50, 1),
  150. ('Hruban', 'Cez', 40, 1),
  151. ('Svoboda', 'Cez', 50, 1),
  152. ('Raivo', 'Cez', 50, 1),
  153.  
  154. ('Strebkov', 'Russia', 500, 2),
  155. ('Fridzon', 'Russia', 250, 2),
  156. ('Khryapa', 'Russia', 70, 2),
  157. ('Hines', 'USA', 70, 2),
  158. ('Weems', 'USA', 120, 2),
  159.  
  160. ('Monia', 'Russia', 170, 3),
  161. ('Zakharov', 'Russia', 120, 3),
  162. ('Lauvergne', 'France', 80, 3),
  163. ('Pateev', 'Russia', 150, 3),
  164. ('Davis', 'USA', 60, 3),
  165.  
  166. ('Downs', 'USA', 170, 4),
  167. ('Fortson', 'USA', 120, 4),
  168. ('Fesenko', 'Ukrain', 80, 4),
  169. ('Klimenko', 'Russia', 150, 4),
  170. ('Chappel', 'USA', 60, 4),
  171.  
  172. ('Thomas', 'USA', 170, 5),
  173. ('Zuev', 'Russia', 120, 5),
  174. ('Kulagin', 'Russia', 80, 5),
  175. ('Wilson', 'Usa', 150, 5),
  176. ('Pushkov', 'Russia', 60, 5),
  177.  
  178. ('Барсуков', 'Россия', 170, 6),
  179. ('Кобылинский', 'Россия', 120, 6),
  180. ('Кольцов', 'Россия', 80, 6),
  181. ('Кубанкин', 'Россия', 150, 6),
  182. ('Жуканенко', 'Россия', 60, 6),
  183.  
  184. ('Баранов', 'Россия', 170, 7),
  185. ('Дедовец', 'Россия', 120, 7),
  186. ('Дубинин', 'Россия', 80, 7),
  187. ('Епанов', 'Россия', 150, 7),
  188. ('Зинченко', 'Россия', 60, 7),
  189.  
  190. ('Алферов', 'Россия', 170, 8),
  191. ('Амелин', 'Россия', 120, 8),
  192. ('Зубов', 'Россия', 80, 8),
  193. ('Загнойко', 'Россия', 150, 8),
  194. ('Ильенко', 'Россия', 60, 8),
  195.  
  196. ('Альмушев', 'Россия', 170, 9),
  197. ('Баранов', 'Россия', 120, 9),
  198. ('Кожетков', 'Россия', 80, 9),
  199. ('Макшев', 'Россия', 150, 9),
  200. ('Марченко', 'Россия', 60, 9),
  201.  
  202. ('Пимков', 'Россия', 170, 10),
  203. ('Попов', 'Россия', 120, 10),
  204. ('Усенко', 'Россия', 80, 10),
  205. ('Глажкий', 'Россия', 150, 10),
  206. ('Сазонов', 'Россия', 60, 10)
  207.  
  208. INSERT INTO date_match VALUES
  209. (14, 02, 2015, 13, 30),
  210. (15, 02, 2015, 18, 00),
  211. (14, 02, 2015, 16, 00),
  212. (15, 02, 2015, 22, 00),
  213. (21, 02, 2015, 14, 30),
  214. (22, 02, 2015, 17, 00),
  215. (21, 02, 2015, 20, 00),
  216. (22, 02, 2015, 20, 00),
  217. (17, 02, 2015, 20, 00),
  218. (18, 02, 2015, 22, 30)
  219.  
  220. INSERT INTO schedule VALUES
  221. (1, 2, 1, 1),
  222. (3, 4, 2, 1),
  223. (6, 7, 3, 2),
  224. (8, 9, 4, 2),
  225. (5, 1, 5, 1),
  226. (2, 3, 6, 1),
  227. (6, 9, 7, 2),
  228. (8, 10, 8, 2),
  229. (1, 7, 9, 1),
  230. (8, 2, 10, 2)
  231.  
  232.  
  233.  
  234. SELECT * FROM dbo.club_players WHERE club_players.wage > 100 -- все игроки с зарплатой больше 100
  235.  
  236. SELECT name, color_team.guest_color AS guest, color_team.home_color AS home FROM dbo.basketball_club JOIN color_team ON basketball_club.id = color_team.id AND
  237. (color_team.home_color = 'White' OR color_team.guest_color = 'White') -- клубы, у которых есть белая форма
  238.  
  239. SELECT * FROM basketball_club JOIN dbo.arena ON dbo.arena.id_basketbal_club = dbo.basketball_club.id AND
  240.  dbo.arena.capacity BETWEEN 10000 AND 50000
  241.  ORDER BY arena.capacity ASC -- все стадионы вместительности от 10000 до 50000
  242.  
  243. SELECT club_players.name, nation, club_players.wage
  244.  FROM dbo.club_players WHERE club_players.id_basketball_club <= 5 AND club_players.nation = 'USA'
  245.  ORDER BY  club_players.wage DESC, club_players.name ASC
  246. -- сортировка игроков из ВТБ лиги из USA по именам и зарплате
  247.  
  248. DECLARE @a INT = 1;
  249. WHILE @a < 11
  250.    BEGIN;
  251.           SELECT basketball_club.name, MAX(wage) AS MaxWage, MIN(wage) AS MinWage
  252.           FROM   club_players INNER JOIN basketball_club ON
  253.           club_players.id_basketball_club = @a AND basketball_club.id = @a
  254.           GROUP BY
  255.           basketball_club.name
  256.           SET @a = @a + 1;
  257.    END;
  258.    -- Для каждого клуба выводит минимальную и максимальную зарплату игрока
  259.  
  260.  
  261. SELECT name AS Player, nation AS 'National team'
  262. FROM dbo.club_players
  263. WHERE EXISTS(
  264.         SELECT * FROM basketball_league
  265.         WHERE basketball_league.name = 'VTB United League'
  266.         )
  267.  ORDER BY club_players.nation ASC
  268. -- вывести два поля: игрок и сборная  для игроков выступающих в VTB United League
  269.  
  270. SELECT name FROM club_players WHERE name LIKE 'К%' -- все игроки на букву К
  271.  
  272.  SELECT TOP (3) club_coach.name, wage, basketball_club.name AS Club, city  FROM
  273.   dbo.club_coach RIGHT JOIN basketball_club
  274.   ON (basketball_club.country = 'Russia' OR basketball_club.country = 'Россия') AND
  275.   basketball_club.id = club_coach.id_basketball_club ORDER BY wage DESC
  276. -- топ-3 тренеров по зарплате в России
  277.  
  278.  SELECT date_day, date_month, date_year, date_hour, date_minute, club_home.name AS Home,
  279.   club_guest.name AS Guest, club_home.city AS Place  FROM  date_match INNER JOIN
  280.   schedule ON date_match.id = schedule.id_date INNER JOIN
  281.   basketball_club AS club_home ON club_home.id = schedule.id_basketball_club_home INNER JOIN
  282.   basketball_club AS club_guest ON club_guest.id = schedule.id_basketball_club_guest
  283.   WHERE date_day > 1 OR date_month > 1 OR date_year >= 2015
  284.  -- все матчи после 1 января
  285.  
  286.  
  287. DECLARE @WageVTB INT, @WageHigh INT;
  288. SELECT @WageHigh = AVG(wage) FROM club_coach WHERE club_coach.id_basketball_club < 6
  289. SELECT @WageVTB = AVG(wage) FROM club_coach WHERE club_coach.id_basketball_club >= 6
  290. IF @WageVTB > @WageHigh
  291.         BEGIN;
  292.                 PRINT('Средняя зарплата в лиге ВТБ больше, чем в Высшей на ' +
  293.                 CAST(@WageVTB - @WageHigh AS nvarchar(10)) )
  294.         END;
  295. ELSE
  296.         BEGIN;
  297.                 PRINT('Средняя зарплата в Высшей лиге больше, чем в лиге ВТБ на ' +
  298.                  CAST(-@WageVTB + @WageHigh AS nvarchar(10)) )
  299.         END;
  300.  -- Сравнивание средней зарплаты тренеров в Англии и России
  301.  
  302.  SELECT club_coach.name AS Coach, basketball_club.name AS Club, city, club_budget, club_president.name AS President FROM club_coach
  303.    INNER JOIN basketball_club ON dbo.basketball_club.id = club_coach.id_basketball_club INNER JOIN club_president
  304.    ON club_president.id = basketball_club.id  ORDER BY club_budget DESC
  305.    -- клуб + тренер + президент клуба, сортировка по бюджету
  306.  GO
  307.  
  308.  
  309. CREATE TRIGGER arena_change ON arena AFTER UPDATE
  310.         AS
  311.         BEGIN
  312.         SET NOCOUNT ON;
  313.         PRINT(N'Наибольшая арена');
  314.         SELECT TOP(1) * FROM arena ORDER BY capacity DESC
  315.         END;
  316. GO
  317.  
  318. UPDATE arena SET capacity = 200000 WHERE arena.id = 1
  319.  
  320. SELECT * FROM transfer_market
  321. DECLARE @x INT = 1;
  322. SELECT TOP(1) @x += id FROM transfer_market ORDER BY id DESC
  323. DECLARE @tran_name nvarchar(10) = 'tran';
  324.  
  325. BEGIN TRAN @tran_name
  326. INSERT INTO transfer_market VALUES
  327. (1, 3, 4, 13, 3);
  328. GO
  329.  
  330. CREATE TRIGGER transfer_check ON transfer_market AFTER INSERT
  331.         AS
  332.         BEGIN
  333.                 SET NOCOUNT ON;
  334.                 DECLARE @pr INT = -1  , @bud INT = -1, @id_transfer INT;
  335.                 DECLARE @tran_name nvarchar(10) = 'tran';
  336.  
  337.                 SELECT @pr = price FROM transfer_market WHERE transfer_market.id = @id_transfer
  338.                 SELECT @bud = club_budget FROM transfer_market
  339.                 JOIN basketball_club ON basketball_club.id = transfer_market.id_basketbal_club_to AND transfer_market.id = @id_transfer
  340.                
  341.                 IF (@bud > @pr)
  342.                         BEGIN
  343.                                 PRINT(N'Трансфер прошёл успешно!');
  344.                         END
  345.                 ELSE
  346.                         BEGIN;
  347.                                 PRINT(N'Трансфер невозможен, денег клуба-покупателя недостаточно!')  
  348.                                 ROLLBACK TRAN @tran_name;
  349.                         END;
  350.         END;
  351. GO
  352.  
  353.  
  354. CREATE PROCEDURE Transfers
  355.         @price INT,
  356.         @club_from_id INT,
  357.         @club_to_id INT,
  358.         @player_id INT,
  359.         @date_id INT
  360. AS
  361.         BEGIN
  362.                 IF((SELECT id_basketball_club FROM club_players WHERE id = @player_id) != @club_from_id)
  363.                         PRINT(N'Трансфер невозможен! Игрок не принадлежит клубу!')
  364.                 ELSE  
  365.                         BEGIN
  366.                                 DECLARE @tran_name nvarchar(10) = 'tran';
  367.                                 BEGIN
  368.                                         TRAN @tran_name
  369.                                                 INSERT INTO transfer_market VALUES
  370.                                                 (@price,@club_from_id,@club_to_id,@player_id,@date_id)
  371.                                                 COMMIT TRANSACTION;
  372.                                                 UPDATE basketball_club SET club_budget = club_budget + @price WHERE id = @club_from_id;
  373.                                                 UPDATE basketball_club SET club_budget = club_budget - @price WHERE id = @club_to_id;
  374.                                                 UPDATE club_players SET id_basketball_club = @club_to_id WHERE id = @player_id;
  375.                         END;
  376.         END;
  377. GO
  378.  
  379.  
  380. EXECUTE Transfers 10000, 1, 2, 4, 3;
  381. SELECT * FROM basketball_club
  382. SELECT * FROM transfer_market
  383. SELECT * FROM club_players
  384. GO
  385.  
  386.  
  387. CREATE PROCEDURE add_coach
  388.         @wage INT,
  389.         @name nvarchar(100),
  390.         @id_in_club INT
  391. AS
  392.     BEGIN
  393.                 DECLARE @avg_wage INT, @budget INT, @old_wage INT ;
  394.                 SELECT @old_wage = wage FROM club_coach WHERE id = @id_in_club;
  395.                 SELECT @avg_wage = AVG(wage), @budget = club_budget FROM
  396.                         club_coach JOIN basketball_club ON
  397.                         basketball_club.id = club_coach.id_basketball_club WHERE club_coach.id = @id_in_club GROUP BY club_budget
  398.        
  399.                         IF (@wage > @budget / 2)
  400.                                 BEGIN
  401.                                         PRINT(N'Невозможно принять тренера!');
  402.                                 END
  403.                         ELSE
  404.                                 IF (@wage <= @avg_wage * 2)
  405.                                         BEGIN
  406.                                                 PRINT(N'Тренер принят на работу!');
  407.                                                 INSERT INTO club_coach VALUES (@name, @wage, @id_in_club)
  408.                                         END
  409.                                 ELSE
  410.                                         BEGIN
  411.                                                 PRINT(N'Принят со средней зараплатой по клубу!');
  412.                                                 INSERT INTO club_coach VALUES (@name, @avg_wage, @id_in_club)
  413.                                         END
  414.         END;
  415. GO
  416.  
  417.  
  418. EXECUTE  add_coach 500, 'CHADIN', 4;
  419. GO
  420.  
  421. SELECT * FROM club_coach
  422.  
  423.  
  424. CREATE VIEW people_in_club (People, Club)
  425. AS
  426.         SELECT 'Coach - ' + club_coach.name  AS People, basketball_club.name AS Club FROM club_coach
  427.     INNER JOIN basketball_club ON basketball_club.id = club_coach.id_basketball_club
  428.         UNION
  429.         SELECT 'President - ' + club_president.name  AS People, basketball_club.name AS Club FROM club_president
  430.     INNER JOIN basketball_club ON basketball_club.id = club_president.id_basketball_club
  431.         UNION
  432.         SELECT 'Player - ' + club_players.name  AS People, basketball_club.name AS Club FROM
  433.          basketball_club JOIN club_players ON club_players.id_basketball_club = basketball_club.id
  434. GO
  435.  
  436. SELECT * FROM people_in_club WHERE people_in_club.Club = 'Avtodor'
  437. GO
  438.  
  439.  
  440. CREATE VIEW russian_club
  441. AS
  442.         SELECT basketball_club.name AS name, club_coach.name AS coach, club_president.name AS president
  443.         FROM  basketball_club JOIN  club_coach ON basketball_club.id = club_coach.id_basketball_club
  444.         JOIN  club_president ON club_president.id_basketball_club = basketball_club.id AND basketball_club.country = 'Russia'
  445. GO
  446.  
  447. SELECT * FROM russian_club
  448. GO
  449.  
  450. SELECT * FROM basketball_club LEFT OUTER JOIN club_president ON basketball_club.id = club_president.id_basketball_club
  451.  
  452.  
  453. SELECT * FROM basketball_club RIGHT OUTER JOIN club_president ON basketball_club.id = club_president.id_basketball_club
  454.  
  455.  
  456. SELECT * FROM basketball_club FULL OUTER JOIN club_president ON basketball_club.id = club_president.id_basketball_club
  457.  
  458. SELECT club_coach.name FROM club_coach WHERE EXISTS (SELECT * FROM basketball_club WHERE club_coach.wage > 50)
  459.  
  460. SELECT club_coach.name, club_coach.wage FROM club_coach WHERE club_coach.wage IN (SELECT club_coach.wage FROM basketball_club WHERE club_coach.wage > 50)
  461.  
  462. SELECT club_coach.name, club_coach.wage FROM club_coach WHERE 100 = ANY (SELECT club_coach.wage FROM club_coach)
  463.  
  464. SELECT club_coach.name, club_coach.wage FROM club_coach WHERE club_coach.wage >=  ALL (SELECT club_coach.wage FROM club_coach)
  465.  
  466. SELECT club_players.name, club_players.wage FROM club_players WHERE club_players.wage BETWEEN 0 AND 50
  467.  
  468. SELECT * FROM club_coach WHERE club_coach.name LIKE 's%';
  469.  
  470. SELECT   club_players.name, club_players.wage, verdict =
  471.       CASE
  472.          WHEN club_players.wage = 0 THEN 'very little'
  473.          WHEN club_players.wage < 10  THEN 'little'
  474.          WHEN club_players.wage >= 10 AND club_players.wage < 50 THEN 'normal'
  475.          WHEN club_players.wage > 50 AND club_players.wage < 100 THEN 'many'
  476.          ELSE 'lots of'
  477.       END
  478. FROM club_players;
  479.  
  480. SELECT CAST(club_players.wage AS MONEY) / 12 FROM club_players WHERE club_players.wage > 100
  481.  
  482. SELECT CONVERT(MONEY, club_players.wage) / 12 FROM club_players WHERE club_players.wage < 100
  483.  
  484. SELECT ISNULL(CONVERT(MONEY, club_players.wage) - 50, 100) FROM club_players
  485.  
  486. SELECT NULLIF(club_players.wage, club_coach.wage) FROM club_players, club_coach
  487.  
  488. SELECT COALESCE(name, nation) FROM club_players
  489.  
  490. SELECT CHOOSE ( 3, '1', '2', '3', '4' )
  491.  
  492. SELECT club_players.name, club_coach.name, IIF ( club_coach.wage > club_players.wage, 'coach win', 'players win' ) AS RESULT FROM club_players, club_coach
  493.  
  494. SELECT club_players.name, REPLACE (club_players.name, 'М', 'м') AS RESULT FROM club_players
  495.  
  496. SELECT club_players.name, SUBSTRING (club_players.name, 1, 4) AS RESULT FROM club_players
  497.  
  498. SELECT club_players.name, STUFF (club_players.name, 1, 2, 'zz') AS RESULT FROM club_players
  499.  
  500. SELECT club_players.wage, STUFF(STR (club_players.wage), 10, 2, '000') AS RESULT FROM club_players
  501.  
  502. DECLARE @pos INT = 1, @s NCHAR(20);
  503. SET @s = 'asdasdsadsa';
  504. WHILE @pos <=  DATALENGTH(@s)
  505.         BEGIN;
  506.         SELECT @pos,
  507.        SUBSTRING(@s, @pos, 1),
  508.        UNICODE(SUBSTRING(@s, @pos, 1));
  509.     SELECT @pos = @pos + 1;
  510.     END;
  511.  
  512.  
  513. SELECT LOWER(club_players.name) AS LOWER, UPPER(club_players.name) AS UPPER FROM club_players;
  514.  
  515. SELECT DATEPART(YEAR,'07.05.2015')
  516.  
  517. SELECT DATEADD(YEAR, 1, '07.05.2015');
  518.  
  519. SELECT DATEDIFF(MONTH, '07.05.2015', '07.05.2016');
  520.  
  521. SELECT GETDATE();
  522.  
  523. SELECT SYSDATETIMEOFFSET();
  524.  
  525. SELECT name FROM dbo.basketball_league  GROUP BY basketball_league.name
  526.  
  527. SELECT wage FROM club_players GROUP BY wage HAVING club_players.wage > 100
  528.  
  529. SELECT club_players.name, club_players.wage FROM club_players
  530. WHERE club_players.wage = (SELECT MAX(club_players.wage) FROM club_players);  --автономный подзапрос
  531.  
  532. SELECT name, wage FROM club_players WHERE wage IN
  533. (SELECT wage FROM club_players WHERE club_players.wage = 120)  -- коррелированный подзапрос
  534.  
  535. SELECT basketball_club.name, club_players.name  
  536. FROM basketball_club JOIN club_players ON basketball_club.id = club_players.id_basketball_club
  537. WHERE club_players.name IN ( SELECT name FROM club_players WHERE id_in_basketball_league = 2) --набор
  538.  
  539. CREATE TABLE #Temp_Table (
  540.             id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
  541.             player VARCHAR (100),
  542.             club VARCHAR(100),
  543.             nation VARCHAR(100)
  544.         )
  545.  
  546. INSERT INTO #Temp_Table VALUES
  547.         ('James', 'Heat', 'America'),
  548.         ('Downs', 'Avtodor', 'America'),
  549.         ('Koponen', 'Khimki', 'Russia')
  550.  
  551. MERGE #Temp_Table AS TT
  552.         USING (SELECT club_players.name AS player, basketball_club.name AS club, club_players.nation AS nation
  553.          FROM club_players JOIN basketball_club
  554.         ON club_players.id_basketball_club = basketball_club.id ) AS New_TT ON
  555.         TT.club COLLATE DATABASE_DEFAULT = New_TT.club COLLATE DATABASE_DEFAULT AND TT.player COLLATE DATABASE_DEFAULT = New_TT.player COLLATE DATABASE_DEFAULT
  556.          AND TT.nation COLLATE DATABASE_DEFAULT = New_TT.nation COLLATE DATABASE_DEFAULT
  557.         WHEN NOT MATCHED THEN
  558.             INSERT (player, club, nation) VALUES
  559.             (New_TT.player, New_TT.club, New_TT.nation );
  560.  
  561. SELECT * FROM #Temp_Table ;-- merge и создание временной таблицы
  562.  
  563.  
  564.  
  565. WITH Temp (player, nation, coach) AS
  566.          ( SELECT club_players.name AS player, club_players.nation, club_coach.name FROM club_players JOIN club_coach
  567.          ON club_players.id_basketball_club = club_coach.id_basketball_club JOIN basketball_club ON basketball_club.id = club_players.id_basketball_club
  568.           WHERE basketball_club.id = 2 )
  569.  
  570. SELECT * FROM Temp WHERE nation = 'Russia' --обобщенные выражения
  571.  
  572.  
  573.  
  574. SELECT 'Coach ' + club_coach.name  AS Team, basketball_club.name AS Club FROM club_coach
  575.     INNER JOIN basketball_club ON basketball_club.id = club_coach.id_basketball_club AND basketball_club.id = 1 INNER JOIN club_players ON
  576.     club_players.id_basketball_club = basketball_club.id
  577.     UNION ALL
  578. SELECT 'Player ' + club_players.name  AS Team, basketball_club.name AS Club FROM club_coach
  579.     INNER JOIN basketball_club ON basketball_club.id = club_coach.id_basketball_club AND basketball_club.id = 1 INNER JOIN club_players ON
  580.     club_players.id_basketball_club = basketball_club.id
  581.     -- Union All
  582.  
  583. SELECT 'Coach ' + club_coach.name  AS Team, basketball_club.name AS Club FROM club_coach
  584.     INNER JOIN basketball_club ON basketball_club.id = club_coach.id_basketball_club AND basketball_club.id = 1 INNER JOIN club_players ON
  585.     club_players.id_basketball_club = basketball_club.id
  586.     INTERSECT
  587. SELECT 'Player ' + club_players.name  AS Team, basketball_club.name AS Club FROM club_coach
  588.     INNER JOIN basketball_club ON basketball_club.id = club_coach.id_basketball_club AND basketball_club.id = 1 INNER JOIN club_players ON
  589.     club_players.id_basketball_club = basketball_club.id
  590.     -- Intersect
  591.  
  592. SELECT 'Coach ' + club_coach.name  AS Team, basketball_club.name AS Club FROM club_coach
  593.     INNER JOIN basketball_club ON basketball_club.id = club_coach.id_basketball_club AND basketball_club.id = 1 INNER JOIN club_players ON
  594.     club_players.id_basketball_club = basketball_club.id
  595.     EXCEPT
  596. SELECT 'Player ' + club_players.name  AS Team, basketball_club.name AS Club FROM club_coach
  597.     INNER JOIN basketball_club ON basketball_club.id = club_coach.id_basketball_club AND basketball_club.id = 1 INNER JOIN club_players ON
  598.     club_players.id_basketball_club = basketball_club.id
  599.     -- Except
  600.  
  601. SELECT Club, club_players, Number_players
  602.        
  603. FROM (
  604. SELECT t AS 'Club',  [Russia], [Cez], [France], [USA]
  605.      FROM (SELECT club_players.name AS n, club_players.nation AS nat, (club_players.id_basketball_club) AS id, basketball_club.name AS t
  606.      FROM club_players INNER JOIN basketball_club ON basketball_club.id = club_players.id_basketball_club
  607.      ) AS T
  608.     PIVOT
  609.     (
  610.          COUNT(T.n)  FOR T.nat IN ([Russia], [Cez], [France], [USA])
  611.     ) AS S
  612.      
  613.     ) AS A
  614.     UNPIVOT
  615.     (
  616.          Number_players  FOR club_players IN (Russia, Cez, France, USA)
  617.     ) AS B
  618.     -- Pivot, Unpivot
  619.  
  620.  
  621. SELECT club_players.name AS Player, club_coach.name AS Coach, basketball_club.name AS Club,
  622.  SUM(club_players.wage) AS wage FROM club_players  JOIN basketball_club
  623. ON basketball_club.id = club_players.id_basketball_club JOIN club_coach ON
  624. club_coach.id_basketball_club = basketball_club.id
  625. GROUP BY ROLLUP ( club_players.name, club_coach.name , basketball_club.name)
  626.  
  627. SELECT club_players.name AS Player, club_coach.name AS Coach, basketball_club.name AS Club,
  628.  SUM(club_players.wage) AS wage FROM club_players JOIN basketball_club
  629. ON basketball_club.id = club_players.id_basketball_club JOIN club_coach ON
  630. club_coach.id_basketball_club = basketball_club.id
  631. GROUP BY CUBE (club_players.name, club_coach.name, basketball_club.name)
  632.  
  633. SELECT club_players.name AS Player, club_coach.name AS Coach, basketball_club.name AS Club,
  634.  SUM(club_players.wage) AS wage FROM club_players JOIN basketball_club
  635. ON basketball_club.id = club_players.id_basketball_club JOIN club_coach ON
  636. club_coach.id_basketball_club = basketball_club.id
  637. GROUP BY GROUPING SETS ((club_players.name, club_coach.name), basketball_club.name)
  638. --GROUP
  639.  
  640. SELECT ROW_NUMBER() OVER ( ORDER BY wage DESC) AS 'ROW_NUMBER',
  641. RANK() OVER (ORDER BY wage DESC) AS 'RANK', DENSE_RANK() OVER ( ORDER BY wage DESC) AS 'DENSE_RANK',
  642. NTILE(5) OVER ( ORDER BY wage DESC) AS 'NTILE', NTILE(5) OVER (PARTITION BY nation ORDER BY wage DESC) AS 'NTILE partition',
  643.  name, nation, wage FROM club_players ORDER BY 'ROW_NUMBER'
  644. --Ранжирующие оконные функции
  645.  
  646.    
  647. SELECT basketball_club.name, MAX(wage) AS 'Max', MIN(wage) AS 'Min', SUM(wage) AS 'Sum',
  648. AVG(wage) AS 'AVG', COUNT(wage) AS 'Count', CHECKSUM_AGG(wage) AS 'CHECKSUM_AGG',
  649. ROWCOUNT_BIG() AS 'ROWCOUNT_BIG'  FROM
  650. club_players INNER JOIN basketball_club ON
  651. club_players.id_basketball_club = basketball_club.id  GROUP BY basketball_club.name
  652. --Статистические оконные функции
  653.  
  654. SELECT TOP(20) name, wage, Lead(name) OVER(ORDER BY wage) AS 'Lead', LAG(name)  OVER(ORDER BY wage) AS 'Lag' FROM club_players
  655. --Lag and lead
  656.  
  657.  
  658. BEGIN TRY
  659.     SELECT SQRT(-322);
  660. END TRY
  661. BEGIN CATCH
  662.     SELECT
  663.        ERROR_NUMBER() AS 'Номер ошибки'
  664.        ,ERROR_SEVERITY() AS 'Cтепень серьезности ошибки'
  665.        ,ERROR_STATE() AS 'Код состояния ошибки'
  666.        ,ERROR_PROCEDURE() AS 'Имя хранимой процедуры'
  667.        ,ERROR_LINE() AS 'Номер строки'
  668.        ,ERROR_MESSAGE() AS 'Полный текст сообщения об ошибке';
  669. END CATCH;
  670. -- Try/Catch and Error
  671.  
  672. SET XACT_ABORT OFF;
  673.  
  674. BEGIN TRANSACTION;
  675. BEGIN TRY
  676.     DELETE FROM basketball_club WHERE basketball_club.id = 1
  677.     COMMIT TRANSACTION;  
  678. END TRY
  679. BEGIN CATCH
  680.     SELECT
  681.        ERROR_NUMBER() AS 'Номер ошибки'
  682.        ,ERROR_SEVERITY() AS 'Cтепень серьезности ошибки'
  683.        ,ERROR_STATE() AS 'Код состояния ошибки'
  684.        ,ERROR_PROCEDURE() AS 'Имя хранимой процедуры'
  685.        ,ERROR_LINE() AS 'Номер строки'
  686.        ,ERROR_MESSAGE() AS 'Полный текст сообщения об ошибке';
  687.    IF (XACT_STATE()) = -1
  688.    BEGIN
  689.        PRINT
  690.            N'Транзакция прошла с ошибкой'
  691.        ROLLBACK TRANSACTION;
  692.    END;
  693.    IF (XACT_STATE()) = 1
  694.    BEGIN
  695.        PRINT
  696.            N'Текущий запрос содержит активную пользовательскую транзакцию. Зафиксируем транзакцию'
  697.        COMMIT TRANSACTION;  
  698.    END;
  699.     THROW;
  700.  
  701. END CATCH;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement