Toon posts:

SQL: gegevens uit 4 tabellen weergeven in 1...HELP

Pagina: 1
Acties:
  • 314 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb het volgende Relationeel Implementatietabel:create table controle(
cstnr smallintnot null,
teknr smallintnot null
primary key (cstnr, teknr),
foreign key (cstnr) references medewerker on delete set null on update no action,
foreign key (teknr) references tekening on delete no action on update no action);

create table klant(
knr smallintnot null,
naam char(15),
naw char(25)
primary key (knr));

create table medewerker(
mnr smallintnot null,
naam char(15),
naw char (25),
is_cst char(1) /* is constructeur (J/N)*/,
graad integer,
is_tkn char(1)/* is tekenaar (J/N)*/,
is_vkp char(1)/* is verkoper (J/N)*/
primary key (mnr));

create table order(
ordernr smallintnot null,
levdat date not null,
contact char(15)not null,
knr smallintnot null/*klant*/,
tnr smallint/*tekening*/,
vnr smallintnot null/*verkoper*/
primary key (ordernr),
foreign key (knr) references klant on delete no action on update no action,
foreign key (tnr) references tekening on delete no action on update no action,
foreign key (vnr) references medewerker on set null no action on update no action);

create table rayon(
vnr smallint not null,
rayon char(25)not null
primary key (vnr, rayon),
foreign key (vnr) references medewerker on delete cascades on update no action);

create table tekening(
tnr,smallintnot null,
oms char(20),
lokatie char(20),
tkn smallintnot null/* tekenaar */
primary key (tnr),
foreign key(tkn) references medewerker on delete set null on update no action);

Nu wil ik de volgende tabellen tevoorschijn toveren m.b.v. een sql-querie:
1)een overzicht van de orders van elke kant, zodanig dat per order wordt gegeven: de klantnaam, ordernummer, levdat, verkopernaam, tekenaarnaam
* als een klant geen orders heeft, dan toch 1x zijn naam weergeven
* als een order nog niet getekent is (tnr = null), dan natuurlijk niet de tekenaarnaam weergeven
* dus: op 1 regel moet 2x een medewerkernaam komen, dus is 2x de tabel medewerker nodig.

2)per medewerker het nr, de naam, het aantal afgesloten orders, het aantal gemaakte tekeningen en het antal gecontroleerde tekeningen.

Ik kom hier echt niet uit zucht...en er is aardige haast bij. Wie kan/wil mij helpen?


PS: ik heb naast het Relationeel Implementatiemodel ook nog een bijbehorend ERD in de aanbieding.

  • Crysania
  • Registratie: September 2000
  • Laatst online: 08:05
ziet eruit als huiswerk >:)

[topic=162102/1/25]

trouwens in 1 topic posten is genoeg, stond ook al in webscripting

Verwijderd

Topicstarter
Sorry, dit is de eerste keer dat ik op deze pagina zit.
Heb het bericht inderdaad onder 2 namen gepost. Wist niet goed onder welke ik dit het beste moest zetten.
De zinssnede "Maken jullie dit ff?" m.b.t. huiswerk is niet van toepassing, ik heb zelf al meerdere queries "opgehoest" maar bij deze 2 kom ik er echt niet uit. Heb er het afgelopen weekend op zitten zwoegen maar het wil maar niet lukken. Ik wil wel toegeven dat het om huiswerk gaat: het huiswerk omvat de laatste 1,6% (3sp van de 168sp) van mijn opleiding dus als ik dit afgerond heb ben ik er vanaf. Vandaar dat ik nu gespannen zit te ploeteren op een oplossing en de nood hoog is.

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Op maandag 12 november 2001 11:10 schreef Dianne het volgende:
Sorry, dit is de eerste keer dat ik op deze pagina zit.
Heb het bericht inderdaad onder 2 namen gepost. Wist niet goed onder welke ik dit het beste moest zetten.
De zinssnede "Maken jullie dit ff?" m.b.t. huiswerk is niet van toepassing, ik heb zelf al meerdere queries "opgehoest" maar bij deze 2 kom ik er echt niet uit. Heb er het afgelopen weekend op zitten zwoegen maar het wil maar niet lukken. Ik wil wel toegeven dat het om huiswerk gaat: het huiswerk omvat de laatste 1,6% (3sp van de 168sp) van mijn opleiding dus als ik dit afgerond heb ben ik er vanaf. Vandaar dat ik nu gespannen zit te ploeteren op een oplossing en de nood hoog is.
Huizwerk duz :)

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

heel moeilijk lijkt het me niet zo te zien.

Probeer eerst eens een query te maken die ALLES doet (cq. een volledige join van alle tables).

Daarna kan je conditionele joins gaan maken, maar vaak is dat niet nodig als je 'where clause' van je join in orde is.

