SQL Challenges-1: Actors and Directors who jointly worked three or more movies
From the following tables write a SQL query to find those directors and actors who worked together at least three or more movies. Return the director and actor name.
Input:
Table: actor_test
Structure:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
act_id | int(11) | No | PRI | ||
act_name | varchar(255) | YES |
Data:
act_id | act_name |
---|---|
101 | James Stewart |
102 | Deborah Kerr |
103 | Peter OToole |
104 | Robert De Niro |
105 | F. Murray Abraham |
106 | Harrison Ford |
107 | Bill Paxton |
108 | Stephen Baldwin |
109 | Jack Nicholson |
110 | Mark Wahlberg |
Table: director_test
Structure:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
dir_id | int(11) | NO | PRI | ||
dir_name | varchar(255) | YES |
Data:
dir_id | dir_name |
---|---|
201 | Alfred Hitchcock |
202 | Jack Clayton |
203 | James Cameron |
204 | Michael Cimino |
205 | Milos Forman |
206 | Ridley Scott |
207 | Stanley Kubrick |
208 | Bryan Singer |
209 | Roman Polanski |
Input:
Table: movie_test
Structure:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
mov_id | int(11) | No | PRI | ||
movie_name | varchar(255) | YES |
Data:
mov_id | movie_name |
---|---|
901 | Vertigo |
902 | Aliens |
903 | Lawrence of Arabia |
904 | The Deer Hunter |
905 | True Lies |
906 | Blade Runner |
907 | Eyes Wide Shut |
908 | Titanic |
909 | Chinatown |
910 | Ghosts of the Abyss |
Table: mov_direction_test
Structure:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
dir_id | int(11) | YES | MUL | ||
mov_id | int(11) | YES | MUL | ||
act_id | int(11) | YES | MUL |
Data:
dir_id | mov_id | act_id |
---|---|---|
201 | 901 | 101 |
203 | 902 | 107 |
204 | 904 | 104 |
203 | 905 | 107 |
206 | 906 | 106 |
203 | 908 | 107 |
209 | 909 | 109 |
203 | 910 | 107 |
Sample Solution:
SQL Code(MySQL):
CREATE TABLE actor_test (act_id int not null unique, act_name varchar(255));
INSERT INTO actor_test VALUES( 101,'James Stewart');
INSERT INTO actor_test VALUES( 102,'Deborah Kerr');
INSERT INTO actor_test VALUES( 103,'Peter OToole');
INSERT INTO actor_test VALUES( 104,'Robert De Niro');
INSERT INTO actor_test VALUES( 105,'F. Murray Abraham');
INSERT INTO actor_test VALUES( 106,'Harrison Ford');
INSERT INTO actor_test VALUES( 107,'Bill Paxton');
INSERT INTO actor_test VALUES( 108,'Stephen Baldwin');
INSERT INTO actor_test VALUES( 109,'Jack Nicholson');
INSERT INTO actor_test VALUES( 110,'Mark Wahlberg');
CREATE TABLE director_test (dir_id int not null unique, dir_name varchar(255));
INSERT INTO director_test VALUES(201,'Alfred Hitchcock ');
INSERT INTO director_test VALUES(202,'Jack Clayton');
INSERT INTO director_test VALUES(203,'James Cameron');
INSERT INTO director_test VALUES(204,'Michael Cimino');
INSERT INTO director_test VALUES(205,'Milos Forman');
INSERT INTO director_test VALUES(206,'Ridley Scott');
INSERT INTO director_test VALUES(207,'Stanley Kubrick');
INSERT INTO director_test VALUES(208,'Bryan Singer');
INSERT INTO director_test VALUES(209,'Roman Polanski');
CREATE TABLE movie_test(mov_id int not null unique, movie_name varchar(255));
INSERT INTO movie_test VALUES(901,'Vertigo');
INSERT INTO movie_test VALUES(902,'Aliens');
INSERT INTO movie_test VALUES(903,'Lawrence of Arabia');
INSERT INTO movie_test VALUES(904,'The Deer Hunter');
INSERT INTO movie_test VALUES(905,'True Lies');
INSERT INTO movie_test VALUES(906,'Blade Runner');
INSERT INTO movie_test VALUES(907,'Eyes Wide Shut');
INSERT INTO movie_test VALUES(908,'Titanic');
INSERT INTO movie_test VALUES(909,'Chinatown');
INSERT INTO movie_test VALUES(910,'Ghosts of the Abyss');
CREATE TABLE mov_direction_test (dir_id int, mov_id int, act_id int,
FOREIGN KEY(dir_id) REFERENCES director_test(dir_id),
FOREIGN KEY(act_id) REFERENCES actor_test(act_id),
FOREIGN KEY(mov_id) REFERENCES movie_test(mov_id)
);
INSERT INTO mov_direction_test VALUES(201,901,101);
INSERT INTO mov_direction_test VALUES(203,902,107);
INSERT INTO mov_direction_test VALUES(204,904,104);
INSERT INTO mov_direction_test VALUES(203,905,107);
INSERT INTO mov_direction_test VALUES(206,906,106);
INSERT INTO mov_direction_test VALUES(203,908,107);
INSERT INTO mov_direction_test VALUES(209,909,109);
INSERT INTO mov_direction_test VALUES(203,910,107);
SELECT dir_name, act_name
FROM mov_direction_test md
LEFT JOIN director_test dr ON md.dir_id=dr.dir_id
LEFT JOIN actor_test ac ON md.act_id=ac.act_id
LEFT JOIN movie_test mt ON md.mov_id=mt.mov_id
GROUP BY dir_name,act_name
HAVING COUNT(*)>2;
Sample Output:
dir_name |act_name | -------------|-----------| James Cameron|Bill Paxton|
SQL Code Editor:
Contribute your code and comments through Disqus.
Previous: Distributor who purchased all types of item from the company.
Next: Students achieved 100 percent in every subject in every year.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics