Skip to content
Open

SQL #59

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added AnimalTable.db
Binary file not shown.
Binary file added BookCollection.db
Binary file not shown.
Binary file added MusicCollection.db
Binary file not shown.
182 changes: 182 additions & 0 deletions NotesB
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
-- Turn on foreign key constraints (SQLite only)

PRAGMA foreign_keys = ON;

-- Creating the tables:

CREATE TABLE album (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(128) NOT NULL,
release_year INTEGER
);

CREATE TABLE artist (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(128) NOT NULL
);

CREATE TABLE track (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(128) NOT NULL,
album_id INTEGER, --foreign key
FOREIGN KEY (album_id) REFERENCES album (id));


CREATE TABLE artist_album (
artist_id INTEGER,
album_id INTEGER,
FOREIGN KEY(artist_id) REFERENCES artist(id),
FOREIGN KEY(album_id) REFERENCES album(id)
);

-- Populate tables

INSERT INTO album (title, release_year) VALUES ("Super Awesome Album", 1990);
INSERT INTO album (title) VALUES ("Super Funky Album");
INSERT INTO album (title, release_year) VALUES ("Super Disco Album", 1978);
INSERT INTO album (title, release_year) VALUES ("Super Hairband Album", 1984);
INSERT INTO album (title) VALUES ("Super Dubstep Album");

INSERT INTO artist (name) VALUES ("Luke and the Droidtones");
INSERT INTO artist (name) VALUES ("Leia and the Ewoks");
INSERT INTO artist (name) VALUES ("Han Solo");

INSERT INTO artist_album (artist_id, album_id) VALUES (1, 5);
INSERT INTO artist_album (artist_id, album_id) VALUES (1, 2);
INSERT INTO artist_album (artist_id, album_id) VALUES (2, 1);
INSERT INTO artist_album (artist_id, album_id) VALUES (2, 2);
INSERT INTO artist_album (artist_id, album_id) VALUES (3, 3);
INSERT INTO artist_album (artist_id, album_id) VALUES (3, 4);

INSERT INTO track (title, album_id) VALUES ("Super Awesome Track 1", 1);
INSERT INTO track (title, album_id) VALUES ("Super Awesome Track 2", 1);
INSERT INTO track (title, album_id) VALUES ("Super Awesome Track 3", 1);
INSERT INTO track (title, album_id) VALUES ("Super Awesome Track 4", 1);
INSERT INTO track (title, album_id) VALUES ("Super Awesome Track 5", 1);

INSERT INTO track (title, album_id) VALUES ("Super Funky Track 1", 2);
INSERT INTO track (title, album_id) VALUES ("Super Funky Track 2", 2);
INSERT INTO track (title, album_id) VALUES ("Super Funky Track 3", 2);
INSERT INTO track (title, album_id) VALUES ("Super Funky Track 4", 2);

INSERT INTO track (title, album_id) VALUES ("Super Disco Track 1", 3);
INSERT INTO track (title, album_id) VALUES ("Super Disco Track 2", 3);
INSERT INTO track (title, album_id) VALUES ("Super Disco Track 3", 3);

INSERT INTO track (title, album_id) VALUES ("Super Hairband Track 1", 4);
INSERT INTO track (title, album_id) VALUES ("Super Hairband Track 2", 4);
INSERT INTO track (title, album_id) VALUES ("Super Hairband Track 3", 4);
INSERT INTO track (title, album_id) VALUES ("Super Hairband Track 4", 4);
INSERT INTO track (title, album_id) VALUES ("Super Hairband Track 5", 4);
INSERT INTO track (title, album_id) VALUES ("Super Hairband Track 6", 4);
INSERT INTO track (title, album_id) VALUES ("Super Hairband Track 7", 4);

INSERT INTO track (title, album_id) VALUES ("Super Dubstep Track 1", 5);
INSERT INTO track (title, album_id) VALUES ("Super Dubstep Track 2", 5);
INSERT INTO track (title, album_id) VALUES ("Super Dubstep Track 3", 5);
INSERT INTO track (title, album_id) VALUES ("Super Dubstep Track 4", 5);
INSERT INTO track (title, album_id) VALUES ("Super Dubstep Track 5", 5);


-- Show all tracks

SELECT * FROM track;

-- All albums between 1975 and 1990

SELECT * FROM album WHERE release_year <= 1990 AND release_year >= 1975;
SELECT * FROM album WHERE release_year BETWEEN 1975 AND 1990;

-- All the start with "Super D"

SELECT * FROM album WHERE title like 'Super D%';

-- Same, with "any letter" instead of "p" in "Super

SELECT * FROM album WHERE title like 'Su_er D%';

-- Anything that ends with "Album"

SELECT * FROM album WHERE title like '%Album';

-- Anything with a "k" anywhere in the title

SELECT * FROM album WHERE title like '%k%';

-- All albums with no release year (NULL release_year)

SELECT * FROM album WHERE release_year IS NULL;

-- All tracks from Super Funky Album

SELECT track.title
FROM track, album
WHERE track.album_id = album.id
AND album.title = "Super Funky Album";

-- All tracks from all albums

SELECT track.title FROM track, album WHERE track.album_id = album.id;

-- Same, but also show album title

SELECT track.title, album.title FROM track, album WHERE track.album_id = album.id;

-- All album titles from artist Han Solo

