Ey is er iemand die misschien eens tijd heeft (en kennis) die een tutorial wil schrijven met daarin de behandeling en uitleg van subqueries.. hiermee bedoel ik niet de joins waarvan al een tutorial is.. maar op deze manier:

SELECT iets
FROM tabel
WHERE 3 <
(
SELECT id
FROM tabel2
WHERE naam = 'jantje'
);

ik heb hier erg veel moeite mee vooral als je er 3 in elkaar krijgt ofzoiets.. maar het zou mij erg helpen.. de tutorials die ik op internet wel eens lees helpen mij niet omdat daar vaak maar tot maximaal 1 laag diep gegaan wordt.. ik hoop dat iemand de kennis en tijd heeft om dit te maken..

bedankt tot zover..
groetjess


de reden voor deze aanvraag is omdat ik dit op school op deze manier moet leren dit omdat het niet alleen voor MYSQL is bedoel.
Ik weet er wel "iets" van, maar niet genoeg om er een goede tut over te schrijven. Lijkt me meer iets voor Frank, of Klaasjan.
Ik zal eens kijken of ik er van de week tijd voor heb, al en ik wel reedlijk druk met een stage, en met schoolwerk daaromheen..
Als er iemand anders is die dit wil doen, dan zou dat ook wel mooi zijn.. iig wil ik dat best een keer doen, maar het kan wel een tijdje duren..
Een subquery is toch vrij eenvoudig: er wordt (een reeks van) waarden geretourneerd door de subquery, m.b.v. de IN( )-functie selecteer je die waarden. Je kunt de volgende query ...:

SELECT id FROM table WHERE sub_id IN(SELECT id FROM sub)

...dus bijvoorbeeld ook zo lezen:

SELECT id FROM table WHERE sub_id IN(1,2,4,6,8)

...waarbij 1, 2, 4, 6 en 8 de resultaten zijn van "SELECT id FROM sub"

Subqueries worden altijd vanuit de binnenste query uitgevoerd, bij geneste subqueries is dit wel iets om rekening mee te houden.
vooral als je er 3 in elkaar krijgt ofzoiets.
Dan ben je verkeerd bezig, dat wordt een bende.

Hoewel, niet echt een bende, maar het is niet te debuggen en niet te onderhouden. Bij debuggen en onderhoud moet je iedere keer de queries eerst apart gaan bouwen en testen, en vervolgens de boel weer inelkaar gaan vlechten. Kortom, veel te foutgevoelig.

In dit soort gevallen voer je gewoon aparte queries uit en het resultaat stop je als input in de vervolgquery. Dat kan een fractie van een seconde langzamer zijn, maar het is zó veel eenvoudiger dat zelfs ik het nog snap. ;)

Aanpak:
- Maak kleine en eenvoudige queries
- Voeg het resultaat van deze queries (of evt. de queries zelf) samen

Mijn aanpak met functies in de database (PL/SQL) is exact hetzelfde: Eenvoudige functies schrijven en dan een functie die een aantal functies samen uitvoert (met controles e.d.) om het uiteindelijke doel te bereiken.

Snel te bouwen, eenvoudig te debuggen en ook over een jaar snap je nog wat de query/functie doet. Onderhoud is dus geen probleem.

Eenvoud, daar draait het om!

kiss => keep it simple, stupid! (of: keep it short & simple)
@frank..
dat ben ik helemaal met jou eens hoor..
maarja een leraar die het op die manier wilt zien kan ik moeilijk 5queries voor zijn neus schuiven.. de bedoeling is dat we in 1 query alles op kunnen vragen..

de vraagstellingen kan bijvoorbeeld deze zijn:

(deze kreeg ik ooit op):

"Paren acteurnummers (met namen) van acteurs die ooit eens in dezelfde film hebben gespeeld waarbij de eerste de hoofdrol had en de tweede de tegenspeler was."

en ja dit kan met 1 query
en ja dit is zwaar onoverzichtelijk
haha..





dat is ook de reden waarom ik het wel graag wil beheersen (wetend dat het veel makkelijker kan)

@robert..
Als je het wilt doen hartstikke bedankt.. hoelang het duurt maakt niets uit ik zie hem vanzelf wel verschijnen.. bedankt man
@Marvin

Wat ik me afvraag is hoe de tabellen eruit zien als je het met subquery's moet doen. Want het kan volgens mij gewoon met joins, dat is eigenlijk een betere oplossing.

Stel dat je tabellen er zo uit zien:

Films
id
titel
enz.

Acteurs
id
naam
enz.

acteur_rollen
id
acteur_id
film_id
rol_id

rollen
id
rol (vb. Hoofdrol, tegenrol etc)

Dit zou je beter en efficiënter kunnen doen met een Join query, uitgaande van jou voorbeeld die je noemde en dat de tabellen er qua opzet zo uitzien als dat ik hier aangeef..
zijn de queries dan te gebruiken in elke database? (we gebruiken namelijk geen mysql) ik wenie of dat er mee te maken heeft.. we leren sql en dat moeten we PERSEE zo leren.. dus ik denk dat het wel een reden moet hebben..


edit:
de tabellen hebben inderdaad een soortgelijke opbouw als hierboven..

@kalle
thnxx voor de link.. is ook zeker een nuttige tutorial
Jan Koehoorn schreef op 16.04.2007 11:13
Ik weet er wel "iets" van, maar niet genoeg om er een goede tut over te schrijven. Lijkt me meer iets voor Frank, of Klaasjan.


Glim, glim

Volgens mij is het al duidelijk??

Ik kan sowieso niks duidelijker zijn dan de tut in de link van Kalle

Reageren