Auteur |
Bericht |
Ga naar pagina 1, 2 Volgende
|
Devilly |
Geplaatst: 28 Okt 2008 19:01 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
- ik snap iets niet wat ik voor de SQL toets moet kennen die ik overmorgen heb
-> Iemand die verstand heeft van SQL en mij iets heel simpels kan en wil uitleggen? Voor zover ik namelijk zie, moet je in bepaalde gevallen met MAX en MIN in de SELECT een subquery gebruiken, maar in dezelfde gevallen maar dan i.p.v. MAX of MIN SUM, lijkt dit niet het geval te zijn?! Ik zie de logica even niet meer al zal het wel gewoon een heel simpele verklaring hebben (dat ik iets niet zie o.i.d.).
- ook met het maken van het SQL voor de database wil het even niet meer lukken
- ...en dat komt dan ook nog doordat wij een hele 'speciale' tabel hebben gemaakt volgens de leraar (waar hij trouwens wel heel gelukkig mee was) |
|
Terug naar boven |
|
|
Joni Philips |
Geplaatst: 28 Okt 2008 19:03 Onderwerp:
| |
Eindredacteur

Geregistreerd op: 20 Okt 2003 Berichten: 24914
|
Je hebt een subquery alleen nodig indien je alleen een zeer specifiek maximum/minimum/... wil berekenen van iets dat niet via Where's lukt. Meeste vragen kun je zonder subquery oplossen. |
|
Terug naar boven |
|
|
Devilly |
Geplaatst: 28 Okt 2008 19:17 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
Citaat: | SELECT VERKOPERNUMMER, MIN(COMMPERCT)
FROM VERKOPER
WHERE VERKOPERNUMMER>200; |
en
Citaat: | SELECT SUM(JAARSALARIS)
FROM MUSICUS
WHERE ORKESTNAAM="Berlijns Symfonieorkest"
AND INSTRUMENT="Viool"; |
Hopelijk kun jij (of kan iemand anders) me uitleggen waarom die eerste een subquery voor de MIN(COMMPERCT) nodig heeft, terwijl het idee van de tweede volgens mij toch hetzelfde is en die dat niet nodig heeft.
PS: excuses voor het off-topic gaan.  |
|
Terug naar boven |
|
|
Cubic X |
Geplaatst: 28 Okt 2008 19:23 Onderwerp:
| |
Geregistreerd op: 28 Nov 2004 Berichten: 519
|
Devilly schreef: | Citaat: | SELECT VERKOPERNUMMER, MIN(COMMPERCT)
FROM VERKOPER
WHERE VERKOPERNUMMER>200; |
en
Citaat: | SELECT SUM(JAARSALARIS)
FROM MUSICUS
WHERE ORKESTNAAM="Berlijns Symfonieorkest"
AND INSTRUMENT="Viool"; |
Hopelijk kun jij (of kan iemand anders) me uitleggen waarom die eerste een subquery voor de MIN(COMMPERCT) nodig heeft, terwijl het idee van de tweede volgens mij toch hetzelfde is en die dat niet nodig heeft.
PS: excuses voor het off-topic gaan.  |
Zit COMMPERCT wel in dezelfde tabel (verkoper)? Dat zou één van de redenen kunnen zijn, dit is wel erg logisch dus ik denk niet dat het DE reden is...maar je weet maar nooit.
Ik weet ook niet wat precies de vraag is, maar als je zeg maar het absolute minimum van COMMPERCT nodig hebt werkt deze query niet. Hij pakt nu namelijk het minimum van COMMPERCT waar het VERKOPERNUMMER hoger is dan 200, als je gewoon het minimum van COMMPERCT nodig hebt (dus maakt niet uit hoe hoog het verkopernummer is) dan heb je idd een subquery nodig.
Ben overigens ook niet zo goed in SQL hoor, maar volgens mij klopt mijn uitleg wel ongeveer
Laatst aangepast door Cubic X op 28 Okt 2008 19:28; in totaal 2 keer bewerkt |
|
Terug naar boven |
|
|
Joni Philips |
Geplaatst: 28 Okt 2008 19:26 Onderwerp:
| |
Eindredacteur

