Av: Marcus Rejås <marcus@rejas.se> Det är i huvudsak två saker som brukar vara svårt när man jobbar med databaser, att skapa rätt struktur (schema) i sin databas och att sedan ställa rätt frågor till den. I denna labb jobbar vi vidare med SELECT. Du skall ha gjort Laboration 1, 2 och 3 innan du gör denna. Från förra laborationenFrån förra laborationen skall ni ha två tabeller som ser ut ungefär så här:mysql> DESCRIBE bilar;Dessa har ungefär följande innehåll: mysql> SELECT * FROM bilar;Ser inte era tabeller ut exakt så så gör det inget. Men de bör vara ungefär lika. SELECT ... AS ... FROM ... När man väljer olika fält från en tabell så blir rubriken det som man väljer1. Så vill man kanske inte ha det. Man vill kanske inte att det skall stå ”fnamn” och ”enamn” som det gör ovan utan ”Förnamn” och ”Efternamn” i stället. Det kan man åstadkomma genom att ställa sin fråga på följande sätt. mysql> SELECT fnamn AS Förnamn, enamn AS 'Efternamn' FROM personer; FunktionerMan kan i MySQL skriva enklare funktioner direkt i sina frågor. Vi har tidigare sett funktionersom SUM(), COUNT() och AVG(). Nu skall vi titta på en del andra. Funktionen CONCAT()Concat är en förkortning för engelskans ”concatenate” som betyder ungefär ”sätt ihop” och detär just vad funktionen gör. Den fungerar så här: mysql> SELECT CONCAT(marke," ",modell) FROM bilar; I exemplet så att det som kommer inom parenteserna kan vara godtyckliga strängar, inom citationstecken (”), och fältnamn. I vårt exempel så slår vi ihop ”marke” och ”modell” Med ett mellanslag emellan. Varje fält eller textsträng åtskiljs med ett kommatecken (,). Prova nu lite olika strängar. 1 När vi börjar programmera mot databasen så ser vi att rubrikerna är viktiga även i andra sammanhang än rent estetiska. DatumfunktionerFör att kunna laborera med dessa utökar i persontabellen så att den ser ut som nedan. Tittabland dina tidigare laborationer om du inte minns hur man gör. mysql> DESCRIBE personer;Fyll (populera) sedan detta nya fält i tabellen så att den ser ut så här: mysql> SELECT * FROM personer;Som ni kanske har listat ut skall vi räkna ut hur gamla dessa figurer är. Men för att kunna veta det måste vi ju även veta vilken dag det är idag. Funktionen CURDATE(), CURTIME() och NOW()Funktionen CURDATE() ger som svar vilken dag det är idag. Man behöver inte alls välja någrafält från tabeller utan man kan bara göra så här om man vill: mysql> SELECT CURDATE();Samma sak gäller för CURTIME() som naturligtvis ger aktuell tid. Det finns även NOW() som visar både datum och tid. mysql> SELECT CURTIME();En sak som är väldigt trevligt för oss svenskar är att MySQL presenterar datumet i ett för oss väldigt vanligt format, nämligen det i använder i våra personnummer och tiden presenteras i 24- timmarsform som också passar oss2 . Samma regler gäller vid inmatning av datum och tid. 2 MySQL är ju trots allt en Svensk produkt MySQL är bra på att känna igen datum och klockslag i olika former så kommer man ihåg detta som kommer det att gå bra. Funktionen TO_DAYS()Ibland vill man räkna hur långt det är mellan två datum. Då är det smidigt att räkna om datumentill dagar. Till detta finns funktionen TO_DAYS(). Vill man veta hur många dagar det är kvar till midsommarafton så kan man göra det med nedanstående sats som också innehåller lite matematik. Jag kommer inte att behandla detta mer i detalj än så här just nu. Laborera och prova dig fram. mysql> SELECT TO_DAYS('2004-06-26') – TO_DAYS(CURDATE()); Funktionerna YEAR(), MONTH() och DAYOFMONTH()Ofta vill man bryta upp ett datum i sina beståndsdelar. Det är MySQL väldigt bra på. Vill man tillexempel veta hur många år en bil är så är man nog bara intresserad av vilket år det är nu och inte hela datumet. Vill man veta om det är den 15:e i vilken månad som helst måste man kunna välja bara dagen och vill man veta om det är månaden juni så är det smidigt med bara månaden. Några exempel: mysql> SELECT DAYOFMONTH('2003-12-21');Jag kommer inte att ta mer om detta nu utan laborera som vanligt vidare med dessa. Vill du lära dig mer om MySQL och datumfunktioner så rekommenderar jag följande webbadresser: MySQL-manualen: http://www.mysql.com/doc/en/Date_and_time_functions.html En artikel om datum- och tidsfunktioner i MySQL i två delar: http://www.databasejournal.com/features/mysql/article.php/2172731 http://www.databasejournal.com/features/mysql/article.php/2190421 Att svara påFöljande frågor skall du svara på. Visa eller lämna in dem till laborationshandledaren.Naturligtvis provkör du dem innan du skriver ner dem här. Uppgift 1Skriv en fråga som skriver ut hur många dagar det är till julafton.Svar:________________________________________________________________________________ Uppgift 2Skriv en fråga som talar om hur många dagar du är.Svar: ________________________________________________________________________________ Uppgift 3Skriv en fråga som skriver ut följande:+-----------------+ Svar:________________________________________________________________________________ Uppgift 4Skriv en fråga som skriver ut alla som fyller år i oktober.Svar:________________________________________________________________________________ Uppgift 5*Skriv en fråga som skriver ut följande tabell:+------------------------------------+ Svar:________________________________________________________________________________ Uppgift 6**Skriv en fråga som skriver ut följande. Tänk på att rubruker och sortering.+--------------+------------------+-------+ Svar:________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ _____________________________________________________________________________________ * Lite svårare uppgift ** Lite Svårare uppgift Copyright © 2004 Rejås Datakonsult |
Databashantering > SQL labbar >