Databasutveckling Introduktion till SQL och TSQL Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Introduktion till SQL SELECT satsen, enkla frågor Hämta specifika kolumner Alias Ta bort dubbletter med DISTINCT WHERE-satsen BETWEEN Sortera sökresultat med ORDER BY INSERT, UPDATE och DELETE Copyright 2015 - Mahmud Al Hakim www.webacademy.se 2 1
Vad är SQL? Structured Query Language (SQL) är ett standardiserat frågespråk (programspråk) för att hämta och modifiera data i en relationsdatabas. Under 1970 utvecklade IBM Structured English Query Language (SEQUEL). SEQUEL byttes senare ut mot SQL eftersom 'SEQUEL' var ett varumärke. 1986 SQL är ANSI-standard 1987 SQL är ISO-standard SQL:2011 är den senaste versionen (standard ANSI) Copyright Mahmud Al Hakim www.webacademy.se 2015 3 T-SQL (Transact-SQL) T-SQL är ett tillägg till standard SQL från Microsoft och Sybase. T-SQL används i MS SQL Server databaser. Alla applikationer som kommunicerar med en MS Server databas skickar T-SQL-satser till servern. Transact-SQL Reference finns här https://msdn.microsoft.com/en-us/library/bb510741(v=sql.110).aspx Copyright 2015 - Mahmud Al Hakim www.webacademy.se 4 2
www.w3schools.com/sql SQL Tutorial Copyright Mahmud Al Hakim www.webacademy.se 2015 5 SQL (Structured Query Language ) SQL DDL Data Definition Language (Databeskrivning) DML Data Manipulation Language (Databearbetning) CREATE SELECT DROP INSERT ALTER DELETE UPDATE 6 3
SQL Syntax SQL-frågor består av ett antal satser (statements) SQL är INTE Case Sensitive (Skiftlägeskänsligt) SQL Nyckelord skrivs normalt i versaler Vissa databashanterare kräver semikolon efter varje sats; www.alhakim.org, mahmud@alhakim.org, 070-7556405 7 Öppna en databas med SQL USE northwind; 8 4
SELECT satsen SELECT är den viktigaste satsen i SQL. Används för att hämta rader från en eller flera tabeller. SELECT * FROM tabell; Eller SELECT kolumn1, kolumn2 FROM tabell; 9 Enkla frågor ; Hämtar alla kolumner och rader från tabellen Customers 10 5
Spara resultatet i en CSV-fil Högerklicka i resultat-panelen och Save Results As Copyright 2015 - Mahmud Al Hakim www.webacademy.se 11 Enkla frågor - Exempel 1. Hämta allt från tabellen Categories 2. Hämta allt från tabellen Contacts 3. Hämta allt från tabellen Employees 4. Hämta allt från tabellen Orders 5. Hämta allt från tabellen Products 6. Hämta allt från tabellen Region 7. Hämta allt från tabellen Shippers 8. Hämta allt från tabellen Suppliers 9. Hämta allt från tabellen Territories 10. Hämta allt från tabellen [Order Details] OBS! Om tabellnamnet består av flera ord använd hakparenteser. Copyright 2015 - Mahmud Al Hakim www.webacademy.se 12 6
Hämta specifika kolumner SELECT ContactName FROM Customers; 13 Hämta specifika kolumner Exempel 1. Hämta CompanyName från tabellen Customers 2. Hämta Country från tabellen Customers 3. Hämta City från tabellen Customers 4. Hämta CompanyName och Address från tabellen Customers 5. Hämta Country och City från tabellen Customers 6. Hämta fullständig adress från Customers (CompanyName, ContactName, Aderss, PostalCode, City och Country) 7. Hämta en lista på produktnamn från tabellen Products. 8. Hämta en lista på produktnamn och antal i lager (UnitInStock) från tabellen Products. Copyright 2015 - Mahmud Al Hakim www.webacademy.se 14 7
SELECT TOP Med SELECT TOP kan hämta en del av en stor tabell. T.ex. visa de första fem raderna OBS! Det är inte alla databashanterare som har SELECT TOP Copyright 2015 - Mahmud Al Hakim www.webacademy.se 15 Alias (kolumn alias) SELECT ContactName As Namn FROM Customers; 16 8
Alias (tabell alias) SELECT C.ContactName FROM Customers AS C; 17 Skapa Alias som kombinerar flera kolumner SELECT Address+', '+City+', '+PostalCode+', '+Country AS Address FROM Customers; Copyright 2015 - Mahmud Al Hakim www.webacademy.se 18 9
Ta bort dubbletter med DISTINCT SELECT DISTINCT City FROM Customers; 19 Hämta och filtrera specifika kolumner med WHERE WHERE Country = 'Mexico'; 20 10
AND och OR Visa alla produkter som finns i lagret och där en order finns. (beställda produkter som finns i lagret). SELECT * FROM Products WHERE UnitsInStock > 0 AND UnitsOnOrder > 0 Visa alla kunder som bor i Germany eller UK WHERE Country='Germany OR Country ='UK'; Copyright 2015 - Mahmud Al Hakim www.webacademy.se 21 Operatorer som används i WHERE Operator Beskrivning = Lika med <> eller!= Inte lika med > Större än < Mindre än >= Större än eller lika med <= Mindre än eller lika med BETWEEN LIKE IN Mellan två olika värden Används för att söka texter Används för att leta efter multipla värden Copyright 2015 - Mahmud Al Hakim www.webacademy.se 22 11
WHERE Flera exempel SELECT * FROM Products WHERE ProductID=1; SELECT * FROM Products WHERE ProductID<=5; SELECT * FROM Products WHERE UnitPrice < 10; SELECT * FROM Products WHERE UnitsInStock!=0; Copyright 2015 - Mahmud Al Hakim www.webacademy.se 23 LIKE, % och _ Visa alla kunder där postnumret börjar på 1 WHERE PostalCode LIKE '1%'; Visa alla länder som innehåller texten land WHERE Country LIKE '%land%'; Visa alla länder som INTE innehåller texten land WHERE Country NOT LIKE '%land%'; Visa alla kunder där postnumrets andra siffra är 1 WHERE PostalCode LIKE '_1%'; (OBS! Understreck) Copyright 2015 - Mahmud Al Hakim www.webacademy.se 24 12
BETWEEN Visa alla produkter som kostar mellan 5 och 10 SELECT * FROM Products WHERE UnitPrice BETWEEN 5 AND 10; Visa alla produkter som INTE kostar mellan 5 och 10 SELECT * FROM Products WHERE UnitPrice NOT BETWEEN 5 AND 10; Copyright 2015 - Mahmud Al Hakim www.webacademy.se 25 IN Visa alla kunder som bor i Paris eller London WHERE City IN ('Paris','London'); Visa alla kunder som INTE bor i Paris eller London WHERE City NOT IN ('Paris','London'); Copyright 2015 - Mahmud Al Hakim www.webacademy.se 26 13
Sortera sökresultat med ORDER BY Visa en lista över alla kunder, sortera efter namn stigande ORDER BY ContactName ASC; (OBS! ASC är defalut, kan utelämnas) Visa en lista över alla kunder, sortera efter Country fallande ORDER BY Country DESC; 27 Tips! Visa sista raden Copyright 2015 - Mahmud Al Hakim www.webacademy.se 28 14
SELECT INTO Kopiera data från en befintlig tabell till en ny tabell Copyright 2015 - Mahmud Al Hakim www.webacademy.se 29 SELECT INTO Välj kolumner Skapa en ny tabell som enbart innehåller info om kontaktpersoner i kundregistret SELECT CompanyName, ContactName, ContactTitle, Phone INTO CustomersContacts FROM Customers; Copyright 2015 - Mahmud Al Hakim www.webacademy.se 30 15
SELECT INTO Välj rader Skapa en ny tabell som enbart innehåller kunder från Sverige. SELECT * INTO CustomersSweden FROM Customers WHERE Country='Sweden'; Copyright 2015 - Mahmud Al Hakim www.webacademy.se 31 INSERT INTO Infoga en ny rad (post/record) i en tabell. INSERT INTO Customers (CustomerID, CompanyName, ContactName, Address, City, PostalCode, Country) VALUES ('12345', 'Web Academy', 'Mahmud Al Hakim', 'Hemfridsvägen 17', 'Sollentuna', '19267', 'Sweden'); Copyright 2015 - Mahmud Al Hakim www.webacademy.se 32 16
UPDATE Uppdaterar en rad (post/record) i en tabell UPDATE Customers SET Phone = '08-53339879' WHERE CustomerID = '12345'; Uppdatera flera fält UPDATE Customers SET CompanyName= 'Web Academy AB', ContactTitle = 'CEO' WHERE CustomerID = '12345'; Copyright 2015 - Mahmud Al Hakim www.webacademy.se 33 DELETE Tar bort en rad från en tabell DELETE FROM Customers WHERE CustomerID ='12345'; VIKTIGT: Om du glömmer WHERE-satsen så töms hela tabellen (du kan inte ångra). DELETE FROM Customers; Satsen tar bort alla rader (tabellen töms). Copyright 2015 - Mahmud Al Hakim www.webacademy.se 34 17
Övningar Svara på följande frågor från Northwind databasen. Skriv SQL-satser, testa och spara resultatet som CSV. 1. Visa en lista över alla kontaktpersoner? 2. Visa en sorterad lista (A-Ö) på alla kontaktpersoner? 3. Från vilka länder kommer kunderna? Visa en tabell över dessa länder. 4. Hur många kunder finns det i databasen? Visa en tabell över alla kunder. 5. Hur många kunder finns det i USA? Visa en tabell över dessa kunder. 6. Hur många kunder finns det i varje land? Visa en tabell. 7. Visa en lista på alla kunder som har kontor i Tyskland? 8. Visa information om kunden som har Berglund som efternamn? 9. Visa en lista över alla kunder som inte kommer från USA? 10. Visa en lista över alla produkter som finns i lagret. 35 18