Geregistreerd op: 20 Okt 2003 Berichten: 24914
|
Bij die eerste query staat toch trouwens geen subquery. Kun je de informatie over de tabellen in kwestie posten? De namen en de kolommen erin? |
|
Terug naar boven |
|
|
Devilly |
Geplaatst: 28 Okt 2008 19:40 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
Joni Philips schreef: | Bij die eerste query staat toch trouwens geen subquery. Kun je de informatie over de tabellen in kwestie posten? De namen en de kolommen erin? |
Nee, die subquery had ik er inderdaad niet bijgezet. Dat had ik iets duidelijker moeten vermelden.
@ Cubic X: zie de post die hieronder volgt.
@ Joni: bedankt voor het maken van dit topic.
-----
Bij de eerste query gaat het om de tabel VERKOPER met de attributen Verkopernummer, Verkopernaam, Commperct, Jaarindienst, KAMERNUMMER (hierbij is Verkopernummer de primaire sleutel en KAMERNUMMER een vreemde sleutel).
De vraag die hierbij gesteld wordt, is: 'Welke verkopers met een verkopernummer hoger dan 200 hebben het laagste commissiepercentage van al zulke verkopers? (We identificeren de verkopers aan de hand van het verkopernummer)'
Hier de desbetreffende query nog een keer, welke dus fout is:
SELECT VERKOPERNUMMER, MIN(COMMPERCT)
FROM VERKOPER
WHERE VERKOPERNUMMER>200;
Deze zou, volgens het boek, zo moeten zijn:
SELECT VERKOPERNUMMER
FROM VERKOPER
WHERE VERKOPERNUMMER>200
AND COMMPERCT=
(SELECT MIN(COMMPERCT)
FROM VERKOPER
WHERE VERKOPERNUMMER>200);
Bij de tweede query gaat het om de tabel MUSICUS, welke de attributen Musicusnummer, Musicusnaam, Instrument, Jaarsalaris en Orkestnaam heeft (de primaire sleutel is Musicusnummer en de vreemde sleutel Orkestnaam).
De vraag is: 'Wat is het totale bedrag dat is gemoeid met de jaarsalarissen van alle violisten van het Berlijns Symfonieorkest?'
De query moest als volgt zijn:
SELECT SUM(JAARSALARIS)
FROM MUSICUS
WHERE ORKESTNAAM="Berlijns Symfonieorkest"
AND INSTRUMENT="Viool";
-----
Man, dat was veel typewerk. Hopelijk kan iemand me nu helpen. |
|
Terug naar boven |
|
|
Cubic X |
Geplaatst: 28 Okt 2008 19:50 Onderwerp:
| |
Geregistreerd op: 28 Nov 2004 Berichten: 519
|
Devilly schreef: | Joni Philips schreef: | Bij die eerste query staat toch trouwens geen subquery. Kun je de informatie over de tabellen in kwestie posten? De namen en de kolommen erin? |
Nee, die subquery had ik er inderdaad niet bijgezet. Dat had ik iets duidelijker moeten vermelden.
@ Cubic X: zie de post die hieronder volgt.
@ Joni: bedankt voor het maken van dit topic.
-----
Bij de eerste query gaat het om de tabel VERKOPER met de attributen Verkopernummer, Verkopernaam, Commperct, Jaarindienst, KAMERNUMMER (hierbij is Verkopernummer de primaire sleutel en KAMERNUMMER een vreemde sleutel).
De vraag die hierbij gesteld wordt, is: 'Welke verkopers met een verkopernummer hoger dan 200 hebben het laagste commissiepercentage van al zulke verkopers? (We identificeren de verkopers aan de hand van het verkopernummer)'
Hier de desbetreffende query nog een keer, welke dus fout is:
SELECT VERKOPERNUMMER, MIN(COMMPERCT)
FROM VERKOPER
WHERE VERKOPERNUMMER>200;
Deze zou, volgens het boek, zo moeten zijn:
SELECT VERKOPERNUMMER
FROM VERKOPER
WHERE VERKOPERNUMMER>200
AND COMMPERCT=
(SELECT MIN(COMMPERCT)
FROM VERKOPER
WHERE VERKOPERNUMMER>200);
Bij de tweede query gaat het om de tabel MUSICUS, welke de attributen Musicusnummer, Musicusnaam, Instrument, Jaarsalaris en Orkestnaam heeft (de primaire sleutel is Musicusnummer en de vreemde sleutel Orkestnaam).
De vraag is: 'Wat is het totale bedrag dat is gemoeid met de jaarsalarissen van alle violisten van het Berlijns Symfonieorkest?'
De query moest als volgt zijn:
SELECT SUM(JAARSALARIS)
FROM MUSICUS
WHERE ORKESTNAAM="Berlijns Symfonieorkest"
AND INSTRUMENT="Viool";
-----
Man, dat was veel typewerk. Hopelijk kan iemand me nu helpen. |
EIgenlijk is het heel simpel, ondanks dat ik ook niet zo goed ben in SQL
Bij de eerste vraag (ik behandel nu de goede query) geef je hem de opdracht om het verkopernummer af te drukken wanneer het verkopernummer hoger is dan 200 EN (dus niet OF/OF) waar OOK COMMPERCT het laagste is. Het laagste COMMPERCT wordt weer gehaald uit de verkopers met verkopernummer hoger dan 200.
Bij de foute query geeft hij alle verkopers met het verkopersnummer boven de 200 weer en daarnaast geeft hij weer wat de laagste waarde van COMMPERCT is. Bij de foute krijg je dus meerdere resultaten van verkopersnummer die eigenlijk niet de laagste waarde van COMMPERCT hebben, iets wat niet gevraagd wordt. Er wordt gevraagd welke verkopers het laagste commissiepercentage hebben. Door de subquery gaat hij bekijken bij welk persoon (of personen) het commissiepercentage het laagst is en drukt deze vervolgens af.
De tweede vraag is nog makkelijker, eigenlijk
Hij drukt de optelsom van Jaarsalaris af, hierbij kijkt hij alleen naar de waarde van het salaris als de orkestnaam Berlijns Symfonieorkest is EN (dus weer niet OF/OF) het instrument Viool is. Alle overige orkesten en instrumenten laat hij buiten beschouwing. Hij telt dus alleen de salarissen op waar de persoon EN in het Berlijns Symfonieorkest zit EN viool speelt.
Ik denk dat dit het wel is, mocht ik het toch fout hebben dan hoor ook ik het wel. Leer ik ook nog wat 
Laatst aangepast door Cubic X op 28 Okt 2008 19:59; in totaal 4 keer bewerkt |
|
Terug naar boven |
|
|
Joni Philips |
Geplaatst: 28 Okt 2008 19:55 Onderwerp:
| |
Eindredacteur

