From 124f2838223c8ddf15731824f162a85648ac0adc Mon Sep 17 00:00:00 2001 From: holly-g Date: Fri, 7 Sep 2018 16:26:39 +0000 Subject: [PATCH 1/4] Create tables --- queries.sql | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 queries.sql diff --git a/queries.sql b/queries.sql new file mode 100644 index 0000000..e65e7bd --- /dev/null +++ b/queries.sql @@ -0,0 +1,30 @@ +CREATE TABLE organization ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name VARCHAR(128) NOT NULL UNIQUE, + created TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE channel ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name VARCHAR(128) NOT NULL UNIQUE, + organization_id INTEGER REFERENCES organization(id) +); + +CREATE TABLE user ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name VARCHAR(128) NOT NULL UNIQUE +); + +CREATE TABLE message ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + content TEXT, + post_time DATETIME default current_time, + user_id INTEGER REFERENCES user(id), + channel_id INTEGER REFERENCES channel(id) +); + +CREATE TABLE user_channel ( + user_id INTEGER REFERENCES user(id), + channel_id INTEGER REFERENCES channel(id) +); + From 08a82a49d6408034627e41bf3404f9fc940a478c Mon Sep 17 00:00:00 2001 From: holly-g Date: Fri, 7 Sep 2018 17:34:14 +0000 Subject: [PATCH 2/4] Insert queries --- queries.sql | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/queries.sql b/queries.sql index e65e7bd..d367389 100644 --- a/queries.sql +++ b/queries.sql @@ -1,3 +1,5 @@ +PRAGMA foreign_keys = ON; + CREATE TABLE organization ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(128) NOT NULL UNIQUE, @@ -15,6 +17,7 @@ CREATE TABLE user ( name VARCHAR(128) NOT NULL UNIQUE ); + CREATE TABLE message ( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT, @@ -23,8 +26,36 @@ CREATE TABLE message ( channel_id INTEGER REFERENCES channel(id) ); +--- Join table for users + channels --- + CREATE TABLE user_channel ( user_id INTEGER REFERENCES user(id), channel_id INTEGER REFERENCES channel(id) ); + + +INSERT INTO organization (name) VALUES ('Lambda School'); + +INSERT INTO user (name) VALUES ('ALice'); +INSERT INTO user (name) VALUES ('Bob'); +INSERT INTO user (name) VALUES ('Chris'); + +INSERT INTO channel (name, organization_id) VALUES ('#general', 1); +INSERT INTO channel (name, organization_id) VALUES ('#random', 2); + +INSERT INTO user_channel (user_id, channel_id) VALUES (1, 1); +INSERT INTO user_channel (user_id, channel_id) VALUES (1, 2); +INSERT INTO user_channel (user_id, channel_id) VALUES (2, 1); +INSERT INTO user_channel (user_id, channel_id) VALUES (2, 3); + +INSERT INTO message (content, user_id, channel_id) VALUES ('Have a great weekend!', 1, 1); +INSERT INTO message (content, user_id, channel_id) VALUES (':partypotato:', 1, 2); +INSERT INTO message (content, user_id, channel_id) VALUES ('Ready for Lambda Labs', 1, 1); +INSERT INTO message (content, user_id, channel_id) VALUES ('SQL is too verbose for me', 1, 2); +INSERT INTO message (content, user_id, channel_id) VALUES ('Happy Friday!', 2, 1); +INSERT INTO message (content, user_id, channel_id) VALUES (':ultrafastparrot:', 2, 1 ); +INSERT INTO message (content, user_id, channel_id) VALUES (':coffeeparrot:', 3, 2); +INSERT INTO message (content, user_id, channel_id) VALUES ('What is the weekly retro topic?', 3, 2); +INSERT INTO message (content, user_id, channel_id) VALUES (':lambdareps:', 1, 2); +INSERT INTO message (content, user_id, channel_id) VALUES ('Almost done!', 2, 1); From f17b58d6ac4615ca3a3d8793711282b1521af175 Mon Sep 17 00:00:00 2001 From: holly-g Date: Fri, 7 Sep 2018 18:10:22 +0000 Subject: [PATCH 3/4] Select queries --- queries.sql | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/queries.sql b/queries.sql index d367389..c27288a 100644 --- a/queries.sql +++ b/queries.sql @@ -21,9 +21,10 @@ CREATE TABLE user ( CREATE TABLE message ( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT, - post_time DATETIME default current_time, user_id INTEGER REFERENCES user(id), channel_id INTEGER REFERENCES channel(id) + created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); --- Join table for users + channels --- @@ -59,3 +60,24 @@ INSERT INTO message (content, user_id, channel_id) VALUES (':coffeeparrot:', 3, INSERT INTO message (content, user_id, channel_id) VALUES ('What is the weekly retro topic?', 3, 2); INSERT INTO message (content, user_id, channel_id) VALUES (':lambdareps:', 1, 2); INSERT INTO message (content, user_id, channel_id) VALUES ('Almost done!', 2, 1); + + +SELECT name FROM organization; +SELECT name FROM channel; + +SELECT channel.name FROM channel, organization +WHERE channel.organization_id = organization.id AND organization.name = "Lambda School"; + +SELECT content FROM message, channel WHERE channel_id = channel.id AND channel.name = '#general' +ORDER BY created DESC; + +SELECT content FROM message INNER JOIN user +ON message.user_id IS user.id WHERE user.name IS 'Alice'; + +SELECT content FROM message, user, channel +WHERE user_id = user.id AND channel_id = channel.id AND channel.name = '#random' AND user.name = 'Bob'; + +SELECT COUNT(user.id) AS "Message Count", user.name AS "User Name" +FROM message INNER JOIN user ON message.user_id IS user.id +INNER JOIN channel WHERE message.channel_id IS channel_id +GROUP BY user.id; \ No newline at end of file From 38f3c2599587c576705e1c3cf64740808043fba8 Mon Sep 17 00:00:00 2001 From: holly-g Date: Fri, 7 Sep 2018 18:29:32 +0000 Subject: [PATCH 4/4] Add short answer (MVP complete) --- queries.sql | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/queries.sql b/queries.sql index c27288a..c9dfb8e 100644 --- a/queries.sql +++ b/queries.sql @@ -1,4 +1,6 @@ -PRAGMA foreign_keys = ON; +.mode column +.header on + CREATE TABLE organization ( id INTEGER PRIMARY KEY AUTOINCREMENT, @@ -17,18 +19,15 @@ CREATE TABLE user ( name VARCHAR(128) NOT NULL UNIQUE ); - CREATE TABLE message ( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT, user_id INTEGER REFERENCES user(id), - channel_id INTEGER REFERENCES channel(id) + channel_id INTEGER REFERENCES channel(id), created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ---- Join table for users + channels --- - CREATE TABLE user_channel ( user_id INTEGER REFERENCES user(id), channel_id INTEGER REFERENCES channel(id) @@ -80,4 +79,8 @@ WHERE user_id = user.id AND channel_id = channel.id AND channel.name = '#random' SELECT COUNT(user.id) AS "Message Count", user.name AS "User Name" FROM message INNER JOIN user ON message.user_id IS user.id INNER JOIN channel WHERE message.channel_id IS channel_id -GROUP BY user.id; \ No newline at end of file +GROUP BY user.id; + +--- What SQL keywords or concept would you use if you wanted to automatically delete all messages by a user if that user were deleted from the `user` table? --- + +--- Answer: ON DELETE CASCADE --- \ No newline at end of file