Laat eens zien wat je al hebt en dan gaan we kijken :)

Klaar voor een nieuwe uitdaging.


  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 07-08 04:17

Fatamorgana

Fietsen is gezond.

Misschien wel flauw, maar als je eens met Access en DB maakt en dan via die leuke query builder of hoe die heet de query maakt? Misschien dat dit lukt en dan kun je de output bekijken en er achter komen hoe het werkt. Dit is natuurlijk niet helemaal hoe het zou moeten, maar soms wel handig om lastige problemen op te lossen.

Verwijderd

Topicstarter
Chem, ik heb nog nooit van conditionele joins gehoord. Ik wil daarmee niet zeggen dat je onzin praat maar meer aangeven dat ik werkelijk een ramp ben in wat uitgebreidere sql-queries ophoesten. Overigens ben ik ook nooit tevreden geweest over de wijze waarop ik sql tot me heb moeten nemen: dat ging altijd in snel-trein vaart en een mogelijkheid tot vragen stellen/herhaling was er niet.

Ben dit weekend inderdaad in access bezig geweest en heb daar de tabellen in gerealiseerd maar verder kwam ik niet. Kan gewone sql-queries schijnbaar niet zomaar in Access knikkeren. Access schijnt ook weer andere joins toe te passen ofzo. Uit wanhoop heb ik zelfs mijn oude dbase IV weer geinstalleerd maar dat liep na vermoedde pogingen vast.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

lol, dbase :)

ok, laat eens zien wat je *nu* hebt voor query (hoe belabberd hij ok is)...

dus select * from table left join table2 on... etc. (of inner join, of whatever)

Klaar voor een nieuwe uitdaging.


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Dit is ook een idiote manier om sql te leren, vraag je leraar of je niet gewoon een opdracht kan krijgen en dat je zelf je hersens kan laten werken.

  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 07-08 04:17

Fatamorgana

Fietsen is gezond.

Op maandag 12 november 2001 11:49 schreef raptorix het volgende:
Dit is ook een idiote manier om sql te leren, vraag je leraar of je niet gewoon een opdracht kan krijgen en dat je zelf je hersens kan laten werken.
Dit is ook een opdracht, maar er is een probleem en dan mag er toch wel om hulp gevraagd worden lijkt me?

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Op maandag 12 november 2001 12:36 schreef Fatamorgana het volgende:

[..]

Dit is ook een opdracht, maar er is een probleem en dan mag er toch wel om hulp gevraagd worden lijkt me?
Tuurlijk overigens is het niet zo moeilijk hoor, gewoon even tabbeletjes tekenen en je klikt de boel zo bij elkaar.

Verwijderd

Topicstarter
Op maandag 12 november 2001 11:45 schreef chem het volgende:
lol, dbase :)

ok, laat eens zien wat je *nu* hebt voor query (hoe belabberd hij ok is)...

dus select * from table left join table2 on... etc. (of inner join, of whatever)
Nou: hier is dus het belabberde stukje voor de 2e vraag:
Select M.mnr, M.naam, count(M.vkp), count(C.cstnr)
From Medewerker M join Order O on M.mnr = O.vnr
join Tekening T on M.mnr = T.tkn
join Klant K on K.knr = O.knr
join Tekening T on T.tnr = C.teknr

Overigens: het Relationeel Implementatiemodel heb ik zelf in elkaar geknuseld, kijk dat kan ik dan weer wel.

  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 13-09 19:02
mag je zo een join gebruiken? moet je niet altijd iets van inner, outer, left/right inner/outer join zeggen?

ach...in een volgend leven lach je er om!


Verwijderd

Topicstarter
ja die moet je er bijna altijd bijzetten, maar ik heb dus geen flauw idee welke ik moet gebruiken.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

oei, je hebt dus echt GEEN sql kennis?

dat is wel vervelend dan... verder alias je elke table naam naar een andere - waarom? veel leesbaarder wordt het er niet om :)

Select M.mnr, M.naam, count(M.vkp), count(C.cstnr)
From Medewerker M
join Order O on M.mnr = O.vnr
join Tekening T on M.mnr = T.tkn
join Klant K on K.knr = O.knr
join Tekening T on T.tnr = C.teknr

je joint tekening 2x, maar gebruikt dezelfde alias? Verder pak je de klant erbij, maar doet er nix mee? En je count M.vkp terwijl ik die nergens terugvindt?

:?

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
oei, je hebt dus echt GEEN sql kennis?
** simpele queries om 1 of 2 tabellen lukt nog wel, zei het met moeite. Het is ook al 2 jaar geleden dat ik deze stof gehad heb en doe er in de praktijk ook niks mee (zoals je ziet ook niet verstandig ;) )