Geregistreerd op: 20 Okt 2003 Berichten: 24914
|
Bij die eerste gebruik je een subquery omdat je enkel de rij wil weerhouden waarin dat percentage minimaal is. Je gaat op zoek naar een specifieke rij, de rij waarin de waarde minimaal is. Jij zoekt voor elke verkoper zijn minimale verkoopcijfers als ik het goed zie. Bij de tweede tel je simpelweg alle rijen op.
Probeer trouwens onderstaande query eens. Levert deze hetzelfde resultaat niet? Ik kan momenteel niet testen of het resultaat hetzelfde is, maar ik ben benieuwd.
SELECT A.VERKOPERNUMMER
FROM VERKOPER AS A, VERKOPER AS B
WHERE A.VERKOPERNUMMER>200 AND B.VERKOPERNUMMER>200
AND A.VERKOPERNUMMER=B.VERKOPERNUMMER
GROUP BY A.VERKOPERNUMMER
HAVING MIN(B.VERKOPERNUMMER) |
|
Terug naar boven |
|
|
Devilly |
Geplaatst: 28 Okt 2008 20:02 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
@ allebei: bedankt voor de uitleg. Volgens mij snap ik hem wel, ik ga er (morgen) nog even voor zitten om het 100% zeker te weten.
@ Cubic X: ik zei dan ook al 'Ik zie de logica even niet meer al zal het wel gewoon een heel simpele verklaring hebben (dat ik iets niet zie o.i.d.).' Dit is ook de eerste periode dat we het krijgen, dus we zijn allemaal nog behoorlijk onwetend op dit gebied.
@ Joni: ik kan het nu ook even niet uitproberen, want het is allemaal schriftelijk. Misschien dat ik morgen als ik veel te veel tijd over heb wel even (een deel van) de tabel uit het boek overneem om het uit te proberen. ^^ |
|
Terug naar boven |
|
|
Cubic X |
Geplaatst: 28 Okt 2008 20:04 Onderwerp:
| |
Geregistreerd op: 28 Nov 2004 Berichten: 519
|
Joni Philips schreef: | Bij die eerste gebruik je een subquery omdat je enkel de rij wil weerhouden waarin dat percentage minimaal is. Je gaat op zoek naar een specifieke rij, de rij waarin de waarde minimaal is. Jij zoekt voor elke verkoper zijn minimale verkoopcijfers als ik het goed zie. Bij de tweede tel je simpelweg alle rijen op.
Probeer trouwens onderstaande query eens. Levert deze hetzelfde resultaat niet? Ik kan momenteel niet testen of het resultaat hetzelfde is, maar ik ben benieuwd.
SELECT A.VERKOPERNUMMER
FROM VERKOPER AS A, VERKOPER AS B
WHERE A.VERKOPERNUMMER>200 AND B.VERKOPERNUMMER>200
AND A.VERKOPERNUMMER=B.VERKOPERNUMMER
GROUP BY A.VERKOPERNUMMER
HAVING MIN(B.VERKOPERNUMMER) |
Die query gaat niet werken denk ik. Je geeft de tabel verkoper (bij het FROM statement) eerst de naam A en ook de naam B (door je as toekenning). Daarnaast zegt je A.VERKOPERNUMMER groter dan 200 EN B.VERKOPERNUMMER groter dan 200...dit kan toch niet, want A en B zijn gelijk aangezien je maar één verkoopnummer kan hebben. Dus als A groter is dan 200 is B dat ook. Je zoekt nu ook niet het laagste COMMPERCT maar naar de verkoper met het laagste verkopernummer. (HAVING MIN(B.VERKOPERNUMMER)).
Mocht het toch werken dan heb ik niks gezegd hierover, maar echt ingewikkeld is het op deze manier wel. Ik denk dat Joni denkt aan een JOIN met een andere tabel, dan gebruik je deze query inderdaad wel. In dit voorbeeld heb je geen JOIN nodig aangezien alle waardes in één tabel staan. |
|
Terug naar boven |
|
|
Joni Philips |
Geplaatst: 28 Okt 2008 20:13 Onderwerp:
| |
Eindredacteur

