├── 001_create_table.sql ├── 002_insert_and_select_basics.sql ├── 003_select.sql ├── 004_oder_by_where.sql ├── 005_limit.sql ├── 006_update_rename.sql ├── 007_removing_data.sql ├── 008_foreign_keys.sql ├── 009_joins_union_intersect_except_theory.sql ├── 010_joins_practical.sql ├── 011_group_by_having.sql ├── 012_many_to_many_data.sql ├── 012_many_to_many_example.sql ├── 013_transactions.sql ├── 014_subquery.sql ├── 015_psql_commands.sh ├── README.md ├── project ├── .gitignore ├── main.py └── src │ ├── config │ └── consts.py │ ├── information_system.py │ └── utils │ ├── create_tables.py │ └── postgres_handler.py └── python-examples ├── 001_connecting.py ├── 002_connection_alternative.py ├── 002_transactions.py ├── 003_sql_injection.py ├── 004_transactions.py ├── 005_context_managers.py └── utils └── consts.py /001_create_table.sql: -------------------------------------------------------------------------------- 1 | -- V tejto lekcii si ukazeme ako vieme pridavat a mazat tabulky v postgresql 2 | 3 | -- CREATE TABLE [IF NOT EXISTS] table_name ( 4 | -- column1 datatype(length) column_contraint, 5 | -- column2 datatype(length) column_contraint, 6 | -- column3 datatype(length) column_contraint, 7 | -- table_constraints 8 | -- ); 9 | 10 | -- CREATE TABLE dokumentacia https://www.postgresql.org/docs/12/sql-createtable.html 11 | -- Datove typy najdete tu https://www.postgresql.org/docs/12/datatype.html 12 | -- Nazvy klucovych slov SQL budeme pisat velkymi pismenami 13 | -- na konci kazdeho vyrazu ide bodkociarka ... niekedy na to zabudnem :) 14 | 15 | DROP TABLE IF EXISTS students; 16 | DROP TABLE IF EXISTS student; 17 | 18 | CREATE TABLE students ( 19 | student_id serial PRIMARY KEY, 20 | username VARCHAR (128) UNIQUE NOT NULL, 21 | password VARCHAR (128) NOT NULL, 22 | is_new BOOLEAN, 23 | year_born INTEGER NOT NULL, 24 | created_on TIMESTAMP NOT NULL, 25 | last_login TIMESTAMP 26 | ); 27 | 28 | -- Ak tabulka existuje postgres vrati error 29 | CREATE TABLE students ( 30 | student_id serial PRIMARY KEY, 31 | username VARCHAR (128) UNIQUE NOT NULL, 32 | password VARCHAR (128) NOT NULL, 33 | is_new BOOLEAN, 34 | year_born INTEGER NOT NULL, 35 | created_on TIMESTAMP NOT NULL, 36 | last_login TIMESTAMP 37 | ); 38 | 39 | -- Konvencie 40 | -- Nazov tabulky s snake_case singular 41 | -- Nazov stlpca snake_case singular 42 | 43 | -- DROP TABLE [IF EXISTS] table_name 44 | -- [CASCADE | RESTRICT]; 45 | -- CASCADE - zmaze tabulku a vsetky jej zavislosti viac sa dozvieme neskor 46 | -- RESTRICT - zmaze tabulku len ak nema zavislosti ... tot je default 47 | 48 | DROP TABLE IF EXISTS students 49 | RESTRICT; 50 | 51 | CREATE TABLE student ( 52 | student_id serial PRIMARY KEY, 53 | username VARCHAR (128) UNIQUE NOT NULL, 54 | password VARCHAR (128) NOT NULL, 55 | is_new BOOLEAN, 56 | year_born INTEGER NOT NULL, 57 | created_on TIMESTAMP NOT NULL, 58 | updated_on TIMESTAMP 59 | ) 60 | 61 | DROP TABLE Student 62 | 63 | -- Single quote vs double quote 64 | -- Ked vytvorime tabulku s velkym pismenom 65 | CREATE TABLE TestTable(); 66 | -- Tabulka sa ulozi s malymi pismenami lebo pomenovania su case insensitive 67 | -- Preto toto je ten isty create a vrati to erro 68 | CREATE TABLE TESTTable(); 69 | -- To iste plati aj pre nazvy stlpcov v tabulke 70 | DROP TABLE IF EXISTS TESTTABLE; 71 | CREATE TABLE IF NOT EXISTS testtable( 72 | COLMUN_NAME varchar(256) NOT NULL 73 | ); 74 | -- Stlpec bude s malymi pismenami 75 | -- Ak chceme pouzit velke pismena musime pouzit dvojite uvodzovky 76 | DROP TABLE IF EXISTS TESTTABLE; 77 | CREATE TABLE IF NOT EXISTS "TESTTABLE"( 78 | "COLMUN_NAME" varchar(256) NOT NULL 79 | ); 80 | -- TERAZ VSAK VZDY MUSIME POUZIT DVOJITE UVODZOVKY NA TO ABY SME MOHLI PRACOVAT S TABULKKOU 81 | -- Preot toto vratichybu 82 | DROP TABLE TESTTABLE; 83 | -- A toto prejde 84 | DROP TABLE "TESTTABLE"; 85 | 86 | -- Toto plati pre akekolvek klucove slovo v sql mozeme ho pisat velkym alebo malym 87 | CreaTe TaBLE TesTtABle ( 88 | TesTINg_COlumN VarchaR(256) nOT Null 89 | ); 90 | DROP TABLE "testtable"; 91 | -- Preto potrebujeme konvencie!!!!! 92 | -- Vsetky klucove slova jazyka budeme pisat velkym nazvy stlpcov a tabulke sme si uz definovali 93 | 94 | DROP TABLE IF EXISTS students; 95 | DROP TABLE IF EXISTS student; 96 | -------------------------------------------------------------------------------- /002_insert_and_select_basics.sql: -------------------------------------------------------------------------------- 1 | -- V tejto casti si ukazeme ako vieme pridavat data do tabulky a prezerat si stav tabulky 2 | 3 | DROP TABLE IF EXISTS student; 4 | 5 | CREATE TABLE student ( 6 | student_id serial PRIMARY KEY, 7 | username VARCHAR (128) UNIQUE NOT NULL, 8 | password VARCHAR (128) NOT NULL, 9 | is_new BOOLEAN, 10 | year_born INTEGER NOT NULL, 11 | created_on TIMESTAMP NOT NULL, 12 | updated_on TIMESTAMP 13 | ) 14 | 15 | -- Dokumentacia https://www.postgresql.org/docs/12/sql-insert.html 16 | -- INSERT INTO table_name(column1, column2, …) 17 | -- VALUES (value1, value2, …); 18 | 19 | INSERT INTO student(username, "password", is_new, year_born, created_on, updated_on) 20 | VALUES ('Michal', 'Heslo', TRUE, 1996, '2021-01-16 19:10:25-07', '2021-01-16 19:10:25-07') 21 | 22 | -- Co ked chceme definovat vlastny kluc? 23 | INSERT INTO student(student_id, username, "password", is_new, year_born, created_on, updated_on) 24 | VALUES (1, 'Michal', 'Heslo', TRUE, 1996, '2021-01-16 19:10:25-07', '2021-01-16 19:10:25-07') 25 | -- Co ked definujeme rovnaky kluc pre viac zaznamov? 26 | INSERT INTO student(student_id, username, "password", is_new, year_born, created_on, updated_on) 27 | VALUES (1, 'Michal', 'Heslo', TRUE, 1996, '2021-01-16 19:10:25-07', '2021-01-16 19:10:25-07') 28 | 29 | DROP TABLE IF EXISTS student; 30 | 31 | 32 | -- Co ked chceme vytvorit viac zaznamov naraz? 33 | -- Vsimnite si posledny riadok constrain to je sposob akym sa da tiez definovat private key 34 | 35 | DROP TABLE IF EXISTS "Employee" CASCADE; 36 | 37 | CREATE TABLE "Employee" 38 | ( 39 | "EmployeeId" INT NOT NULL, 40 | "LastName" VARCHAR(20) NOT NULL, 41 | "FirstName" VARCHAR(20) NOT NULL, 42 | "Title" VARCHAR(30), 43 | "ReportsTo" INT, 44 | "BirthDate" TIMESTAMP, 45 | "HireDate" TIMESTAMP, 46 | "Address" VARCHAR(70), 47 | "City" VARCHAR(40), 48 | "State" VARCHAR(40), 49 | "Country" VARCHAR(40), 50 | "PostalCode" VARCHAR(10), 51 | "Phone" VARCHAR(24), 52 | "Fax" VARCHAR(24), 53 | "Email" VARCHAR(60), 54 | CONSTRAINT "PK_Employee" PRIMARY KEY ("EmployeeId") 55 | ); 56 | 57 | INSERT INTO "Employee" ("EmployeeId", "LastName", "FirstName", "Title", "BirthDate", "HireDate", "Address", "City", "State", "Country", "PostalCode", "Phone", "Fax", "Email") VALUES (1, N'Adams', N'Andrew', N'General Manager', '1962/2/18', '2002/8/14', N'11120 Jasper Ave NW', N'Edmonton', N'AB', N'Canada', N'T5K 2N1', N'+1 (780) 428-9482', N'+1 (780) 428-3457', N'andrew@chinookcorp.com'); 58 | INSERT INTO "Employee" ("EmployeeId", "LastName", "FirstName", "Title", "ReportsTo", "BirthDate", "HireDate", "Address", "City", "State", "Country", "PostalCode", "Phone", "Fax", "Email") VALUES (2, N'Edwards', N'Nancy', N'Sales Manager', 1, '1958/12/8', '2002/5/1', N'825 8 Ave SW', N'Calgary', N'AB', N'Canada', N'T2P 2T3', N'+1 (403) 262-3443', N'+1 (403) 262-3322', N'nancy@chinookcorp.com'); 59 | INSERT INTO "Employee" ("EmployeeId", "LastName", "FirstName", "Title", "ReportsTo", "BirthDate", "HireDate", "Address", "City", "State", "Country", "PostalCode", "Phone", "Fax", "Email") VALUES (3, N'Peacock', N'Jane', N'Sales Support Agent', 2, '1973/8/29', '2002/4/1', N'1111 6 Ave SW', N'Calgary', N'AB', N'Canada', N'T2P 5M5', N'+1 (403) 262-3443', N'+1 (403) 262-6712', N'jane@chinookcorp.com'); 60 | INSERT INTO "Employee" ("EmployeeId", "LastName", "FirstName", "Title", "ReportsTo", "BirthDate", "HireDate", "Address", "City", "State", "Country", "PostalCode", "Phone", "Fax", "Email") VALUES (4, N'Park', N'Margaret', N'Sales Support Agent', 2, '1947/9/19', '2003/5/3', N'683 10 Street SW', N'Calgary', N'AB', N'Canada', N'T2P 5G3', N'+1 (403) 263-4423', N'+1 (403) 263-4289', N'margaret@chinookcorp.com'); 61 | INSERT INTO "Employee" ("EmployeeId", "LastName", "FirstName", "Title", "ReportsTo", "BirthDate", "HireDate", "Address", "City", "State", "Country", "PostalCode", "Phone", "Fax", "Email") VALUES (5, N'Johnson', N'Steve', N'Sales Support Agent', 2, '1965/3/3', '2003/10/17', N'7727B 41 Ave', N'Calgary', N'AB', N'Canada', N'T3B 1Y7', N'1 (780) 836-9987', N'1 (780) 836-9543', N'steve@chinookcorp.com'); 62 | INSERT INTO "Employee" ("EmployeeId", "LastName", "FirstName", "Title", "ReportsTo", "BirthDate", "HireDate", "Address", "City", "State", "Country", "PostalCode", "Phone", "Fax", "Email") VALUES (6, N'Mitchell', N'Michael', N'IT Manager', 1, '1973/7/1', '2003/10/17', N'5827 Bowness Road NW', N'Calgary', N'AB', N'Canada', N'T3B 0C5', N'+1 (403) 246-9887', N'+1 (403) 246-9899', N'michael@chinookcorp.com'); 63 | INSERT INTO "Employee" ("EmployeeId", "LastName", "FirstName", "Title", "ReportsTo", "BirthDate", "HireDate", "Address", "City", "State", "Country", "PostalCode", "Phone", "Fax", "Email") VALUES (7, N'King', N'Robert', N'IT Staff', 6, '1970/5/29', '2004/1/2', N'590 Columbia Boulevard West', N'Lethbridge', N'AB', N'Canada', N'T1K 5N8', N'+1 (403) 456-9986', N'+1 (403) 456-8485', N'robert@chinookcorp.com'); 64 | INSERT INTO "Employee" ("EmployeeId", "LastName", "FirstName", "Title", "ReportsTo", "BirthDate", "HireDate", "Address", "City", "State", "Country", "PostalCode", "Phone", "Fax", "Email") VALUES (8, N'Callahan', N'Laura', N'IT Staff', 6, '1968/1/9', '2004/3/4', N'923 7 ST NW', N'Lethbridge', N'AB', N'Canada', N'T1H 1Y8', N'+1 (403) 467-3351', N'+1 (403) 467-8772', N'laura@chinookcorp.com'); 65 | -- N'' znamena ze je to takzvany national varchar ktory moze obsahovat unicode znaky (kludne si to predstavme ako obycajny string) 66 | 67 | -- SELECT 68 | -- Nazriet do tabulky vieme cez graficke rozhranie 69 | -- SELECT 70 | -- select_list 71 | -- FROM 72 | -- table_name; 73 | SELECT "FirstName", "LastName" FROM "Employee"; 74 | -- Casto vsak budeme pouzivat 75 | SELECT * 76 | FROM "Employee" 77 | -- POZOR SNAZTE SA VYVAROVAT SELECT * V PRODUKCON KODE 78 | 79 | 80 | DROP TABLE IF EXISTS "Employee"; 81 | DROP TABLE IF EXISTS student; 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /003_select.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS "Track" CASCADE; 2 | 3 | CREATE TABLE "Track" 4 | ( 5 | "TrackId" INT NOT NULL, 6 | "Name" VARCHAR(200) NOT NULL, 7 | "AlbumId" INT, 8 | "MediaTypeId" INT NOT NULL, 9 | "GenreId" INT, 10 | "Composer" VARCHAR(220), 11 | "Milliseconds" INT NOT NULL, 12 | "Bytes" INT, 13 | "UnitPrice" NUMERIC(10,2) NOT NULL, 14 | CONSTRAINT "PK_Track" PRIMARY KEY ("TrackId") 15 | ); 16 | 17 | 18 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (1, N'For Those About To Rock (We Salute You)', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 343719, 11170334, 0.99); 19 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (2, N'Balls to the Wall', 2, 2, 1, 342562, 5510424, 0.99); 20 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (3, N'Fast As a Shark', 3, 2, 1, N'F. Baltes, S. Kaufman, U. Dirkscneider & W. Hoffman', 230619, 3990994, 0.99); 21 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (4, N'Restless and Wild', 3, 2, 1, N'F. Baltes, R.A. Smith-Diesel, S. Kaufman, U. Dirkscneider & W. Hoffman', 252051, 4331779, 0.99); 22 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (5, N'Princess of the Dawn', 3, 2, 1, N'Deaffy & R.A. Smith-Diesel', 375418, 6290521, 0.99); 23 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (6, N'Put The Finger On You', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205662, 6713451, 0.99); 24 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (7, N'Let''s Get It Up', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 233926, 7636561, 0.99); 25 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (8, N'Inject The Venom', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 210834, 6852860, 0.99); 26 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (9, N'Snowballed', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 203102, 6599424, 0.99); 27 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (10, N'Evil Walks', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 263497, 8611245, 0.99); 28 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (11, N'C.O.D.', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 199836, 6566314, 0.99); 29 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (12, N'Breaking The Rules', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 263288, 8596840, 0.99); 30 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (13, N'Night Of The Long Knives', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205688, 6706347, 0.99); 31 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (14, N'Spellbound', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 270863, 8817038, 0.99); 32 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (15, N'Go Down', 4, 1, 1, N'AC/DC', 331180, 10847611, 0.99); 33 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (16, N'Dog Eat Dog', 4, 1, 1, N'AC/DC', 215196, 7032162, 0.99); 34 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (17, N'Let There Be Rock', 4, 1, 1, N'AC/DC', 366654, 12021261, 0.99); 35 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (18, N'Bad Boy Boogie', 4, 1, 1, N'AC/DC', 267728, 8776140, 0.99); 36 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (19, N'Problem Child', 4, 1, 1, N'AC/DC', 325041, 10617116, 0.99); 37 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (20, N'Overdose', 4, 1, 1, N'AC/DC', 369319, 12066294, 0.99); 38 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (21, N'Hell Ain''t A Bad Place To Be', 4, 1, 1, N'AC/DC', 254380, 8331286, 0.99); 39 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (22, N'Whole Lotta Rosie', 4, 1, 1, N'AC/DC', 323761, 10547154, 0.99); 40 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (23, N'Walk On Water', 5, 1, 1, N'Steven Tyler, Joe Perry, Jack Blades, Tommy Shaw', 295680, 9719579, 0.99); 41 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (24, N'Love In An Elevator', 5, 1, 1, N'Steven Tyler, Joe Perry', 321828, 10552051, 0.99); 42 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (25, N'Rag Doll', 5, 1, 1, N'Steven Tyler, Joe Perry, Jim Vallance, Holly Knight', 264698, 8675345, 0.99); 43 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (26, N'What It Takes', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 310622, 10144730, 0.99); 44 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (27, N'Dude (Looks Like A Lady)', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 264855, 8679940, 0.99); 45 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (28, N'Janie''s Got A Gun', 5, 1, 1, N'Steven Tyler, Tom Hamilton', 330736, 10869391, 0.99); 46 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (29, N'Cryin''', 5, 1, 1, N'Steven Tyler, Joe Perry, Taylor Rhodes', 309263, 10056995, 0.99); 47 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (30, N'Amazing', 5, 1, 1, N'Steven Tyler, Richie Supa', 356519, 11616195, 0.99); 48 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (31, N'Blind Man', 5, 1, 1, N'Steven Tyler, Joe Perry, Taylor Rhodes', 240718, 7877453, 0.99); 49 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (32, N'Deuces Are Wild', 5, 1, 1, N'Steven Tyler, Jim Vallance', 215875, 7074167, 0.99); 50 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (33, N'The Other Side', 5, 1, 1, N'Steven Tyler, Jim Vallance', 244375, 7983270, 0.99); 51 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (34, N'Crazy', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 316656, 10402398, 0.99); 52 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (35, N'Eat The Rich', 5, 1, 1, N'Steven Tyler, Joe Perry, Jim Vallance', 251036, 8262039, 0.99); 53 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (36, N'Angel', 5, 1, 1, N'Steven Tyler, Desmond Child', 307617, 9989331, 0.99); 54 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (37, N'Livin'' On The Edge', 5, 1, 1, N'Steven Tyler, Joe Perry, Mark Hudson', 381231, 12374569, 0.99); 55 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (38, N'All I Really Want', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 284891, 9375567, 0.99); 56 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (39, N'You Oughta Know', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 249234, 8196916, 0.99); 57 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (40, N'Perfect', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 188133, 6145404, 0.99); 58 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (41, N'Hand In My Pocket', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 221570, 7224246, 0.99); 59 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (42, N'Right Through You', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 176117, 5793082, 0.99); 60 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (43, N'Forgiven', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 300355, 9753256, 0.99); 61 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (44, N'You Learn', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 239699, 7824837, 0.99); 62 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (45, N'Head Over Feet', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 267493, 8758008, 0.99); 63 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (46, N'Mary Jane', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 280607, 9163588, 0.99); 64 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (47, N'Ironic', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 229825, 7598866, 0.99); 65 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (48, N'Not The Doctor', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 227631, 7604601, 0.99); 66 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (49, N'Wake Up', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 293485, 9703359, 0.99); 67 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (50, N'You Oughta Know (Alternate)', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 491885, 16008629, 0.99); 68 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (51, N'We Die Young', 7, 1, 1, N'Jerry Cantrell', 152084, 4925362, 0.99); 69 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (52, N'Man In The Box', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 286641, 9310272, 0.99); 70 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (53, N'Sea Of Sorrow', 7, 1, 1, N'Jerry Cantrell', 349831, 11316328, 0.99); 71 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (54, N'Bleed The Freak', 7, 1, 1, N'Jerry Cantrell', 241946, 7847716, 0.99); 72 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (55, N'I Can''t Remember', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 222955, 7302550, 0.99); 73 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (56, N'Love, Hate, Love', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 387134, 12575396, 0.99); 74 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (57, N'It Ain''t Like That', 7, 1, 1, N'Jerry Cantrell, Michael Starr, Sean Kinney', 277577, 8993793, 0.99); 75 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (58, N'Sunshine', 7, 1, 1, N'Jerry Cantrell', 284969, 9216057, 0.99); 76 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (59, N'Put You Down', 7, 1, 1, N'Jerry Cantrell', 196231, 6420530, 0.99); 77 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (60, N'Confusion', 7, 1, 1, N'Jerry Cantrell, Michael Starr, Layne Staley', 344163, 11183647, 0.99); 78 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (61, N'I Know Somethin (Bout You)', 7, 1, 1, N'Jerry Cantrell', 261955, 8497788, 0.99); 79 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (62, N'Real Thing', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 243879, 7937731, 0.99); 80 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (63, N'Desafinado', 8, 1, 2, 185338, 5990473, 0.99); 81 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (64, N'Garota De Ipanema', 8, 1, 2, 285048, 9348428, 0.99); 82 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (65, N'Samba De Uma Nota Só (One Note Samba)', 8, 1, 2, 137273, 4535401, 0.99); 83 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (66, N'Por Causa De Você', 8, 1, 2, 169900, 5536496, 0.99); 84 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (67, N'Ligia', 8, 1, 2, 251977, 8226934, 0.99); 85 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (68, N'Fotografia', 8, 1, 2, 129227, 4198774, 0.99); 86 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (69, N'Dindi (Dindi)', 8, 1, 2, 253178, 8149148, 0.99); 87 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (70, N'Se Todos Fossem Iguais A Você (Instrumental)', 8, 1, 2, 134948, 4393377, 0.99); 88 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (71, N'Falando De Amor', 8, 1, 2, 219663, 7121735, 0.99); 89 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (72, N'Angela', 8, 1, 2, 169508, 5574957, 0.99); 90 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (73, N'Corcovado (Quiet Nights Of Quiet Stars)', 8, 1, 2, 205662, 6687994, 0.99); 91 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (74, N'Outra Vez', 8, 1, 2, 126511, 4110053, 0.99); 92 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (75, N'O Boto (Bôto)', 8, 1, 2, 366837, 12089673, 0.99); 93 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (76, N'Canta, Canta Mais', 8, 1, 2, 271856, 8719426, 0.99); 94 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (77, N'Enter Sandman', 9, 1, 3, N'Apocalyptica', 221701, 7286305, 0.99); 95 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (78, N'Master Of Puppets', 9, 1, 3, N'Apocalyptica', 436453, 14375310, 0.99); 96 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (79, N'Harvester Of Sorrow', 9, 1, 3, N'Apocalyptica', 374543, 12372536, 0.99); 97 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (80, N'The Unforgiven', 9, 1, 3, N'Apocalyptica', 322925, 10422447, 0.99); 98 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (81, N'Sad But True', 9, 1, 3, N'Apocalyptica', 288208, 9405526, 0.99); 99 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (82, N'Creeping Death', 9, 1, 3, N'Apocalyptica', 308035, 10110980, 0.99); 100 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (83, N'Wherever I May Roam', 9, 1, 3, N'Apocalyptica', 369345, 12033110, 0.99); 101 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (84, N'Welcome Home (Sanitarium)', 9, 1, 3, N'Apocalyptica', 350197, 11406431, 0.99); 102 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (85, N'Cochise', 10, 1, 1, N'Audioslave/Chris Cornell', 222380, 5339931, 0.99); 103 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (86, N'Show Me How to Live', 10, 1, 1, N'Audioslave/Chris Cornell', 277890, 6672176, 0.99); 104 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (87, N'Gasoline', 10, 1, 1, N'Audioslave/Chris Cornell', 279457, 6709793, 0.99); 105 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (88, N'What You Are', 10, 1, 1, N'Audioslave/Chris Cornell', 249391, 5988186, 0.99); 106 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (89, N'Like a Stone', 10, 1, 1, N'Audioslave/Chris Cornell', 294034, 7059624, 0.99); 107 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (90, N'Set It Off', 10, 1, 1, N'Audioslave/Chris Cornell', 263262, 6321091, 0.99); 108 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (91, N'Shadow on the Sun', 10, 1, 1, N'Audioslave/Chris Cornell', 343457, 8245793, 0.99); 109 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (92, N'I am the Highway', 10, 1, 1, N'Audioslave/Chris Cornell', 334942, 8041411, 0.99); 110 | 111 | -- Select tricks 112 | SELECT * FROM "Track"; 113 | -- Matematicke operacie 114 | -- Kolko milisekund trva jeden byte pesnicky 115 | SELECT "Milliseconds", "Bytes", "Milliseconds"::decimal / "Bytes" 116 | FROM "Track" 117 | -- Pomocou dvoch dvojbodiek som precastoval integer na float 118 | -- postgresql nevie delit dva integery 119 | SELECT "Milliseconds", "Bytes", "Milliseconds" / CAST("Bytes" AS DECIMAL), "Milliseconds"::decimal / "Bytes" 120 | FROM "Track" 121 | 122 | -- Premenovanie stlpcov pomocou as aliasu alebo inplicitne bez as 123 | SELECT "Milliseconds" as Milisekundy, "Bytes" as b, "Milliseconds" / CAST("Bytes" AS DECIMAL)as podiel 124 | FROM "Track" 125 | 126 | -- Nasobenie celym cislom 127 | SELECT * 128 | FROM "Track" 129 | 130 | SELECT "Milliseconds" * 10, "Milliseconds" as original 131 | FROM "Track" 132 | 133 | 134 | -- Spajanie textov 135 | SELECT * 136 | FROM "Track" 137 | 138 | SELECT "Name", "Composer", "Name" || ' ' || "Composer" as concatenation 139 | FROM "Track" 140 | 141 | -- Spajat vime aj non text columns ked ich castneme na string 142 | -- SELECT "AlbumId" || "MediaTypeId" 143 | -- FROM "Track" 144 | -- toto by vratilo error lebo oba su integer 145 | SELECT "AlbumId"::varchar || "MediaTypeId", "AlbumId", "MediaTypeId" 146 | FROM "Track" 147 | 148 | -- SELECT DISTINCT 149 | SELECT * 150 | FROM "Track" 151 | -- sluzi na vyfiltrovanie unikatnych zaznamov 152 | SELECT DISTINCT "MediaTypeId" 153 | FROM "Track" 154 | -- vieme pouzit aj nad skupinou stlpcov 155 | SELECT DISTINCT "MediaTypeId", "GenreId" 156 | FROM "Track" 157 | 158 | DROP TABLE IF EXISTS "Track" CASCADE; 159 | 160 | 161 | 162 | 163 | -------------------------------------------------------------------------------- /004_oder_by_where.sql: -------------------------------------------------------------------------------- 1 | -- Nacitanie Dat 2 | DROP TABLE IF EXISTS "Track" CASCADE; 3 | 4 | CREATE TABLE "Track" 5 | ( 6 | "TrackId" INT NOT NULL, 7 | "Name" VARCHAR(200) NOT NULL, 8 | "AlbumId" INT, 9 | "MediaTypeId" INT NOT NULL, 10 | "GenreId" INT, 11 | "Composer" VARCHAR(220), 12 | "Milliseconds" INT NOT NULL, 13 | "Bytes" INT, 14 | "UnitPrice" NUMERIC(10,2) NOT NULL, 15 | CONSTRAINT "PK_Track" PRIMARY KEY ("TrackId") 16 | ); 17 | 18 | 19 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (1, N'For Those About To Rock (We Salute You)', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 343719, 11170334, 0.99); 20 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (2, N'Balls to the Wall', 2, 2, 1, 342562, 5510424, 0.99); 21 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (3, N'Fast As a Shark', 3, 2, 1, N'F. Baltes, S. Kaufman, U. Dirkscneider & W. Hoffman', 230619, 3990994, 0.99); 22 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (4, N'Restless and Wild', 3, 2, 1, N'F. Baltes, R.A. Smith-Diesel, S. Kaufman, U. Dirkscneider & W. Hoffman', 252051, 4331779, 0.99); 23 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (5, N'Princess of the Dawn', 3, 2, 1, N'Deaffy & R.A. Smith-Diesel', 375418, 6290521, 0.99); 24 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (6, N'Put The Finger On You', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205662, 6713451, 0.99); 25 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (7, N'Let''s Get It Up', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 233926, 7636561, 0.99); 26 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (8, N'Inject The Venom', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 210834, 6852860, 0.99); 27 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (9, N'Snowballed', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 203102, 6599424, 0.99); 28 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (10, N'Evil Walks', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 263497, 8611245, 0.99); 29 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (11, N'C.O.D.', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 199836, 6566314, 0.99); 30 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (12, N'Breaking The Rules', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 263288, 8596840, 0.99); 31 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (13, N'Night Of The Long Knives', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205688, 6706347, 0.99); 32 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (14, N'Spellbound', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 270863, 8817038, 0.99); 33 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (15, N'Go Down', 4, 1, 1, N'AC/DC', 331180, 10847611, 0.99); 34 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (16, N'Dog Eat Dog', 4, 1, 1, N'AC/DC', 215196, 7032162, 0.99); 35 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (17, N'Let There Be Rock', 4, 1, 1, N'AC/DC', 366654, 12021261, 0.99); 36 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (18, N'Bad Boy Boogie', 4, 1, 1, N'AC/DC', 267728, 8776140, 0.99); 37 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (19, N'Problem Child', 4, 1, 1, N'AC/DC', 325041, 10617116, 0.99); 38 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (20, N'Overdose', 4, 1, 1, N'AC/DC', 369319, 12066294, 0.99); 39 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (21, N'Hell Ain''t A Bad Place To Be', 4, 1, 1, N'AC/DC', 254380, 8331286, 0.99); 40 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (22, N'Whole Lotta Rosie', 4, 1, 1, N'AC/DC', 323761, 10547154, 0.99); 41 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (23, N'Walk On Water', 5, 1, 1, N'Steven Tyler, Joe Perry, Jack Blades, Tommy Shaw', 295680, 9719579, 0.99); 42 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (24, N'Love In An Elevator', 5, 1, 1, N'Steven Tyler, Joe Perry', 321828, 10552051, 0.99); 43 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (25, N'Rag Doll', 5, 1, 1, N'Steven Tyler, Joe Perry, Jim Vallance, Holly Knight', 264698, 8675345, 0.99); 44 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (26, N'What It Takes', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 310622, 10144730, 0.99); 45 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (27, N'Dude (Looks Like A Lady)', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 264855, 8679940, 0.99); 46 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (28, N'Janie''s Got A Gun', 5, 1, 1, N'Steven Tyler, Tom Hamilton', 330736, 10869391, 0.99); 47 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (29, N'Cryin''', 5, 1, 1, N'Steven Tyler, Joe Perry, Taylor Rhodes', 309263, 10056995, 0.99); 48 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (30, N'Amazing', 5, 1, 1, N'Steven Tyler, Richie Supa', 356519, 11616195, 0.99); 49 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (31, N'Blind Man', 5, 1, 1, N'Steven Tyler, Joe Perry, Taylor Rhodes', 240718, 7877453, 0.99); 50 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (32, N'Deuces Are Wild', 5, 1, 1, N'Steven Tyler, Jim Vallance', 215875, 7074167, 0.99); 51 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (33, N'The Other Side', 5, 1, 1, N'Steven Tyler, Jim Vallance', 244375, 7983270, 0.99); 52 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (34, N'Crazy', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 316656, 10402398, 0.99); 53 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (35, N'Eat The Rich', 5, 1, 1, N'Steven Tyler, Joe Perry, Jim Vallance', 251036, 8262039, 0.99); 54 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (36, N'Angel', 5, 1, 1, N'Steven Tyler, Desmond Child', 307617, 9989331, 0.99); 55 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (37, N'Livin'' On The Edge', 5, 1, 1, N'Steven Tyler, Joe Perry, Mark Hudson', 381231, 12374569, 0.99); 56 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (38, N'All I Really Want', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 284891, 9375567, 0.99); 57 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (39, N'You Oughta Know', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 249234, 8196916, 0.99); 58 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (40, N'Perfect', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 188133, 6145404, 0.99); 59 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (41, N'Hand In My Pocket', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 221570, 7224246, 0.99); 60 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (42, N'Right Through You', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 176117, 5793082, 0.99); 61 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (43, N'Forgiven', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 300355, 9753256, 0.99); 62 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (44, N'You Learn', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 239699, 7824837, 0.99); 63 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (45, N'Head Over Feet', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 267493, 8758008, 0.99); 64 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (46, N'Mary Jane', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 280607, 9163588, 0.99); 65 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (47, N'Ironic', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 229825, 7598866, 0.99); 66 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (48, N'Not The Doctor', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 227631, 7604601, 0.99); 67 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (49, N'Wake Up', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 293485, 9703359, 0.99); 68 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (50, N'You Oughta Know (Alternate)', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 491885, 16008629, 0.99); 69 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (51, N'We Die Young', 7, 1, 1, N'Jerry Cantrell', 152084, 4925362, 0.99); 70 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (52, N'Man In The Box', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 286641, 9310272, 0.99); 71 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (53, N'Sea Of Sorrow', 7, 1, 1, N'Jerry Cantrell', 349831, 11316328, 0.99); 72 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (54, N'Bleed The Freak', 7, 1, 1, N'Jerry Cantrell', 241946, 7847716, 0.99); 73 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (55, N'I Can''t Remember', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 222955, 7302550, 0.99); 74 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (56, N'Love, Hate, Love', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 387134, 12575396, 0.99); 75 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (57, N'It Ain''t Like That', 7, 1, 1, N'Jerry Cantrell, Michael Starr, Sean Kinney', 277577, 8993793, 0.99); 76 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (58, N'Sunshine', 7, 1, 1, N'Jerry Cantrell', 284969, 9216057, 0.99); 77 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (59, N'Put You Down', 7, 1, 1, N'Jerry Cantrell', 196231, 6420530, 0.99); 78 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (60, N'Confusion', 7, 1, 1, N'Jerry Cantrell, Michael Starr, Layne Staley', 344163, 11183647, 0.99); 79 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (61, N'I Know Somethin (Bout You)', 7, 1, 1, N'Jerry Cantrell', 261955, 8497788, 0.99); 80 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (62, N'Real Thing', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 243879, 7937731, 0.99); 81 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (63, N'Desafinado', 8, 1, 2, 185338, 5990473, 0.99); 82 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (64, N'Garota De Ipanema', 8, 1, 2, 285048, 9348428, 0.99); 83 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (65, N'Samba De Uma Nota Só (One Note Samba)', 8, 1, 2, 137273, 4535401, 0.99); 84 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (66, N'Por Causa De Você', 8, 1, 2, 169900, 5536496, 0.99); 85 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (67, N'Ligia', 8, 1, 2, 251977, 8226934, 0.99); 86 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (68, N'Fotografia', 8, 1, 2, 129227, 4198774, 0.99); 87 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (69, N'Dindi (Dindi)', 8, 1, 2, 253178, 8149148, 0.99); 88 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (70, N'Se Todos Fossem Iguais A Você (Instrumental)', 8, 1, 2, 134948, 4393377, 0.99); 89 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (71, N'Falando De Amor', 8, 1, 2, 219663, 7121735, 0.99); 90 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (72, N'Angela', 8, 1, 2, 169508, 5574957, 0.99); 91 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (73, N'Corcovado (Quiet Nights Of Quiet Stars)', 8, 1, 2, 205662, 6687994, 0.99); 92 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (74, N'Outra Vez', 8, 1, 2, 126511, 4110053, 0.99); 93 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (75, N'O Boto (Bôto)', 8, 1, 2, 366837, 12089673, 0.99); 94 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (76, N'Canta, Canta Mais', 8, 1, 2, 271856, 8719426, 0.99); 95 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (77, N'Enter Sandman', 9, 1, 3, N'Apocalyptica', 221701, 7286305, 0.99); 96 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (78, N'Master Of Puppets', 9, 1, 3, N'Apocalyptica', 436453, 14375310, 0.99); 97 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (79, N'Harvester Of Sorrow', 9, 1, 3, N'Apocalyptica', 374543, 12372536, 0.99); 98 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (80, N'The Unforgiven', 9, 1, 3, N'Apocalyptica', 322925, 10422447, 0.99); 99 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (81, N'Sad But True', 9, 1, 3, N'Apocalyptica', 288208, 9405526, 0.99); 100 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (82, N'Creeping Death', 9, 1, 3, N'Apocalyptica', 308035, 10110980, 0.99); 101 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (83, N'Wherever I May Roam', 9, 1, 3, N'Apocalyptica', 369345, 12033110, 0.99); 102 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (84, N'Welcome Home (Sanitarium)', 9, 1, 3, N'Apocalyptica', 350197, 11406431, 0.99); 103 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (85, N'Cochise', 10, 1, 1, N'Audioslave/Chris Cornell', 222380, 5339931, 0.99); 104 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (86, N'Show Me How to Live', 10, 1, 1, N'Audioslave/Chris Cornell', 277890, 6672176, 0.99); 105 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (87, N'Gasoline', 10, 1, 1, N'Audioslave/Chris Cornell', 279457, 6709793, 0.99); 106 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (88, N'What You Are', 10, 1, 1, N'Audioslave/Chris Cornell', 249391, 5988186, 0.99); 107 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (89, N'Like a Stone', 10, 1, 1, N'Audioslave/Chris Cornell', 294034, 7059624, 0.99); 108 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (90, N'Set It Off', 10, 1, 1, N'Audioslave/Chris Cornell', 263262, 6321091, 0.99); 109 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (91, N'Shadow on the Sun', 10, 1, 1, N'Audioslave/Chris Cornell', 343457, 8245793, 0.99); 110 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (92, N'I am the Highway', 10, 1, 1, N'Audioslave/Chris Cornell', 334942, 8041411, 0.99); 111 | 112 | -- Order by 113 | SELECT * 114 | FROM "Track" 115 | ORDER BY "Milliseconds" DESC 116 | 117 | -- ASC vzostupne 1 ... 10 118 | -- DESC zostupne 10 ... 1 119 | -- Mozme aj na zaklade viac stlpcov 120 | SELECT * 121 | FROM "Track" 122 | ORDER BY 123 | "MediaTypeId" DESC, 124 | "GenreId" ASC 125 | 126 | -- Order by na zaklade noveho stlpca 127 | SELECT "Milliseconds", ("Milliseconds"/1000)/60::decimal "Minutes" 128 | FROM "Track" 129 | ORDER BY "Minutes" ASC 130 | 131 | -- Praca s Null 132 | -- Pomocou Order by viem povedat kde ma ist Null 133 | SELECT * 134 | FROM "Track" 135 | ORDER BY "Composer" DESC NULLS LAST 136 | 137 | 138 | -- WHERE 139 | -- je podmienka 140 | SELECT * 141 | FROM "Track" 142 | WHERE "Bytes" > 5000000 143 | -- > 144 | -- < 145 | -- <= => == != <> 146 | -- AND 147 | -- OR 148 | -- IN 149 | -- NOT 150 | -- BETWEEN 151 | SELECT * 152 | FROM "Track" 153 | WHERE "AlbumId" not in (1,2) 154 | 155 | SELECT * 156 | FROM "Track" 157 | WHERE "Bytes" BETWEEN 5000000 AND 7000000 158 | 159 | -- na zaklade dlzky slova 160 | SELECT "Name", LENGTH("Name") AS name_length 161 | FROM "Track" 162 | WHERE LENGTH("Name") > 15 163 | AND LENGTH("Name") < 25 164 | -- Vsimnite si ze v tomto pripade musime dat length funkciu priamo do where 165 | 166 | -- WHERE s textami 167 | -- toto je chyba WHERE stlpec == 'string' 168 | SELECT * 169 | FROM "Track" 170 | WHERE "Name" like 'Fa%' 171 | -- toto vsak nie je efektivne ale da sa to pouzit pri malych tabulkach (nazyva sa toi wild carding) 172 | -- % - znamena akakolvek sekvencia znakov roznej dlzky 173 | -- _ - znamena akykolvek jeden znak 174 | SELECT * 175 | FROM "Track" 176 | WHERE "Name" like 'Put The Finger On Yo_' 177 | -- WHERE "Name" like 'Put The Finger On Y_' 178 | -- Wildcarding vieme pouzit aj na zaciatku alebo na konci slova 179 | SELECT * 180 | FROM "Track" 181 | WHERE "Name" like 'The%' 182 | 183 | SELECT * 184 | FROM "Track" 185 | WHERE "Name" like '%the%' 186 | 187 | -- Existuje aj ILIKE case insensitive like 188 | -- Tento operator neexistuje napriklad v MySql 189 | SELECT * 190 | FROM "Track" 191 | WHERE "Name" ILIKE '%the%' 192 | 193 | DROP TABLE IF EXISTS "Track" CASCADE; 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | -------------------------------------------------------------------------------- /005_limit.sql: -------------------------------------------------------------------------------- 1 | -- Nacitanie Dat 2 | DROP TABLE IF EXISTS "Track" CASCADE; 3 | 4 | CREATE TABLE "Track" 5 | ( 6 | "TrackId" INT NOT NULL, 7 | "Name" VARCHAR(200) NOT NULL, 8 | "AlbumId" INT, 9 | "MediaTypeId" INT NOT NULL, 10 | "GenreId" INT, 11 | "Composer" VARCHAR(220), 12 | "Milliseconds" INT NOT NULL, 13 | "Bytes" INT, 14 | "UnitPrice" NUMERIC(10,2) NOT NULL, 15 | CONSTRAINT "PK_Track" PRIMARY KEY ("TrackId") 16 | ); 17 | 18 | 19 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (1, N'For Those About To Rock (We Salute You)', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 343719, 11170334, 0.99); 20 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (2, N'Balls to the Wall', 2, 2, 1, 342562, 5510424, 0.99); 21 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (3, N'Fast As a Shark', 3, 2, 1, N'F. Baltes, S. Kaufman, U. Dirkscneider & W. Hoffman', 230619, 3990994, 0.99); 22 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (4, N'Restless and Wild', 3, 2, 1, N'F. Baltes, R.A. Smith-Diesel, S. Kaufman, U. Dirkscneider & W. Hoffman', 252051, 4331779, 0.99); 23 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (5, N'Princess of the Dawn', 3, 2, 1, N'Deaffy & R.A. Smith-Diesel', 375418, 6290521, 0.99); 24 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (6, N'Put The Finger On You', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205662, 6713451, 0.99); 25 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (7, N'Let''s Get It Up', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 233926, 7636561, 0.99); 26 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (8, N'Inject The Venom', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 210834, 6852860, 0.99); 27 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (9, N'Snowballed', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 203102, 6599424, 0.99); 28 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (10, N'Evil Walks', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 263497, 8611245, 0.99); 29 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (11, N'C.O.D.', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 199836, 6566314, 0.99); 30 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (12, N'Breaking The Rules', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 263288, 8596840, 0.99); 31 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (13, N'Night Of The Long Knives', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205688, 6706347, 0.99); 32 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (14, N'Spellbound', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 270863, 8817038, 0.99); 33 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (15, N'Go Down', 4, 1, 1, N'AC/DC', 331180, 10847611, 0.99); 34 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (16, N'Dog Eat Dog', 4, 1, 1, N'AC/DC', 215196, 7032162, 0.99); 35 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (17, N'Let There Be Rock', 4, 1, 1, N'AC/DC', 366654, 12021261, 0.99); 36 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (18, N'Bad Boy Boogie', 4, 1, 1, N'AC/DC', 267728, 8776140, 0.99); 37 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (19, N'Problem Child', 4, 1, 1, N'AC/DC', 325041, 10617116, 0.99); 38 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (20, N'Overdose', 4, 1, 1, N'AC/DC', 369319, 12066294, 0.99); 39 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (21, N'Hell Ain''t A Bad Place To Be', 4, 1, 1, N'AC/DC', 254380, 8331286, 0.99); 40 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (22, N'Whole Lotta Rosie', 4, 1, 1, N'AC/DC', 323761, 10547154, 0.99); 41 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (23, N'Walk On Water', 5, 1, 1, N'Steven Tyler, Joe Perry, Jack Blades, Tommy Shaw', 295680, 9719579, 0.99); 42 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (24, N'Love In An Elevator', 5, 1, 1, N'Steven Tyler, Joe Perry', 321828, 10552051, 0.99); 43 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (25, N'Rag Doll', 5, 1, 1, N'Steven Tyler, Joe Perry, Jim Vallance, Holly Knight', 264698, 8675345, 0.99); 44 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (26, N'What It Takes', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 310622, 10144730, 0.99); 45 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (27, N'Dude (Looks Like A Lady)', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 264855, 8679940, 0.99); 46 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (28, N'Janie''s Got A Gun', 5, 1, 1, N'Steven Tyler, Tom Hamilton', 330736, 10869391, 0.99); 47 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (29, N'Cryin''', 5, 1, 1, N'Steven Tyler, Joe Perry, Taylor Rhodes', 309263, 10056995, 0.99); 48 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (30, N'Amazing', 5, 1, 1, N'Steven Tyler, Richie Supa', 356519, 11616195, 0.99); 49 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (31, N'Blind Man', 5, 1, 1, N'Steven Tyler, Joe Perry, Taylor Rhodes', 240718, 7877453, 0.99); 50 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (32, N'Deuces Are Wild', 5, 1, 1, N'Steven Tyler, Jim Vallance', 215875, 7074167, 0.99); 51 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (33, N'The Other Side', 5, 1, 1, N'Steven Tyler, Jim Vallance', 244375, 7983270, 0.99); 52 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (34, N'Crazy', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 316656, 10402398, 0.99); 53 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (35, N'Eat The Rich', 5, 1, 1, N'Steven Tyler, Joe Perry, Jim Vallance', 251036, 8262039, 0.99); 54 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (36, N'Angel', 5, 1, 1, N'Steven Tyler, Desmond Child', 307617, 9989331, 0.99); 55 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (37, N'Livin'' On The Edge', 5, 1, 1, N'Steven Tyler, Joe Perry, Mark Hudson', 381231, 12374569, 0.99); 56 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (38, N'All I Really Want', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 284891, 9375567, 0.99); 57 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (39, N'You Oughta Know', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 249234, 8196916, 0.99); 58 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (40, N'Perfect', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 188133, 6145404, 0.99); 59 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (41, N'Hand In My Pocket', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 221570, 7224246, 0.99); 60 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (42, N'Right Through You', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 176117, 5793082, 0.99); 61 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (43, N'Forgiven', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 300355, 9753256, 0.99); 62 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (44, N'You Learn', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 239699, 7824837, 0.99); 63 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (45, N'Head Over Feet', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 267493, 8758008, 0.99); 64 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (46, N'Mary Jane', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 280607, 9163588, 0.99); 65 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (47, N'Ironic', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 229825, 7598866, 0.99); 66 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (48, N'Not The Doctor', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 227631, 7604601, 0.99); 67 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (49, N'Wake Up', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 293485, 9703359, 0.99); 68 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (50, N'You Oughta Know (Alternate)', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 491885, 16008629, 0.99); 69 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (51, N'We Die Young', 7, 1, 1, N'Jerry Cantrell', 152084, 4925362, 0.99); 70 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (52, N'Man In The Box', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 286641, 9310272, 0.99); 71 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (53, N'Sea Of Sorrow', 7, 1, 1, N'Jerry Cantrell', 349831, 11316328, 0.99); 72 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (54, N'Bleed The Freak', 7, 1, 1, N'Jerry Cantrell', 241946, 7847716, 0.99); 73 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (55, N'I Can''t Remember', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 222955, 7302550, 0.99); 74 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (56, N'Love, Hate, Love', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 387134, 12575396, 0.99); 75 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (57, N'It Ain''t Like That', 7, 1, 1, N'Jerry Cantrell, Michael Starr, Sean Kinney', 277577, 8993793, 0.99); 76 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (58, N'Sunshine', 7, 1, 1, N'Jerry Cantrell', 284969, 9216057, 0.99); 77 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (59, N'Put You Down', 7, 1, 1, N'Jerry Cantrell', 196231, 6420530, 0.99); 78 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (60, N'Confusion', 7, 1, 1, N'Jerry Cantrell, Michael Starr, Layne Staley', 344163, 11183647, 0.99); 79 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (61, N'I Know Somethin (Bout You)', 7, 1, 1, N'Jerry Cantrell', 261955, 8497788, 0.99); 80 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (62, N'Real Thing', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 243879, 7937731, 0.99); 81 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (63, N'Desafinado', 8, 1, 2, 185338, 5990473, 0.99); 82 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (64, N'Garota De Ipanema', 8, 1, 2, 285048, 9348428, 0.99); 83 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (65, N'Samba De Uma Nota Só (One Note Samba)', 8, 1, 2, 137273, 4535401, 0.99); 84 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (66, N'Por Causa De Você', 8, 1, 2, 169900, 5536496, 0.99); 85 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (67, N'Ligia', 8, 1, 2, 251977, 8226934, 0.99); 86 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (68, N'Fotografia', 8, 1, 2, 129227, 4198774, 0.99); 87 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (69, N'Dindi (Dindi)', 8, 1, 2, 253178, 8149148, 0.99); 88 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (70, N'Se Todos Fossem Iguais A Você (Instrumental)', 8, 1, 2, 134948, 4393377, 0.99); 89 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (71, N'Falando De Amor', 8, 1, 2, 219663, 7121735, 0.99); 90 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (72, N'Angela', 8, 1, 2, 169508, 5574957, 0.99); 91 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (73, N'Corcovado (Quiet Nights Of Quiet Stars)', 8, 1, 2, 205662, 6687994, 0.99); 92 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (74, N'Outra Vez', 8, 1, 2, 126511, 4110053, 0.99); 93 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (75, N'O Boto (Bôto)', 8, 1, 2, 366837, 12089673, 0.99); 94 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (76, N'Canta, Canta Mais', 8, 1, 2, 271856, 8719426, 0.99); 95 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (77, N'Enter Sandman', 9, 1, 3, N'Apocalyptica', 221701, 7286305, 0.99); 96 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (78, N'Master Of Puppets', 9, 1, 3, N'Apocalyptica', 436453, 14375310, 0.99); 97 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (79, N'Harvester Of Sorrow', 9, 1, 3, N'Apocalyptica', 374543, 12372536, 0.99); 98 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (80, N'The Unforgiven', 9, 1, 3, N'Apocalyptica', 322925, 10422447, 0.99); 99 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (81, N'Sad But True', 9, 1, 3, N'Apocalyptica', 288208, 9405526, 0.99); 100 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (82, N'Creeping Death', 9, 1, 3, N'Apocalyptica', 308035, 10110980, 0.99); 101 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (83, N'Wherever I May Roam', 9, 1, 3, N'Apocalyptica', 369345, 12033110, 0.99); 102 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (84, N'Welcome Home (Sanitarium)', 9, 1, 3, N'Apocalyptica', 350197, 11406431, 0.99); 103 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (85, N'Cochise', 10, 1, 1, N'Audioslave/Chris Cornell', 222380, 5339931, 0.99); 104 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (86, N'Show Me How to Live', 10, 1, 1, N'Audioslave/Chris Cornell', 277890, 6672176, 0.99); 105 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (87, N'Gasoline', 10, 1, 1, N'Audioslave/Chris Cornell', 279457, 6709793, 0.99); 106 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (88, N'What You Are', 10, 1, 1, N'Audioslave/Chris Cornell', 249391, 5988186, 0.99); 107 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (89, N'Like a Stone', 10, 1, 1, N'Audioslave/Chris Cornell', 294034, 7059624, 0.99); 108 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (90, N'Set It Off', 10, 1, 1, N'Audioslave/Chris Cornell', 263262, 6321091, 0.99); 109 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (91, N'Shadow on the Sun', 10, 1, 1, N'Audioslave/Chris Cornell', 343457, 8245793, 0.99); 110 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (92, N'I am the Highway', 10, 1, 1, N'Audioslave/Chris Cornell', 334942, 8041411, 0.99); 111 | 112 | -- Niekedy chceme aby SELECT vratil len niekolko znakov a nie vsetky 113 | -- na to sa pouziva prikaz LIMIT 114 | SELECT * 115 | FROM "Track" 116 | LIMIT 10 117 | -- Ak nechceme zacinat vzdy od prveho zaznamu vieme pouzit prikaz OFFSET 118 | SELECT * 119 | FROM "Track" 120 | LIMIT 10 OFFSET 5 121 | -- teraz sme zacali od siesteho az ... offeset hovori kolko prvych preskocim 122 | 123 | 124 | -- Priklad najdi 10 najdlhsich filmov pod 5 minut pricom vypis len ich meno a dobu v minutach 125 | -- Bonus pomocou internetu zisti ako vypises minuty zaokruhlene na 2 desatinne miesta 126 | SELECT "Name", ROUND("Milliseconds"::decimal/60000, 2) as "Minutes" 127 | FROM "Track" track 128 | WHERE ROUND("Milliseconds"::decimal/60000, 2) < 5 129 | ORDER BY "Minutes" DESC 130 | LIMIT 10 131 | 132 | 133 | -- Najdi top dvoch unikatnych autorov skladieb, ktore maju dlzku nazvu medzi 8 az 15 znaikov a su zoradeny podla mena 134 | SELECT DISTINCT "Composer" 135 | FROM "Track" 136 | WHERE LENGTH("Name") BETWEEN 8 AND 15 137 | ORDER BY "Composer" 138 | LIMIT 2 139 | 140 | 141 | -- UPOZORNENIE LIMIT nie je SQL standard je mozne ze v niektorych relacnych databazach nie je LIMIT podporovany 142 | -- Oficialne podla SQL standardu sa pouziva prikaz FETCH ktory robi presne to iste ako LIMIT len ma trosku inu syntax 143 | -- Ak chcete mozete si o nom viac precitat tu https://www.postgresqltutorial.com/postgresql-fetch/ 144 | 145 | DROP TABLE IF EXISTS "Track" CASCADE; 146 | 147 | 148 | -------------------------------------------------------------------------------- /006_update_rename.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS "Customer" CASCADE; 2 | 3 | CREATE TABLE "Customer" 4 | ( 5 | "CustomerId" INT NOT NULL, 6 | "FirstName" VARCHAR(40) NOT NULL, 7 | "LastName" VARCHAR(20) NOT NULL, 8 | "Company" VARCHAR(80), 9 | "Address" VARCHAR(70), 10 | "City" VARCHAR(40), 11 | "State" VARCHAR(40), 12 | "Country" VARCHAR(40), 13 | "PostalCode" VARCHAR(10), 14 | "Phone" VARCHAR(24), 15 | "Fax" VARCHAR(24), 16 | "Email" VARCHAR(60) NOT NULL, 17 | "SupportRepId" INT, 18 | CONSTRAINT "PK_Customer" PRIMARY KEY ("CustomerId") 19 | ); 20 | 21 | INSERT INTO "Customer" ("CustomerId", "FirstName", "LastName", "Company", "Address", "City", "State", "Country", "PostalCode", "Phone", "Fax", "Email", "SupportRepId") VALUES (1, N'Luís', N'Gonçalves', N'Embraer - Empresa Brasileira de Aeronáutica S.A.', N'Av. Brigadeiro Faria Lima, 2170', N'São José dos Campos', N'SP', N'Brazil', N'12227-000', N'+55 (12) 3923-5555', N'+55 (12) 3923-5566', N'luisg@embraer.com.br', 3); 22 | INSERT INTO "Customer" ("CustomerId", "FirstName", "LastName", "Address", "City", "Country", "PostalCode", "Phone", "Email", "SupportRepId") VALUES (2, N'Leonie', N'Köhler', N'Theodor-Heuss-Straße 34', N'Stuttgart', N'Germany', N'70174', N'+49 0711 2842222', N'leonekohler@surfeu.de', 5); 23 | INSERT INTO "Customer" ("CustomerId", "FirstName", "LastName", "Address", "City", "State", "Country", "PostalCode", "Phone", "Email", "SupportRepId") VALUES (3, N'François', N'Tremblay', N'1498 rue Bélanger', N'Montréal', N'QC', N'Canada', N'H2G 1A7', N'+1 (514) 721-4711', N'ftremblay@gmail.com', 3); 24 | INSERT INTO "Customer" ("CustomerId", "FirstName", "LastName", "Address", "City", "Country", "PostalCode", "Phone", "Email", "SupportRepId") VALUES (4, N'Bjørn', N'Hansen', N'Ullevålsveien 14', N'Oslo', N'Norway', N'0171', N'+47 22 44 22 22', N'bjorn.hansen@yahoo.no', 4); 25 | INSERT INTO "Customer" ("CustomerId", "FirstName", "LastName", "Company", "Address", "City", "Country", "PostalCode", "Phone", "Fax", "Email", "SupportRepId") VALUES (5, N'František', N'Wichterlová', N'JetBrains s.r.o.', N'Klanova 9/506', N'Prague', N'Czech Republic', N'14700', N'+420 2 4172 5555', N'+420 2 4172 5555', N'frantisekw@jetbrains.com', 4); 26 | 27 | ALTER TABLE IF EXISTS "Customer" 28 | RENAME TO customer; 29 | 30 | ALTER TABLE customer 31 | RENAME COLUMN "CustomerId" TO customer_id; 32 | ALTER TABLE customer 33 | RENAME COLUMN "FirstName" TO first_name; 34 | 35 | -- UPDATE riadkov 36 | SELECT * 37 | FROM customer 38 | 39 | UPDATE customer 40 | SET first_name = 'Someone', 41 | "LastName" = 'else' 42 | WHERE customer_id = 1; 43 | -- Vrati to UPDATE pocet_upravenych_riadkov 44 | 45 | UPDATE customer 46 | SET first_name = 'Someone', 47 | "LastName" = 'else' 48 | WHERE customer_id < 3; 49 | 50 | -- Pridanie stlpca 51 | -- Ako vyfiltrujem nazvy stlpcov 52 | SELECT column_name 53 | FROM information_schema.columns 54 | WHERE table_schema = 'public' 55 | AND table_name = 'customer'; 56 | -- Vzdy specifikujte aj schemu niekedy moze byt viac napr prod test dev ... 57 | 58 | -- Pridanie prazdneho stlpca (vzdy na koniec neda sa to nastavit inak) 59 | ALTER TABLE customer 60 | ADD COLUMN test_column VARCHAR(256); 61 | -- Co ak chceme nejaku hodnotu? 62 | -- ALTER TABLE customer 63 | -- ADD COLUMN test_column_not_bull VARCHAR(256) NOT NULL; 64 | -- ERROR lebo tam su uz data. Ako na to? 65 | -- 1) Vytvorime prazdny stlpec 66 | ALTER TABLE customer 67 | ADD COLUMN test_column_not_bull VARCHAR(256); 68 | -- 2) Pridame hodnoty 69 | UPDATE customer 70 | SET test_column_not_bull = 'not null'; 71 | -- 3) Pridame CONSTRAINT 72 | ALTER TABLE customer 73 | ALTER COLUMN test_column_not_bull SET NOT NULL; 74 | 75 | -- DOMACA ULOHA zistite ako zmenime datovy typ existujuceho stlpca, ktory uz ma nejake data :) (kludne ich aj zmazte). 76 | DROP TABLE IF EXISTS "Customer" CASCADE; 77 | DROP TABLE IF EXISTS customer CASCADE; 78 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /007_removing_data.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS "Track" CASCADE; 2 | 3 | CREATE TABLE "Track" 4 | ( 5 | "TrackId" INT NOT NULL, 6 | "Name" VARCHAR(200) NOT NULL, 7 | "AlbumId" INT, 8 | "MediaTypeId" INT NOT NULL, 9 | "GenreId" INT, 10 | "Composer" VARCHAR(220), 11 | "Milliseconds" INT NOT NULL, 12 | "Bytes" INT, 13 | "UnitPrice" NUMERIC(10,2) NOT NULL, 14 | CONSTRAINT "PK_Track" PRIMARY KEY ("TrackId") 15 | ); 16 | 17 | 18 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (1, N'For Those About To Rock (We Salute You)', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 343719, 11170334, 0.99); 19 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (2, N'Balls to the Wall', 2, 2, 1, 342562, 5510424, 0.99); 20 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (3, N'Fast As a Shark', 3, 2, 1, N'F. Baltes, S. Kaufman, U. Dirkscneider & W. Hoffman', 230619, 3990994, 0.99); 21 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (4, N'Restless and Wild', 3, 2, 1, N'F. Baltes, R.A. Smith-Diesel, S. Kaufman, U. Dirkscneider & W. Hoffman', 252051, 4331779, 0.99); 22 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (5, N'Princess of the Dawn', 3, 2, 1, N'Deaffy & R.A. Smith-Diesel', 375418, 6290521, 0.99); 23 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (6, N'Put The Finger On You', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205662, 6713451, 0.99); 24 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (7, N'Let''s Get It Up', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 233926, 7636561, 0.99); 25 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (8, N'Inject The Venom', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 210834, 6852860, 0.99); 26 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (9, N'Snowballed', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 203102, 6599424, 0.99); 27 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (10, N'Evil Walks', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 263497, 8611245, 0.99); 28 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (11, N'C.O.D.', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 199836, 6566314, 0.99); 29 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (12, N'Breaking The Rules', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 263288, 8596840, 0.99); 30 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (13, N'Night Of The Long Knives', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205688, 6706347, 0.99); 31 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (14, N'Spellbound', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 270863, 8817038, 0.99); 32 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (15, N'Go Down', 4, 1, 1, N'AC/DC', 331180, 10847611, 0.99); 33 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (16, N'Dog Eat Dog', 4, 1, 1, N'AC/DC', 215196, 7032162, 0.99); 34 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (17, N'Let There Be Rock', 4, 1, 1, N'AC/DC', 366654, 12021261, 0.99); 35 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (18, N'Bad Boy Boogie', 4, 1, 1, N'AC/DC', 267728, 8776140, 0.99); 36 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (19, N'Problem Child', 4, 1, 1, N'AC/DC', 325041, 10617116, 0.99); 37 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (20, N'Overdose', 4, 1, 1, N'AC/DC', 369319, 12066294, 0.99); 38 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (21, N'Hell Ain''t A Bad Place To Be', 4, 1, 1, N'AC/DC', 254380, 8331286, 0.99); 39 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (22, N'Whole Lotta Rosie', 4, 1, 1, N'AC/DC', 323761, 10547154, 0.99); 40 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (23, N'Walk On Water', 5, 1, 1, N'Steven Tyler, Joe Perry, Jack Blades, Tommy Shaw', 295680, 9719579, 0.99); 41 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (24, N'Love In An Elevator', 5, 1, 1, N'Steven Tyler, Joe Perry', 321828, 10552051, 0.99); 42 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (25, N'Rag Doll', 5, 1, 1, N'Steven Tyler, Joe Perry, Jim Vallance, Holly Knight', 264698, 8675345, 0.99); 43 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (26, N'What It Takes', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 310622, 10144730, 0.99); 44 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (27, N'Dude (Looks Like A Lady)', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 264855, 8679940, 0.99); 45 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (28, N'Janie''s Got A Gun', 5, 1, 1, N'Steven Tyler, Tom Hamilton', 330736, 10869391, 0.99); 46 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (29, N'Cryin''', 5, 1, 1, N'Steven Tyler, Joe Perry, Taylor Rhodes', 309263, 10056995, 0.99); 47 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (30, N'Amazing', 5, 1, 1, N'Steven Tyler, Richie Supa', 356519, 11616195, 0.99); 48 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (31, N'Blind Man', 5, 1, 1, N'Steven Tyler, Joe Perry, Taylor Rhodes', 240718, 7877453, 0.99); 49 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (32, N'Deuces Are Wild', 5, 1, 1, N'Steven Tyler, Jim Vallance', 215875, 7074167, 0.99); 50 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (33, N'The Other Side', 5, 1, 1, N'Steven Tyler, Jim Vallance', 244375, 7983270, 0.99); 51 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (34, N'Crazy', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 316656, 10402398, 0.99); 52 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (35, N'Eat The Rich', 5, 1, 1, N'Steven Tyler, Joe Perry, Jim Vallance', 251036, 8262039, 0.99); 53 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (36, N'Angel', 5, 1, 1, N'Steven Tyler, Desmond Child', 307617, 9989331, 0.99); 54 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (37, N'Livin'' On The Edge', 5, 1, 1, N'Steven Tyler, Joe Perry, Mark Hudson', 381231, 12374569, 0.99); 55 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (38, N'All I Really Want', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 284891, 9375567, 0.99); 56 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (39, N'You Oughta Know', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 249234, 8196916, 0.99); 57 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (40, N'Perfect', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 188133, 6145404, 0.99); 58 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (41, N'Hand In My Pocket', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 221570, 7224246, 0.99); 59 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (42, N'Right Through You', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 176117, 5793082, 0.99); 60 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (43, N'Forgiven', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 300355, 9753256, 0.99); 61 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (44, N'You Learn', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 239699, 7824837, 0.99); 62 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (45, N'Head Over Feet', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 267493, 8758008, 0.99); 63 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (46, N'Mary Jane', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 280607, 9163588, 0.99); 64 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (47, N'Ironic', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 229825, 7598866, 0.99); 65 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (48, N'Not The Doctor', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 227631, 7604601, 0.99); 66 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (49, N'Wake Up', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 293485, 9703359, 0.99); 67 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (50, N'You Oughta Know (Alternate)', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 491885, 16008629, 0.99); 68 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (51, N'We Die Young', 7, 1, 1, N'Jerry Cantrell', 152084, 4925362, 0.99); 69 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (52, N'Man In The Box', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 286641, 9310272, 0.99); 70 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (53, N'Sea Of Sorrow', 7, 1, 1, N'Jerry Cantrell', 349831, 11316328, 0.99); 71 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (54, N'Bleed The Freak', 7, 1, 1, N'Jerry Cantrell', 241946, 7847716, 0.99); 72 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (55, N'I Can''t Remember', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 222955, 7302550, 0.99); 73 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (56, N'Love, Hate, Love', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 387134, 12575396, 0.99); 74 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (57, N'It Ain''t Like That', 7, 1, 1, N'Jerry Cantrell, Michael Starr, Sean Kinney', 277577, 8993793, 0.99); 75 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (58, N'Sunshine', 7, 1, 1, N'Jerry Cantrell', 284969, 9216057, 0.99); 76 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (59, N'Put You Down', 7, 1, 1, N'Jerry Cantrell', 196231, 6420530, 0.99); 77 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (60, N'Confusion', 7, 1, 1, N'Jerry Cantrell, Michael Starr, Layne Staley', 344163, 11183647, 0.99); 78 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (61, N'I Know Somethin (Bout You)', 7, 1, 1, N'Jerry Cantrell', 261955, 8497788, 0.99); 79 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (62, N'Real Thing', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 243879, 7937731, 0.99); 80 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (63, N'Desafinado', 8, 1, 2, 185338, 5990473, 0.99); 81 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (64, N'Garota De Ipanema', 8, 1, 2, 285048, 9348428, 0.99); 82 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (65, N'Samba De Uma Nota Só (One Note Samba)', 8, 1, 2, 137273, 4535401, 0.99); 83 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (66, N'Por Causa De Você', 8, 1, 2, 169900, 5536496, 0.99); 84 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (67, N'Ligia', 8, 1, 2, 251977, 8226934, 0.99); 85 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (68, N'Fotografia', 8, 1, 2, 129227, 4198774, 0.99); 86 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (69, N'Dindi (Dindi)', 8, 1, 2, 253178, 8149148, 0.99); 87 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (70, N'Se Todos Fossem Iguais A Você (Instrumental)', 8, 1, 2, 134948, 4393377, 0.99); 88 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (71, N'Falando De Amor', 8, 1, 2, 219663, 7121735, 0.99); 89 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (72, N'Angela', 8, 1, 2, 169508, 5574957, 0.99); 90 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (73, N'Corcovado (Quiet Nights Of Quiet Stars)', 8, 1, 2, 205662, 6687994, 0.99); 91 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (74, N'Outra Vez', 8, 1, 2, 126511, 4110053, 0.99); 92 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (75, N'O Boto (Bôto)', 8, 1, 2, 366837, 12089673, 0.99); 93 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (76, N'Canta, Canta Mais', 8, 1, 2, 271856, 8719426, 0.99); 94 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (77, N'Enter Sandman', 9, 1, 3, N'Apocalyptica', 221701, 7286305, 0.99); 95 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (78, N'Master Of Puppets', 9, 1, 3, N'Apocalyptica', 436453, 14375310, 0.99); 96 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (79, N'Harvester Of Sorrow', 9, 1, 3, N'Apocalyptica', 374543, 12372536, 0.99); 97 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (80, N'The Unforgiven', 9, 1, 3, N'Apocalyptica', 322925, 10422447, 0.99); 98 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (81, N'Sad But True', 9, 1, 3, N'Apocalyptica', 288208, 9405526, 0.99); 99 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (82, N'Creeping Death', 9, 1, 3, N'Apocalyptica', 308035, 10110980, 0.99); 100 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (83, N'Wherever I May Roam', 9, 1, 3, N'Apocalyptica', 369345, 12033110, 0.99); 101 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (84, N'Welcome Home (Sanitarium)', 9, 1, 3, N'Apocalyptica', 350197, 11406431, 0.99); 102 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (85, N'Cochise', 10, 1, 1, N'Audioslave/Chris Cornell', 222380, 5339931, 0.99); 103 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (86, N'Show Me How to Live', 10, 1, 1, N'Audioslave/Chris Cornell', 277890, 6672176, 0.99); 104 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (87, N'Gasoline', 10, 1, 1, N'Audioslave/Chris Cornell', 279457, 6709793, 0.99); 105 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (88, N'What You Are', 10, 1, 1, N'Audioslave/Chris Cornell', 249391, 5988186, 0.99); 106 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (89, N'Like a Stone', 10, 1, 1, N'Audioslave/Chris Cornell', 294034, 7059624, 0.99); 107 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (90, N'Set It Off', 10, 1, 1, N'Audioslave/Chris Cornell', 263262, 6321091, 0.99); 108 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (91, N'Shadow on the Sun', 10, 1, 1, N'Audioslave/Chris Cornell', 343457, 8245793, 0.99); 109 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (92, N'I am the Highway', 10, 1, 1, N'Audioslave/Chris Cornell', 334942, 8041411, 0.99); 110 | 111 | -- Pomocou DROP TABLE vieme zmazat tabulku navzdy 112 | -- nerobte to 113 | -- DROP TABLE "Track"; 114 | 115 | -- Mazat vieme aj pomocou prikazu DELETE FROM 116 | DELETE FROM "Track" 117 | WHERE 118 | "AlbumId" = 1; 119 | -- Ked to spustite druhy krat a riadok uz neexistuje nevypise sa chyba 120 | 121 | -- Pomocou tohto prikazu vieme aj vratit riadok pred jeho zmazanim ... toto sa vyuziva najme pri API backend serveroch 122 | DELETE FROM "Track" 123 | WHERE 124 | "AlbumId" = 2 125 | RETURNING *; 126 | 127 | -- Toto vymaze vsetky zaznamy ale zanecha tabulku 128 | DELETE FROM "Track"; 129 | 130 | -- Ak pouzivate auto increment stlpec v tabulke napr pomocou SERIAL ... DELETE FROM zanecha aktualnu hodnotu 131 | DROP TABLE IF EXISTS car; 132 | CREATE TABLE car( 133 | car_id SERIAL PRIMARY KEY, 134 | brand VARCHAR(64) 135 | ); 136 | INSERT INTO car (brand) VALUES ('BMW'); 137 | DELETE FROM car; 138 | INSERT INTO car (brand) VALUES ('Audi'); 139 | 140 | SELECT * 141 | FROM car; 142 | -- DELETE FROM pri mazani prechadza kazdy riadok tabulky a uzamika ho 143 | 144 | -- Prikaz truncate table robi to iste co delete table 145 | -- Truncate table pocas vykonavania uzamkne tabulku preto je rychlejsi ako delete from ktory zamkne roadok po riadku 146 | -- Truncate table nevrati ziadnu hodnotu .... a vo vacsine SQL databaz resetuje autoincrement v pripade postgresql si mozeme vybrat co sa stane 147 | DROP TABLE IF EXISTS car; 148 | CREATE TABLE car( 149 | car_id SERIAL PRIMARY KEY, 150 | brand VARCHAR(64) 151 | ); 152 | INSERT INTO car (brand) VALUES ('BMW'); 153 | -- RESTART IDENTITY vie restartovat pk. 154 | TRUNCATE TABLE car RESTART IDENTITY; 155 | INSERT INTO car (brand) VALUES ('Audi'); 156 | 157 | SELECT * 158 | FROM car; 159 | 160 | -- Poznamka do buducnosti, truncate table nespusta on delete trigger 161 | 162 | DROP TABLE IF EXISTS "Track" CASCADE; 163 | DROP TABLE IF EXISTS car CASCADE; 164 | 165 | 166 | -------------------------------------------------------------------------------- /008_foreign_keys.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS "Customer" CASCADE; 2 | DROP TABLE IF EXISTS "Invoice" CASCADE; 3 | 4 | CREATE TABLE "Customer" 5 | ( 6 | "CustomerId" INT NOT NULL, 7 | "FirstName" VARCHAR(40) NOT NULL, 8 | "LastName" VARCHAR(20) NOT NULL, 9 | "Company" VARCHAR(80), 10 | "Address" VARCHAR(70), 11 | "City" VARCHAR(40), 12 | "State" VARCHAR(40), 13 | "Country" VARCHAR(40), 14 | "PostalCode" VARCHAR(10), 15 | "Phone" VARCHAR(24), 16 | "Fax" VARCHAR(24), 17 | "Email" VARCHAR(60) NOT NULL, 18 | "SupportRepId" INT, 19 | CONSTRAINT "PK_Customer" PRIMARY KEY ("CustomerId") 20 | ); 21 | 22 | -- Najprv vytvorime tabulku kde sa nachadza specifikacia stlpaca pre customer 23 | CREATE TABLE "Invoice" 24 | ( 25 | "InvoiceId" INT NOT NULL, 26 | "CustomerId" INT NOT NULL, 27 | "InvoiceDate" TIMESTAMP NOT NULL, 28 | "BillingAddress" VARCHAR(70), 29 | "BillingCity" VARCHAR(40), 30 | "BillingState" VARCHAR(40), 31 | "BillingCountry" VARCHAR(40), 32 | "BillingPostalCode" VARCHAR(10), 33 | "Total" NUMERIC(10,2) NOT NULL, 34 | CONSTRAINT "PK_Invoice" PRIMARY KEY ("InvoiceId") 35 | ); 36 | 37 | -- Nasledne vytvorime CONSTRAIN alebo obmedzenie kde specifikujeme foreign key 38 | -- Foreign key vie byt specifikovany aj na viac ako jeden stlpec (stlpec1, stlpec2) 39 | -- Za REFERENCE specifikujeme rodicovsku triedu 40 | ALTER TABLE "Invoice" ADD CONSTRAINT "FK_InvoiceCustomerId" 41 | FOREIGN KEY ("CustomerId") REFERENCES "Customer" ("CustomerId") ON DELETE NO ACTION ON UPDATE NO ACTION; 42 | -- Na konci obmedzenia vieme specifikovat co sa ma stat ked sa dany kluc zmaze z rodicovskej triedy ... cize ked rodic zanikne v tomto pripade zakaznik 43 | -- Moznosti: 44 | -- SET NULL 45 | -- SET DEFAULT 46 | -- NO ACTION 47 | -- CASCADE - zmaze sa aj invoice ak sa zmaze zakaznik 48 | 49 | --- FOREIGN KEy sa da specifikovat aj v create table v casi constrain na konci 50 | DROP TABLE IF EXISTS car; 51 | CREATE TABLE car ( 52 | car_id INT NOT NULL, 53 | brand VARCHAR(128) NOT NULL, 54 | customer_id INT NOT NULL, 55 | CONSTRAINT pk_car PRIMARY KEY (car_id), 56 | CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES "Customer" ("CustomerId") ON DELETE NO ACTION ON UPDATE NO ACTION 57 | ); 58 | 59 | INSERT INTO "Customer" ("CustomerId", "FirstName", "LastName", "Company", "Address", "City", "State", "Country", "PostalCode", "Phone", "Fax", "Email", "SupportRepId") VALUES (1, N'Luís', N'Gonçalves', N'Embraer - Empresa Brasileira de Aeronáutica S.A.', N'Av. Brigadeiro Faria Lima, 2170', N'São José dos Campos', N'SP', N'Brazil', N'12227-000', N'+55 (12) 3923-5555', N'+55 (12) 3923-5566', N'luisg@embraer.com.br', 3); 60 | -- vsimnite si ze ked vytvaram auto musim specifikovat private key lebo pri vytvarani tabulky som nespecifikoval SERIAL datovy typ 61 | -- musim specifikovat aj customer_id 62 | INSERT INTO car (car_id, brand, customer_id) VALUES (1, 'BMW', 1); 63 | -- Mame tu problem nevieme zmazat zakanika lebo foreign key mal nastaveny no action ON DELETE 64 | -- DELETE FROM "Customer" where "CustomerId" = 1; 65 | -- potrebujeme ho zmenit 66 | ALTER TABLE car 67 | DROP CONSTRAINT fk_customer, 68 | ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES "Customer" ("CustomerId") ON DELETE CASCADE ON UPDATE NO ACTION 69 | DELETE FROM "Customer" where "CustomerId" = 1; 70 | -- Teraz sa zmaze aj auto aj zakaznik teda vsetko co je spolocne so zakaznikom 71 | -- To iste plati aj pre foreign key zmenu ... co ked sa customer id zmeni ak je nastaveny NO ACTION nastane chyba 72 | 73 | 74 | DROP TABLE IF EXISTS "Customer" CASCADE; 75 | DROP TABLE IF EXISTS "Invoice" CASCADE; -------------------------------------------------------------------------------- /009_joins_union_intersect_except_theory.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS test1; 2 | DROP TABLE IF EXISTS test2; 3 | 4 | CREATE TABLE test1 ( 5 | user_id_test1 INT PRIMARY KEY, 6 | username VARCHAR (100) NOT NULL 7 | ); 8 | 9 | CREATE TABLE test2 ( 10 | user_id_test2 INT PRIMARY KEY, 11 | username VARCHAR (100) NOT NULL 12 | ); 13 | 14 | INSERT INTO test1 (user_id_test1, username) 15 | VALUES 16 | (1, 'Jano'), 17 | (2, 'Miso'), 18 | (3, 'Fero'), 19 | (4, 'Juro'), 20 | (5, 'Palo'), 21 | (6, 'Matej'); 22 | 23 | INSERT INTO test2 (user_id_test2, username) 24 | VALUES 25 | (1, 'Fero'), 26 | (2, 'Palo'), 27 | (3, 'Miso'), 28 | (4, 'Karol'), 29 | (5, 'Patrik'), 30 | (6, 'Matej'); 31 | 32 | 33 | SELECT * 34 | FROM test1; 35 | 36 | SELECT * 37 | FROM test2; 38 | 39 | -- INNER JOIN/JOIN 40 | -- Chcem vediet ktory ziaci boli na prvom aj druhom teste 41 | SELECT * 42 | FROM test1 43 | INNER JOIN test2 44 | ON test1.username=test2.username 45 | 46 | -- LEFT JOIN/LEFT OUTER JOIN 47 | -- Z tych co boli na prvom teste chcem vediet co mali na druhom teste aj ked na nom neboli 48 | SELECT * 49 | FROM test1 50 | LEFT JOIN test2 51 | ON test1.username=test2.username 52 | 53 | -- RIGHT JOIN/RIGHT OUTER JOIN 54 | -- Z tych co boli na druhom teste chcem vediet co mali na prvom teste aj ked na nom neboli 55 | SELECT * 56 | FROM test1 57 | RIGHT JOIN test2 58 | ON test1.username=test2.username 59 | 60 | 61 | -- Kazdy ziak z prveho z kazdym ziakom z druheho tetsu a ak niekto chyba daj NULL 62 | SELECT * 63 | FROM test1 64 | FULL OUTER JOIN test2 65 | ON test1.username=test2.username 66 | 67 | -- Toto je specialny pripad takzvany karteziansky sucin kde kombinujeme kazdy zaznam s kazdym 68 | SELECT * 69 | FROM test1 70 | CROSS JOIN test2 71 | 72 | 73 | -- UNION alebo zjednotenie 74 | SELECT * 75 | FROM test1 76 | UNION 77 | SELECT * 78 | FROM test2 79 | 80 | -- BONUS co sa stane ked nesedia stlpce ? 81 | -- pocet stlpcov a datovy typ musia byt tie iste 82 | DROP TABLE IF EXISTS test3; 83 | CREATE TABLE test3 ( 84 | user_id_test3 INT PRIMARY KEY, 85 | username VARCHAR (100) NOT NULL, 86 | car varchar(256) NOT NULL 87 | ); 88 | 89 | INSERT INTO test3 (user_id_test3, username, car) 90 | VALUES 91 | (1, 'Jano', 'BMW'), 92 | (2, 'Miso', 'BMW'), 93 | (3, 'Fero', 'BMW'); 94 | 95 | -- SELECT * 96 | -- FROM test1 97 | -- UNION 98 | -- SELECT * 99 | -- FROM test3 100 | -- TOTO spravi chybu 101 | -- UNION maze dupllikaty vo vysledku ak ichc chceme zachovat musime pouzit UNION ALL 102 | 103 | --INTERSECT prienik 104 | SELECT * 105 | FROM test1 106 | INTERSECT 107 | SELECT * 108 | FROM test2 109 | 110 | -- EXCEPT zvysok 111 | SELECT * 112 | FROM test1 113 | EXCEPT 114 | SELECT * 115 | FROM test2 116 | 117 | -- Na konci zmazeme tabulky 118 | DROP TABLE IF EXISTS test1; 119 | DROP TABLE IF EXISTS test2; 120 | 121 | 122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /011_group_by_having.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS "Track" CASCADE; 2 | 3 | CREATE TABLE "Track" 4 | ( 5 | "TrackId" INT NOT NULL, 6 | "Name" VARCHAR(200) NOT NULL, 7 | "AlbumId" INT, 8 | "MediaTypeId" INT NOT NULL, 9 | "GenreId" INT, 10 | "Composer" VARCHAR(220), 11 | "Milliseconds" INT NOT NULL, 12 | "Bytes" INT, 13 | "UnitPrice" NUMERIC(10,2) NOT NULL, 14 | CONSTRAINT "PK_Track" PRIMARY KEY ("TrackId") 15 | ); 16 | 17 | 18 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (1, N'For Those About To Rock (We Salute You)', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 343719, 11170334, 0.99); 19 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (2, N'Balls to the Wall', 2, 2, 1, 342562, 5510424, 0.99); 20 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (3, N'Fast As a Shark', 3, 2, 1, N'F. Baltes, S. Kaufman, U. Dirkscneider & W. Hoffman', 230619, 3990994, 0.99); 21 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (4, N'Restless and Wild', 3, 2, 1, N'F. Baltes, R.A. Smith-Diesel, S. Kaufman, U. Dirkscneider & W. Hoffman', 252051, 4331779, 0.99); 22 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (5, N'Princess of the Dawn', 3, 2, 1, N'Deaffy & R.A. Smith-Diesel', 375418, 6290521, 0.99); 23 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (6, N'Put The Finger On You', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205662, 6713451, 0.99); 24 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (7, N'Let''s Get It Up', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 233926, 7636561, 0.99); 25 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (8, N'Inject The Venom', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 210834, 6852860, 0.99); 26 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (9, N'Snowballed', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 203102, 6599424, 0.99); 27 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (10, N'Evil Walks', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 263497, 8611245, 0.99); 28 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (11, N'C.O.D.', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 199836, 6566314, 0.99); 29 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (12, N'Breaking The Rules', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 263288, 8596840, 0.99); 30 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (13, N'Night Of The Long Knives', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 205688, 6706347, 0.99); 31 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (14, N'Spellbound', 1, 1, 1, N'Angus Young, Malcolm Young, Brian Johnson', 270863, 8817038, 0.99); 32 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (15, N'Go Down', 4, 1, 1, N'AC/DC', 331180, 10847611, 0.99); 33 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (16, N'Dog Eat Dog', 4, 1, 1, N'AC/DC', 215196, 7032162, 0.99); 34 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (17, N'Let There Be Rock', 4, 1, 1, N'AC/DC', 366654, 12021261, 0.99); 35 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (18, N'Bad Boy Boogie', 4, 1, 1, N'AC/DC', 267728, 8776140, 0.99); 36 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (19, N'Problem Child', 4, 1, 1, N'AC/DC', 325041, 10617116, 0.99); 37 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (20, N'Overdose', 4, 1, 1, N'AC/DC', 369319, 12066294, 0.99); 38 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (21, N'Hell Ain''t A Bad Place To Be', 4, 1, 1, N'AC/DC', 254380, 8331286, 0.99); 39 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (22, N'Whole Lotta Rosie', 4, 1, 1, N'AC/DC', 323761, 10547154, 0.99); 40 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (23, N'Walk On Water', 5, 1, 1, N'Steven Tyler, Joe Perry, Jack Blades, Tommy Shaw', 295680, 9719579, 0.99); 41 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (24, N'Love In An Elevator', 5, 1, 1, N'Steven Tyler, Joe Perry', 321828, 10552051, 0.99); 42 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (25, N'Rag Doll', 5, 1, 1, N'Steven Tyler, Joe Perry, Jim Vallance, Holly Knight', 264698, 8675345, 0.99); 43 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (26, N'What It Takes', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 310622, 10144730, 0.99); 44 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (27, N'Dude (Looks Like A Lady)', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 264855, 8679940, 0.99); 45 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (28, N'Janie''s Got A Gun', 5, 1, 1, N'Steven Tyler, Tom Hamilton', 330736, 10869391, 0.99); 46 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (29, N'Cryin''', 5, 1, 1, N'Steven Tyler, Joe Perry, Taylor Rhodes', 309263, 10056995, 0.99); 47 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (30, N'Amazing', 5, 1, 1, N'Steven Tyler, Richie Supa', 356519, 11616195, 0.99); 48 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (31, N'Blind Man', 5, 1, 1, N'Steven Tyler, Joe Perry, Taylor Rhodes', 240718, 7877453, 0.99); 49 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (32, N'Deuces Are Wild', 5, 1, 1, N'Steven Tyler, Jim Vallance', 215875, 7074167, 0.99); 50 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (33, N'The Other Side', 5, 1, 1, N'Steven Tyler, Jim Vallance', 244375, 7983270, 0.99); 51 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (34, N'Crazy', 5, 1, 1, N'Steven Tyler, Joe Perry, Desmond Child', 316656, 10402398, 0.99); 52 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (35, N'Eat The Rich', 5, 1, 1, N'Steven Tyler, Joe Perry, Jim Vallance', 251036, 8262039, 0.99); 53 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (36, N'Angel', 5, 1, 1, N'Steven Tyler, Desmond Child', 307617, 9989331, 0.99); 54 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (37, N'Livin'' On The Edge', 5, 1, 1, N'Steven Tyler, Joe Perry, Mark Hudson', 381231, 12374569, 0.99); 55 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (38, N'All I Really Want', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 284891, 9375567, 0.99); 56 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (39, N'You Oughta Know', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 249234, 8196916, 0.99); 57 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (40, N'Perfect', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 188133, 6145404, 0.99); 58 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (41, N'Hand In My Pocket', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 221570, 7224246, 0.99); 59 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (42, N'Right Through You', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 176117, 5793082, 0.99); 60 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (43, N'Forgiven', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 300355, 9753256, 0.99); 61 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (44, N'You Learn', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 239699, 7824837, 0.99); 62 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (45, N'Head Over Feet', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 267493, 8758008, 0.99); 63 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (46, N'Mary Jane', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 280607, 9163588, 0.99); 64 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (47, N'Ironic', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 229825, 7598866, 0.99); 65 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (48, N'Not The Doctor', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 227631, 7604601, 0.99); 66 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (49, N'Wake Up', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 293485, 9703359, 0.99); 67 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (50, N'You Oughta Know (Alternate)', 6, 1, 1, N'Alanis Morissette & Glenn Ballard', 491885, 16008629, 0.99); 68 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (51, N'We Die Young', 7, 1, 1, N'Jerry Cantrell', 152084, 4925362, 0.99); 69 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (52, N'Man In The Box', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 286641, 9310272, 0.99); 70 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (53, N'Sea Of Sorrow', 7, 1, 1, N'Jerry Cantrell', 349831, 11316328, 0.99); 71 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (54, N'Bleed The Freak', 7, 1, 1, N'Jerry Cantrell', 241946, 7847716, 0.99); 72 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (55, N'I Can''t Remember', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 222955, 7302550, 0.99); 73 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (56, N'Love, Hate, Love', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 387134, 12575396, 0.99); 74 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (57, N'It Ain''t Like That', 7, 1, 1, N'Jerry Cantrell, Michael Starr, Sean Kinney', 277577, 8993793, 0.99); 75 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (58, N'Sunshine', 7, 1, 1, N'Jerry Cantrell', 284969, 9216057, 0.99); 76 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (59, N'Put You Down', 7, 1, 1, N'Jerry Cantrell', 196231, 6420530, 0.99); 77 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (60, N'Confusion', 7, 1, 1, N'Jerry Cantrell, Michael Starr, Layne Staley', 344163, 11183647, 0.99); 78 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (61, N'I Know Somethin (Bout You)', 7, 1, 1, N'Jerry Cantrell', 261955, 8497788, 0.99); 79 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (62, N'Real Thing', 7, 1, 1, N'Jerry Cantrell, Layne Staley', 243879, 7937731, 0.99); 80 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (63, N'Desafinado', 8, 1, 2, 185338, 5990473, 0.99); 81 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (64, N'Garota De Ipanema', 8, 1, 2, 285048, 9348428, 0.99); 82 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (65, N'Samba De Uma Nota Só (One Note Samba)', 8, 1, 2, 137273, 4535401, 0.99); 83 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (66, N'Por Causa De Você', 8, 1, 2, 169900, 5536496, 0.99); 84 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (67, N'Ligia', 8, 1, 2, 251977, 8226934, 0.99); 85 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (68, N'Fotografia', 8, 1, 2, 129227, 4198774, 0.99); 86 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (69, N'Dindi (Dindi)', 8, 1, 2, 253178, 8149148, 0.99); 87 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (70, N'Se Todos Fossem Iguais A Você (Instrumental)', 8, 1, 2, 134948, 4393377, 0.99); 88 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (71, N'Falando De Amor', 8, 1, 2, 219663, 7121735, 0.99); 89 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (72, N'Angela', 8, 1, 2, 169508, 5574957, 0.99); 90 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (73, N'Corcovado (Quiet Nights Of Quiet Stars)', 8, 1, 2, 205662, 6687994, 0.99); 91 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (74, N'Outra Vez', 8, 1, 2, 126511, 4110053, 0.99); 92 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (75, N'O Boto (Bôto)', 8, 1, 2, 366837, 12089673, 0.99); 93 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Milliseconds", "Bytes", "UnitPrice") VALUES (76, N'Canta, Canta Mais', 8, 1, 2, 271856, 8719426, 0.99); 94 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (77, N'Enter Sandman', 9, 1, 3, N'Apocalyptica', 221701, 7286305, 0.99); 95 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (78, N'Master Of Puppets', 9, 1, 3, N'Apocalyptica', 436453, 14375310, 0.99); 96 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (79, N'Harvester Of Sorrow', 9, 1, 3, N'Apocalyptica', 374543, 12372536, 0.99); 97 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (80, N'The Unforgiven', 9, 1, 3, N'Apocalyptica', 322925, 10422447, 0.99); 98 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (81, N'Sad But True', 9, 1, 3, N'Apocalyptica', 288208, 9405526, 0.99); 99 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (82, N'Creeping Death', 9, 1, 3, N'Apocalyptica', 308035, 10110980, 0.99); 100 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (83, N'Wherever I May Roam', 9, 1, 3, N'Apocalyptica', 369345, 12033110, 0.99); 101 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (84, N'Welcome Home (Sanitarium)', 9, 1, 3, N'Apocalyptica', 350197, 11406431, 0.99); 102 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (85, N'Cochise', 10, 1, 1, N'Audioslave/Chris Cornell', 222380, 5339931, 0.99); 103 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (86, N'Show Me How to Live', 10, 1, 1, N'Audioslave/Chris Cornell', 277890, 6672176, 0.99); 104 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (87, N'Gasoline', 10, 1, 1, N'Audioslave/Chris Cornell', 279457, 6709793, 0.99); 105 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (88, N'What You Are', 10, 1, 1, N'Audioslave/Chris Cornell', 249391, 5988186, 0.99); 106 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (89, N'Like a Stone', 10, 1, 1, N'Audioslave/Chris Cornell', 294034, 7059624, 0.99); 107 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (90, N'Set It Off', 10, 1, 1, N'Audioslave/Chris Cornell', 263262, 6321091, 0.99); 108 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (91, N'Shadow on the Sun', 10, 1, 1, N'Audioslave/Chris Cornell', 343457, 8245793, 0.99); 109 | INSERT INTO "Track" ("TrackId", "Name", "AlbumId", "MediaTypeId", "GenreId", "Composer", "Milliseconds", "Bytes", "UnitPrice") VALUES (92, N'I am the Highway', 10, 1, 1, N'Audioslave/Chris Cornell', 334942, 8041411, 0.99); 110 | 111 | -- GROUPBY LETS GO !!! 112 | -- pomaha nam vytvarat zoskupenia a nasledne na ne vieme aplikovat agregacnu funkciu (count, sum ...) 113 | -- poradie vykonavanie v postgresql 114 | -- FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT 115 | 116 | -- Samotne group by bez agregacnej funkcie funguje ako DISTINCT a vrati unikatne hodnoty lebo na pozadi sa ako keby vytvoria tieto skupinky 117 | SELECT "GenreId" 118 | FROM "Track" 119 | GROUP BY "GenreId" 120 | 121 | -- Co ked chceme pre kazdy zaner pocet skladieb v DB 122 | SELECT "GenreId", COUNT(*) 123 | FROM "Track" 124 | GROUP BY "GenreId" 125 | 126 | -- Kolko stoja dva najdrahsie albumy ak v nich chcem kupit vsetky skladby 127 | SELECT "AlbumId", SUM("UnitPrice") as final_price 128 | FROM "Track" 129 | GROUP BY "AlbumId" 130 | ORDER BY final_price DESC 131 | LIMIT 2 132 | 133 | -- Spolu s GROUP BY sa pouziva prikaz HAVING ktory sluzi na filtrovanie skupin podla podmienky 134 | -- Cize where filtuje riadky ktore pojdu do group by a nasledne having filtruje vysledne grupy 135 | -- Vyfiltruj vidcka albumov, ktorych suma cien skladieb je vacsiaako 8 136 | SELECT "AlbumId", SUM("UnitPrice") as final_price 137 | FROM "Track" 138 | GROUP BY "AlbumId" 139 | HAVING SUM("UnitPrice") > 8 140 | ORDER BY final_price DESC 141 | LIMIT 100; 142 | 143 | -- GROUP BY vieme aplikovat aj na viac stlpcov naraz 144 | -- Kolko stoja jednotlive kombinacie albumov a zanrov 145 | SELECT "AlbumId", "GenreId", SUM("UnitPrice") as total 146 | FROM "Track" 147 | GROUP BY "AlbumId", "GenreId" 148 | ORDER BY total DESC; 149 | 150 | DROP TABLE IF EXISTS "Track" CASCADE; -------------------------------------------------------------------------------- /012_many_to_many_example.sql: -------------------------------------------------------------------------------- 1 | SELECT * 2 | FROM "Playlist" 3 | 4 | SELECT * 5 | FROM "Track" 6 | 7 | SELECT * 8 | FROM "PlaylistTrack" 9 | 10 | -- Ako sa volá prvá skladba podľa abecedy z playlistov, ktorých názov je tvorený aspoň 12 písmenami 11 | SELECT t."Name" 12 | FROM "PlaylistTrack" plt 13 | JOIN "Playlist" pl 14 | ON pl."PlaylistId"=plt."PlaylistId" 15 | AND LENGTH(pl."Name") > 12 16 | JOIN "Track" t 17 | ON t."TrackId"=plt."TrackId" 18 | ORDER BY t."Name" 19 | 20 | 21 | -------------------------------------------------------------------------------- /013_transactions.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS account; 2 | 3 | CREATE TABLE account ( 4 | account_id SERIAL PRIMARY KEY, 5 | username VARCHAR(128) NOT NULL, 6 | balance INT NOT NULL 7 | ); 8 | 9 | INSERT INTO account(username, balance) VALUES ('Miso', 120); 10 | INSERT INTO account(username, balance) VALUES ('Jano', 150); 11 | INSERT INTO account(username, balance) VALUES ('Fero', 150); 12 | 13 | SELECT * 14 | FROM account 15 | 16 | -- Uloha: chceme aby sa tieto operacie vykonali naraz 17 | -- UPDATE account 18 | -- SET balance=100 19 | -- WHERE username='Miso' 20 | 21 | -- UPDATE account 22 | -- SET balance=170 23 | -- WHERE username='Jano' 24 | 25 | BEGIN; 26 | -- alebo BEGIN TRANSACTION; 27 | -- alebo BEIGN WORK; 28 | 29 | UPDATE account 30 | SET balance=100 31 | WHERE username='Miso'; 32 | 33 | UPDATE account 34 | SET balance=170 35 | WHERE username='Jano'; 36 | 37 | COMMIT; 38 | -- alebo COMMIT TRANSACTION; 39 | -- alebo COMMIT WORK; 40 | 41 | -- Pomocou prikazu ROLLBACK vieme vratit spat transakciu 42 | BEGIN; 43 | 44 | UPDATE account 45 | SET balance=balance+1000000 46 | WHERE username='Miso'; 47 | 48 | ROLLBACK; 49 | -- Tato transakcia sa nikdy nevykonala 50 | 51 | -- Telo transakcie nie je viditelne conku pokym sa necommitne 52 | BEGIN; 53 | 54 | UPDATE account 55 | SET balance=balance+1000000 56 | WHERE username='Miso'; 57 | 58 | SELECT * 59 | FROM account; 60 | -- otvorte si teraz novy query tool a skuste tam dat ten select 61 | COMMIT; 62 | -- az teraz bude zmena viditelna 63 | 64 | DROP TABLE IF EXISTS account; 65 | -------------------------------------------------------------------------------- /015_psql_commands.sh: -------------------------------------------------------------------------------- 1 | psql -d school -U michal -W 2 | # -d specifikuje meno databazy 3 | # -U specifikuje pouzivatela 4 | # -W prinuti vypytanie hesla 5 | 6 | # Prikazy v psql 7 | \l # Vylistuje vsetky dostupne db 8 | \c # Prepne na danu db pre daneho usera 9 | \dt # Vylistuje tabulky v aktualnej db 10 | \d # opise danu tabulku 11 | \dn # vypise schemy v databaze 12 | \s # vypise historiu prikazov na servery nie len v psql 13 | 14 | # SQL prikazy sa spustaju rovnako ako v pgadmin4 je dobre ich oddelovat ; 15 | \q # vypne psql -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kurz SQL pre začiatočníkov 2 | 3 | Tento repozitár je súčasťou online videokurzu, ktorý nájdete zadarmo na YouTube kanáli [Informatika s Mišom](https://www.youtube.com/c/InformatikasMi%C5%A1om). 4 | 5 | Ahojte priatelia moje meno je Mišo Hucko a vitajte na kurze SQL kde Vás naučím základy SQL a prácu s technológiou PostgreSQL. Tento kurz je pre absolútnych začiatočníkov preto neočakávám žiadne prechádzajúce znalosti. Jediný predpoklad tohto kurzu je počítač. Ak budete mať akékoľvek otázky neváhajte a napíšte ich pod video alebo ma kontaktujte na sociálnych sieťach. 6 | 7 | V prípade ak chcete finančne podporiť kanál tak viete tak spraviť na mojom Patreone: https://www.patreon.com/informatikasmisom 8 | 9 | 👨‍👩‍👧‍👦 Discord: https://discord.gg/VUNbPvnSrh
10 | 💵 Patreon: https://www.patreon.com/informatikasmisom
11 | 🎥 YouTube: https://www.youtube.com/c/InformatikasMišom
12 | 📸 Instagram: https://www.instagram.com/informatikasmisom
13 | 👍 Facebook: https://www.facebook.com/InformatikaSMisom
14 | 💻 Github: https://github.com/misohu
15 | 🤵 LinkedIn: https://linkedin.com/in/michal-hucko
16 | 🏫 Skillshare: https://www.skillshare.com/r/profile/Michal-Hucko/680547770
-------------------------------------------------------------------------------- /project/.gitignore: -------------------------------------------------------------------------------- 1 | .env/ 2 | __pycache__/ 3 | .vscode/ -------------------------------------------------------------------------------- /project/main.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from src.information_system import InformationSystem 4 | from src.utils.postgres_handler import PostgresHandler 5 | 6 | pg_handler=PostgresHandler( 7 | host=os.getenv("POSTGRES_HOST", "localhost"), 8 | database=os.getenv("POSTGRES_DATABASE", "postgres"), 9 | user=os.getenv("POSTGRES_USER", "postgres"), 10 | password=os.getenv("POSTGRES_PASSWORD", "postgres"), 11 | ) 12 | 13 | information_system=InformationSystem(db_handler=pg_handler) 14 | 15 | def print_menu(): 16 | print("\n*******************************************") 17 | print("WELCOME") 18 | print("Menu options:") 19 | print("\t[0] to insert a teacher") 20 | print("\t[1] to insert a course") 21 | print("\t[2] to insert a student") 22 | print("\t[3] to terminate") 23 | print("\t[4] to list courses") 24 | print("\t[5] to list students") 25 | print("\t[6] to list teachers") 26 | 27 | def create_teacher(information_system: InformationSystem): 28 | print("Teacher details:") 29 | while True: 30 | try: 31 | name=input("Name: ") 32 | surname=input("Surname: ") 33 | degree=input("Degree: ") 34 | except Exception as e: 35 | print(e) 36 | print("Error during teacher creation please renter details") 37 | continue 38 | break 39 | information_system.insert_teacher({"name": name, "surname": surname, "degree": degree}) 40 | 41 | def create_course(information_system: InformationSystem): 42 | teachers=information_system.get_teachers() 43 | if not teachers: 44 | print("Sorry first you need to have teachers!!!") 45 | while True: 46 | try: 47 | name=input("Name: ") 48 | counter = 0 49 | print("Choose your teacher") 50 | for teacher in teachers: 51 | print(f"{counter}, {teacher['degree']}. {teacher['name']} {teacher['surname']}") 52 | counter +=1 53 | teacher_id=int(input("Teacher id: ")) 54 | if teacher_id <0 or teacher_id>=len(teachers): 55 | print("Please choose teachers from above") 56 | except Exception as e: 57 | print(e) 58 | print("Error during teacher creation please reenter details") 59 | continue 60 | break 61 | information_system.insert_course({"name": name, "teacher_id": teachers[teacher_id]['teacher_id']}) 62 | 63 | def create_student(information_system: InformationSystem): 64 | courses=information_system.get_courses() 65 | while True: 66 | try: 67 | name=input("Name: ") 68 | surname=input("Surname: ") 69 | grade=input("Grade: ") 70 | print("Choose courses to join (press -1 to finish adding)") 71 | selected_courses=[] 72 | selected_courses_ids=[] 73 | while True: 74 | print(f"Selected courses are {selected_courses_ids}") 75 | for counter, course in enumerate(courses): 76 | print(f"{counter}, {course['name']}") 77 | course_id=int(input("Course id: ")) 78 | if course_id == -1: 79 | break 80 | if course_id <0 or course_id>=len(courses): 81 | print("Please choose course from above") 82 | continue 83 | selected_courses.append(courses[course_id]) 84 | selected_courses_ids.append(course_id) 85 | if len(selected_courses) == len(courses): 86 | break 87 | break 88 | except Exception as e: 89 | print(e) 90 | print("Error during student creation please renter details") 91 | continue 92 | student=information_system.insert_student({"name": name, "surname": surname, "grade": grade}) 93 | print(f"Student is {student}") 94 | print(f"Selected course list is {selected_courses}") 95 | for course in selected_courses: 96 | information_system.insert_student_to_course(student['student_id'], course['course_id']) 97 | 98 | def get_courses(information_system: InformationSystem): 99 | print("Courses List:") 100 | result_data=information_system.get_courses_detailed() 101 | for key, value in result_data.items(): 102 | formated_students=", ".join(map(lambda x: student_dict_to_string(x), value['students'])) 103 | print(f"Subject: {key}\n\tTeacher: {teacher_dict_to_string(value['teacher'])}\n\tStudents: {formated_students}") 104 | 105 | def teacher_dict_to_string(teacher_dict): 106 | return f"{teacher_dict['degree']}. {teacher_dict['name']} {teacher_dict['surname']}" 107 | 108 | def student_dict_to_string(student_dict): 109 | return f"{student_dict['name']} {student_dict['surname']} ({student_dict['grade']})" 110 | 111 | def get_students(information_system: InformationSystem): 112 | result_data=information_system.get_students() 113 | print("Students List:") 114 | for student in result_data: 115 | print(student_dict_to_string(student)) 116 | 117 | def get_teachers(information_system: InformationSystem): 118 | result_data=information_system.get_teachers() 119 | print("Teacher List:") 120 | for teacher in result_data: 121 | print(teacher_dict_to_string(teacher)) 122 | 123 | if __name__ == "__main__": 124 | while True: 125 | while True: 126 | try: 127 | print_menu() 128 | menu_choice=int(input("Menu choice: ")) 129 | if menu_choice<0 or menu_choice >=7: 130 | raise Exception("Wrong menu choice") 131 | break 132 | except Exception as e: 133 | print(e) 134 | print("Please choose valid menu choice") 135 | 136 | if menu_choice == 3: 137 | print("Bye!!") 138 | break 139 | if menu_choice == 0: 140 | create_teacher(information_system) 141 | if menu_choice == 1: 142 | create_course(information_system) 143 | if menu_choice == 2: 144 | create_student(information_system) 145 | if menu_choice == 4: 146 | get_courses(information_system) 147 | if menu_choice ==5: 148 | get_students(information_system) 149 | if menu_choice ==6: 150 | get_teachers(information_system) 151 | -------------------------------------------------------------------------------- /project/src/config/consts.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | STUDENT_TABLE=os.getenv("STUDENT_TABLE", "student") 4 | TEACHER_TABLE=os.getenv("TEACHER_TABLE", "teacher") 5 | COURSE_TABLE=os.getenv("COURSE_TABLE", "course") 6 | COURSE_STUDENT_TABLE=os.getenv("COURSE_STUDENT_TABLE", "course_student") 7 | 8 | POSTGRES_HOST=os.getenv("POSTGRES_HOST", "localhost") 9 | POSTGRES_DATABASE=os.getenv("POSTGRES_DATABASE", "school") 10 | POSTGRES_USER=os.getenv("POSTGRES_USER", "michal") 11 | POSTGRES_PASSWORD=os.getenv("POSTGRES_PASSWORD", "michal") -------------------------------------------------------------------------------- /project/src/information_system.py: -------------------------------------------------------------------------------- 1 | from .config import consts 2 | from .utils.postgres_handler import PostgresHandler 3 | 4 | class InformationSystem: 5 | def __init__(self, db_handler: PostgresHandler): 6 | self.db_handler=db_handler 7 | 8 | def get_students(self): 9 | students=self.db_handler.get_data_simple_condition(consts.STUDENT_TABLE, ["name", "surname", "grade"]) 10 | return students 11 | 12 | def insert_student(self, data_dict): 13 | return self.db_handler.insert_data(consts.STUDENT_TABLE, data_dict) 14 | 15 | def get_teachers(self): 16 | teachers=self.db_handler.get_data_simple_condition(consts.TEACHER_TABLE, ["teacher_id", "name", "surname", "degree"]) 17 | return teachers 18 | 19 | def insert_teacher(self, data_dict): 20 | self.db_handler.insert_data(consts.TEACHER_TABLE, data_dict) 21 | 22 | def get_courses(self): 23 | courses=self.db_handler.get_data_simple_condition(consts.COURSE_TABLE, ["course_id", "name", "teacher_id"]) 24 | return courses 25 | 26 | def insert_course(self, data_dict): 27 | self.db_handler.insert_data(consts.COURSE_TABLE, data_dict) 28 | 29 | def insert_student_to_course(self, student_id, course_id): 30 | self.db_handler.insert_data(consts.COURSE_STUDENT_TABLE, {"student_id": student_id, "course_id": course_id}) 31 | 32 | def get_courses_detailed(self): 33 | course_list=self.db_handler.get_data_simple_condition(consts.COURSE_TABLE, ["course_id", "name", "teacher_id"]) 34 | course_student_list=self.db_handler.get_join_results(consts.STUDENT_TABLE, consts.COURSE_STUDENT_TABLE, "student_id") 35 | 36 | result_dict={} 37 | for course in course_list: 38 | course_teacher=self.db_handler.get_data_simple_condition(consts.TEACHER_TABLE, ['name', 'surname', 'degree'], "teacher_id", str(course['teacher_id']))[0] 39 | target_students=list(filter(lambda course_student: course_student['course_id'] == course['course_id'], course_student_list)) 40 | result_dict[course['name']]={ 41 | "teacher": course_teacher, 42 | "students": target_students 43 | } 44 | return result_dict -------------------------------------------------------------------------------- /project/src/utils/create_tables.py: -------------------------------------------------------------------------------- 1 | import os 2 | import psycopg2 3 | 4 | from psycopg2 import sql 5 | 6 | if __name__ == "__main__": 7 | print("-----TABLES WILL BE CREATED-----") 8 | conn=psycopg2.connect( 9 | host=os.getenv("POSTGRES_HOST", "localhost"), 10 | database=os.getenv("POSTGRES_DATABASE", "postgres"), 11 | user=os.getenv("POSTGRES_USER", "postgres"), 12 | password=os.getenv("POSTGRES_PASSWORD", "postgres"), 13 | ) 14 | print("-----CONNECTED-----") 15 | with conn, conn.cursor() as cur: 16 | create_student_table_query=sql.SQL( 17 | """ 18 | DROP TABLE IF EXISTS student; 19 | CREATE TABLE student ( 20 | student_id SERIAL PRIMARY KEY, 21 | name VARCHAR(128), 22 | surname VARCHAR(128), 23 | grade INT 24 | ); 25 | """ 26 | ) 27 | print(create_student_table_query.as_string(cur)) 28 | cur.execute(create_student_table_query) 29 | 30 | create_teacher_table_query=sql.SQL( 31 | """ 32 | DROP TABLE IF EXISTS teacher; 33 | CREATE TABLE teacher ( 34 | teacher_id SERIAL PRIMARY KEY, 35 | name VARCHAR(128), 36 | surname VARCHAR(128), 37 | degree VARCHAR(128) 38 | ); 39 | """ 40 | ) 41 | print(create_teacher_table_query.as_string(cur)) 42 | cur.execute(create_teacher_table_query) 43 | 44 | create_course_table_query=sql.SQL( 45 | """ 46 | DROP TABLE IF EXISTS course; 47 | CREATE TABLE course ( 48 | course_id SERIAL PRIMARY KEY, 49 | name VARCHAR(128), 50 | teacher_id INT 51 | ); 52 | """ 53 | ) 54 | print(create_course_table_query.as_string(cur)) 55 | cur.execute(create_course_table_query) 56 | 57 | create_course_student_table_query=sql.SQL( 58 | """ 59 | DROP TABLE IF EXISTS course_student; 60 | CREATE TABLE course_student ( 61 | course_id INT NOT NULL, 62 | student_id INT NOT NULL, 63 | CONSTRAINT "PK_course_student" PRIMARY KEY (course_id, student_id) 64 | ); 65 | """ 66 | ) 67 | print(create_course_student_table_query.as_string(cur)) 68 | cur.execute(create_course_student_table_query) 69 | conn.close() 70 | print("-----TABLE CREATED-----") 71 | 72 | 73 | -------------------------------------------------------------------------------- /project/src/utils/postgres_handler.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | import psycopg2.extras 3 | import traceback 4 | 5 | from psycopg2 import sql 6 | 7 | class PostgresHandler: 8 | def __init__(self, host, database, user, password, debug=False): 9 | self.connection=None 10 | self.host=host 11 | self.database=database 12 | self.user=user 13 | self.password=password 14 | self.debug=debug 15 | 16 | def connect(self): 17 | self.connection = psycopg2.connect( 18 | host=self.host, 19 | database=self.database, 20 | user=self.user, 21 | password=self.password 22 | ) 23 | if self.debug: 24 | print("Connected") 25 | 26 | def insert_data(self, table_name, data_dict): 27 | if self.connection == None or self.connection.closed: 28 | self.connect() 29 | with self.connection, self.connection.cursor(cursor_factory=psycopg2.extras.DictCursor) as cur: 30 | try: 31 | insert_query=sql.SQL( 32 | """ 33 | INSERT INTO {} ({}) 34 | VALUES ({}) 35 | RETURNING *; 36 | """ 37 | ).format( 38 | sql.Identifier(table_name), 39 | sql.SQL(',').join(map(sql.Identifier, data_dict.keys())), 40 | sql.SQL(',').join(map(sql.Literal, data_dict.values())) 41 | ) 42 | if self.debug: 43 | print(insert_query.as_string(cur)) # Pre kontrolu 44 | cur.execute(insert_query) 45 | inserted=cur.fetchone() 46 | except Exception as e: 47 | traceback.print_exc() # Pre kontrolu ked je chyba 48 | print(f"Error during insert_data {e}") 49 | self.connection.close() 50 | return inserted 51 | 52 | def get_data_simple_condition(self, table_name, columns=[], target_column=None, target_value=None): 53 | result=[] 54 | if self.connection == None or self.connection.closed: 55 | self.connect() 56 | 57 | with self.connection, self.connection.cursor(cursor_factory=psycopg2.extras.DictCursor) as cur: 58 | try: 59 | if target_column == None: 60 | select_query=sql.SQL( 61 | """ 62 | SELECT {} 63 | FROM {} 64 | """ 65 | ).format( 66 | sql.SQL(',').join(map(sql.Identifier, columns)), 67 | sql.Identifier(table_name), 68 | ) 69 | else: 70 | select_query=sql.SQL( 71 | """ 72 | SELECT {} 73 | FROM {} 74 | WHERE {} = {} 75 | """ 76 | ).format( 77 | sql.SQL(',').join(map(sql.Identifier, columns)), 78 | sql.Identifier(table_name), 79 | sql.Identifier(target_column), 80 | sql.Literal(target_value) 81 | ) 82 | if self.debug: 83 | print(select_query.as_string(cur)) # Pre kontrolu 84 | cur.execute(select_query) 85 | result=cur.fetchall() 86 | except Exception as e: 87 | traceback.print_exc() # Pre kontrolu ked je chyba 88 | print(f"Error during get_data_simple_condition {e}") 89 | self.connection.close() 90 | return result 91 | 92 | def get_join_results(self, table_name_a, table_name_b, join_coulmn_name_a, join_coulmn_name_b=None): 93 | result=[] 94 | join_coulmn_name_b = join_coulmn_name_b or join_coulmn_name_a 95 | if self.connection == None or self.connection.closed: 96 | self.connect() 97 | 98 | with self.connection, self.connection.cursor(cursor_factory=psycopg2.extras.DictCursor) as cur: 99 | try: 100 | join_query=sql.SQL( 101 | """ 102 | SELECT * 103 | FROM {} 104 | JOIN {} ON {}.{} = {}.{} 105 | """ 106 | ).format( 107 | sql.Identifier(table_name_a), 108 | sql.Identifier(table_name_b), 109 | sql.Identifier(table_name_a), 110 | sql.Identifier(join_coulmn_name_a), 111 | sql.Identifier(table_name_b), 112 | sql.Identifier(join_coulmn_name_b), 113 | ) 114 | if self.debug: 115 | print(join_query.as_string(cur)) # Pre kontrolu 116 | cur.execute(join_query) 117 | result=cur.fetchall() 118 | except Exception as e: 119 | traceback.print_exc() # Pre kontrolu ked je chyba 120 | print(f"Error during get_join_results {e}") 121 | self.connection.close() 122 | return result 123 | 124 | -------------------------------------------------------------------------------- /python-examples/001_connecting.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | 3 | conn=psycopg2.connect( 4 | host="localhost", 5 | database="postgres", 6 | user="postgres", 7 | password="postgres" 8 | ) 9 | 10 | cursor=conn.cursor() 11 | cursor.execute( 12 | "SELECT * FROM student;" 13 | ) 14 | students=cursor.fetchall() 15 | print(students) 16 | cursor.close() 17 | conn.close() -------------------------------------------------------------------------------- /python-examples/002_connection_alternative.py: -------------------------------------------------------------------------------- 1 | import os 2 | import psycopg2 3 | import psycopg2.extras 4 | 5 | conn=psycopg2.connect( 6 | host=os.getenv("POSTGRES_HOST", "localhost"), 7 | database=os.getenv("POSTGRES_DATABASE", "postgres"), 8 | user=os.getenv("POSTGRES_USER", "postgres"), 9 | password=os.getenv("POSTGRES_PASSWORD", "postgres") 10 | ) 11 | 12 | cursor=conn.cursor(cursor_factory=psycopg2.extras.DictCursor) 13 | cursor.execute( 14 | "SELECT * FROM student;" 15 | ) 16 | students=cursor.fetchall() 17 | target_student=students[0] 18 | print(f"Name is {target_student['username']}") 19 | cursor.close() 20 | conn.close() 21 | 22 | # conn=psycopg2.connect( 23 | # os.getenv("POSTGRES_CONNECTION_STRING", "dbname=postgres user=postgres password=postgres host=localhost port=5432") 24 | # ) 25 | 26 | # cursor=conn.cursor(cursor_factory=psycopg2.extras.DictCursor) 27 | # cursor.execute( 28 | # "SELECT * FROM student;" 29 | # ) 30 | # students=cursor.fetchall() 31 | # target_student=students[0] 32 | # print(f"Name is {target_student['username']}") 33 | # cursor.close() 34 | # conn.close() -------------------------------------------------------------------------------- /python-examples/002_transactions.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | import psycopg2.extras 3 | 4 | from utils import consts 5 | 6 | def get_students(curr, conn): 7 | curr.execute("SELECT name, surname FROM student;") 8 | results=curr.fetchall() 9 | conn.commit() 10 | return results 11 | 12 | def insert_student(curr, conn, name, surname): 13 | curr.execute("INSERT INTO student (name, surname) VALUES (%s, %s)", (name, surname)) 14 | conn.commit() 15 | 16 | if __name__ == "__main__": 17 | conn=psycopg2.connect( 18 | host=consts.POSTGRES_HOST, 19 | database=consts.POSTGRES_DATABASE, 20 | user=consts.POSTGRES_USER, 21 | password=consts.POSTGRES_PASSWORD 22 | ) 23 | cursor=conn.cursor(cursor_factory=psycopg2.extras.DictCursor) 24 | students=get_students(cursor, conn) 25 | print(len(students)) 26 | insert_student(cursor, conn, 'test', 'test') 27 | students=get_students(cursor, conn) 28 | print(len(students)) 29 | cursor.close() 30 | conn.close() # automatiky spravi rollback 31 | 32 | # Ak nechceme stale commitovat vsetky query mozemenastavit autocommit, teraz je kazdy execute jedna transakcia 33 | # conn.autocommit = True 34 | 35 | -------------------------------------------------------------------------------- /python-examples/003_sql_injection.py: -------------------------------------------------------------------------------- 1 | import os 2 | import psycopg2 3 | import psycopg2.extras 4 | 5 | from psycopg2 import sql 6 | 7 | conn=psycopg2.connect( 8 | host=os.getenv("POSTGRES_HOST", "localhost"), 9 | database=os.getenv("POSTGRES_DATABASE", "postgres"), 10 | user=os.getenv("POSTGRES_USER", "postgres"), 11 | password=os.getenv("POSTGRES_PASSWORD", "postgres") 12 | ) 13 | 14 | # toto sa nazyva dynamická query 15 | student_id="1" 16 | # student_id="1 OR 1=1" # toto je priklad nebezpecneho SQL injection 17 | # student_id="1; DROP TABLE student" # toto je priklad este nebezpecnejsieho SQL injection 18 | 19 | cursor=conn.cursor(cursor_factory=psycopg2.extras.DictCursor) 20 | 21 | # Ukazaka nebezpecneho pouzitie execute 22 | cursor.execute( 23 | "SELECT * FROM student WHERE student_id="+student_id 24 | ) 25 | # Ine nebezpecne zapisy query 26 | # cursor.execute("SELECT * FROM student WHERE student_id=%s" %student_id) 27 | # cursor.execute(f"SELECT * FROM student WHERE student_id={student_id}") 28 | # cursor.execute("SELECT * FROM student WHERE student_id={}".format(student_id)) 29 | 30 | # Spravne zapisy query 31 | # cursor.execute("SELECT * FROM student WHERE student_id=%s", (student_id, )) 32 | # cursor.execute("SELECT * FROM student WHERE student_id=%(student_id)s", {"student_id": student_id}) 33 | 34 | # Co ked chcem poskytnut ako parameter nazov tabulky alebo stlpca (pouzitie identifikatorov a literalov) 35 | table="student" 36 | cursor.execute( 37 | "SELECT * FROM %s WHERE student_id=1", (table,) 38 | ) # toto nebude fungovat 39 | 40 | # Spravne pouzitie konstruktoru SQL 41 | select_sql=sql.SQL( 42 | """ 43 | SELECT * 44 | FROM {table} 45 | WHERE student_id={student_id} 46 | """ 47 | ).format( 48 | table=sql.Identifier(table), 49 | student_id=sql.Literal(student_id) 50 | ) 51 | cursor.execute(select_sql) 52 | 53 | table="Test" 54 | select_sql=sql.SQL( 55 | """ 56 | SELECT * 57 | FROM {table} 58 | """ 59 | ).format( 60 | table=sql.Identifier(table), 61 | ) 62 | print(select_sql) 63 | cursor.execute(select_sql) 64 | 65 | students=cursor.fetchall() 66 | print(students) 67 | cursor.close() 68 | conn.close() -------------------------------------------------------------------------------- /python-examples/004_transactions.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | import psycopg2.extras 3 | import os 4 | import datetime 5 | 6 | from utils import consts 7 | 8 | def get_cars(curr, conn): 9 | curr.execute("SELECT * FROM car;") 10 | results=curr.fetchall() 11 | return results 12 | 13 | def insert_car(curr, conn, brand): 14 | curr.execute("INSERT INTO car (brand) VALUES (%s)", (brand, )) 15 | 16 | if __name__ == "__main__": 17 | conn=psycopg2.connect( 18 | host=os.getenv("POSTGRES_HOST", "localhost"), 19 | database=os.getenv("POSTGRES_DATABASE", "postgres"), 20 | user=os.getenv("POSTGRES_USER", "postgres"), 21 | password=os.getenv("POSTGRES_PASSWORD", "postgres") 22 | ) 23 | conn.autocommit = True 24 | cursor=conn.cursor(cursor_factory=psycopg2.extras.DictCursor) 25 | cars=get_cars(cursor, conn) 26 | print(cars) 27 | insert_car(cursor, conn, 'Audi') 28 | cars=get_cars(cursor, conn) 29 | print(cars) 30 | cursor.close() 31 | conn.close() # automatiky spravi rollback 32 | 33 | # Ak nechceme stale commitovat vsetky query mozemenastavit autocommit, teraz je kazdy execute jedna transakcia 34 | # conn.autocommit = True 35 | 36 | -------------------------------------------------------------------------------- /python-examples/005_context_managers.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | from utils import consts 3 | 4 | # Contextovy manager nam vie zjednodusit pracu s commitovanim transakcie. 5 | # Zabalenim prmeennej s connection do kontextoveho managera vieme na konci managera forcnut commit 6 | # POZOR na chyby v ramci tela contextoveho managera 7 | 8 | if __name__ == '__main__': 9 | conn = psycopg2.connect( 10 | host=consts.POSTGRES_HOST, 11 | database=consts.POSTGRES_DATABASE, 12 | user=consts.POSTGRES_USER, 13 | password=consts.POSTGRES_PASSWORD 14 | ) 15 | with conn: 16 | with conn.cursor() as cur: 17 | cur.execute("INSERT INTO student (name, surname) VALUES (%s, %s)", ('test_student', 'test_student')) 18 | 19 | # Ukoncenie bloku contextoveho managera pre connection odpali commit 20 | # Ak nastane chyba pred ukoncenim bloku mame tu problem. 21 | 22 | with conn, conn.cursor() as cur: 23 | try: 24 | cur.execute("INSERT INTO student (name, surname) VALUES (%s, %s)", ('test_student', 'test_student')) 25 | raise Exception("Error") 26 | except Exception as e: 27 | print("Error during execution") 28 | 29 | conn.close() # Nezabudnime vzdy ukoncit connection 30 | print(conn.closed) # Ak si niesme isty pomocou prametra closed vieme zistit ci je connection uzavrety 31 | -------------------------------------------------------------------------------- /python-examples/utils/consts.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | POSTGRES_HOST=os.getenv("POSTGRES_HOST", "localhost") 4 | POSTGRES_DATABASE=os.getenv("DATABASE", "school") 5 | POSTGRES_USER=os.getenv("POSTGRES_USER", "michal") 6 | POSTGRES_PASSWORD=os.getenv("POSTGRES_PASSWORD", "michal") 7 | 8 | POSTGRES_CONNECTION_STRING=os.getenv("POSTGRES_CONNECTION_STRING", "dbname=school user=michal password=michal host=localhost port=5432") --------------------------------------------------------------------------------