From 5efc031902c9109c1db0f2a79e1cddbe268eba31 Mon Sep 17 00:00:00 2001 From: JulianAlexander Date: Thu, 9 Aug 2018 23:56:34 +0100 Subject: [PATCH] SQL --- AnimalTable.db | Bin 0 -> 36864 bytes BookCollection.db | Bin 0 -> 16384 bytes MusicCollection.db | Bin 0 -> 24576 bytes NotesB | 182 +++++++++++++++++++++++++++++++++++++++++++++ day1.sql | 97 ++++++++++++++++++++++++ day2.sql | 48 ++++++++++++ 6 files changed, 327 insertions(+) create mode 100644 AnimalTable.db create mode 100644 BookCollection.db create mode 100644 MusicCollection.db create mode 100644 NotesB create mode 100644 day1.sql create mode 100644 day2.sql diff --git a/AnimalTable.db b/AnimalTable.db new file mode 100644 index 0000000000000000000000000000000000000000..e27970481061605d3f7b5aed6598713a68f32e81 GIT binary patch literal 36864 zcmeI5O>7%Q6vub=BaXecCv6D+qA-M(#>8oBJ86qJfZIAv)Wm5W7pbRclPu{HXWjZk z#X?9;PjKK?i3{RXaYG1hluK14kf=ByBvep~I8ZnsA*2=&apKMH+O=B`ZBK2=TWfdi z`OnOo_nQ|-yKgm~KQ?34P4-%)x@Oc_RvM59kzQd;k|YAVAND@jRqr!Dw>GZdYa`OG z?Po)DLsG*{iSDOY!dJr0;QRWI{B^I!s3QR+fCP{L5)ST>Dn-Ky0WjPhb*t@FMAU@@O7tmR}X&{dlc2Kwr*%nNzlB;6p_BasL> z*Kj0Uza;>nd{H}JH%{bP2dnWEuD8j64$m91N_j}ZJ8H6u;F{5WK|QQuVyYZ zAqHDC1IeRmUu1NYoNz`|J6(pW(1n_Lx?$Q&<{clku2J40j&R3Q&@#EI_#%k}Ss!z| zG?(gD#jd$0wYv+q5L~^#fVqopAh|w3d=WmKZ@NfrYt1Md&Qb2N<(7e|yE^F%QTV%B zFCv*~{h|9wnnuuQ;C<+;J?V z-LnGUBK`cEBm}!kKa%L5^m}?4-r$A=kN^@u0!RP}AOR$R1dsp{Kmter2|Qc^gQ^xG z33Al5?WP9Dm4;=@TNQ1PY$K)0+H9#|84a;UTa6cqW zv>`I&pRAh8>H)YR69A7?dQGB#&<%Qx{`znoMC(WZ2_OL^fCP{L5BL#1BA^o`LA>Pz zWDgKu55NaIU+=G<7U%?xQBT4X5TbAG~YO7 zR@tG(Vy$kTVmZDJV%)Dv6S6Bz8CG@Cu$NuMcPY}ZO1nMnkX2i%c*4aY9|&G=lMQ>d z=?bwvFyhtEoiS?_SgO%6;`=h9iR`QYVP6s1mwVeMLi;@b4~zaw^cVUKy+kk2cj?*9 zKda~g56wuaql8nj)oVOv_;WW<&j? z$?|6^tF^eQNH5JaR?T+tp=!liu28n50CrzY7YBsauZPEpr zr=xUB`0w!b@E73^!|#O4;kj@oJQUgpT?<_bT?oA$Du<4R_J$H6DR?7zCHP73z2IBH zrQmdMcW|rzmwr|MT>n5{*O&DvJ*5u>ZUwGBTGVkgNB{{S0VIF~kN^@u0*@Pk_#Rc- zN4oQRCH@0)Y(k6g7HQ*Je3wYeYVk3VmeJxVk(SmHqpI|xHX3^XdALRie-JRx(O-xVMs4qR-w| z+;pki+qfKMy_KvSeWtgPk)u!dR?>288%&Ph4Te_!)eDB$QzB_RmJmtVSX?A!Vlk1F zjz>Xi!Siy>-Y~RyM5IAXJ}J^5CWk~C#N-nq4PtUoILi=|TZJOT3X>K*ut)@8DWTzV8)&2zq1erbn literal 0 HcmV?d00001 diff --git a/BookCollection.db b/BookCollection.db new file mode 100644 index 0000000000000000000000000000000000000000..a1a6012b333e7d71ce9fcbc150ea8b26afdfcf38 GIT binary patch literal 16384 zcmeI(O>fgM7zc1Wp1Q6Q1PN79Z=QtIgbmacs*M{1l?#)2SudQb&^)EqQinM%({7zO z@m=^noVmgkamGnB`XV@Rqtf4slg57hlHbj7div@_S(4+-Ok*n_uv?6C_E<{B7~{R!SR!mzAQ>**pN~sQfW)?$jJ9bO=EK@&*)OdGn*+rGBhP^ z_g$P-HYNEXHls;w!h`NnRP-VBEKQ5*QRX_)b`j9&K8(r=L$Re~m}!}~A68B2cSD)b zIG&|8ENa5G&Mw+f*~pDP$;@zRZidEWNRKElrsgU`l|+r`rB@5~_V}CfN%Qm6t)YiG zozKe1)myRh{A;nHj;FNmT1GRz9kg2fs$X_lja8k!l@6-1ez{}fB*y_009U<00Izz00bbg;R1C}G^WG#TyP3CD>r4`acW@!0yGoMQDqf83bXzt}Ynl~$3e$GfA!)Lk znXu%x-ILzEc=94%J$dm|5IhJ99t9N-ig@v)tauRL{7E7(d;&&kP=Y8{L-uuj4 zCj7GZYQyy%@%mtRZ2O`{t`J2bFAG5kQROEkKa(XmW|ITCRi^fnc2)B1Gxu^b)h_=* zc#jwK_i|s#T`UlQ00bZa0SG_<0uX=z1pZ@zlU*%sT)nE?KlJT`o?{Pv*Yi7e?_hL1 zy`NfZS@pIh+Vxi&mY7aNDJ$d>H@Qb*tJ$`0SgmVOb8w>0`PPk{mbG=GDQ;T(rL&G@ z(XuwImepLd_Ttl(+@o@Io|zu;IcGZrjluV`<&&E%Z5W1fe-uv1AKHiAaHY*mB5aCA z|8RU_x3#rhZ|w&|6ZKo|ovo(qv~4xp;W&KP?>XYNdTVX7-YQk9FO)@dr!AVd8jUay z-Gb?gGX`<}x_q^C+&B87>x=`Gskw;Kq{pL^5z%bMG;QSb%E|WB{fW%j%ygo*_-_2| z35mXaoG_tmc~?ytOH0arcxCTSPrfF1Jm=2H=^r}h4(ZHT&V{AmBG+Wk^2ve{-5MpD zP577vD|M!Si1Lr8@>e%U3?2D^droI8AM?rm$(F-+bAFHTANUviBmS=3#R35cKmY;| zfB*y_009U<00Izzz`rbDXpGdz-srY76zih{&v$N%dhnY-fibe8M!}}-4iD`9QIw=l z4a&%KaklPyhl4oycu|!>e722IzdMeCydp0Wf4_d$@dol&kMJVtPlNY=%D*N2SN@aS zV1WPxAOHafKmY;|fB*y_009U<;KB)HC^eL@)WgiGG_OQu5;UX8=CI5_i{AfF3ICpd z&QCAg1TkO;KmY;|fB*y_009U<00Izz!2d$v5~bwnO}j7l2EDRxV8w21^hQ1 zVci{cy@Eo?ON~+2Icr`Y4%{Pu(09Dx{ol;>g8Ki@_=o%*KIR>6@g=^XKhVF?KhZzX z-`0Ejj$YLlbHC-j&YkAo&%Gr(V1WPxAOHafKmY;|fB*y_0D(k-g2~9LGF$824*s7n zRPrpH!%sd6+~c^wHUtRr9g= zNli7=^OLG-rsgLVH7^VQS2NMWFsaFpABMav{huE#=Vj&p{HT_fwg2;@YEb__KdJ=p z|0(_z;lJ}=_|N=D{+&F)0s#m>00Izz00bZa0SG_<0uX?}#SqX^R8c6?v|vLuCO4|e RC{;2lQ{_JZRHn$a_9vbQ1`z-N literal 0 HcmV?d00001 diff --git a/NotesB b/NotesB new file mode 100644 index 0000000..de62f2c --- /dev/null +++ b/NotesB @@ -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; --'; \ No newline at end of file diff --git a/day1.sql b/day1.sql new file mode 100644 index 0000000..1cc2ce2 --- /dev/null +++ b/day1.sql @@ -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'; diff --git a/day2.sql b/day2.sql new file mode 100644 index 0000000..edcc103 --- /dev/null +++ b/day2.sql @@ -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"; \ No newline at end of file