dat is wel vervelend dan... verder alias je elke table naam naar een andere - waarom? veel leesbaarder wordt het er niet om :)
** Eh.... ik zit dus echt op de verkeerde weg?

Select M.mnr, M.naam, count(M.vkp), count(C.cstnr)
From Medewerker M
join Order O on M.mnr = O.vnr
join Tekening T on M.mnr = T.tkn
join Klant K on K.knr = O.knr
join Tekening T on T.tnr = C.teknr

je joint tekening 2x, maar gebruikt dezelfde alias?
** Ow ja, die moeten natuurlijk verschillen. dus bijv de een tk noemen en de ander tn?

Verder pak je de klant erbij, maar doet er nix mee?
** dus die mag er dan uit... ?
En je count M.vkp terwijl ik die nergens terugvindt?
** helemaal gelijk. M.vkp zou dan O.vnr moeten zijn?

:?

Verwijderd

Topicstarter
Is er dan echt niemand die deze jongedame uit de brand wil/kan helpen? Mijn hersentjes staan op knappen. Ben geen slechte student, alleen absoluut geen kei in sql. En dit is het enige wat mijn diploma nog in de weg staat. Wie wil/kan mij uit mijn lijden verlossen?

  • Arnout
  • Registratie: December 2000
  • Laatst online: 11-09 16:05
Op maandag 12 november 2001 15:57 schreef Dianne het volgende:
Is er dan echt niemand die deze jongedame uit de brand wil/kan helpen? Mijn hersentjes staan op knappen. Ben geen slechte student, alleen absoluut geen kei in sql. En dit is het enige wat mijn diploma nog in de weg staat. Wie wil/kan mij uit mijn lijden verlossen?
Probeer eens met left inner join en left outer join te spelen....

Oef das lang geleden dat SQL.

  • Arnout
  • Registratie: December 2000
  • Laatst online: 11-09 16:05
Op zich is dat aliassen niet verkeerd, het bespaart je typewerk, duidelijker wordt het er misschien niet door.

  • Arnout
  • Registratie: December 2000
  • Laatst online: 11-09 16:05
Moest je het ERD ook zelf ontwerpen, of was dat een voorbeeld (of opgave input)?

Verwijderd

Topicstarter
Zelf ERD ontworpen
Zelf Relationeel Implementatiemodel geschreven
4 opdrachten gekregen
2 opdrachten gerealiseerd dus
2 opdrachten nog open staan!

Verwijderd

Op maandag 12 november 2001 15:57 schreef Dianne het volgende:
Is er dan echt niemand die deze jongedame uit de brand wil/kan helpen? Mijn hersentjes staan op knappen. Ben geen slechte student, alleen absoluut geen kei in sql. En dit is het enige wat mijn diploma nog in de weg staat. Wie wil/kan mij uit mijn lijden verlossen?
JONGEDAME ????? WTF :P :P
Kga mijn vriendin ook maar is SQL leren >:)

  • Arnout
  • Registratie: December 2000
  • Laatst online: 11-09 16:05
Op maandag 12 november 2001 16:43 schreef specialist het volgende:

[..]

JONGEDAME ????? WTF :P :P
Kga mijn vriendin ook maar is SQL leren >:)
[blaat]
Of misschien is het dé manier om dingen voor elkaar te krijgen :)
[/blaat]

ff zonder gekheid, misschien is het beter als je eens een goede SQL handleiding inclusief voorbeelden regelt.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

ik zal vanaaf je SQL zooi in mysql gooien en wat voor je bedenken met uitleg erbij

weer een mooie link voor de FAQ erbij ;)

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
mysql...weer zoiets waar ik nog nooit over gehoord heb.
fijn dat je me wilt helpen, maar wil je duidelijk aangeven waar ik je hulp kan vinden? blijkbaar ga je het ergens anders weergeven.

probleem is: de meeste voorbeelden van join die ik heb kunnen vinden betreffen 2 tabellen. bij mijn vragen moeten er helaas meer geraadpleegd worden. nou kan ik de koppelingen tussen de tabellen nog wel zien, maar dat joinen is het grote probleem.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

helaas geen tijd gehad gisteravond dus even uit m'n hoofd. Punt 1: lees deze post even na: [topic=56933/1/50]

Daar staat helder uitgelegd welke join wat doet.

vraag 1:
SELECT order.ordernr, order.levdat, klant.naam, medewerker.naam as verkoper, tekenaar.naam as tekenaar
FROM klant
LEFT JOIN order ON order.knr = klant.knr
LEFT JOIN medewerker ON order.vnr = medewerker.mnr
LEFT JOIN tekening ON order.tnr = tekening.tnr
LEFT JOIN medewerker as tekenaar ON tekening.tkn = tekenaar.mnr

vraag 2:
Die mag je zelf nog eens proberen :)

