├── .DS_Store ├── 001_create_table ├── .urls ├── create.sql └── insert.sql ├── 002_insert ├── .urls ├── create.sql └── insert.sql ├── 003_select ├── .urls ├── create.sql ├── insert.sql └── select.sql ├── 004_update ├── .urls ├── create.sql ├── insert.sql ├── select.sql └── update.sql ├── 005_delete ├── .urls ├── create.sql ├── delete.sql └── insert.sql ├── 006_aggregation ├── .urls ├── select.sql └── setup ├── 007_sort ├── .urls ├── create.sql ├── insert.sql └── select.sql ├── 008_unique ├── .urls ├── create.sql └── insert.sql ├── 009_foreign_key ├── .urls ├── create.sql ├── failed_insert.sql ├── insert.sql └── select.sql ├── 010_multi_foreign_key ├── create.sql ├── failed_insert.sql ├── insertz.sql └── select.sql ├── 011_check_constraints ├── .urls ├── create.sql ├── failed_insert.sql ├── insert.sql └── select.sql ├── 012_indexes ├── .urls ├── index.sql ├── select.sql └── setup ├── 013_inner_join ├── .urls ├── create.sql ├── insert.sql └── select.sql ├── 014_distinct ├── .urls ├── insert.sql └── select.sql ├── README.md ├── bin ├── cleandb ├── create_tables ├── prepend_zeroes ├── remove_zeroes ├── setup_example └── total_setup └── urls.yml /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brettshollenberger/postgres_101/7649f32b4b23da452c412e3ba7876d79b421e934/.DS_Store -------------------------------------------------------------------------------- /001_create_table/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/961ba/1 2 | -------------------------------------------------------------------------------- /001_create_table/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE directors ( 2 | id SERIAL PRIMARY KEY, 3 | name VARCHAR(100) UNIQUE NOT NULL 4 | ); 5 | 6 | CREATE TABLE movies ( 7 | id SERIAL PRIMARY KEY, 8 | title VARCHAR(100) NOT NULL, 9 | release_date DATE, 10 | count_stars INTEGER, 11 | director_id INTEGER 12 | ); 13 | -------------------------------------------------------------------------------- /001_create_table/insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO directors (name) VALUES ('Quentin Tarantino'), ('Judd Apatow'); 2 | 3 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 4 | 'Kill Bill', 5 | '10-10-2003', 6 | 3, 7 | 1 8 | ), ( 9 | 'Funny People', 10 | '07-20-2009', 11 | 5, 12 | 2 13 | ); 14 | 15 | SELECT * 16 | FROM directors; 17 | 18 | SELECT * 19 | FROM movies; 20 | -------------------------------------------------------------------------------- /002_insert/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/961ba/2 2 | -------------------------------------------------------------------------------- /002_insert/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE directors ( 2 | id SERIAL PRIMARY KEY, 3 | name VARCHAR(100) NOT NULL 4 | ); 5 | 6 | CREATE TABLE movies ( 7 | id SERIAL PRIMARY KEY, 8 | title VARCHAR(100) NOT NULL, 9 | release_date DATE, 10 | count_stars INTEGER, 11 | director_id INTEGER 12 | ); 13 | -------------------------------------------------------------------------------- /002_insert/insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO directors (name) VALUES ('Quentin Tarantino'); 2 | INSERT INTO directors (name) VALUES ('Judd Apatow'), ('Mel Brooks'); 3 | INSERT INTO directors (name) VALUES (); 4 | INSERT INTO directors (name) VALUES (NULL); 5 | INSERT INTO directors (id, name) VALUES (200, 'M. Night Shamalyan'); 6 | 7 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 8 | 'Kill Bill', 9 | '10-10-2003', 10 | 3, 11 | 1 12 | ), ( 13 | 'Funny People', 14 | '07-20-2009', 15 | 5, 16 | 2 17 | ); 18 | 19 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 20 | 'Kill Bill', 21 | '110-10-2003', 22 | 3, 23 | 1 24 | ), ( 25 | 'Funny People', 26 | '07-20-2009', 27 | 5, 28 | 2 29 | ); 30 | 31 | 32 | SELECT * 33 | FROM movies 34 | INNER JOIN directors 35 | ON directors.id=movies.director_id; 36 | -------------------------------------------------------------------------------- /003_select/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/bbd86/10 2 | -------------------------------------------------------------------------------- /003_select/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE directors ( 2 | id SERIAL PRIMARY KEY, 3 | name VARCHAR(100) NOT NULL 4 | ); 5 | 6 | CREATE TABLE movies ( 7 | id SERIAL PRIMARY KEY, 8 | title VARCHAR(100) NOT NULL, 9 | release_date DATE, 10 | count_stars INTEGER, 11 | director_id INTEGER 12 | ); 13 | -------------------------------------------------------------------------------- /003_select/insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO directors (name) VALUES ('Quentin Tarantino'), ('Judd Apatow'), ('Mel Brooks'); 2 | 3 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 4 | 'Kill Bill', 5 | '10-10-2003', 6 | 3, 7 | 1 8 | ), ( 9 | 'Funny People', 10 | '07-20-2009', 11 | 5, 12 | 2 13 | ), ( 14 | 'Blazing Saddles', 15 | '02-07-1974', 16 | 5, 17 | 3 18 | ); 19 | -------------------------------------------------------------------------------- /003_select/select.sql: -------------------------------------------------------------------------------- 1 | SELECT title 2 | FROM movies; 3 | 4 | SELECT title 5 | FROM movies 6 | WHERE release_date > '01-01-1975'; 7 | 8 | SELECT title, 9 | release_date 10 | FROM movies 11 | WHERE release_date > '01-01-1975'; 12 | 13 | SELECT * 14 | FROM movies 15 | WHERE count_stars=5; 16 | 17 | SELECT title AS name 18 | FROM movies; 19 | 20 | SELECT * 21 | FROM movies 22 | WHERE count_stars < 5; 23 | 24 | SELECT * 25 | FROM movies 26 | WHERE release_date > '01-01-1975'; 27 | 28 | SELECT COUNT(*) 29 | FROM movies 30 | WHERE release_date > '01-01-1975'; 31 | 32 | SELECT AVG(count_stars) 33 | FROM movies 34 | WHERE release_date > '01-01-1975'; 35 | 36 | SELECT SUM(count_stars) 37 | FROM movies; 38 | 39 | SELECT title, 40 | count_stars, 41 | ((count_stars::float / 5) * 100) AS rotten_tomatoes_score 42 | FROM movies 43 | WHERE release_date > '01-01-1975'; 44 | -------------------------------------------------------------------------------- /004_update/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/bbd86/11 2 | -------------------------------------------------------------------------------- /004_update/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE directors ( 2 | id SERIAL PRIMARY KEY, 3 | name VARCHAR(100) UNIQUE NOT NULL 4 | ); 5 | 6 | CREATE TABLE movies ( 7 | id SERIAL PRIMARY KEY, 8 | title VARCHAR(100) NOT NULL, 9 | release_date DATE, 10 | count_stars INTEGER, 11 | director_id INTEGER 12 | ); 13 | -------------------------------------------------------------------------------- /004_update/insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO directors (name) VALUES ('Quentin Tarantino'), ('Judd Apatow'), ('Mel Brooks'); 2 | 3 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 4 | 'Kill Bill', 5 | '10-10-2003', 6 | 3, 7 | 1 8 | ), ( 9 | 'Funny People', 10 | '07-20-2009', 11 | 5, 12 | 2 13 | ), ( 14 | 'Blazing Saddles', 15 | '02-07-1974', 16 | 5, 17 | 3 18 | ); 19 | -------------------------------------------------------------------------------- /004_update/select.sql: -------------------------------------------------------------------------------- 1 | SELECT * 2 | FROM movies; 3 | -------------------------------------------------------------------------------- /004_update/update.sql: -------------------------------------------------------------------------------- 1 | UPDATE movies 2 | SET count_stars=1; 3 | 4 | UPDATE movies 5 | SET count_stars=5 6 | WHERE title='Kill Bill'; 7 | 8 | UPDATE movies 9 | SET count_stars=3 10 | WHERE count_stars=1; 11 | 12 | UPDATE movies 13 | SET count_stars=3 14 | WHERE count_stars=2; 15 | 16 | UPDATE movies 17 | SET count_stars=1 18 | WHERE release_date < '01-01-1975'; 19 | -------------------------------------------------------------------------------- /005_delete/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/8def2/1 2 | -------------------------------------------------------------------------------- /005_delete/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE movies ( 2 | id SERIAL PRIMARY KEY, 3 | title VARCHAR(100) NOT NULL, 4 | release_date DATE, 5 | count_stars INTEGER 6 | ); 7 | -------------------------------------------------------------------------------- /005_delete/delete.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM movies 2 | WHERE count_stars > 90; 3 | 4 | DELETE FROM movies 5 | WHERE count_stars > 70; 6 | 7 | DELETE FROM movies 8 | WHERE release_date < '1984-01-01'; 9 | 10 | DELETE FROM movies; 11 | -------------------------------------------------------------------------------- /005_delete/insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO movies (title, release_date, count_stars) VALUES 2 | ( 3 | 'Kill Bill 1', 4 | '10-10-2003', 5 | 1 6 | ), 7 | ( 8 | 'Kill Bill 2', 9 | '10-10-2002', 10 | 2 11 | ), 12 | ( 13 | 'Kill Bill 3', 14 | '10-10-2001', 15 | 3 16 | ), 17 | ( 18 | 'Kill Bill 4', 19 | '10-10-2000', 20 | 4 21 | ), 22 | ( 23 | 'Kill Bill 5', 24 | '10-10-1999', 25 | 5 26 | ), 27 | ( 28 | 'Kill Bill 6', 29 | '10-10-1998', 30 | 6 31 | ), 32 | ( 33 | 'Kill Bill 7', 34 | '10-10-1997', 35 | 7 36 | ), 37 | ( 38 | 'Kill Bill 8', 39 | '10-10-1996', 40 | 8 41 | ), 42 | ( 43 | 'Kill Bill 9', 44 | '10-10-1995', 45 | 9 46 | ), 47 | ( 48 | 'Kill Bill 10', 49 | '10-10-1995', 50 | 9 51 | ), 52 | ( 53 | 'Kill Bill 11', 54 | '10-10-1994', 55 | 10 56 | ), 57 | ( 58 | 'Kill Bill 12', 59 | '10-10-1993', 60 | 11 61 | ), 62 | ( 63 | 'Kill Bill 13', 64 | '10-10-1992', 65 | 12 66 | ), 67 | ( 68 | 'Kill Bill 14', 69 | '10-10-1991', 70 | 13 71 | ), 72 | ( 73 | 'Kill Bill 15', 74 | '10-10-1990', 75 | 14 76 | ), 77 | ( 78 | 'Kill Bill 16', 79 | '10-10-1989', 80 | 15 81 | ), 82 | ( 83 | 'Kill Bill 17', 84 | '10-10-1988', 85 | 16 86 | ), 87 | ( 88 | 'Kill Bill 18', 89 | '10-10-1987', 90 | 17 91 | ), 92 | ( 93 | 'Kill Bill 19', 94 | '10-10-1986', 95 | 18 96 | ), 97 | ( 98 | 'Kill Bill 20', 99 | '10-10-1985', 100 | 19 101 | ), 102 | ( 103 | 'Kill Bill 21', 104 | '10-10-1984', 105 | 20 106 | ), 107 | ( 108 | 'Kill Bill 22', 109 | '10-10-1983', 110 | 21 111 | ), 112 | ( 113 | 'Kill Bill 23', 114 | '10-10-1982', 115 | 22 116 | ), 117 | ( 118 | 'Kill Bill 24', 119 | '10-10-1981', 120 | 23 121 | ), 122 | ( 123 | 'Kill Bill 25', 124 | '10-10-1980', 125 | 24 126 | ), 127 | ( 128 | 'Kill Bill 26', 129 | '10-10-1979', 130 | 25 131 | ), 132 | ( 133 | 'Kill Bill 27', 134 | '10-10-1978', 135 | 26 136 | ), 137 | ( 138 | 'Kill Bill 28', 139 | '10-10-1977', 140 | 27 141 | ), 142 | ( 143 | 'Kill Bill 29', 144 | '10-10-1976', 145 | 28 146 | ), 147 | ( 148 | 'Kill Bill 30', 149 | '10-10-1975', 150 | 29 151 | ), 152 | ( 153 | 'Kill Bill 31', 154 | '10-10-1974', 155 | 30 156 | ), 157 | ( 158 | 'Kill Bill 32', 159 | '10-10-1973', 160 | 31 161 | ), 162 | ( 163 | 'Kill Bill 33', 164 | '10-10-1972', 165 | 32 166 | ), 167 | ( 168 | 'Kill Bill 34', 169 | '10-10-1971', 170 | 33 171 | ), 172 | ( 173 | 'Kill Bill 35', 174 | '10-10-1970', 175 | 34 176 | ), 177 | ( 178 | 'Kill Bill 36', 179 | '10-10-1969', 180 | 35 181 | ), 182 | ( 183 | 'Kill Bill 37', 184 | '10-10-1968', 185 | 36 186 | ), 187 | ( 188 | 'Kill Bill 38', 189 | '10-10-1967', 190 | 37 191 | ), 192 | ( 193 | 'Kill Bill 39', 194 | '10-10-1966', 195 | 38 196 | ), 197 | ( 198 | 'Kill Bill 40', 199 | '10-10-1965', 200 | 39 201 | ), 202 | ( 203 | 'Kill Bill 41', 204 | '10-10-1964', 205 | 40 206 | ), 207 | ( 208 | 'Kill Bill 42', 209 | '10-10-1963', 210 | 41 211 | ), 212 | ( 213 | 'Kill Bill 43', 214 | '10-10-1962', 215 | 42 216 | ), 217 | ( 218 | 'Kill Bill 44', 219 | '10-10-1961', 220 | 43 221 | ), 222 | ( 223 | 'Kill Bill 45', 224 | '10-10-1960', 225 | 44 226 | ), 227 | ( 228 | 'Kill Bill 46', 229 | '10-10-1959', 230 | 45 231 | ), 232 | ( 233 | 'Kill Bill 47', 234 | '10-10-1958', 235 | 46 236 | ), 237 | ( 238 | 'Kill Bill 48', 239 | '10-10-1957', 240 | 47 241 | ), 242 | ( 243 | 'Kill Bill 49', 244 | '10-10-1956', 245 | 48 246 | ), 247 | ( 248 | 'Kill Bill 50', 249 | '10-10-1955', 250 | 49 251 | ), 252 | ( 253 | 'Kill Bill 51', 254 | '10-10-1954', 255 | 50 256 | ), 257 | ( 258 | 'Kill Bill 52', 259 | '10-10-1953', 260 | 51 261 | ), 262 | ( 263 | 'Kill Bill 53', 264 | '10-10-1952', 265 | 52 266 | ), 267 | ( 268 | 'Kill Bill 54', 269 | '10-10-1951', 270 | 53 271 | ), 272 | ( 273 | 'Kill Bill 55', 274 | '10-10-1950', 275 | 54 276 | ), 277 | ( 278 | 'Kill Bill 56', 279 | '10-10-1949', 280 | 55 281 | ), 282 | ( 283 | 'Kill Bill 57', 284 | '10-10-1948', 285 | 56 286 | ), 287 | ( 288 | 'Kill Bill 58', 289 | '10-10-1947', 290 | 57 291 | ), 292 | ( 293 | 'Kill Bill 59', 294 | '10-10-1946', 295 | 58 296 | ), 297 | ( 298 | 'Kill Bill 60', 299 | '10-10-1945', 300 | 59 301 | ), 302 | ( 303 | 'Kill Bill 61', 304 | '10-10-1944', 305 | 60 306 | ), 307 | ( 308 | 'Kill Bill 62', 309 | '10-10-1943', 310 | 61 311 | ), 312 | ( 313 | 'Kill Bill 63', 314 | '10-10-1942', 315 | 62 316 | ), 317 | ( 318 | 'Kill Bill 64', 319 | '10-10-1941', 320 | 63 321 | ), 322 | ( 323 | 'Kill Bill 65', 324 | '10-10-1940', 325 | 64 326 | ), 327 | ( 328 | 'Kill Bill 66', 329 | '10-10-1939', 330 | 65 331 | ), 332 | ( 333 | 'Kill Bill 67', 334 | '10-10-1938', 335 | 66 336 | ), 337 | ( 338 | 'Kill Bill 68', 339 | '10-10-1937', 340 | 67 341 | ), 342 | ( 343 | 'Kill Bill 69', 344 | '10-10-1936', 345 | 68 346 | ), 347 | ( 348 | 'Kill Bill 70', 349 | '10-10-1935', 350 | 69 351 | ), 352 | ( 353 | 'Kill Bill 71', 354 | '10-10-1934', 355 | 70 356 | ), 357 | ( 358 | 'Kill Bill 72', 359 | '10-10-1933', 360 | 71 361 | ), 362 | ( 363 | 'Kill Bill 73', 364 | '10-10-1932', 365 | 72 366 | ), 367 | ( 368 | 'Kill Bill 74', 369 | '10-10-1931', 370 | 73 371 | ), 372 | ( 373 | 'Kill Bill 75', 374 | '10-10-1930', 375 | 74 376 | ), 377 | ( 378 | 'Kill Bill 76', 379 | '10-10-1929', 380 | 75 381 | ), 382 | ( 383 | 'Kill Bill 77', 384 | '10-10-1928', 385 | 76 386 | ), 387 | ( 388 | 'Kill Bill 78', 389 | '10-10-1927', 390 | 77 391 | ), 392 | ( 393 | 'Kill Bill 79', 394 | '10-10-1926', 395 | 78 396 | ), 397 | ( 398 | 'Kill Bill 80', 399 | '10-10-1925', 400 | 79 401 | ), 402 | ( 403 | 'Kill Bill 81', 404 | '10-10-1924', 405 | 80 406 | ), 407 | ( 408 | 'Kill Bill 82', 409 | '10-10-1923', 410 | 81 411 | ), 412 | ( 413 | 'Kill Bill 83', 414 | '10-10-1922', 415 | 82 416 | ), 417 | ( 418 | 'Kill Bill 84', 419 | '10-10-1921', 420 | 83 421 | ), 422 | ( 423 | 'Kill Bill 85', 424 | '10-10-1920', 425 | 84 426 | ), 427 | ( 428 | 'Kill Bill 86', 429 | '10-10-1919', 430 | 85 431 | ), 432 | ( 433 | 'Kill Bill 87', 434 | '10-10-1918', 435 | 86 436 | ), 437 | ( 438 | 'Kill Bill 88', 439 | '10-10-1917', 440 | 87 441 | ), 442 | ( 443 | 'Kill Bill 89', 444 | '10-10-1916', 445 | 88 446 | ), 447 | ( 448 | 'Kill Bill 90', 449 | '10-10-1915', 450 | 89 451 | ), 452 | ( 453 | 'Kill Bill 91', 454 | '10-10-1914', 455 | 90 456 | ), 457 | ( 458 | 'Kill Bill 92', 459 | '10-10-1913', 460 | 91 461 | ), 462 | ( 463 | 'Kill Bill 93', 464 | '10-10-1912', 465 | 92 466 | ), 467 | ( 468 | 'Kill Bill 94', 469 | '10-10-1911', 470 | 93 471 | ), 472 | ( 473 | 'Kill Bill 95', 474 | '10-10-1910', 475 | 94 476 | ), 477 | ( 478 | 'Kill Bill 96', 479 | '10-10-1909', 480 | 95 481 | ), 482 | ( 483 | 'Kill Bill 97', 484 | '10-10-1908', 485 | 96 486 | ), 487 | ( 488 | 'Kill Bill 98', 489 | '10-10-1907', 490 | 97 491 | ), 492 | ( 493 | 'Kill Bill 99', 494 | '10-10-1906', 495 | 98 496 | ), 497 | ( 498 | 'Kill Bill 100', 499 | '10-10-1905', 500 | 99 501 | ), 502 | ( 503 | 'Kill Bill 101', 504 | '10-10-1904', 505 | 100 506 | ); 507 | -------------------------------------------------------------------------------- /006_aggregation/.urls: -------------------------------------------------------------------------------- 1 | https://gist.github.com/brettshollenberger/ef5c9098f7e0dc660a13831ba109a1ed 2 | -------------------------------------------------------------------------------- /006_aggregation/select.sql: -------------------------------------------------------------------------------- 1 | SELECT ROUND(rating), 2 | count(*) 3 | FROM movies 4 | GROUP BY ROUND(rating) 5 | ORDER BY 1; 6 | 7 | SELECT 8 | CASE 9 | WHEN action=true THEN 'action' 10 | WHEN animation=true THEN 'animation' 11 | WHEN comedy=true THEN 'comedy' 12 | WHEN drama=true THEN 'drama' 13 | WHEN documentary=true THEN 'documentary' 14 | WHEN romance=true THEN 'romance' 15 | WHEN short=true THEN 'short' 16 | ELSE 'other' 17 | END AS genre, 18 | title 19 | FROM movies 20 | LIMIT 100; 21 | 22 | WITH genres AS ( 23 | SELECT 24 | CASE 25 | WHEN action=true THEN 'action' 26 | WHEN animation=true THEN 'animation' 27 | WHEN comedy=true THEN 'comedy' 28 | WHEN drama=true THEN 'drama' 29 | WHEN documentary=true THEN 'documentary' 30 | WHEN romance=true THEN 'romance' 31 | WHEN short=true THEN 'short' 32 | ELSE 'other' 33 | END AS genre, 34 | title 35 | FROM movies 36 | ) 37 | SELECT genre, 38 | COUNT(*) 39 | FROM genres 40 | GROUP BY genre; 41 | -------------------------------------------------------------------------------- /006_aggregation/setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ../bin/create_tables 4 | -------------------------------------------------------------------------------- /007_sort/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/7c5ab/1 2 | -------------------------------------------------------------------------------- /007_sort/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE friends ( 2 | id SERIAL PRIMARY KEY, 3 | name VARCHAR(100) NOT NULL, 4 | friend_count INTEGER DEFAULT 0 5 | ); 6 | -------------------------------------------------------------------------------- /007_sort/insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO friends (name, friend_count) VALUES 2 | ( 3 | 'Corey', 4 | 553 5 | ), 6 | ( 7 | 'Tag', 8 | 3149 9 | ), 10 | ( 11 | 'Sean', 12 | 234 13 | ), 14 | ( 15 | 'Crowe', 16 | 123 17 | ), 18 | ( 19 | 'Cambria', 20 | 23100 21 | ), 22 | ( 23 | 'Sophia', 24 | 2131 25 | ), 26 | ( 27 | 'Andrew', 28 | 2131 29 | ); 30 | -------------------------------------------------------------------------------- /007_sort/select.sql: -------------------------------------------------------------------------------- 1 | SELECT * 2 | FROM friends 3 | ORDER BY friend_count; 4 | 5 | SELECT * 6 | FROM friends 7 | ORDER BY friend_count, name; 8 | 9 | SELECT * 10 | SELECT friends 11 | ORDER BY friend_count desc, name desc; 12 | 13 | SELECT * 14 | SELECT friends 15 | ORDER BY friend_count, name desc; 16 | -------------------------------------------------------------------------------- /008_unique/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/a8561/1 2 | -------------------------------------------------------------------------------- /008_unique/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE directors ( 2 | id SERIAL PRIMARY KEY, 3 | name VARCHAR(100) UNIQUE NOT NULL 4 | ); 5 | 6 | CREATE TABLE movies ( 7 | id SERIAL PRIMARY KEY, 8 | title VARCHAR(100) NOT NULL, 9 | release_date DATE, 10 | count_stars INTEGER, 11 | director_id INTEGER 12 | ); 13 | 14 | CREATE TABLE movies ( 15 | id SERIAL PRIMARY KEY, 16 | title VARCHAR(100) NOT NULL, 17 | release_date DATE, 18 | count_stars INTEGER, 19 | director_id INTEGER REFERENCES directors(id) 20 | ); 21 | -------------------------------------------------------------------------------- /008_unique/insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 2 | 'Kill Bill', 3 | '10-10-2003', 4 | 3, 5 | 1 6 | ); 7 | 8 | INSERT INTO directors (name) VALUES ('Quentin Tarantino'); 9 | 10 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 11 | 'Kill Bill', 12 | '10-10-2003', 13 | 3, 14 | 1 15 | ); 16 | -------------------------------------------------------------------------------- /009_foreign_key/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/010b4c/1 2 | -------------------------------------------------------------------------------- /009_foreign_key/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE directors ( 2 | id SERIAL PRIMARY KEY, 3 | name VARCHAR(100) UNIQUE NOT NULL 4 | ); 5 | 6 | CREATE TABLE movies ( 7 | id SERIAL PRIMARY KEY, 8 | title VARCHAR(100) NOT NULL, 9 | release_date DATE, 10 | count_stars INTEGER, 11 | director_id INTEGER REFERENCES directors(id) 12 | ); 13 | 14 | CREATE TABLE stores ( 15 | id SERIAL PRIMARY KEY, 16 | location VARCHAR(200) 17 | ); 18 | 19 | CREATE TABLE rentable_movies ( 20 | movie_id INTEGER NOT NULL REFERENCES movies(id), 21 | store_id INTEGER NOT NULL REFERENCES stores(id), 22 | copy_number INTEGER NOT NULL, 23 | PRIMARY KEY (movie_id, store_id, copy_number) 24 | ); 25 | 26 | CREATE TABLE guests ( 27 | id SERIAL PRIMARY KEY, 28 | name VARCHAR(200) NOT NULL, 29 | email VARCHAR(200) NOT NULL 30 | ); 31 | 32 | CREATE TABLE rentings ( 33 | guest_id INTEGER REFERENCES guests(id), 34 | movie_id INTEGER NOT NULL, 35 | store_id INTEGER NOT NULL, 36 | copy_number INTEGER NOT NULL, 37 | due_back DATE, 38 | returned BOOLEAN, 39 | ); 40 | -------------------------------------------------------------------------------- /009_foreign_key/failed_insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO directors (name) VALUES ('Quentin Tarantino'), ('Judd Apatow'); 2 | 3 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 4 | 'Kill Bill', 5 | '10-10-2003', 6 | 3, 7 | 1 8 | ), ( 9 | 'Funny People', 10 | '07-20-2009', 11 | 5, 12 | 2 13 | ), ( 14 | 'Barton Fink', 15 | '09-21-1991', 16 | 5, 17 | 3 18 | ); 19 | 20 | INSERT INTO stores (location) VALUES ('San Francisco'), ('Philadelphia'); 21 | 22 | INSERT INTO rentable_movies (movie_id, store_id, copy_number) VALUES (1, 1, 1), (1, 1, 2), (2, 1, 1), (2, 2, 1); 23 | -------------------------------------------------------------------------------- /009_foreign_key/insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO directors (name) VALUES ('Quentin Tarantino'), ('Judd Apatow'); 2 | 3 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 4 | 'Kill Bill', 5 | '10-10-2003', 6 | 3, 7 | 1 8 | ), ( 9 | 'Funny People', 10 | '07-20-2009', 11 | 5, 12 | 2 13 | ); 14 | 15 | INSERT INTO stores (location) VALUES ('San Francisco'), ('Philadelphia'); 16 | 17 | INSERT INTO rentable_movies (movie_id, store_id, copy_number) VALUES (1, 1, 1), (1, 1, 2), (2, 1, 1), (2, 2, 1); 18 | 19 | INSERT INTO guests (name, email) VALUES ( 20 | 'Brett Cassette', 21 | 'brett@theinternet.com' 22 | ), ( 23 | 'Bradley Cooper', 24 | 'brad@thecoop.com' 25 | ); 26 | 27 | SELECT * 28 | FROM directors; 29 | 30 | SELECT * 31 | FROM movies; 32 | 33 | SELECT * 34 | FROM stores; 35 | 36 | SELECT * 37 | FROM rentable_movies; 38 | 39 | INSERT INTO rentings (guest_id, movie_id, store_id, copy_number, due_back, returned) VALUES ( 40 | 1, 41 | 1, 42 | 1, 43 | 1, 44 | '2017-02-01', 45 | FALSE 46 | ), ( 47 | 2, 48 | 1, 49 | 1, 50 | 2, 51 | '2017-01-01', 52 | TRUE 53 | ); 54 | -------------------------------------------------------------------------------- /009_foreign_key/select.sql: -------------------------------------------------------------------------------- 1 | /* Nothing was saved -- the whole transaction failed*/ 2 | 3 | SELECT * 4 | FROM movies 5 | INNER JOIN directors 6 | ON directors.id=movies.director_id; 7 | 8 | /* View all rentings */ 9 | SELECT movies.title, 10 | stores.location, 11 | rentings.copy_number, 12 | guests.name AS renter_name, 13 | rentings.returned, 14 | rentings.due_back 15 | FROM rentings 16 | INNER JOIN rentable_movies 17 | ON ( 18 | rentable_movies.movie_id=rentings.movie_id AND 19 | rentable_movies.store_id=rentings.store_id AND 20 | rentable_movies.copy_number=rentings.copy_number 21 | ) 22 | INNER JOIN movies 23 | ON movies.id=rentable_movies.movie_id 24 | INNER JOIN stores 25 | ON stores.id=rentable_movies.store_id 26 | INNER JOIN guests 27 | ON guests.id=rentings.guest_id; 28 | -------------------------------------------------------------------------------- /010_multi_foreign_key/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE directors ( 2 | id SERIAL PRIMARY KEY, 3 | name VARCHAR(100) UNIQUE NOT NULL 4 | ); 5 | 6 | CREATE TABLE movies ( 7 | id SERIAL PRIMARY KEY, 8 | title VARCHAR(100) NOT NULL, 9 | release_date DATE, 10 | count_stars INTEGER, 11 | director_id INTEGER REFERENCES directors(id) 12 | ); 13 | 14 | CREATE TABLE stores ( 15 | id SERIAL PRIMARY KEY, 16 | location VARCHAR(200) 17 | ); 18 | 19 | CREATE TABLE rentable_movies ( 20 | movie_id INTEGER NOT NULL REFERENCES movies(id), 21 | store_id INTEGER NOT NULL REFERENCES stores(id), 22 | copy_number INTEGER NOT NULL, 23 | PRIMARY KEY (movie_id, store_id, copy_number) 24 | ); 25 | 26 | CREATE TABLE guests ( 27 | id SERIAL PRIMARY KEY, 28 | name VARCHAR(200) NOT NULL, 29 | email VARCHAR(200) NOT NULL 30 | ); 31 | 32 | CREATE TABLE rentings ( 33 | guest_id INTEGER REFERENCES guests(id), 34 | movie_id INTEGER NOT NULL, 35 | store_id INTEGER NOT NULL, 36 | copy_number INTEGER NOT NULL, 37 | due_back DATE, 38 | returned BOOLEAN, 39 | FOREIGN KEY (movie_id, store_id, copy_number) REFERENCES rentable_movies(movie_id, store_id, copy_number) 40 | ); 41 | -------------------------------------------------------------------------------- /010_multi_foreign_key/failed_insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO directors (name) VALUES ('Quentin Tarantino'), ('Judd Apatow'); 2 | 3 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 4 | 'Kill Bill', 5 | '10-10-2003', 6 | 3, 7 | 1 8 | ), ( 9 | 'Funny People', 10 | '07-20-2009', 11 | 5, 12 | 2 13 | ), ( 14 | 'Barton Fink', 15 | '09-21-1991', 16 | 5, 17 | 3 18 | ); 19 | 20 | INSERT INTO stores (location) VALUES ('San Francisco'), ('Philadelphia'); 21 | 22 | INSERT INTO rentable_movies (movie_id, store_id, copy_number) VALUES (1, 1, 1), (1, 1, 2), (2, 1, 1), (2, 2, 1); 23 | -------------------------------------------------------------------------------- /010_multi_foreign_key/insertz.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO directors (name) VALUES ('Quentin Tarantino'), ('Judd Apatow'); 2 | 3 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 4 | 'Kill Bill', 5 | '10-10-2003', 6 | 3, 7 | 1 8 | ), ( 9 | 'Funny People', 10 | '07-20-2009', 11 | 5, 12 | 2 13 | ); 14 | 15 | INSERT INTO stores (location) VALUES ('San Francisco'), ('Philadelphia'); 16 | 17 | INSERT INTO rentable_movies (movie_id, store_id, copy_number) VALUES (1, 1, 1), (1, 1, 2), (2, 1, 1), (2, 2, 1); 18 | 19 | INSERT INTO guests (name, email) VALUES ( 20 | 'Brett Cassette', 21 | 'brett@theinternet.com' 22 | ), ( 23 | 'Bradley Cooper', 24 | 'brad@thecoop.com' 25 | ); 26 | 27 | INSERT INTO rentings (guest_id, movie_id, store_id, copy_number, due_back, returned) VALUES ( 28 | 1, 29 | 1, 30 | 1, 31 | 1, 32 | '2017-02-01', 33 | FALSE 34 | ), ( 35 | 2, 36 | 1, 37 | 1, 38 | 2, 39 | '2017-01-01', 40 | TRUE 41 | ); 42 | -------------------------------------------------------------------------------- /010_multi_foreign_key/select.sql: -------------------------------------------------------------------------------- 1 | /* Nothing was saved -- the whole transaction failed*/ 2 | 3 | SELECT * 4 | FROM movies 5 | INNER JOIN directors 6 | ON directors.id=movies.director_id; 7 | 8 | /* View all rentings */ 9 | SELECT movies.title, 10 | stores.location, 11 | rentings.copy_number, 12 | guests.name AS renter_name, 13 | rentings.returned, 14 | rentings.due_back 15 | FROM rentings 16 | INNER JOIN rentable_movies 17 | ON ( 18 | rentable_movies.movie_id=rentings.movie_id AND 19 | rentable_movies.store_id=rentings.store_id AND 20 | rentable_movies.copy_number=rentings.copy_number 21 | ) 22 | INNER JOIN movies 23 | ON movies.id=rentable_movies.movie_id 24 | INNER JOIN stores 25 | ON stores.id=rentable_movies.store_id 26 | INNER JOIN guests 27 | ON guests.id=rentings.guest_id; 28 | -------------------------------------------------------------------------------- /011_check_constraints/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/8c1d3/2 2 | -------------------------------------------------------------------------------- /011_check_constraints/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE movies ( 2 | id SERIAL PRIMARY KEY, 3 | title VARCHAR(100) NOT NULL, 4 | release_date DATE, 5 | count_stars INTEGER, 6 | CHECK (count_stars > 0), 7 | CHECK (count_stars < 6) 8 | ); 9 | -------------------------------------------------------------------------------- /011_check_constraints/failed_insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO movies (title, release_date, count_stars) VALUES ( 2 | 'Kill Bill', 3 | '10-10-2003', 4 | 0 5 | ), ( 6 | 'Funny People', 7 | '07-20-2009', 8 | 5 9 | ); 10 | -------------------------------------------------------------------------------- /011_check_constraints/insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO movies (title, release_date, count_stars) VALUES ( 2 | 'Kill Bill', 3 | '10-10-2003', 4 | 3 5 | ), ( 6 | 'Funny People', 7 | '07-20-2009', 8 | 5 9 | ); 10 | -------------------------------------------------------------------------------- /011_check_constraints/select.sql: -------------------------------------------------------------------------------- 1 | SELECT * 2 | FROM movies; 3 | -------------------------------------------------------------------------------- /012_indexes/.urls: -------------------------------------------------------------------------------- 1 | https://gist.github.com/brettshollenberger/c212888068fa2c76307ca893f2a0a204 2 | -------------------------------------------------------------------------------- /012_indexes/index.sql: -------------------------------------------------------------------------------- 1 | CREATE INDEX CONCURRENTLY index_movies_on_title ON movies (title); 2 | CREATE INDEX CONCURRENTLY index_movies_on_year ON movies (year); 3 | CREATE INDEX CONCURRENTLY index_movies_on_title_year ON movies (year,title); 4 | -------------------------------------------------------------------------------- /012_indexes/select.sql: -------------------------------------------------------------------------------- 1 | EXPLAIN SELECT COUNT(*) 2 | FROM movies 3 | WHERE year = 1950; 4 | 5 | EXPLAIN SELECT COUNT(*) 6 | FROM movies 7 | WHERE title = 'America'; 8 | -------------------------------------------------------------------------------- /012_indexes/setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ../bin/create_tables 4 | -------------------------------------------------------------------------------- /013_inner_join/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/010b4c/4 2 | -------------------------------------------------------------------------------- /013_inner_join/create.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE directors ( 2 | id SERIAL PRIMARY KEY, 3 | name VARCHAR(100) UNIQUE NOT NULL 4 | ); 5 | 6 | CREATE TABLE movies ( 7 | id SERIAL PRIMARY KEY, 8 | title VARCHAR(100) NOT NULL, 9 | release_date DATE, 10 | count_stars INTEGER, 11 | director_id INTEGER REFERENCES directors(id) 12 | ); 13 | 14 | CREATE TABLE stores ( 15 | id SERIAL PRIMARY KEY, 16 | location VARCHAR(200) 17 | ); 18 | 19 | CREATE TABLE rentable_movies ( 20 | movie_id INTEGER NOT NULL REFERENCES movies(id), 21 | store_id INTEGER NOT NULL REFERENCES stores(id), 22 | copy_number INTEGER NOT NULL, 23 | PRIMARY KEY (movie_id, store_id, copy_number) 24 | ); 25 | 26 | CREATE TABLE guests ( 27 | id SERIAL PRIMARY KEY, 28 | name VARCHAR(200) NOT NULL, 29 | email VARCHAR(200) NOT NULL 30 | ); 31 | 32 | CREATE TABLE rentings ( 33 | guest_id INTEGER REFERENCES guests(id), 34 | movie_id INTEGER NOT NULL, 35 | store_id INTEGER NOT NULL, 36 | copy_number INTEGER NOT NULL, 37 | due_back DATE, 38 | returned BOOLEAN, 39 | FOREIGN KEY (movie_id, store_id, copy_number) REFERENCES rentable_movies(movie_id, store_id, copy_number) 40 | ); 41 | -------------------------------------------------------------------------------- /013_inner_join/insert.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO directors (name) VALUES ('Quentin Tarantino'), ('Judd Apatow'); 2 | 3 | INSERT INTO movies (title, release_date, count_stars, director_id) VALUES ( 4 | 'Kill Bill', 5 | '10-10-2003', 6 | 3, 7 | 1 8 | ), ( 9 | 'Funny People', 10 | '07-20-2009', 11 | 5, 12 | 2 13 | ); 14 | 15 | INSERT INTO stores (location) VALUES ('San Francisco'), ('Philadelphia'); 16 | 17 | INSERT INTO rentable_movies (movie_id, store_id, copy_number) VALUES (1, 1, 1), (1, 1, 2), (2, 1, 1), (2, 2, 1); 18 | 19 | INSERT INTO guests (name, email) VALUES ( 20 | 'Brett Cassette', 21 | 'brett@theinternet.com' 22 | ), ( 23 | 'Bradley Cooper', 24 | 'brad@thecoop.com' 25 | ); 26 | 27 | INSERT INTO rentings (guest_id, movie_id, store_id, copy_number, due_back, returned) VALUES ( 28 | 1, 29 | 1, 30 | 1, 31 | 1, 32 | '2017-02-01', 33 | FALSE 34 | ), ( 35 | 2, 36 | 1, 37 | 1, 38 | 2, 39 | '2017-01-01', 40 | TRUE 41 | ); 42 | -------------------------------------------------------------------------------- /013_inner_join/select.sql: -------------------------------------------------------------------------------- 1 | /* View all rentings */ 2 | 3 | SELECT * 4 | FROM rentable_movies 5 | INNER JOIN movies 6 | ON movies.id=rentable_movies.movie_id; 7 | 8 | SELECT * 9 | FROM rentable_movies 10 | INNER JOIN movies 11 | ON movies.id=rentable_movies.movie_id 12 | INNER JOIN stores 13 | ON stores.id=rentable_movies.store_id; 14 | 15 | SELECT * 16 | FROM rentings 17 | INNER JOIN rentable_movies 18 | ON ( 19 | rentable_movies.movie_id=rentings.movie_id AND 20 | rentable_movies.store_id=rentings.store_id AND 21 | rentable_movies.copy_number=rentings.copy_number 22 | ) 23 | INNER JOIN movies 24 | ON movies.id=rentable_movies.movie_id 25 | INNER JOIN stores 26 | ON stores.id=rentable_movies.store_id 27 | INNER JOIN guests 28 | ON guests.id=rentings.guest_id; 29 | -------------------------------------------------------------------------------- /014_distinct/.urls: -------------------------------------------------------------------------------- 1 | http://sqlfiddle.com/#!15/1e4ba/1 2 | -------------------------------------------------------------------------------- /014_distinct/insert.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE movies ( 2 | id SERIAL NOT NULL, 3 | title character varying(200) 4 | ); 5 | 6 | INSERT INTO movies (title) VALUES 7 | ( 8 | 'American History X' 9 | ), 10 | ( 11 | 'American History X' 12 | ), 13 | ( 14 | 'American History Y' 15 | ), 16 | ( 17 | 'American History Z' 18 | ); 19 | -------------------------------------------------------------------------------- /014_distinct/select.sql: -------------------------------------------------------------------------------- 1 | SELECT COUNT(title) 2 | FROM movies; 3 | 4 | SELECT COUNT(distinct title) 5 | FROM movies; 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Postgres 101 2 | 3 | [Full Install Instructions](https://www.codementor.io/devops/tutorial/getting-started-postgresql-server-mac-osx) 4 | 5 | ### Replicate Brett's Setup for OSX 6 | 7 | 1) Download [Postgres.app](https://postgresapp.com/) 8 | 9 | 2) You should already have a user installed under your username. You can test by: 10 | 11 | ```bash 12 | % psql 13 | psql (9.4.5) 14 | Type "help" for help. 15 | 16 | brettcassette=# \du 17 | List of roles 18 | Role name | Attributes | Member of 19 | ---------------+------------------------------------------------+----------- 20 | brettcassette | Superuser, Create role, Create DB, Replication | {} 21 | ``` 22 | 23 | 3) Create a test database for fooling around with 24 | 25 | ``` 26 | createdb postgres_101 27 | ``` 28 | 29 | 4) Download [SQL Pro for Postgres](https://macpostgresclient.com/) 30 | 31 | 5) In SQL Pro, configure a new connection: 32 | 33 | ``` 34 | Alias: Postgres 101 35 | Server Host: 127.0.0.1 36 | Login: your-username 37 | Password: probably-blank 38 | Server Port: 5432 39 | Database: postgres_101 40 | ``` 41 | 42 | 6) Login to your database in SQL Pro. You're ready to start! 43 | -------------------------------------------------------------------------------- /bin/cleandb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo "Recreating DB" && dropdb --if-exists postgres_101 > /dev/null && createdb postgres_101 && echo "OK" 4 | -------------------------------------------------------------------------------- /bin/create_tables: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | mkdir -p data 4 | curl https://s3-us-west-1.amazonaws.com/brett-egghead/window_functions/movies.csv > data/movies.csv 5 | curl https://gist.githubusercontent.com/brettshollenberger/e3e04b72d0efa03e90754481d6e338ec/raw/101600b7fa8da396be864c40b7f5c5ba8b3a0837/create.sql > create.sql 6 | cd data && cd .. 7 | 8 | dropdb postgres_101 9 | createdb postgres_101 10 | 11 | if [[ ! -f insert.sql ]]; then 12 | touch insert.sql 13 | 14 | echo "COPY movies FROM '`pwd`/data/movies.csv' DELIMITER ',' CSV NULL 'NA' HEADER;" >> insert.sql 15 | fi; 16 | 17 | psql -d postgres_101 -f create.sql 18 | psql -d postgres_101 -f insert.sql 19 | 20 | rm -rf data && rm create.sql && rm insert.sql 21 | -------------------------------------------------------------------------------- /bin/prepend_zeroes: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # set -eo pipefail 4 | 5 | # The files in this directory 6 | # start with leading zeroes 7 | # in order to keep them ordered 8 | # numerically. 9 | # 10 | # Use this script whenever you hit 11 | # a new digit, e.g. (10, 100, 1000) 12 | # to rename all existing folders. 13 | # 14 | # Then grep for files, open them in splits, 15 | # and run :%s/0\(\d*\)/00\1/g 16 | # on the files 17 | # 18 | num_zeros=$(ls | grep 0*1_ | sed 's/\(0*\).*/\1/g' | sed 's/0/0 /g' | wc -w) 19 | regex='^\d{'$(expr $num_zeros + 1)'}_' 20 | 21 | for file in $( ls $(pwd) | grep -E $regex ); do 22 | echo "mv $(echo {,0}$file)" 23 | mv {,0}$file 24 | done 25 | -------------------------------------------------------------------------------- /bin/remove_zeroes: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | num_zeros=$(ls | grep 0*1_ | sed 's/\(0*\).*/\1/g' | sed 's/0/0 /g' | wc -w) 4 | regex='^\d{'$(expr $num_zeros + 1)'}_' 5 | 6 | for file in $( ls $(pwd) | grep -E $regex ); do 7 | echo "mv $file $(echo $file | sed 's/^0//')" 8 | mv $file $(echo $file | sed 's/^0//') 9 | done 10 | -------------------------------------------------------------------------------- /bin/setup_example: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cleandb 4 | 5 | if [ -f $(pwd)/create.sql ]; then 6 | echo "Creating tables" 7 | psql -d postgres_101 -f $(pwd)/create.sql 8 | echo "OK" 9 | else 10 | echo "No tables to create" 11 | fi 12 | -------------------------------------------------------------------------------- /bin/total_setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | setup_example && echo "Inserting test data" && psql -d postgres_101 -f $(pwd)/insert.sql && echo "OK" 4 | -------------------------------------------------------------------------------- /urls.yml: -------------------------------------------------------------------------------- 1 | 001: http://sqlfiddle.com/#!15/961ba/1 2 | 002: http://sqlfiddle.com/#!15/961ba/2 3 | 003: http://sqlfiddle.com/#!15/bbd86/10 4 | 004: http://sqlfiddle.com/#!15/bbd86/11 5 | 005: http://sqlfiddle.com/#!15/8def2/1 6 | 006: https://gist.github.com/brettshollenberger/ef5c9098f7e0dc660a13831ba109a1ed 7 | 007: http://sqlfiddle.com/#!15/7c5ab/1 8 | 008: http://sqlfiddle.com/#!15/a8561/1 9 | 009: http://sqlfiddle.com/#!15/010b4c/1 10 | 010: http://sqlfiddle.com/#!15/8c1d3/2 11 | 011: https://gist.github.com/brettshollenberger/c212888068fa2c76307ca893f2a0a204 12 | 012: http://sqlfiddle.com/#!15/010b4c/4 13 | 013: http://sqlfiddle.com/#!15/010b4c/5 14 | 014: http://sqlfiddle.com/#!15/1e4ba/1 15 | --------------------------------------------------------------------------------