Geregistreerd op: 20 Okt 2003 Berichten: 24914
|
Het werkt wel, je laadt de tabel gewoon twee keer in. Op de ene werk je een specifieke functie uit en de andere laat je alle opties doorlopen. Die laatste MIN(B.VERKOPERNUMMER) moet inderdaad MIN(B.COMMPRCT) zijn, maar voor de rest is er geen probleem hoor. Ik ben alleen benieuwd of hij hetzelfde resultaat geeft. Ik heb ooit een opgave moeten oplossen waarbij je moest kijken of een bepaald hemelobject groter is dan de maan. Dan kun je ofwel met subquery's werken, ofwel met mijn methode. Ik heb het echter nooit kunnen testen met een having.
SELECT h.objectnaam
FROM hemelobjecten as a, hemelobjecten as b
WHERE a.objectnaam = 'Maan'
AND b.diameter > a.diameter
SELECT h.objectnaam
FROM hemelobjecten as a
WHERE a.diameter >
(SELECT b.diameter
FROM hemelobjecten as b
WHERE b.objectnaam = 'Maan') |
|
Terug naar boven |
|
|
Cubic X |
Geplaatst: 28 Okt 2008 20:27 Onderwerp:
| |
Geregistreerd op: 28 Nov 2004 Berichten: 519
|
Joni Philips schreef: | Het werkt wel, je laadt de tabel gewoon twee keer in. Op de ene werk je een specifieke functie uit en de andere laat je alle opties doorlopen. Die laatste MIN(B.VERKOPERNUMMER) moet inderdaad MIN(B.COMMPRCT) zijn, maar voor de rest is er geen probleem hoor. Ik ben alleen benieuwd of hij hetzelfde resultaat geeft. Ik heb ooit een opgave moeten oplossen waarbij je moest kijken of een bepaald hemelobject groter is dan de maan. Dan kun je ofwel met subquery's werken, ofwel met mijn methode. Ik heb het echter nooit kunnen testen met een having.
SELECT h.objectnaam
FROM hemelobjecten as a, hemelobjecten as b
WHERE a.objectnaam = 'Maan'
AND b.diameter > a.diameter
SELECT h.objectnaam
FROM hemelobjecten as a
WHERE a.diameter >
(SELECT b.diameter
FROM hemelobjecten as b
WHERE b.objectnaam = 'Maan') |
Oke, my bad. Ben zelf ook nog niet zover gevorderd met SQL  |
|
Terug naar boven |
|
|
Devilly |
Geplaatst: 28 Okt 2008 20:37 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
Ik snap alleen één ding niet: zodra bij de betreffende query bij WHERE wordt aangegeven dat het verkopernummer boven de 200 moet zijn, dan zou dat toch ook betrekking moeten hebben op de MIN(COMMPERCT) die achter SELECT staat? Het heeft namelijk wel datzelfde effect op het VERKOPERNUMMER dat achter SELECT staat. |
|
Terug naar boven |
|
|
Joni Philips |
Geplaatst: 28 Okt 2008 21:02 Onderwerp:
| |
Eindredacteur

Geregistreerd op: 20 Okt 2003 Berichten: 24914
|
Nee, een subquery wordt uitgevoerd zonder de gegevens van de query waarin hij wordt uitgevoerd. Hij weet dus niet dat verkopernummer groter moet zijn dan 200 als je dat daar niet zet, dan gaat hij op zoek naar het minimum van allen. Ook in de superquery moet hij blijven staan want anders is het mogelijk dat nummers onder de 200 hetzelfde minimum kennen.
SELECT VERKOPERNUMMER
FROM VERKOPER
WHERE VERKOPERNUMMER>200
AND COMMPERCT=
(SELECT MIN(COMMPERCT)
FROM VERKOPER
WHERE VERKOPERNUMMER>200); |
|
Terug naar boven |
|
|
Devilly |
Geplaatst: 28 Okt 2008 21:11 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
Sorry, laat maar zitten. Volgens mij snap ik hem nu. Mijn laatste vraag was niet goed geformuleerd en je antwoord was dus niet wat ik zocht, maar volgens mij had ik net een ingeving. Ik ga er morgen nog even voor zitten om ervoor te zorgen dat ik het helemaal ken en er misschien zelf over ga dromen. ^^
Bedankt! 
Laatst aangepast door Devilly op 28 Okt 2008 21:14; in totaal 1 keer bewerkt |
|
Terug naar boven |
|
|
Joni Philips |
Geplaatst: 28 Okt 2008 21:14 Onderwerp:
| |
Eindredacteur

Geregistreerd op: 20 Okt 2003 Berichten: 24914
|
Omdat je eigenlijk vraag om het minimum per nummer te geven. Je krijgt het minimum van elk nummer boven de 200. Het minimum van 201, het minimum van 202, ... Er moet trouwens nog een Group by in die query, zo werkt hij iig niet in postgress. |
|
Terug naar boven |
|
|
Devilly |
Geplaatst: 28 Okt 2008 21:21 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
Ja, ik snap hem. Mocht ook weleens tijd worden met zo'n simpel iets...
Hoe het met postgres zit, weet ik niet, maar ik houd het voorlopig even bij wat we in de les krijgen en wat in het boek staat.
PS: is zo'n gamesite ook nog goed voor m'n opleiding!  |
|
Terug naar boven |
|
|
JasperCLA |
Geplaatst: 28 Okt 2008 21:39 Onderwerp:
| |

Geregistreerd op: 05 Dec 2007 Berichten: 5626
|
Waarover gaat dat eigenlijk? Economie?  |
|
Terug naar boven |
|
|
Devilly |
Geplaatst: 28 Okt 2008 21:43 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
JasperCLA schreef: | Waarover gaat dat eigenlijk? Economie?  |
Databases SQL is de taal waarmee je allerlei bewerkingen op de tabellen en de inhoud van die tabellen kunt loslaten waaruit de database bestaat. |
|
Terug naar boven |
|
|
JasperCLA |
Geplaatst: 28 Okt 2008 21:59 Onderwerp:
| |

Geregistreerd op: 05 Dec 2007 Berichten: 5626
|
Devilly schreef: | JasperCLA schreef: | Waarover gaat dat eigenlijk? Economie?  |
Databases SQL is de taal waarmee je allerlei bewerkingen op de tabellen en de inhoud van die tabellen kunt loslaten waaruit de database bestaat. |
Dat zal nog lang duren vooraleer ik daar aan ga beginnen dan. |
|
Terug naar boven |
|
|
Devilly |
Geplaatst: 28 Okt 2008 22:04 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
|
Terug naar boven |
|
|
Robert |
Geplaatst: 28 Okt 2008 22:21 Onderwerp:
| |

Geregistreerd op: 04 Mrt 2008 Berichten: 5569
|
SQL...... dat is toch met Acces enzo?
dat had ik laatst bij informatica vet moeilijk
ik had nooit inf moeten kiezen is echt niet aan mij voorbestemd  |
|
Terug naar boven |
|
|
Devilly |
Geplaatst: 29 Okt 2008 07:53 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
N!CE schreef: | SQL...... dat is toch met Acces enzo?
dat had ik laatst bij informatica vet moeilijk
ik had nooit inf moeten kiezen is echt niet aan mij voorbestemd  |
Dat is inderdaad dat was je o.a. in Access kunt gebruiken. Ik snapte er op de middelbare ook niets van, daarom ben ik ook gestopt met dat vak, maar nu (nu ik de HBO studie Informatica doe) vind ik het niet zo heel moeilijk.
-----
Ik heb er gisteren nog eens goed over zitten nadenken en het is me allemaal zo duidelijk als het maar kan zijn. Eigenlijk snap ik niet waarom ik het gisteren niet snapte... het is namelijk helemaal niet moeilijk. |
|
Terug naar boven |
|
|
ace_quorthon |
Geplaatst: 29 Okt 2008 08:54 Onderwerp:
| |

Geregistreerd op: 29 Okt 2007 Berichten: 349
|
Het is inderdaad helemaal niet moeilijk Je moet het gewoon allemaal een keertje gezien hebben dan kom je er wel doorheen. Ik vind het knap als je uberhaupt 20 verschillende keywords kan opnoemen voor SQL. Er valt niet zoveel te onthouden, en maar een klein beetje te snappen, dus het komt vast goed (Y) |
|
Terug naar boven |
|
|
Devilly |
Geplaatst: 29 Okt 2008 09:01 Onderwerp:
| |
![]()
Geregistreerd op: 24 Sep 2006 Berichten: 2484
|
ace_quorthon schreef: | Ik vind het knap als je uberhaupt 20 verschillende keywords kan opnoemen voor SQL. |
SELECT
FROM
WHERE
=
<
>
<=
>=
<>
ORDER BY
CREATE TABLE
PRIMARY KEY
CHAR()
INTEGER
REAL
DATE
BOOLEAN
NOT NULL
UNIQUE
DEFAULT
Dat zijn er alvast 20. Eén voor één zijn het dingen die uit de syntax van SQL komen. |
|
Terug naar boven |
|
|
|
|
Ga naar pagina 1, 2 Volgende |