MySQL is trouwens gewoon een database hoor, hij kan niet eens zoveel :)

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
dus je zit/zat op de HHS?

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

yep

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
zit of zat?
ken daar ook wat mensen.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

zat en misschien ooit weer eens zit. Ik heb VIA gedaan maar was (ben) zwaar teleurgesteld in het nivo van de opleiding. Wellicht dat ik eht nog afmaak voor het papiertje...

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Trouwens, kloppen deze uitwerkingen die ik in elkaar geknutseld heb wel?

* geef van alle klanten het nr, de naam en het aantal orders:
select knr, naam, count(ordernr)
from klant K
left join order O
on K.knr = O.knr
group by knr


* Geef de naam van alle tekenaars die nog nooit een order hebben binnengehaald.
select naam, nr
from medewerker
where is_tkn = 'J'
and nr NOT in (select vkp from order)

Tja, dat papiertje he? Zal blij zijn als ik dit sql-gedoe voor elkaar heb en het papiertje volgende week op mag halen.
Via, ja, dat is een opleiding op zich. Wat ik wel gehoord heb is dat ze bij het afstuderen heel wat strenger zijn en er aardig wat zakken. Waar zou je dan die studie af willen maken? Toch op de HHS of ergens anders met vrijstellingen?

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

die andere kloppen

ik woon 5 min van de HHS dus het zal in den haag gaan gebeuren :)

Klaar voor een nieuwe uitdaging.


  • Mc.Boldy
  • Registratie: Januari 2000
  • Laatst online: 08-08 10:54

Mc.Boldy

Chopperfreak without chopper



* Geef de naam van alle tekenaars die nog nooit een order hebben binnengehaald.
select naam, nr
from medewerker
where is_tkn = 'J'
and nr NOT in (select vkp from order)
Als ze streng je huiswerk nakijken zien ze dat je niet alleen de naam, maar ook het nr geeft van de tekenaars.

Ik heb geen verstand van MySQL ed, maar wel van Oracle en dan zou je bovenstaande als volgt kunnen oplossen

select mdw.naam
from medewerker mdw
where mdw.is_tkn = 'J'
and not exists (select 1 from order ord where ord.vkp = mdw.nr)

:)

https://jobs.sap.com/search/?createNewAlert=false&q=&locationsearch=%27s-Hertogenbosch&optionsFacetsDD_department=&optionsFacetsDD_customfield3=&optionsFacetsDD_country=


Verwijderd

Topicstarter
zie je, ik kan nog wel iets met sql...
nu die ene nog...

5 min, da's wel erg dichtbij.
zal er overigens niet verder omheen draaien, maar je hebt hier met een ivit-ter te maken. Ook nog eens BOIV, en die staan er bekend om niet sterk te zijn in DB-vakken. Tja, VIA is weer iets heel anders dan IVIT. De gemiddelde studieduur voor IVIT is dan ook niet voor niks 5 jaar en een uitval van 1 op 3 studenten!

Verwijderd

Topicstarter
Chem, komt dit meer in de buurt?

select medewerker.mnr, medewerker.naam, count (order.vkp), count(tekening.tkn), count(controle.cstnr)
from medewerker
left join order on medewerker.mnr = order.vkp
left join tekening on medewerker.mnr = tekening.tkn
left join controle on medewerker.mnr = controle.cstnr

vreemde is dat ik bij alle 4 de opdrachten geen union uit heb hoeven te voeren, zou verwachten dattie dat ook zou vragen.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

de laatste vraag zou je met een UNION kunnen doen... lijkt me denk ik een betere oplossing (btw check je antwoord doro de query uit te voeren en je hebt je vraag al beantwoord)

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Dan lijkt het me verstandiger deze met union uit te voeren, want anders gaat hij daar vast en zeker op het moment supreme naar vragen... Weer iets om over na te denken... zucht... Kan query hier op werk overigens niet uitvoeren, geen access beschikbaar. Dus ik tast in het duister over het antwoord.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

een UNION is buitengewoon simpel. Simpeler dan een JOIN, eigenlijk.

Met een UNION kan je queries samenvoegen; that's all...

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Komt dit in de buurt?

select medewerker.mnr, medewerker,naam,
from medewerker
UNION
select count(order.vkp)
from order
where medewerker.mnr = order.vkp
union
select count(tekening.tkn)
from tekening
where medewerker.mnr = tekening.tkn
union
select count(controle.cstnr)
from Controle
where medewerker.mnr = controle.cstnr;

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

probeer het eens zou ik zeggen... maar zover ik kan zien is het in orde (give or take some)

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Zal het vanavond eens uitproberen. In access. Moet ik wel de query's wat aanpassen, toch...? Waar moet ik de envelop naar binnen gooien als ik donderdag in Den Haag ben?
Pagina: 1