runtime
27 / 88

lesson 27 Joins & sets · intermediate

INTERSECT & EXCEPT

Find values shared by two results or present in only one.

the idea

INTERSECT returns rows present in both queries; EXCEPT returns rows from the first query that are absent from the second. Both compare whole rows and remove duplicates, so each developer appears once.

Dataset: Developer Platform

The tables the challenges use, with their first 6 rows. Under each column name: the kind of value it holds, and which table it links to.

pull_requests10 columns · 13,242 rows
pull_request_idnumber · unique idrepository_idnumber · links to repositoriesauthor_idnumber · links to developerstitletextcreated_atdate & timemerged_atdate & timeclosed_atdate & timestatetextadditionsnumberdeletionsnumber
1124Fix rate limiter2024-01-27 05:50:25NULL2024-02-16 05:29:35closed4710
2158Fix dashboard query2024-02-10 17:45:142024-02-11 12:07:272024-02-11 12:07:27merged165
319Fix cache invalidation2024-02-12 12:03:262024-02-12 18:28:292024-02-12 18:28:29merged763365
4124Migrate retry logic2024-02-14 09:27:382024-02-16 01:04:572024-02-16 01:04:57merged16153
519Remove login flow2024-03-10 14:32:052024-03-11 04:00:502024-03-11 04:00:50merged396129
6158Migrate cache invalidation2024-03-12 10:11:262024-03-12 17:06:252024-03-12 17:06:25merged7151
pull_request_idnumber · unique id
1
repository_idnumber · links to repositories
1
author_idnumber · links to developers
24
titletext
Fix rate limiter
created_atdate & time
2024-01-27 05:50:25
merged_atdate & time
NULL
closed_atdate & time
2024-02-16 05:29:35
statetext
closed
additionsnumber
47
deletionsnumber
10
pull_request_idnumber · unique id
2
repository_idnumber · links to repositories
1
author_idnumber · links to developers
58
titletext
Fix dashboard query
created_atdate & time
2024-02-10 17:45:14
merged_atdate & time
2024-02-11 12:07:27
closed_atdate & time
2024-02-11 12:07:27
statetext
merged
additionsnumber
16
deletionsnumber
5
pull_request_idnumber · unique id
3
repository_idnumber · links to repositories
1
author_idnumber · links to developers
9
titletext
Fix cache invalidation
created_atdate & time
2024-02-12 12:03:26
merged_atdate & time
2024-02-12 18:28:29
closed_atdate & time
2024-02-12 18:28:29
statetext
merged
additionsnumber
763
deletionsnumber
365
pull_request_idnumber · unique id
4
repository_idnumber · links to repositories
1
author_idnumber · links to developers
24
titletext
Migrate retry logic
created_atdate & time
2024-02-14 09:27:38
merged_atdate & time
2024-02-16 01:04:57
closed_atdate & time
2024-02-16 01:04:57
statetext
merged
additionsnumber
161
deletionsnumber
53
pull_request_idnumber · unique id
5
repository_idnumber · links to repositories
1
author_idnumber · links to developers
9
titletext
Remove login flow
created_atdate & time
2024-03-10 14:32:05
merged_atdate & time
2024-03-11 04:00:50
closed_atdate & time
2024-03-11 04:00:50
statetext
merged
additionsnumber
396
deletionsnumber
129
pull_request_idnumber · unique id
6
repository_idnumber · links to repositories
1
author_idnumber · links to developers
58
titletext
Migrate cache invalidation
created_atdate & time
2024-03-12 10:11:26
merged_atdate & time
2024-03-12 17:06:25
closed_atdate & time
2024-03-12 17:06:25
statetext
merged
additionsnumber
71
deletionsnumber
51

first 6 of 13,242 rows · your queries use all of them

reviews5 columns · 19,622 rows
review_idnumber · unique idpull_request_idnumber · links to pull_requestsreviewer_idnumber · links to developerssubmitted_atdate & timestatetext
1877519862024-01-01 04:49:28approved
210172452024-01-01 04:49:34commented
31058623402024-01-01 06:55:14commented
41130825512024-01-01 07:54:01changes_requested
5977722042024-01-01 12:48:19approved
6827792024-01-01 16:04:29approved
review_idnumber · unique id
1
pull_request_idnumber · links to pull_requests
8775
reviewer_idnumber · links to developers
1986
submitted_atdate & time
2024-01-01 04:49:28
statetext
approved
review_idnumber · unique id
2
pull_request_idnumber · links to pull_requests
1017
reviewer_idnumber · links to developers
245
submitted_atdate & time
2024-01-01 04:49:34
statetext
commented
review_idnumber · unique id
3
pull_request_idnumber · links to pull_requests
10586
reviewer_idnumber · links to developers
2340
submitted_atdate & time
2024-01-01 06:55:14
statetext
commented
review_idnumber · unique id
4
pull_request_idnumber · links to pull_requests
11308
reviewer_idnumber · links to developers
2551
submitted_atdate & time
2024-01-01 07:54:01
statetext
changes_requested
review_idnumber · unique id
5
pull_request_idnumber · links to pull_requests
9777
reviewer_idnumber · links to developers
2204
submitted_atdate & time
2024-01-01 12:48:19
statetext
approved
review_idnumber · unique id
6
pull_request_idnumber · links to pull_requests
827
reviewer_idnumber · links to developers
79
submitted_atdate & time
2024-01-01 16:04:29
statetext
approved

first 6 of 19,622 rows · your queries use all of them

worked example

Run these steps in order to see the idea before you write your own query. The step marked “the pattern” is what the challenges ask for. Running the example does not count toward progress.

  1. Find reviewers who never authored. Run this. EXCEPT returns reviewer ids that do not appear as pull request authors.the pattern

    example.sql
    SELECT reviewer_id
    FROM reviews
    EXCEPT
    SELECT author_id
    FROM pull_requests;
  2. Measure overlap between roles. Run this. Subqueries count distinct authors, reviewers, and developers in both roles.

    step-2.sql
    SELECT
      (
        SELECT COUNT(DISTINCT author_id)
        FROM pull_requests
      ) AS authors,
      (
        SELECT COUNT(DISTINCT reviewer_id)
        FROM reviews
      ) AS reviewers,
      (
        SELECT COUNT(*)
        FROM (
          SELECT author_id
          FROM pull_requests
          INTERSECT
          SELECT reviewer_id
          FROM reviews
        )
      ) AS both_roles;

common mistake

EXCEPT is not symmetric: authors EXCEPT reviewers is a different set from reviewers EXCEPT authors.

challenge 1

Return developer_id for developers who both authored a pull request and submitted a review.

what to return

Columns
developer_id
Rows
any order
challenge-1.sql
 
To master this lesson, solve both challenges without hints and pass the concept check. 3 of 3 to go.
INTERSECT & EXCEPT — Joins & sets · Runtime