This section focuses on composing SQL queries, creating PHP programs that make MySQL queries, and outputting tabular data.
Write an SQL query to answer each of the following questions. Recall the world
database:
code | name | continent | independence_year | population | gnp | head_of_state | ... |
---|---|---|---|---|---|---|---|
AFG | Afghanistan | Asia | 1919 | 22720000 | 5976.0 | Mohammad Omar | ... |
NLD | Netherlands | Europe | 1581 | 15864000 | 371362.0 | Beatrix | ... |
... | ... | ... | ... | ... | ... | ... | ... |
id | name | country_code | district | population |
---|---|---|---|---|
3793 | New York | USA | New York | 8008278 |
1 | Los Angeles | USA | California | 3694820 |
... | ... | ... | ... | ... |
country_code | language | official | percentage |
---|---|---|---|
AFG | Pashto | T | 52.4 | NLD | Dutch | T | 95.6 |
... | ... | ... | ... |
'USA'
)? Show the language and the percentage. Order by percentage from largest to smallest.
SELECT language, percentage
FROM languages
WHERE country_code = 'USA'
ORDER BY percentage DESC;
SELECT DISTINCT language
FROM languages
WHERE official='T'
ORDER BY language;
SELECT country_code, language
FROM languages
WHERE percentage = 100
AND language = 'English';
SELECT name
FROM countries
WHERE continent = 'Antarctica';
SELECT name, life_expectancy
FROM countries
WHERE life_expectancy >= 78
ORDER BY life_expectancy DESC;
SELECT DISTINCT continent, region
FROM countries
ORDER BY continent, region;
SELECT name, independence_year
FROM countries
WHERE independence_year < 0;
SELECT name
FROM countries
WHERE name = local_name
ORDER BY name;
Republicas part of their name?
SELECT name
FROM countries
WHERE name LIKE '%Republic%';
SELECT DISTINCT name, government_form
FROM countries
WHERE government_form LIKE '%monarchy%'
ORDER BY government_form, name;
SELECT name
FROM countries
WHERE continent != 'Africa';
SELECT continent, name
FROM countries
WHERE continent IN ('Europe', 'Oceania', 'Antarctica')
ORDER BY continent, name;
SELECT name, gnp
FROM countries
WHERE gnp BETWEEN 10000 AND 50000;
SELECT name
FROM countries
WHERE name LIKE 'A%' OR name LIKE 'B%';
SELECT name, population, surface_area,
population / surface_area as population_density
FROM countries
ORDER BY population_density DESC;
+---------------+ | name | +---------------+ | Belgium | | Austria | | Liechtenstein | | Luxembourg | | Germany | ... +---------------+ 6 rows in set (0.01 sec)
SELECT c.name
FROM countries c
JOIN languages l on l.country_code = c.code
WHERE l.language = 'German' AND l.official = 'T';
+----------+ | name | +----------+ | Brazil | | India | | China | | Pakistan | +----------+ 4 rows in set (0.03 sec)
SELECT DISTINCT c.name
FROM countries c
JOIN cities ci1 ON ci1.country_code = c.code
JOIN cities ci2 ON ci2.country_code = c.code
WHERE ci1.id < ci2.id AND ci1.population >= 5000000 AND ci2.population >= 5000000;
problem by Sylvia Tashev and Stefanie Hatcher
SELECT language, percentage
FROM languages
WHERE country_code = 'USA'
ORDER BY percentage DESC;
SELECT DISTINCT language
FROM languages
WHERE official='T'
ORDER BY language;
SELECT country_code, language
FROM languages
WHERE percentage = 100
AND language = 'English';
SELECT name
FROM countries
WHERE continent = 'Antarctica';
SELECT name, life_expectancy
FROM countries
WHERE life_expectancy >= 78
ORDER BY life_expectancy DESC;
SELECT DISTINCT continent, region
FROM countries
ORDER BY continent, region;
SELECT name, independence_year
FROM countries
WHERE independence_year < 0;
SELECT name
FROM countries
WHERE name = local_name
ORDER BY name;
SELECT name
FROM countries
WHERE name LIKE '%Republic%';
SELECT DISTINCT name, government_form
FROM countries
WHERE government_form LIKE '%monarchy%'
ORDER BY government_form, name;
SELECT name
FROM countries
WHERE continent != 'Africa';
SELECT continent, name
FROM countries
WHERE continent IN ('Europe', 'Oceania', 'Antarctica')
ORDER BY continent, name;
SELECT name, gnp
FROM countries
WHERE gnp BETWEEN 10000 AND 50000;
SELECT name
FROM countries
WHERE name LIKE 'A%' OR name LIKE 'B%';
SELECT name, population, surface_area,
population / surface_area as population_density
FROM countries
ORDER BY population_density DESC;
SELECT c.name
FROM countries c
JOIN languages l on l.country_code = c.code
WHERE l.language = 'German' AND l.official = 'T';
SELECT DISTINCT c.name
FROM countries c
JOIN cities ci1 ON ci1.country_code = c.code
JOIN cities ci2 ON ci2.country_code = c.code
WHERE ci1.id < ci2.id AND ci1.population >= 5000000 AND ci2.population >= 5000000;
Write an SQL query to answer each of the following questions. Recall the simpsons
database:
id | name | |
---|---|---|
123 | Bart | bart@fox.com |
456 | Milhouse | milhouse@fox.com |
888 | Lisa | lisa@fox.com |
404 | Ralph | ralph@fox.com |
id | name |
---|---|
1234 | Krabappel |
5678 | Hoover |
9012 | Stepp |
id | name | teacher_id |
---|---|---|
10001 | Computer Science 142 | 1234 |
10002 | Computer Science 143 | 5678 |
10003 | Computer Science 190M | 9012 |
10004 | Informatics 100 | 1234 |
student_id | course_id | grade |
---|---|---|
123 | 10001 | B- |
123 | 10002 | C |
456 | 10001 | B+ |
888 | 10002 | A+ |
888 | 10003 | A+ |
404 | 10004 | D+ |
+-------+ | grade | +-------+ | B- | | B+ | | A+ | | A+ | | B | +-------+ 5 rows in set (0.00 sec)
SELECT grade
FROM grades
WHERE grade <= 'B-';
+-------+ | grade | +-------+ | C | | A+ | | D- | | B | +-------+ 4 rows in set (0.02 sec)
SELECT g.grade
FROM grades g
JOIN courses c ON c.id = g.course_id
WHERE c.name = 'Computer Science 143';
+-------+-------+ | name | grade | +-------+-------+ | Lisa | A+ | | Ralph | B | +-------+-------+ 2 rows in set (0.02 sec)
SELECT DISTINCT s.name, g.grade
FROM students s
JOIN grades g ON g.student_id = s.id
JOIN courses c ON c.id = g.course_id
WHERE c.name = 'Computer Science 143' AND g.grade <= 'B-';
+----------+-----------------------+-------+ | name | name | grade | +----------+-----------------------+-------+ | Bart | Computer Science 142 | B- | | Lisa | Computer Science 190M | A+ | | Lisa | Computer Science 143 | A+ | | Milhouse | Computer Science 142 | B+ | | Ralph | Computer Science 143 | B | +----------+-----------------------+-------+ 5 rows in set (0.00 sec)
SELECT s.name, c.name, g.grade
FROM students s
JOIN grades g ON g.student_id = s.id
JOIN courses c ON c.id = g.course_id
WHERE g.grade <= 'B-'
ORDER BY s.name;
+----------------------+ | name | +----------------------+ | Computer Science 142 | | Computer Science 143 | +----------------------+ 2 rows in set (0.01 sec)
SELECT DISTINCT c.name
FROM courses c
JOIN grades g1 ON g1.course_id = c.id
JOIN students s1 ON g1.student_id = s1.id
JOIN grades g2 ON g2.course_id = c.id
JOIN students s2 ON g2.student_id = s2.id
WHERE s1.id < s2.id;
problem by Sylvia Tashev and Stefanie Hatcher
SELECT grade
FROM grades
WHERE grade <= 'B-';
SELECT g.grade
FROM grades g
JOIN courses c ON c.id = g.course_id
WHERE c.name = 'Computer Science 143';
SELECT DISTINCT s.name, g.grade
FROM students s
JOIN grades g ON g.student_id = s.id
JOIN courses c ON c.id = g.course_id
WHERE c.name = 'Computer Science 143' AND g.grade <= 'B-';
SELECT s.name, c.name, g.grade
FROM students s
JOIN grades g ON g.student_id = s.id
JOIN courses c ON c.id = g.course_id
WHERE g.grade <= 'B-'
ORDER BY s.name;
SELECT DISTINCT c.name
FROM courses c
JOIN grades g1 ON g1.course_id = c.id
JOIN students s1 ON g1.student_id = s1.id
JOIN grades g2 ON g2.course_id = c.id
JOIN students s2 ON g2.student_id = s2.id
WHERE s1.id < s2.id;