SELECT album.title
FROM album, artist_album, artist
WHERE artist_album.album_id = album.id
AND artist_album.artist_id = artist.id
AND artist.name = "Han Solo";

-- Same, with subselects

SELECT title FROM album WHERE id IN
(SELECT album_id FROM artist_album WHERE artist_id =
(SELECT id FROM artist WHERE name = "Han Solo"));

-- Average of albums' release years

SELECT AVG(release_year) FROM album;

-- Same, since AVG ignores NULL rows

SELECT AVG(release_year) FROM album WHERE release_year is not null;
ase_year)

-- Average release year for albums by Leia and the Ewoks

SELECT AVG(release_year) FROM album, artist_album, artist
WHERE artist_album.artist_id = artist.id
AND artist_album.album_id = album.id
AND artist.name = "Leia and the Ewoks";

-- Count of rows from artist with non-NULL id fields
SELECT COUNT(id) FROM artist;

-- Count of rows from artist, unconditionally
SELECT COUNT(*) FROM artist;

-- Count of rows from artist, renamed to "total"

SELECT COUNT(*) AS total FROM artist;

-- Count of tracks on Super Dubstep Album

SELECT COUNT(*) FROM track, album
WHERE track.album_id = album.id
AND album.title = 'Super Dubstep Album';

-- Count of album release years, not counting NULL entries

SELECT count(release_year) FROM album;

-- Example of NOT a SQL injection attack, when the user enters "beej"

-- SELECT * FROM foo WHERE user = 'beej';

-- Example of a SQL injection attack, when the user enters
-- "beej'; DROP TABLE foo; --"

-- SELECT * FROM foo WHERE user = 'beej'; DROP TABLE foo; --';
97 changes: 97 additions & 0 deletions day1.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
-- Formatting

.mode column
.header on

-- Enable Foreign Keys

PRAGMA foreign_keys = ON;

-- Create Tables

CREATE TABLE album (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(128) NOT NULL,
release_year INTEGER
);

CREATE TABLE artist (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(128) NOT NULL
);

CREATE TABLE track (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(128) NOT NULL,
album_id INTEGER, --foreign key
FOREIGN KEY (album_id) REFERENCES album (id)
);

CREATE TABLE artist_album (
artist_id INTEGER,
album_id INTEGER,
FOREIGN KEY(artist_id) REFERENCES artist(id),
FOREIGN KEY(album_id) REFERENCES album(id)
);

-- Add Data

.read setup.db

-- All albums

SELECT * FROM album

-- All albums between 1975 and 1990

SELECT * FROM album WHERE release_year <= 1990 AND release_year >= 1975;
SELECT * FROM album WHERE release_year BETWEEN 1975 AND 1990;

-- All the start with "Super D"

SELECT * FROM album WHERE title like 'Super D%';

-- All albums with no release date

SELECT * FROM album WHERE release_year is NULL;

-- All tracks from Super Funky Album

SELECT track.title
FROM track, album
WHERE track.album_id = album.id
AND album.title = "Super Funky Album";

-- Same query as above, but rename the column from title to Track_Title in the output.

SELECT track.title AS Track_Title
FROM track, album
WHERE track.album_id = album.id
AND album.title = "Super Funky Album";

-- All album titles from artist Han Solo

SELECT album.title
FROM album, artist_album, artist
WHERE artist_album.album_id = album.id
AND artist_album.artist_id = artist.id
AND artist.name = "Han Solo";

-- Average of albums' release years

SELECT AVG(release_year) FROM album;

-- Average release year for albums by Leia and the Ewoks

SELECT AVG(release_year) FROM album, artist_album, artist
WHERE artist_album.artist_id = artist.id
AND artist_album.album_id = album.id
AND artist.name = "Leia and the Ewoks";

-- Count artists

SELECT COUNT(*) FROM artist;

-- Count of tracks on Super Dubstep Album

SELECT COUNT(*) FROM track, album WHERE track.album_id = album.id AND album.title = 'Super Dubstep Album';
48 changes: 48 additions & 0 deletions day2.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
-- Formatting

.mode column
.header on

-- Enable Foreign Keys

PRAGMA foreign_keys = ON;

-- Create Tables

create table author (
id integer primary key autoincrement,
name varchar(128) not null
);

create table note (
id integer primary key autoincrement,
title varchar(128) not null,
content varchar(1024),
created_on datetime not null default(date('now')),
author_id integer references author(id)
);

-- Insert authors to the author table.

INSERT INTO author (name) VALUES ("First");
INSERT INTO author (name) VALUES ("Second");
INSERT INTO author (name) VALUES ("Third");
INSERT INTO note (title, content, author_id) values ('One', 'This is a first note', 1);
INSERT INTO note (title, content, author_id) values ('Two', 'This is a second note', 2);
INSERT INTO note (title, content, author_id) values ('Three', 'This is a third note', 3);

-- Select all notes by an author's name.

SELECT * FROM note, author WHERE author_id = author.id AND author.id = 1;

-- Select author for a particular note by note ID.

SELECT name FROM note, author WHERE note.author_id = author.id AND node.id = 1

-- Select the names of all the authors along with the number of notes they each have.

SELECT name, COUNT(*) as "total" FROM note, author WHERE note.author_id = author.id GROUP BY author_id;

-- Delete authors from the author table.

DELETE FROM author WHERE name = "Second";