Vinnaren i pepparkakshustävlingen!
2011-10-13, 16:36
  #25
Medlem
Känns som jag bombarderar er med frågor, är tacksam för alla svar som jag får

Har suttit nu i över en timme och pillat med samma fråga och fått fram ett svar som inte är fullständigt.

http://cdn.imghack.se/images/da5a39d...93cbe27ba7.jpg

Fråga C5. Koden är inringad, jag får alltså fram Vilka(vem) som jobbar för Dataavdelningen och som har mer än 15000 i lön. Men har försökt o baka in Chefen på något sätt men får inte till det det.

Jag tror att jag ska få in en till select i början på något sätt, men är inte säker på hur.
Citera
2011-10-13, 18:49
  #26
Medlem
Citat:
Ursprungligen postat av SorXisteN
Jag tror att jag ska få in en till select i början på något sätt, men är inte säker på hur.

Kod:
SELECT Namn, Avdelning.Chef FROM...
Citera
2011-10-13, 18:53
  #27
Medlem
Citat:
Ursprungligen postat av lsjoberg
Kod:
SELECT Namn, Avdelning.Chef FROM...


Är det så enkelt :S?

EDIT: Ja det va det. Tusen tack för all hjälp so far! Uppskattar det verkligen
Citera
2011-10-14, 07:15
  #28
Moderator
Protons avatar
Citat:
Ursprungligen postat av lsjoberg
Är det bara jag som inte förstått mig på de där nymodigheterna än och fortsättningsvis kör med vanliga "WHERE foo.bar_id = bar.id" osv?
Ja det är bara du.

Hur gör du en fråga för de fallen där det finns data i den ena tabellen som inte finns i den andra, men där du ändå vill ha med all från den ena tabellen och ha med den data som finns i den andra tabellen. Försök göra det med en implicit JOIN på det sättet som du gör....

Dessutom tycker jag personligen att det inte finns nån anledning att blöta ner WHERE-villkoret med en massa JOINar hit och dit, bätttre då att använda det för att ställa "filtreringen" så blir frågan lite mer lättläst.

LEFT och RIGHT och FULL OUTER JOIN använder jag så gott som dagligen btw, snudd på lika vanligt som en INNER JOIN.
Citera
2011-10-14, 08:41
  #29
Medlem
Citat:
Ursprungligen postat av Proton
Ja det är bara du.

Bara att rätta sig i ledet och lära sig göra om och göra rätt då =)
Citera
2011-10-14, 16:56
  #30
Medlem
Kod:
select Namn from PROJEKT
where Pid 
= (
select pid from ANSTPROJ
where Aid 
= (
select Aid from anstalld 
where Namn
='Jimmy Page')); 

Hur skriver jag samma sak med JOIN? Har försökt och kommer bara till

Kod:
select Namn from Projekt
JOIN ANSTPOJ on
ANSTPROJ
.Pid=Projekt.Pid 

Vet inte hur jag ska lägga till en till JOIN?

Eller skriver jag bara:

JOIN ANSTPROJ, Anstalld? Hur ser det ut efter isf?

Kod:
Join ANSTPROJAnstalld on
Projekt
.Pid=Anstproj.Pid AND Anstproj.Aid=Anstalld.Aid 
Citera
2011-10-14, 19:36
  #31
Moderator
Protons avatar
Lite läsning om JOINs som kan vara nyttig:

http://en.wikipedia.org/wiki/Join_(SQL)

Gruindtanken med en JOIN är att du JOINar ihop 2 tabeller så att en rad i vänster tabell om joinen förhoppningsvis hänger ihop logiskt med en rad i den högra tabelllen om JOIN-operatorn. Som du sett finns det olika JOINs att tillgå, men för att göra det enkelt för dej antar vi att anställningsid finns i både vänster och höger tabell. I sådana fall kan du använda en INNER JOIN för att få till din JOIN:

Kod:
SELECT Anstalld.namn FROM 
Anstalld INNER JOIN Anstprojekt ON Anstalld
.pid AnstProjekt.pid 
Där har jag ställt upp joinen på en egen rad för läsbarhetens skull. Ska du ha med fler tabeller i din JOIN för att få ut relevant infomration är det bara att lägga in fler joinar. Det viktiga är att du håller rätt på hur tabellerna hänger ihop, dvs vad de har för relationer, därav relationsdatabas.
Citera
2011-10-14, 19:36
  #32
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av SorXisteN
Vet inte hur jag ska lägga till en till JOIN?
Det är bara att lägga till en till JOIN:

Kod:
SELECT p.Namn
FROM Projekt p
INNER JOIN AnstProj ap ON p.Pid = ap.Pid
INNER JOIN Anstalld a ON ap.Aid = a.Aid
WHERE a.Namn = 'Jimmy Page'

Se även hur jag använder aliases (p, ap och a) för att slippa skriva saker som ON Anstproj.Aid=Anstalld.Aid
Citera
2011-10-14, 19:41
  #33
Moderator
Protons avatar
Citat:
Ursprungligen postat av gadzoox
Det är bara att lägga till en till JOIN:

Kod:
SELECT p.Namn
FROM Projekt p
INNER JOIN AnstProj ap ON p.Pid = ap.Pid
INNER JOIN Anstalld a ON ap.Aid = a.Aid
WHERE a.Namn = 'Jimmy Page'

Se även hur jag använder aliases (p, ap och a) för att slippa skriva saker som ON Anstproj.Aid=Anstalld.Aid
Eftersom gadzoox bidrog med praktiskt taget hela lösningen här och sabbade min pedagogik, no offense, får jag väl infoga att som du ser är det fortfarande bara 2 tabeller åt gången inblandade i en JOIN, du kan se det som en kedja som du kan haka på länkar på i godtycklig ände(eller för att röra till det, nånstans i mitten).
Citera
2011-10-14, 19:55
  #34
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av Proton
Eftersom gadzoox bidrog med praktiskt taget hela lösningen här och sabbade min pedagogik, no offense, får jag väl infoga att som du ser är det fortfarande bara 2 tabeller åt gången inblandade i en JOIN, du kan se det som en kedja som du kan haka på länkar på i godtycklig ände(eller för att röra till det, nånstans i mitten).
Citera
2011-10-14, 22:49
  #35
Medlem
Citat:
Ursprungligen postat av Proton
Lite läsning om JOINs som kan vara nyttig:

http://en.wikipedia.org/wiki/Join_(SQL)

Gruindtanken med en JOIN är att du JOINar ihop 2 tabeller så att en rad i vänster tabell om joinen förhoppningsvis hänger ihop logiskt med en rad i den högra tabelllen om JOIN-operatorn. Som du sett finns det olika JOINs att tillgå, men för att göra det enkelt för dej antar vi att anställningsid finns i både vänster och höger tabell. I sådana fall kan du använda en INNER JOIN för att få till din JOIN:

Kod:
SELECT Anstalld.namn FROM 
Anstalld INNER JOIN Anstprojekt ON Anstalld
.pid AnstProjekt.pid 
Där har jag ställt upp joinen på en egen rad för läsbarhetens skull. Ska du ha med fler tabeller i din JOIN för att få ut relevant infomration är det bara att lägga in fler joinar. Det viktiga är att du håller rätt på hur tabellerna hänger ihop, dvs vad de har för relationer, därav relationsdatabas.


Tack! Det hjälper verkligen när ni förklarar

Jag har en fråga som jag ställt tidigare som kan är lite ja..smått dum :P men iaf, det finns som sagt olika typer av JOINS, t.ex. LEFT JOIN från den vänstra tabellen osv. Men hur vet man i vilken ordning (vänster -> höger) som tabellerna är? Det måste väl sitta i uppbyggnaden i tabellen, bestämmer man då nån viss "position" på den? Hänger inte riktigt med där
Citera
2011-10-14, 23:06
  #36
Moderator
Protons avatar
Citat:
Ursprungligen postat av SorXisteN
Tack! Det hjälper verkligen när ni förklarar

Jag har en fråga som jag ställt tidigare som kan är lite ja..smått dum :P men iaf, det finns som sagt olika typer av JOINS, t.ex. LEFT JOIN från den vänstra tabellen osv. Men hur vet man i vilken ordning (vänster -> höger) som tabellerna är? Det måste väl sitta i uppbyggnaden i tabellen, bestämmer man då nån viss "position" på den? Hänger inte riktigt med där
Inte riktigt...

Om du tänker dej hur du skriver ett matematiskt uttryck, exempelvis något så simpelt som 1 * 2 så har du ju vänster respektive höger operand och i mitten har du en operator.

Detsamma gäller för databastabeller, eller snarare hur de betraktas, dvs som mängder. Mängder kan man även utföra diverse operationer på, till exempel JOIN, UNION, INTERSECT etc på, relationsalgebran behandlar dessa operationer och utfallen av dem:

http://en.wikipedia.org/wiki/Relational_algebra

För att göra en lång historia kort så är alltså vänster tabell den tabellen som står till vänster om din mängdoperator (dvs JOIN, UNION, INTERSECT, EXCEPT etc) och höger tabell är följdaktligen den tabellen som finns till höger om mängdoperatorn.

Förstog du?
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback