/*  Polecenie SELECT i klauzula FROM */

SELECT * FROM INFORMATION_SCHEMA.TABLES

SELECT * FROM Sales.Customer

SELECT LastName FROM Person.Contact

SELECT Name FROM Production.Product

/* Klauzula WHERE */

SELECT Name, ProductNumber, ReorderPoint
FROM Production.Product

SELECT Name, ProductNumber, ReorderPoint
FROM Production.Product
WHERE ProductID = 356

/* ORDER BY */

SELECT Name, ProductNumber, ReorderPoint
FROM Production.Product

SELECT Name, ProductNumber, ReorderPoint
FROM Production.Product 
ORDER BY Name

SELECT Name, ProductNumber, ReorderPoint
FROM Production.Product
ORDER BY ProductNumber

SELECT ProductID, ProductName, UnitsInStock, UnitsOnOrder
FROM Products
WHERE UnitsOnOrder > 0
AND UnitsInStock < 10
ORDER BY UnitsOnOrder DESC

SELECT OrderDate, CustomerID
FROM Orders
WHERE OrderDate BETWEEN '1996-12-10' AND '1996-12-20'
ORDER BY OrderDate, CustomerID DESC

/* Agregacje danych za pomoc klauzuli GROUP BY */

SELECT OrderID, Quantity
FROM [Order Details]
WHERE OrderID BETWEEN 11000 AND 11002

SELECT OrderID, SUM(Quantity)
FROM [Order Details]
WHERE OrderID BETWEEN 11000 AND 11002
GROUP BY OrderID

SELECT CustomerID, EmlpoyeeID, COUNT(*)
FROM Orders
WHERE CustomerID BETWEEN 'A' AND 'AO'
GROUP BY CustomerID, EmployeeID

/* Agregacje */

SELECT OrderID, AVG(Quantity)
FROM [Order Details]
WHERE OrderID BETWEEN 11000 AND 11002
GROUP BY OrderID

SELECT OrderID, MIN(Quantity)
FROM [Order Details]
WHERE OrderID BETWEEN 11000 AND 11002
GROUP BY OrderID

SELECT OrderID, MAX(Quantity)
FROM [Order Details]
WHERE OrderID BETWEEN 11000 AND 11002
GROUP BY OrderID

SELECT OrderID, MIN(Quantity), MAX(Quantity)
FROM [Order Details]
WHERE OrderID BETWEEN 11000 AND 11002
GROUP BY OrderID

SELECT OrderID, MIN(Quantity) AS Minumum, MAX(Quantity) AS Maximum
FROM [Order Details]
WHERE OrderID BETWEEN 11000 AND 11002
GROUP BY OrderID

SELECT OrderID AS "Numer zamwienia", MIN(Quantity) Minumum, MAX(Quantity) Maximum
FROM [Order Details]
WHERE OrderID BETWEEN 11000 AND 11002
GROUP BY OrderID

SELECT COUNT(*)
FROM Employees
WHERE EmployeeID = 5

SELECT COUNT(*)
FROM Employees

SELECT COUNT(*)
FROM Customers

SELECT COUNT(Fax)
FROM Customers

SELECT COUNT(*)
FROM Customers
WHERE Fax IS NULL

SELECT ReportsTo, COUNT(*)
FROM Employees
GROUP BY ReportsTo

/* Tworzenie warunkw za pomoc klauzuli HAVING*/

SELECT ReportsTo, COUNT(*)
FROM Employees
GROUP BY ReportsTo

SELECT ReportsTo AS Manager, COUNT(*) AS Reports
FROM Employees
WHERE EmployeeID != 5
GROUP BY ReportsTo

SELECT ReportsTo AS Manager, COUNT(*) AS Reports
FROM Employees
GROUP BY ReportsTo
HAVING COUNT(*) > 4

SELECT OrderID, SUM(Quantity) AS Suma
FROM [Order Details]
GROUP BY OrderID

SELECT OrderID, SUM(Quantity) AS Suma
FROM [Order Details]
GROUP BY OrderID
HAVING SUM(Quantity) > 300

/* Predykaty DISTINCT i ALL */

SELECT SupplierID
FROM Products
WHERE UnitsInStock > 0

SELECT DISTINCT SupplierID
FROM Products
WHERE UnitsInStock > 0

SELECT COUNT(*)
FROM [Order Details]

SELECT COUNT(OrderID)
FROM [Order Details]

SELECT COUNT(DISTINCT OrderID)
FROM [Order Details]

/* Wprowadzanie danych za pomoc polecenia INSERT */

INSERT INTO stores
VALUES
   ('TEST', 'Test store', '1234 Anywhere Street', 'Here', 'NY', '00319') -- Przykad bdny

SELECT *
FROM stores
WHERE stor_id = 'TEST'

INSERT INTO stores
   (stor_id, stor_name, city, state, zip)
VALUES
   ('TST2', 'Test store', 'Here', 'NY', '00319')

SELECT *
FROM stores
WHERE stor_id = 'TST2'

EXEC sp_help sales

INSERT INTO sales
   (stor_id, ord_num, ord_date, qty, payterms, title_id)
VALUES
   ('TEST', 'TESTORDER', '01/01/1999', 10, 'NET 30', 'BU1032')

/* Polecenie INSERT INTO...SELECT */

/* Nastpne polecenie wykorzysta kod do ustawienia bazy Northwind jako "biecej" bazy danych.
** Dziki temu na poziomie kodu bdziemy mie pewno, e korzystamy z waciwej bazy danych
*/
USE Northwind

/*  Za pomoc nastpnego polecenia deklarujemy nasz tabel robocz.
** Tabela ta to w rzeczywistoci zmienna, ktr deklarujemy w czasie dziaania programu.
*/
DECLARE @MyTable Table
(
   OrderID      int,
   CustomerID   char(5)
)

/*  Skoro ju mamy nasz zmienn tablicow, moemy wypeni j  danymi z polecenia SELECT. 
** Naley zwrci uwag na fakt, e rwnie dobrze moglibymy wstawi dane do
** trwaej tabeli (zamiast zmiennej tablicowej).
*/
INSERT INTO @MyTable
   SELECT OrderID, CustomerID
   FROM Northwind.dbo.Orders
   WHERE OrderID BETWEEN 10240 AND 10250

-- Na koniec upewnimy si, czy dane zostay wstawione zgodnie z naszymi oczekiwaniami
SELECT *
FROM @MyTable

/* Wprowadzanie zmian za pomoc polecenia UPDATE  */

SELECT *
FROM stores
WHERE stor_id = 'TEST'

UPDATE stores
SET city = 'There'
WHERE stor_id = 'TEST'

UPDATE stores
SET city = 'There', state = 'CA'
WHERE stor_id = 'TEST'

SELECT title_id, price
FROM titles
WHERE title_id LIKE 'BU%'

UPDATE titles
SET price = price * 1.1
WHERE title_id LIKE 'BU%'

SELECT title_id, price
FROM titles
WHERE title_id LIKE 'BU%'

UPDATE titles
SET price = price / 1.1
WHERE title_id LIKE 'BU%'

UPDATE titles
SET price = ROUND(price * 1.1, 2)
WHERE title_id LIKE 'BU%'

/* Polecenie DELETE */

SELECT *
FROM stores
WHERE stor_id = 'TEST'

DELETE stores
WHERE stor_id = 'TEST' -- Przykad bdny

DELETE sales
WHERE stor_id = 'TEST'

DELETE stores
WHERE stor_id = 'TEST'

DELETE stores
WHERE stor_id = 'TST2'







