Tamer Jamal - Frågor

(?tillbaka) Sql-frågor

Öva på grundläggande Sql-koncept.

Del 1: Skapa och hantera tabeller

1. Skapa en tabell (Departments) som lagrar information om företagets avdelningar. Tabellen ska ha kolumnerna:

CREATE TABLE Departments (
  DepartmentID  int NOT NULL PRIMARY KEY AUTO_INCREMENT,
  DepartmentName  VARCHAR(50),
  Location VARCHAR(50)
);



        
2. Lägg till tre avdelningar i tabellen Departments:

INSERT INTO Departments (DepartmentName, Location)
VALUES ('IT', 'Stockholm'),
('HR', 'Göteborg'),
 ('Finance', 'Malmö');





        

Del 2: Grundläggande urval

3. Visa alla kunder från tabellen Customers.

SELECT CustomerName
FROM Customers;



        
4. Visa alla produkter som kostar mer än 200 kr från tabellen Products.

SELECT  * FROM Products
WHERE Price > 200;



        
5. Visa alla anställdas förnamn, efternamn och födelsedatum från tabellen Employees.

SELECT FirstName, LastName, BirthDate FROM Employees;



        

Del 3: Filter och sortering

6. Visa alla beställningar från tabellen Orders som gjordes efter den 1 januari 1997.

SELECT *
FROM Orders
WHERE OrderDate > '1997-01-01';




        
7. Visa kundnamn och stad för kunder som bor i "Rio de Janeiro" (Customers).

SELECT City, CustomerName
FROM Customers
WHERE City = 'Rio de Janeiro';



        
8. Visa produktnamn och enhet för produkter som har "pies" i enhetsfältet (Products).

SELECT ProductName, UNIT FROM Products
WHERE unit LIKE '%pies%';



        
9. Visa de fem senaste beställningarna från Orders, sorterade efter datum (nyast först).

SELECT * FROM Orders
ORDER BY OrderDate ASC
LIMIT 5;




        

Del 4: Uppdatera och radera data

10. Uppdatera telefonnumret till "1234567890" för fraktföretaget "Speedy Express" i tabellen Shippers.

UPDATE Shippers
SET Phone = '1234567890'
WHERE ShipperName = 'Speedy Express';



        
11. Uppdatera adressen för kund med ID 10 till "Main Street 456" i tabellen Customers.

UPDATE Customers
SET Address = 'Main Street 456'
WHERE CustomerId = '10';



        
12. Ta bort produkten med ID 60 från tabellen Products.

DELETE FROM Products WHERE ProductId = '60';



        
13. Ta bort alla kunder från "Germany" i tabellen Customers.

DELETE FROM Customers WHERE Country = 'Germany';



        

Del 5: Aggregering och funktioner

14. Visa det högsta priset bland alla produkter i Products.


SELECT MAX(Price)
FROM Products;


        
15. Visa det genomsnittliga priset för alla produkter i Products.

SELECT AVG(Price)
FROM Products;



        

Del 6: Joins – koppla tabeller

16. Visa alla kunder och deras beställningar genom att koppla Customers och Orders.

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;



        
17. Visa alla produkter tillsammans med deras kategorinamn (Products + Categories).


SELECT Products.ProductName, Categories.CategoryId, Categories.CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryId = Categories.CategoryId;


        
18. Visa alla anställda tillsammans med deras avdelningsnamn och plats (Employees + Departments).

SELECT Employees.FirstName, Employees.LastName, Departments.DepartmentID, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentId=Departments.DepartmentID;



        
19. Visa alla beställningar med kundnamn, orderdatum och avdelningsnamn för den ansvariga anställda.

(Använd Orders, Customers, Employees och Departments.)



SELECT 
    o.OrderId,
    c.CustomerName,
    o.OrderDate,
    d.DepartmentName
FROM Orders o
INNER JOIN Customers c ON o.CustomerId = c.CustomerId
INNER JOIN Employees e ON o.EmployeeId = e.EmployeeId
INNER JOIN Departments d ON e.DepartmentId = d.DepartmentID;



        

Del 7: Avancerade frågor

20. Visa alla produkter som kostar mer än det genomsnittliga priset.

SELECT *
FROM Products
WHERE Price > (SELECT AVG(Price) FROM Products);




        
21. Visa alla anställda som har hanterat fler än 2 beställningar.

SELECT 
    Orders.EmployeeID,
    Employees.FirstName,
    COUNT(Orders.OrderID) AS AntalBeställningar
FROM Orders
INNER JOIN Employees 
    ON Orders.EmployeeID = Employees.EmployeeID
GROUP BY Orders.EmployeeID, Employees.FirstName
HAVING COUNT(Orders.OrderID) > 2;




        
22. Visa alla kunder från "USA" och deras 20 högsta beställningar (räknat som Quantity × Price).

SELECT 
    c.CustomerName,
    o.OrderId,
    SUM(od.Quantity * p.Price) AS TotalOrderValue
FROM Customers AS c
INNER JOIN Orders AS o 
    ON c.CustomerId = o.CustomerId
INNER JOIN OrderDetails AS od 
    ON o.OrderId = od.OrderId
INNER JOIN Products AS p 
    ON od.ProductId = p.ProductId
WHERE c.Country = 'USA'
GROUP BY c.CustomerName, o.OrderId
ORDER BY TotalOrderValue DESC
LIMIT 20;




        
23. Visa alla anställda födda mellan 1950 och 1960.
SELECT *
FROM Employees
WHERE Employees.BirthDate BETWEEN '1950-01-01' AND '1960-12-31';




        
24. Visa hur många anställda som finns i varje avdelning (Departments + Employees).
SELECT 
    d.DepartmentID,
    d.DepartmentName,
    COUNT(e.EmployeeID) AS employee_count
FROM Departments AS d
LEFT JOIN Employees AS e
    ON d.DepartmentID = e.DepartmentID
GROUP BY d.DepartmentID, d.DepartmentName
ORDER BY employee_count DESC;





        

Del 8: VIEW och sammanfattning

25. Skapa en VIEW som heter CustomerSpending och visar:

Använd tabellerna Customers, Orders, OrderDetails och Products.

CREATE VIEW CustomerSpending AS
SELECT 
    c.CustomerName,
    SUM(od.Quantity * p.Price) AS TotalSpent
FROM Customers AS c
INNER JOIN Orders AS o
    ON c.CustomerID = o.CustomerID
INNER JOIN OrderDetails AS od
    ON o.OrderID = od.OrderID
INNER JOIN Products AS p
    ON od.ProductID = p.ProductID
GROUP BY c.CustomerName;





        
3
26. Visa de fem mest sålda produkterna (efter total antal sålda enheter).
SELECT 
    p.ProductID,
    p.ProductName,
    SUM(od.Quantity) AS TotalUnitsSold
FROM Products AS p
INNER JOIN OrderDetails AS od
    ON p.ProductID = od.ProductID
GROUP BY p.ProductID, p.ProductName
ORDER BY TotalUnitsSold DESC
LIMIT 5;





        
27. Visa alla kunder från "USA" som har gjort en beställning under de senaste 6 månaderna.