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)
PHP script in nieuw venster Selecteer het PHP script
1
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



- In de FROM clause
Met een net woord heet dit een derived table maar iedereen noemt dit een inline view:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)

Het alias is hier vereist.

- Als vergelijkings waarde
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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()))


- Als schaalbare waarde
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
INSERT INTO
    t1
    (k1,k2)
VALUES
    ((SELECT MAX(k1) FROM t1) + 1, 'something')

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
INSERT INTO
    t1
    (k1,k2)
VALUES
    ((SELECT MAX(k3) FROM t2) + 1, 'something')

Dit mag wel

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.