Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Trixa med SQL - Uppgift

Postad 2002-08-09 av Christoffer Hedgate i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 4608, Betyg: 73%

Förord

Denna artikel har jag tänkt lägga upp lite annorlunda mot hur artiklar brukar fungera. Här vill jag nämligen ha hjälp av er läsare med att slutföra artikeln. Jag ska presentera ett vanligt och egentligen ganska enkelt problem, och sen vill jag ha era synpunkter och förslag på hur man kan lösa problemet i SQL. Om en vecka följer jag sedan upp artikeln med en sammanfattning av de förslag jag fått in, samt beskriver mina egna förslag till lösningar (om de inte redan tagits upp i de förslag jag får in).
Innehåll
  » Anställda och chefer
  » Uppgiften
  » Lösningar
  » Om författaren
Relaterade artiklar
  » Trixa med SQL - Uppföljning
  » Verktyg för att mäta prestanda i SQL Server


Anställda och chefer

Upplägget är följande: vi har ett antal personer, där vissa är chef för några av de övriga. Tabelldefinitionen är enkel:


CREATE TABLE EMPLOYEESBOSSES
(
employee varchar(50) NOT NULL
, boss varchar(50) NULL
)


Denna tabell innehåller alla anställda, samt vem som är en persons chef (även cheferna finns med som anställda i tabellen). Varje kolumn innehåller namnet på en person. De personer som är chef för andra personer har NULL i kolumnen boss, och övriga har namnet på den person som är deras chef. För enkelhets skull förutsätter vi att det finns endast en nivå av chefer (ingen chef har någon annan chef), men jag har inte implementerat någon constraint för detta. Jag är medveten om att strukturen och användandet av denna tabell inte är optimal, men för denna uppgiften duger det.

Scriptet employeesbosses.sql som finns i den packade filen 386.zip kan hjälpa er att komma igång. Ladda ner filen och packa upp scriptet, och kör det sedan i valfri databas (eller skapa en ny om ni så önskar). Scriptet är skrivet för SQL Server, men med minimala förändringar kan det ändras till någon annan RDBMS (skriv gärna i era förslag vilken databashanterare ni använt). Det enda scriptet gör är att det skapar tabellen EMPLOYEESBOSSES, fyller den med 9600 rader samt skapar ett index på dessa. Det är dock inte nödvändigt att köra in allt detta, det är bara för att ni lättare ska kunna komma igång och experimentera med SQL-frågorna. Om ni hellre bara vill skapa tabellen och lägga in ett par rader själva går det lika bra, det är inte den exakta tiden det tar att köra frågorna vi är ute efter, utan hur de presterar inbördes mellan varandra, samt hur de löser uppgiften (se nedan). Därför är det ej heller nödvändigt att ha indexet på tabellen, eller att skapa nya index som utnyttjas bättre än det index jag använt i scriptet.


Uppgiften

Vad vi ska göra är att ta reda på vilken chef som har flest anställda direkt under sig. De flesta problem i SQL går att lösa på flera olika sätt, och det gäller förstås även denna uppgift. Jag är dels intresserad av att se lösningar som levererar resultatet på det mest optimerade viset (snabbast tid, minst I/O etc), men även lösningar som utmärker sig på andra sätt. Ett exempel kan vara enskilda frågor som exekveras för sig själv och ändå levererar svaret (i motsats till exempelvis procedurer och batchar som exekveras i flera steg).

Jag vill också göra det hela intressantare på ytterligare ett sätt. Jag vill dels se lösningar som löser uppgiften specifikt i exempelvis SQL Server (eller Oracle, DB2 etc), men allra mest är jag intresserad av lösningar som löser det med enbart standard SQL. Med standard SQL menar jag i det här fallet att den ska uppfylla kraven för Core SQL-99. En lösning som följer Core SQL-99 går att köra på mer eller mindre alla större RDBMS, och därmed är det i mångas ögon en bättre lösning än en annan lösning, även om den kanske är snabbare, som är bunden till en viss databashanterare. För att se om er SQL-kod följer Core SQL-99 kan ni testa den i den utomordentligt användbara valideraren som svenska företaget Upright Database Technology har på utvecklarsidorna för sin databas Mimer SQL. Adressen dit är http://developer.mimer.com/validator/parser99/index.tml. Valideraren är webbaserad så ni behöver inte ladda ner någonting.


Lösningar

Om en vecka kommer jag att uppdatera artikeln, alternativt skriva en ny om det blir mycket feedback, med de lösningar ni har skickat in samt mina egna varianter. Som sagt, jag är intresserad av alla förslag, standard eller ej, bra eller dåliga. Skicka gärna även in de första försöken ni gör, innan ni försökt att optimera koden, så att vi kan se hur frågorna utvecklas. Om ni använder några icke-standard funktioner i någon RDBMS så beskriv gärna vad de gör.

Skicka era lösningar till mig på iMail.


Om författaren

Christoffer Hedgate arbetar som konsult på Dotway AB i Malmö. Han är specialist på SQL Server (MCP), men jobbar även med andra databassystem och utveckling i .NET. På webbsiten Hedgate.NET finns ett flertal artiklar och tips skrivna av honom, samt även en blog.
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 615
27 953
271 709
5 710
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies