Subqueries
Een subquery (het woord zegt het al) is een query binnen een query.
Een subquery is altijd een SELECT statement, staat altijd tussen haakjes en kan vrijwel overal in een query worden toegepast:
- Tussen de SELECT en de FROM
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT
COUNT(some_id) AS total,
(SELECT COUNT(some_id) FROM t1 WHERE active=1) AS active,
(SELECT COUNT(some_id) FROM t1 WHERE active=0) AS inactive
FROM
t1
COUNT(some_id) AS total,
(SELECT COUNT(some_id) FROM t1 WHERE active=1) AS active,
(SELECT COUNT(some_id) FROM t1 WHERE active=0) AS inactive
FROM
t1
- In de FROM clause
Met een net woord heet dit een derived table maar iedereen noemt dit een inline view:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT c.comp_id,
c.comp_name,
co.firstname,
co.lastname
FROM
(SELECT comp_id,
comp_name
FROM
companies
ORDER BY
comp_name
LIMIT 0, 5) AS c
LEFT JOIN
contacts AS co USING (comp_id)
c.comp_name,
co.firstname,
co.lastname
FROM
(SELECT comp_id,
comp_name
FROM
companies
ORDER BY
comp_name
LIMIT 0, 5) AS c
LEFT JOIN
contacts AS co USING (comp_id)
Het alias is hier vereist.
- Als vergelijkings waarde
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT matchdate,
matchtime,
hometeam,
awayteam
FROM
matches2012
WHERE
matchdate = (SELECT MIN(matchdate)
FROM
matches2012
WHERE
matchdate >= DATE(NOW()))
matchtime,
hometeam,
awayteam
FROM
matches2012
WHERE
matchdate = (SELECT MIN(matchdate)
FROM
matches2012
WHERE
matchdate >= DATE(NOW()))
- Als schaalbare waarde
Dit zal in MySQL een SQL fout opleveren (maar niet in SQLite).
In MySQL kan dit alleen worden toegepast binnen een UPDATE, DELETE of INSERT statement zolang de subquery geen betrekking heeft op dezelfde tabel, dus:
Dit mag wel
« vorige pagina | volgende pagina »
Inhoudsopgave
- Inleiding
- Joins algemeen
- Inner en outer join
- Cross en natural join
- Joins in de praktijk (1)
- Subqueries
- Joins in de praktijk (2)
- Group by
- Group by voorbeelden
- Conditional staments
- Nog meer voorbeelden
- Nawoord