From f65309878c848b53938cce9de2e25f2d89e0ef86 Mon Sep 17 00:00:00 2001 From: Kamila Lambert Date: Fri, 28 Apr 2017 10:03:19 -0700 Subject: [PATCH 1/2] all queries properly loading required data --- .DS_Store | Bin 6148 -> 0 bytes sql/07-query-friends-gabriel.sql | 4 ++++ sql/08-query-likes-grade-two-or-more.sql | 7 +++++++ sql/09-mutual-likes.sql | 13 +++++++++++++ sql/10-not-liked.sql | 8 ++++++++ sql/11-liked-but-does-not-like.sql | 6 ++++++ 6 files changed, 38 insertions(+) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 42c93e74986fb26e1fb4039dff969d29f881789d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKyJ`bL3>?K*7}B^*xxe5)Sd8-p{(%?_X^exD*!5NUu6$ZX4+8c%kS0wSfi$~w z(k?f}=>))5r`-}*0GQJq@!?@={@i_Hcf~lGpK;#29`-MX=iE>7ZxLQQV23TQsA!@_yXyU7>@t| diff --git a/sql/07-query-friends-gabriel.sql b/sql/07-query-friends-gabriel.sql index e69de29..ad62951 100644 --- a/sql/07-query-friends-gabriel.sql +++ b/sql/07-query-friends-gabriel.sql @@ -0,0 +1,4 @@ +-- Find the names of all students who are friends with someone named Gabriel. +SELECT b.name FROM friend +JOIN student a ON a.id = friend.id1 +JOIN student b ON b.id = friend.id2 WHERE a.name = 'Gabriel'; diff --git a/sql/08-query-likes-grade-two-or-more.sql b/sql/08-query-likes-grade-two-or-more.sql index e69de29..c2dcc35 100644 --- a/sql/08-query-likes-grade-two-or-more.sql +++ b/sql/08-query-likes-grade-two-or-more.sql @@ -0,0 +1,7 @@ +-- For every student who likes someone 2 or more grades younger than themselves, return that student's name and grade, and the name and grade of the student they like. + +SELECT a.name liker_name, a.grade liker_grade, b.name likee_name, b.grade likee_grade + FROM student_like + JOIN student a ON a.id = student_like.liker_id + JOIN student b ON b.id = student_like.likee_id + WHERE (a.grade - b.grade) >= 2; diff --git a/sql/09-mutual-likes.sql b/sql/09-mutual-likes.sql index e69de29..bdb209e 100644 --- a/sql/09-mutual-likes.sql +++ b/sql/09-mutual-likes.sql @@ -0,0 +1,13 @@ +-- For every pair of students who both like each other, return the name and grade of both students. Include each pair only once, with the two names in alphabetical order. + +SELECT s1.name liker_name, s1.grade liker_grade, s2.name likee_name, s2.grade likee_grade + FROM ( + SELECT a.liker_id, a.likee_id + FROM student_like a + JOIN student_like b + ON a.liker_id = b.likee_id AND b.liker_id = a.likee_id + ) mutual + JOIN student s1 ON s1.id = mutual.liker_id + JOIN student s2 ON s2.id = mutual.likee_id + WHERE s1.name < s2.name + ORDER BY s1.name ASC; diff --git a/sql/10-not-liked.sql b/sql/10-not-liked.sql index e69de29..770fb4a 100644 --- a/sql/10-not-liked.sql +++ b/sql/10-not-liked.sql @@ -0,0 +1,8 @@ +-- Find all students who do not appear in the like table (as a student who likes or is liked) and return their names and grades. Sort by grade, then by name within each grade. + +SELECT name, grade FROM student + WHERE id NOT IN + (SELECT likee_id FROM student_like) + AND id NOT IN + (SELECT liker_id FROM student_like) + ORDER BY grade ASC, name ASC; diff --git a/sql/11-liked-but-does-not-like.sql b/sql/11-liked-but-does-not-like.sql index e69de29..e53f7ab 100644 --- a/sql/11-liked-but-does-not-like.sql +++ b/sql/11-liked-but-does-not-like.sql @@ -0,0 +1,6 @@ +-- For every situation where student A likes student B, but we have no information about whom B likes (that is, B's id does not appear in the liker_id column of the like table), return A and B's names and grades. + +SELECT a.name, a.grade, b.name, b.grade FROM student_like + JOIN student a ON a.id = student_like.liker_id + JOIN student b ON b.id = student_like.likee_id + WHERE b.id NOT IN (SELECT liker_id FROM student_like); From be013132d1a9e5a138cd51d5496643a67e233b50 Mon Sep 17 00:00:00 2001 From: Kamila Lambert Date: Fri, 28 Apr 2017 10:05:30 -0700 Subject: [PATCH 2/2] all tables created with data loaded and queries pulling correct data --- .gitignore | 1 + sql/01-create-table-student.sql | 6 +++--- sql/02-create-table-friend.sql | 4 ++-- sql/02-create-table-friend0.sql | 4 ++++ sql/02-create-table-friend1.sql | 4 ++++ sql/03-create-table-like.sql | 6 +++--- sql/04-load-table-student.sql | 2 ++ sql/05-load-table-friend.sql | 2 ++ sql/06-load-table-like.sql | 2 ++ sql/07-query-friends-gabriel.sql | 2 +- sql/08-query-likes-grade-two-or-more.sql | 2 +- sql/09-mutual-likes.sql | 2 +- sql/10-not-liked.sql | 2 +- sql/11-liked-but-does-not-like.sql | 2 +- 14 files changed, 28 insertions(+), 13 deletions(-) create mode 100644 .gitignore create mode 100644 sql/02-create-table-friend0.sql create mode 100644 sql/02-create-table-friend1.sql diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/sql/01-create-table-student.sql b/sql/01-create-table-student.sql index 4064ffe..a2c3e04 100644 --- a/sql/01-create-table-student.sql +++ b/sql/01-create-table-student.sql @@ -1,5 +1,5 @@ CREATE TABLE student ( - id INT PRIMARY KEY, - name TEXT, - grade INT + id SERIAL PRIMARY KEY, + name VARCHAR(255), + grade INTEGER ); diff --git a/sql/02-create-table-friend.sql b/sql/02-create-table-friend.sql index c146e43..8363993 100644 --- a/sql/02-create-table-friend.sql +++ b/sql/02-create-table-friend.sql @@ -1,4 +1,4 @@ CREATE TABLE friend ( - id1 INT REFERENCES STUDENT(ID), - id2 INT REFERENCES STUDENT(ID) + id1 INT REFERENCES student(id), + id2 INT REFERENCES student(id) ); diff --git a/sql/02-create-table-friend0.sql b/sql/02-create-table-friend0.sql new file mode 100644 index 0000000..8363993 --- /dev/null +++ b/sql/02-create-table-friend0.sql @@ -0,0 +1,4 @@ +CREATE TABLE friend ( + id1 INT REFERENCES student(id), + id2 INT REFERENCES student(id) +); diff --git a/sql/02-create-table-friend1.sql b/sql/02-create-table-friend1.sql new file mode 100644 index 0000000..8363993 --- /dev/null +++ b/sql/02-create-table-friend1.sql @@ -0,0 +1,4 @@ +CREATE TABLE friend ( + id1 INT REFERENCES student(id), + id2 INT REFERENCES student(id) +); diff --git a/sql/03-create-table-like.sql b/sql/03-create-table-like.sql index 84d6cd7..db76c65 100644 --- a/sql/03-create-table-like.sql +++ b/sql/03-create-table-like.sql @@ -1,4 +1,4 @@ CREATE TABLE student_like ( - liker_id INT references student(ID), - likee_id INT references student(ID) -); + liker_id INT REFERENCES student(ID), + likee_id INT REFERENCES student(ID) +); diff --git a/sql/04-load-table-student.sql b/sql/04-load-table-student.sql index e69de29..0dfc0e6 100644 --- a/sql/04-load-table-student.sql +++ b/sql/04-load-table-student.sql @@ -0,0 +1,2 @@ +COPY student +FROM '/Users/kamilalambert/Desktop/Projects/sql-exercises/data/students.csv' DELIMITER ',' CSV HEADER; diff --git a/sql/05-load-table-friend.sql b/sql/05-load-table-friend.sql index e69de29..7a83c1f 100644 --- a/sql/05-load-table-friend.sql +++ b/sql/05-load-table-friend.sql @@ -0,0 +1,2 @@ +COPY friend +FROM '/Users/kamilalambert/Desktop/Projects/sql-exercises/data/friends.csv' DELIMITER ',' CSV HEADER; diff --git a/sql/06-load-table-like.sql b/sql/06-load-table-like.sql index e69de29..128a3f2 100644 --- a/sql/06-load-table-like.sql +++ b/sql/06-load-table-like.sql @@ -0,0 +1,2 @@ +COPY student_like +FROM '/Users/kamilalambert/Desktop/Projects/sql-exercises/data/likes.csv' DELIMITER ',' CSV HEADER; diff --git a/sql/07-query-friends-gabriel.sql b/sql/07-query-friends-gabriel.sql index ad62951..95bf564 100644 --- a/sql/07-query-friends-gabriel.sql +++ b/sql/07-query-friends-gabriel.sql @@ -1,4 +1,4 @@ --- Find the names of all students who are friends with someone named Gabriel. +-- Find the names of all students who are friends with someone named Gabriel. SELECT b.name FROM friend JOIN student a ON a.id = friend.id1 JOIN student b ON b.id = friend.id2 WHERE a.name = 'Gabriel'; diff --git a/sql/08-query-likes-grade-two-or-more.sql b/sql/08-query-likes-grade-two-or-more.sql index c2dcc35..9ae62db 100644 --- a/sql/08-query-likes-grade-two-or-more.sql +++ b/sql/08-query-likes-grade-two-or-more.sql @@ -1,4 +1,4 @@ --- For every student who likes someone 2 or more grades younger than themselves, return that student's name and grade, and the name and grade of the student they like. +-- For every student who likes someone 2 or more grades younger than themselves, return that student's name and grade, and the name and grade of the student they like. SELECT a.name liker_name, a.grade liker_grade, b.name likee_name, b.grade likee_grade FROM student_like diff --git a/sql/09-mutual-likes.sql b/sql/09-mutual-likes.sql index bdb209e..cbd1725 100644 --- a/sql/09-mutual-likes.sql +++ b/sql/09-mutual-likes.sql @@ -1,4 +1,4 @@ --- For every pair of students who both like each other, return the name and grade of both students. Include each pair only once, with the two names in alphabetical order. +-- For every pair of students who both like each other, return the name and grade of both students. Include each pair only once, with the two names in alphabetical order. SELECT s1.name liker_name, s1.grade liker_grade, s2.name likee_name, s2.grade likee_grade FROM ( diff --git a/sql/10-not-liked.sql b/sql/10-not-liked.sql index 770fb4a..7ffa582 100644 --- a/sql/10-not-liked.sql +++ b/sql/10-not-liked.sql @@ -1,4 +1,4 @@ --- Find all students who do not appear in the like table (as a student who likes or is liked) and return their names and grades. Sort by grade, then by name within each grade. +-- Find all students who do not appear in the like table (as a student who likes or is liked) and return their names and grades. Sort by grade, then by name within each grade. SELECT name, grade FROM student WHERE id NOT IN diff --git a/sql/11-liked-but-does-not-like.sql b/sql/11-liked-but-does-not-like.sql index e53f7ab..a758f82 100644 --- a/sql/11-liked-but-does-not-like.sql +++ b/sql/11-liked-but-does-not-like.sql @@ -1,4 +1,4 @@ --- For every situation where student A likes student B, but we have no information about whom B likes (that is, B's id does not appear in the liker_id column of the like table), return A and B's names and grades. +-- For every situation where student A likes student B, but we have no information about whom B likes (that is, B's id does not appear in the liker_id column of the like table), return A and B's names and grades. SELECT a.name, a.grade, b.name, b.grade FROM student_like JOIN student a ON a.id = student_like.liker_id