repeat83

sql3

Apr 25th, 2016
1,964
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.82 KB | None | 0 0
  1. /*
  2. 1. Вывести имена клиентов, заказы для которых нужно доставить в Лондон
  3. */
  4. SELECT C.ContactName, (SELECT ShipCity FROM Orders AS O WHERE O.CustomerID = C.CustomerID GROUP BY O.ShipCity)
  5. FROM Customers as C
  6. WHERE C.City = 'London'
  7.  
  8. /*
  9. 2. Вывести имена клиентов, у которых есть заказы между 02.02.1997 и 03.03.1997
  10. */
  11. SELECT ContactName
  12. FROM Customers AS C
  13. WHERE (SELECT O.CustomerID FROM Orders AS O WHERE C.CustomerID = O.CustomerID AND O.ShippedDate BETWEEN '1997-02-02' AND '1997-03-03' GROUP BY O.CustomerID) IS NOT NULL
  14.  
  15. /*
  16. 3. Найти компании, занимающиеся доставкой, которые обслуживают более 80 клиентов
  17. */
  18. SELECT S.CompanyName, (SELECT COUNT(*) FROM Orders AS O WHERE S.ShipperID = O.ShipVia)
  19. FROM Shippers AS S
  20. WHERE (SELECT COUNT(*) FROM Orders AS O WHERE S.ShipperID = O.ShipVia) > 80
  21.  
  22. /*
  23. 4. Вывести только те продукты, на которые нет скидки в таблице [Order Details].
  24. (Если скидка равна нулю, подразумевается, что она есть). Использовать EXISTS
  25. */
  26. -- Так как нет ни одной записи с пустым полем Discount в базе Order Details, вывод будет пуст.
  27. -- Если убрать условие в скобках, то в запросе достаточно заменить IS NULL на = 0 для вывода продуктов с нулевой скидкой.
  28. SELECT *
  29. FROM Products AS P
  30. WHERE EXISTS (SELECT * FROM [Order Details] AS OD WHERE P.ProductID = OD.ProductID AND OD.Discount IS NULL)
  31.  
  32. /*
  33. 5. Вывести контактную информацию о всех клиентах в верхнем регистре
  34. */
  35. SELECT UPPER(ContactName) AS 'ContactName', UPPER(ContactTitle) AS 'ContactTitle' FROM Customers
  36.  
  37. /*
  38. 6. Вывести имена продавцов, начиная с 4 символа. Результат должен быть отсортирован по убыванию
  39. */
  40. SELECT SUBSTRING(FirstName,4,11) AS 'part' FROM Employees ORDER BY 'part' DESC -- так как длина задана 10, то выводим до 11 символа
  41. SELECT SUBSTRING(FirstName,4,LEN(FirstName)-4+1) AS 'part' FROM Employees ORDER BY 'part' DESC
  42.  
  43. /*
  44. 7. Вывести названия всех продуктов, рядом в столбце 'Длина названия' вывести длину названий.
  45. Результат должен быть отсортирован по алфавиту
  46. */
  47. SELECT ProductName, LEN(ProductName) AS 'Длина названия'
  48. FROM Products
  49. ORDER BY ProductName
  50.  
  51. /*
  52. 9. Создать тестовую таблицу Copy_Territories, полностью повторяющую по структуре таблицу Territories.
  53. */
  54. CREATE TABLE Copy_Territories(
  55. TerritoryID nvarchar(20) NOT NULL,
  56. TerrytoryDescription nchar(50) NOT NULL,
  57. RegionID int NOT NULL,
  58. CONSTRAINT PK_Copy_TerrytoryID PRIMARY KEY (TerritoryID)
  59. )
  60.  
  61. /*
  62. 10. Скопировать все данные из таблицы Territories в таблицу Copy_Territories с помощью многострочного запроса INSERT.
  63. */
  64. INSERT INTO Copy_Territories SELECT TerritoryID, TerritoryDescription, RegionID FROM Territories
  65. INSERT INTO Copy_Territories (TerritoryID, TerrytoryDescription, RegionID) (SELECT TerritoryID, TerritoryDescription, RegionID FROM Territories)
  66.  
  67. /*
  68. 11. Заменить в таблице Copy_Territories название территории с кодом 11747, на территорию “New York”.
  69. Что бы произошло, если бы территории с кодом 11747 не существовало в таблице?
  70. */
  71. -- Ответ: Запрос ничего не обновил бы.
  72. UPDATE Copy_Territories SET TerrytoryDescription='New York' WHERE TerritoryID=11747
  73.  
  74. /*
  75. 12. Создать тестовую таблицу Copy_Orders, полностью повторяющую по структуре таблицу Orders. Скопировать все данные из Orders в Copy_orders.
  76. */
  77. SELECT * INTO Copy_Orders FROM Orders
  78.  
  79. /*
  80. 13. Удалить из таблицы Territories все территории, которым относится New York.
  81. */
  82. DELETE FROM Territories WHERE TerritoryDescription = 'New York'
  83. -- EXPECTED RESULT: Удалены все террирории относящиеся к New York
  84. -- ACTUAL RESULT: Удалить не получилось, т.к. есть зависимость от ключа TerritoryID в базе EmployeeTerritories
  85.  
  86. /*
  87. 14. Удалить из таблицы EmployeeTerritories все записи с кодом сотрудника 2.
  88. */
  89. DELETE FROM EmployeeTerritories WHERE EmployeeID = 2
  90.  
  91. /*
  92. 15. Удалить таблицы Copy_Territories и Territories. Объяснить полученный результат.
  93. */
  94. DROP TABLE Copy_Territories, Territories
  95. -- Таблица Territories не "дропнулась", т.к. есть зависимовти в других таблицах от её полей.
  96.  
  97. /*
  98. 16. Создать резервную копию базы данных Northwind
  99. */
  100. BACKUP DATABASE Northwind
  101. TO DISK = 'na.bak'
  102.  
  103. ------------------------------------------
  104. /*
  105. Создать хранимую процедуру, выводящую дату заказа (входной параметр – номер заказа) из таблицы Orders.
  106. В случае если у процедуры при запуске нет входного параметра, предусмотреть выход из процедуры
  107. с выводом сообщения «Введите номер заказа»
  108. */
Advertisement
Add Comment
Please, Sign In to add comment