This document contains the text of 10 questions for a SQL lab assignment on the IMDB database. For each question, students are instructed to insert their SQL query in the provided comment blocks to retrieve and display specific data based on the question parameters. The questions cover topics like filtering records, aggregating data, using common table expressions, joins, ranking functions and substituting null values.
Presiding Officer Training module 2024 lok sabha elections
USE IMDB -- ensures correct database is active G.docx
1. USE IMDB -- ensures correct database is active
GO
PRINT '|---' + REPLICATE('+----',15) + '|'
PRINT 'Read the questions below and insert your queries where
prompted. When you
are finished,
you should be able to run the file as a script to execute all
answers sequentially
(without errors!)' + CHAR(10)
PRINT 'Queries should be well-formatted. SQL is not case-
sensitive, but it is
good form to
capitalize keywords and table names; you should also put each
projected column on
its own line
and use indentation for neatness. Example:
SELECT Name,
CustomerID
FROM CUSTOMER
WHERE CustomerID < 106;
All SQL statements should end in a semicolon. Whatever
format you choose for your
queries, make
sure that it is readable and consistent.' + CHAR(10)
PRINT 'Be sure to remove the double-dash comment indicator
when you insert your
code!';
2. PRINT '|---' + REPLICATE('+----',15) + '|' + CHAR(10) +
CHAR(10)
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 1 [3pts possible]:
Write the query to display the name and year of birth for all
people born after
1980, who have
directed at least one show (i.e. those who appear at least once in
the
title_directors table).
Limit results to those who have died (who have a value in the
deathYear column).
---------------------------------------------------------------------------
-------
------------
Columns to display: name_basics.primaryName,
name_basics.birthYear
Sort in descending order by birth year.' + CHAR(10)
--
-- [Insert your code here]
--
GO
PRINT 'CIS2275, Lab Week 6, Question 2 [3pts possible]:
Show every genre of television show which has had at least one
title with 500
episodes.
i.e. limit results to the titleType ''tvEpisode'' in the title_basics
table, and
to titles
containing a row in the title_episode table with episodeNumber
500.
3. ---------------------------------------------------------------------------
-------
------------
Columns to display: title_genre.genre
Display genre name only, and eliminate duplicate values.' +
CHAR(10)
GO
--
-- [Insert your code here]
--
GO
PRINT 'CIS2275, Lab Week 6, Question 3 [3pts possible]:
Write a common table expression to identify the WORST shows:
join title_basics
against title_ratings
and limit your results to those with an averageRating value
equal to 1. Project
the title,
type, and startYear from title_basics; and label your CTE as
BADSHOWS.
In the main query, show a breakdown of BADSHOWS grouped
by type, along with the
total number of
rows for each (i.e. GROUP BY titleType)
---------------------------------------------------------------------------
-------
------------
Columns to display: titleType, COUNT(*)
Sort results in descending order by COUNT(*).' + CHAR(10)
4. GO
--
-- [Insert your code here]
--
GO
PRINT 'CIS2275, Lab Week 6, Question 4 [3pts possible]:
Identify the least popular professions. Show each profession
value from the
name_profession table,
along with the total number of matching rows (GROUP BY
profession). Use the
HAVING clause to limit
your results to professions with less than 1,000 rows.
---------------------------------------------------------------------------
-------
------------
Columns to display: name_profession.profession, COUNT(*)'
+ CHAR(10)
--
-- [Insert your code here]
--
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 5 [3pts possible]:
Use the query from #4 above to display the names of all people
belonging to these
professions.
Use the previous query as a subquery in the FROM clause here
to limit the results.
---------------------------------------------------------------------------
5. -------
------------
Columns to display: name_basics.primaryName,
name_profession.profession
Sort results in ascending order by primaryName.' + CHAR(10)
--
-- [Insert your code here]
--
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 6 [3pts possible]:
Show the name of every writer, along with the total number of
titles they''ve
written (i.e. rows in the
title_writers table). Limit results to those who have written
between 5,000 and
10,000 titles (inclusive).
---------------------------------------------------------------------------
-------
------------
Columns to display: name_basics.primaryName, COUNT(*)
Sort results in descending order by primaryName.' + CHAR(10)
--
-- [Insert your code here]
--
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 7 [3pts possible]:
Show the actor and character names for everyone who has
6. performed the same role in
more than one
show with the title ''Battlestar Galactica''. i.e. identify the
combination of
(primaryName, characters)
which occurs in the title_principals table more than once for
matching titles.
---------------------------------------------------------------------------
-------
------------
Columns to display: name_basics.primaryName,
title_principals.characters,
COUNT(*)
Sort results in ascending order by primaryName.' + CHAR(10)
--
-- [Insert your code here]
--
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 8 [3pts possible]:
Identify the names of people who have directed more than five
highest-rated shows
(i.e. title_ratings.averageRating = 10).
For each of these people, display their names and the total
number of shows they
have written.
---------------------------------------------------------------------------
-------
------------
Columns to display: name_basics.primaryName, COUNT(*)
Sort results in ascending order by primaryName.' + CHAR(10)
--
-- [Insert your code here]
--
7. GO
GO
PRINT 'CIS2275, Lab Week 6, Question 9 [3pts possible]:
Display the title and running time for all TV specials ( titleType
= ''tvSpecial''
) from 1982; if the run time is
NULL, substitute zero.
---------------------------------------------------------------------------
-------
------------
Columns to display: title_basics.primaryTitle,
title_basics.runtimeMinutes
Sort in descending numerical order by the resulting calculated
run time value.' +
CHAR(10)
--
-- [Insert your code here]
--
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 10 [3pts possible]:
Identify every movie from 1913 (startYear = 1913, titleType =
''movie''); limit
your results to those with a non-NULL value
in the runtimeMinutescolumn. For each movie, display the
primaryTitle and the
averageRating value from the title_ratings table.
Use DENSE_RANK() to display the rank based on
averageRating (label this
8. RATINGRANK), and also the rank based on runtimeMinutes
(label this LENGTHRANK). Both of these should be based on
an asecending sort
order.
---------------------------------------------------------------------------
-------
------------
Columns to display: title_basics.primaryTitle,
title_ratings.averageRating,
RATINGRANK, LENGTHRANK
Sort results in ascending order by primaryTitle.' + CHAR(10)
--
-- [Insert your code here]
--
GO
GO
---------------------------------------------------------------------------
-------
---
-- This is an anonymous program block. DO NOT CHANGE OR
DELETE.
---------------------------------------------------------------------------
-------
---
BEGIN
PRINT '|---' + REPLICATE('+----',15) + '|';
PRINT ' End of CIS275 Lab Week 6' + REPLICATE(' ',50) +
CONVERT(CHAR(12),GETDATE(),101);
PRINT '|---' + REPLICATE('+----',15) + '|';
END;
9. /*
*****************************************************
**************************************
CIS275 at PCC
CIS275 Lab Week 6: using SQL SERVER 2012 and the IMDB
database
*****************************************************
**************************************
CERTIFICATION:
By typing my name below I certify that the enclosed is
original coding written by myself
without unauthorized assistance. I agree to abide by class
restrictions and understand that
if I have violated them, I may receive reduced credit (or none)
for this assignment.
CONSENT: [your name here]
DATE: [date]
10. *****************************************************
**************************************
*/
USE IMDB -- ensures correct database is active
GO
PRINT '|---' + REPLICATE('+----',15) + '|'
PRINT 'Read the questions below and insert your queries where
prompted. When you are finished,
you should be able to run the file as a script to execute all
answers sequentially (without errors!)' + CHAR(10)
PRINT 'Queries should be well-formatted. SQL is not case-
sensitive, but it is good form to
capitalize keywords and table names; you should also put each
projected column on its own line
and use indentation for neatness. Example:
11. SELECT Name,
CustomerID
FROM CUSTOMER
WHERE CustomerID < 106;
All SQL statements should end in a semicolon. Whatever
format you choose for your queries, make
sure that it is readable and consistent.' + CHAR(10)
PRINT 'Be sure to remove the double-dash comment indicator
when you insert your code!';
PRINT '|---' + REPLICATE('+----',15) + '|' + CHAR(10) +
CHAR(10)
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 1 [3pts possible]:
Write the query to display the name and year of birth for all
people born after 1980, who have
directed at least one show (i.e. those who appear at least once in
the title_directors table).
12. Limit results to those who have died (who have a value in the
deathYear column).
---------------------------------------------------------------------------
-------------------
Columns to display: name_basics.primaryName,
name_basics.birthYear
Sort in descending order by birth year.' + CHAR(10)
--
-- [Insert your code here]
--
GO
PRINT 'CIS2275, Lab Week 6, Question 2 [3pts possible]:
Show every genre of television show which has had at least one
title with 500 episodes.
i.e. limit results to the titleType ''tvEpisode'' in the title_basics
table, and to titles
containing a row in the title_episode table with episodeNumber
500.
---------------------------------------------------------------------------
13. -------------------
Columns to display: title_genre.genre
Display genre name only, and eliminate duplicate values.' +
CHAR(10)
GO
--
-- [Insert your code here]
--
GO
PRINT 'CIS2275, Lab Week 6, Question 3 [3pts possible]:
Write a common table expression to identify the WORST shows:
join title_basics against title_ratings
and limit your results to those with an averageRating value
equal to 1. Project the title,
type, and startYear from title_basics; and label your CTE as
BADSHOWS.
14. In the main query, show a breakdown of BADSHOWS grouped
by type, along with the total number of
rows for each (i.e. GROUP BY titleType)
---------------------------------------------------------------------------
-------------------
Columns to display: titleType, COUNT(*)
Sort results in descending order by COUNT(*).' + CHAR(10)
GO
--
-- [Insert your code here]
--
GO
PRINT 'CIS2275, Lab Week 6, Question 4 [3pts possible]:
Identify the least popular professions. Show each profession
value from the name_profession table,
along with the total number of matching rows (GROUP BY
15. profession). Use the HAVING clause to limit
your results to professions with less than 1,000 rows.
---------------------------------------------------------------------------
-------------------
Columns to display: name_profession.profession, COUNT(*)'
+ CHAR(10)
--
-- [Insert your code here]
--
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 5 [3pts possible]:
Use the query from #4 above to display the names of all people
belonging to these professions.
Use the previous query as a subquery in the FROM clause here
to limit the results.
---------------------------------------------------------------------------
-------------------
Columns to display: name_basics.primaryName,
16. name_profession.profession
Sort results in ascending order by primaryName.' + CHAR(10)
--
-- [Insert your code here]
--
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 6 [3pts possible]:
Show the name of every writer, along with the total number of
titles they''ve written (i.e. rows in the
title_writers table). Limit results to those who have written
between 5,000 and 10,000 titles (inclusive).
---------------------------------------------------------------------------
-------------------
Columns to display: name_basics.primaryName, COUNT(*)
Sort results in descending order by primaryName.' + CHAR(10)
--
-- [Insert your code here]
17. --
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 7 [3pts possible]:
Show the actor and character names for everyone who has
performed the same role in more than one
show with the title ''Battlestar Galactica''. i.e. identify the
combination of (primaryName, characters)
which occurs in the title_principals table more than once for
matching titles.
---------------------------------------------------------------------------
-------------------
Columns to display: name_basics.primaryName,
title_principals.characters, COUNT(*)
Sort results in ascending order by primaryName.' + CHAR(10)
--
-- [Insert your code here]
--
18. GO
GO
PRINT 'CIS2275, Lab Week 6, Question 8 [3pts possible]:
Identify the names of people who have directed more than five
highest-rated shows (i.e. title_ratings.averageRating = 10).
For each of these people, display their names and the total
number of shows they have written.
---------------------------------------------------------------------------
-------------------
Columns to display: name_basics.primaryName, COUNT(*)
Sort results in ascending order by primaryName.' + CHAR(10)
--
-- [Insert your code here]
--
GO
GO
19. PRINT 'CIS2275, Lab Week 6, Question 9 [3pts possible]:
Display the title and running time for all TV specials ( titleType
= ''tvSpecial'' ) from 1982; if the run time is
NULL, substitute zero.
---------------------------------------------------------------------------
-------------------
Columns to display: title_basics.primaryTitle,
title_basics.runtimeMinutes
Sort in descending numerical order by the resulting calculated
run time value.' + CHAR(10)
--
-- [Insert your code here]
--
GO
GO
PRINT 'CIS2275, Lab Week 6, Question 10 [3pts possible]:
Identify every movie from 1913 (startYear = 1913, titleType =
''movie''); limit your results to those with a non-NULL value
20. in the runtimeMinutescolumn. For each movie, display the
primaryTitle and the averageRating value from the title_ratings
table.
Use DENSE_RANK() to display the rank based on
averageRating (label this RATINGRANK), and also the rank
based on runtimeMinutes
(label this LENGTHRANK). Both of these should be based on
an asecending sort order.
---------------------------------------------------------------------------
-------------------
Columns to display: title_basics.primaryTitle,
title_ratings.averageRating,
RATINGRANK, LENGTHRANK
Sort results in ascending order by primaryTitle.' + CHAR(10)
--
-- [Insert your code here]
--
GO
GO
21. ---------------------------------------------------------------------------
----------
-- This is an anonymous program block. DO NOT CHANGE OR
DELETE.
---------------------------------------------------------------------------
----------
BEGIN
PRINT '|---' + REPLICATE('+----',15) + '|';
PRINT ' End of CIS275 Lab Week 6' + REPLICATE(' ',50) +
CONVERT(CHAR(12),GETDATE(),101);
PRINT '|---' + REPLICATE('+----',15) + '|';
END;