From 80120a62b3d9d89b0cc733ae3cc5c6fac550f166 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Tue, 24 Oct 2023 21:02:42 +0200 Subject: [PATCH 01/13] The Module Project --- .vscode/settings.json | 4 ++-- data/create-data/01-create-database.sql | 1 + data/create-data/02-create-table.sql | 14 ++++++++++++++ data/create-data/03-add-table-data.sql | 8 ++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 data/create-data/01-create-database.sql create mode 100644 data/create-data/02-create-table.sql create mode 100644 data/create-data/03-add-table-data.sql diff --git a/.vscode/settings.json b/.vscode/settings.json index 375aedb..62fdbf9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -26,7 +26,7 @@ "port": 3306, "driver": "MySQL", "name": "mysql", - "database": "default", + "database": "gym", "username": "root", "askForPassword": true }, @@ -36,7 +36,7 @@ "port": 5432, "driver": "PostgreSQL", "name": "postgresql", - "database": "default", + "database": "gym", "username": "postgres", "askForPassword": true } diff --git a/data/create-data/01-create-database.sql b/data/create-data/01-create-database.sql new file mode 100644 index 0000000..378eb9d --- /dev/null +++ b/data/create-data/01-create-database.sql @@ -0,0 +1 @@ +CREATE DATABASE gym; diff --git a/data/create-data/02-create-table.sql b/data/create-data/02-create-table.sql new file mode 100644 index 0000000..a389487 --- /dev/null +++ b/data/create-data/02-create-table.sql @@ -0,0 +1,14 @@ +CREATE TABLE memberships ( + id INT PRIMARY KEY AUTO_INCREMENT, -- MySQL syntax + -- id SERIAL PRIMARY KEY, --PostgreSQL syntax + membership_start DATE, + membership_end DATE, + last_checkin TIMESTAMP, + last_checkout TIMESTAMP, + consumption NUMERIC(5, 2), + first_name VARCHAR(200), + last_name VARCHAR(200), + price NUMERIC(5, 2), + billing_frequency INT, + gender VARCHAR(200) +); diff --git a/data/create-data/03-add-table-data.sql b/data/create-data/03-add-table-data.sql new file mode 100644 index 0000000..724409d --- /dev/null +++ b/data/create-data/03-add-table-data.sql @@ -0,0 +1,8 @@ +INSERT INTO memberships ( + membership_start, membership_end, last_checkin, last_checkout, + consumption, first_name, last_name, price, billing_frequency, gender +) +VALUES + ('2021-10-01', NULL, '2021-10-01 05:17:36', '2021-10-01 06:20:45', 26.49, 'Max', 'Schwarz', 19.99, 12, 'male'), + ('2020-05-10', '2022-05-09', '2021-11-03 10:01:56', '2021-11-03 14:30:00', 100.26, 'Manu', 'Lorenz', 199.99, 1, 'male'), + ('2021-02-18', '2022-02-17', '2021-10-29 15:26:05', '2021-10-29 17:01:33', 5.10, 'Julie', 'Barnes', 199.99, 1, 'female'); From 3609d9550fbedc944189d19c4fdb1ebdd8567af8 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Tue, 24 Oct 2023 21:02:47 +0200 Subject: [PATCH 02/13] Working with Mathematical Functions & Arithmetic Operators --- data/01-mathematical-functions.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 data/01-mathematical-functions.sql diff --git a/data/01-mathematical-functions.sql b/data/01-mathematical-functions.sql new file mode 100644 index 0000000..a18f98e --- /dev/null +++ b/data/01-mathematical-functions.sql @@ -0,0 +1,10 @@ +SELECT price * billing_frequency AS annual_revenue +FROM memberships; + +-- CEIL() +-- FLOOR() +-- ROUND() +-- TRUNC() TRUNCATE() mysql + +SELECT TRUNC(consumption, 0) +FROM memberships; From c6bd5579ad91d298d98a0de8ca3794c61345fc4a Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Thu, 26 Oct 2023 19:34:15 +0200 Subject: [PATCH 03/13] Understanding String Functions with SELECT --- data/02-string-functions.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/02-string-functions.sql diff --git a/data/02-string-functions.sql b/data/02-string-functions.sql new file mode 100644 index 0000000..d87032d --- /dev/null +++ b/data/02-string-functions.sql @@ -0,0 +1,5 @@ +SELECT CONCAT(first_name, ' ', last_name) +FROM memberships; + +SELECT CONCAT('$ ', price) +FROM memberships; From 0591d8f4f87a0a5ede1e95eea910c1a8136c26e7 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Thu, 26 Oct 2023 19:34:26 +0200 Subject: [PATCH 04/13] Using String Functions with INSERT --- data/02-string-functions.sql | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/data/02-string-functions.sql b/data/02-string-functions.sql index d87032d..62fbcef 100644 --- a/data/02-string-functions.sql +++ b/data/02-string-functions.sql @@ -3,3 +3,23 @@ FROM memberships; SELECT CONCAT('$ ', price) FROM memberships; + +INSERT INTO memberships ( + membership_start, membership_end, last_checkin, last_checkout, + consumption, first_name, last_name, price, billing_frequency, gender) +VALUES ( + '2021-10-18', '2021-11-18', '2021-11-01 08:56:01', '2021-11-01 09:20:12', + NULL, 'John', 'Doe', 19.99, 12, LOWER('DivErs')); + +SELECT * FROM memberships +WHERE LENGTH(last_name) < 7; + +INSERT INTO memberships ( + membership_start, membership_end, last_checkin, last_checkout, + consumption, first_name, last_name, price, billing_frequency, gender) +VALUES ( + '2021-05-02', NULL, '2021-06-05 11:52:25', '2021-06-05 11:58:08', + NULL, 'Monti', 'Durns', 199.99, 1, TRIM(TRAILING ' ' FROM 'male ') +); + +SELECT LENGTH(gender) FROM memberships; From f1738e01cc97b0984d8313744db0e37306bb4931 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Thu, 26 Oct 2023 19:35:09 +0200 Subject: [PATCH 05/13] Understanding Date/ Time Functions --- data/03-date-time-functions.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/03-date-time-functions.sql diff --git a/data/03-date-time-functions.sql b/data/03-date-time-functions.sql new file mode 100644 index 0000000..5c1dc0f --- /dev/null +++ b/data/03-date-time-functions.sql @@ -0,0 +1,2 @@ +SELECT EXTRACT(MINUTE FROM last_checkin), last_checkin +FROM memberships; From 58a098372385bfb617930dc3cad0d990bdf9f539 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Sat, 28 Oct 2023 15:09:25 +0200 Subject: [PATCH 06/13] Working with Weekdays --- data/03-date-time-functions.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/data/03-date-time-functions.sql b/data/03-date-time-functions.sql index 5c1dc0f..e773548 100644 --- a/data/03-date-time-functions.sql +++ b/data/03-date-time-functions.sql @@ -1,2 +1,18 @@ SELECT EXTRACT(MINUTE FROM last_checkin), last_checkin FROM memberships; + +-- MySQL syntax +SELECT WEEKDAY(last_checkin) + 1, last_checkin +FROM memberships; + +-- PostgreSQL syntax +SELECT EXTRACT(ISODOW FROM last_checkin), last_checkin +FROM memberships; + +-- MySQL syntax +SELECT CONVERT(last_checkin, DATE), CONVERT(last_checkin, TIME) +FROM memberships; + +-- PostgreSQL syntax +SELECT last_checkin::TIMESTAMP::DATE, last_checkin::TIMESTAMP::TIME +FROM memberships; From 2b96707244993739361fb4e939b77f86d4e6adfd Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Sat, 28 Oct 2023 15:14:16 +0200 Subject: [PATCH 07/13] Calculating INTERVALS --- data/04-date-time-differences.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 data/04-date-time-differences.sql diff --git a/data/04-date-time-differences.sql b/data/04-date-time-differences.sql new file mode 100644 index 0000000..f94cddb --- /dev/null +++ b/data/04-date-time-differences.sql @@ -0,0 +1,11 @@ +-- MySQL syntax +SELECT TIMESTAMPDIFF(MINUTE, last_checkin, last_checkout) +FROM memberships; + +-- MySQL syntax +SELECT DATEDIFF(NOW(), membership_start) +FROM memberships; + +-- PostgreSQL syntax +SELECT NOW() - membership_start +FROM memberships; From bd492144e7d1491acffffef9f5985f403894a671 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Sat, 28 Oct 2023 15:17:38 +0200 Subject: [PATCH 08/13] Adding INTERVALS to Dates --- data/05-changing-dates.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 data/05-changing-dates.sql diff --git a/data/05-changing-dates.sql b/data/05-changing-dates.sql new file mode 100644 index 0000000..3fd03d6 --- /dev/null +++ b/data/05-changing-dates.sql @@ -0,0 +1,11 @@ +-- PostgreSQL syntax +SELECT membership_start + 7, membership_start +FROM memberships; + +-- MySQL syntax +SELECT DATE_ADD(membership_start, INTERVAL 7 DAY), membership_start +FROM memberships; + +-- PostgreSQL syntax +SELECT (membership_start + INTERVAL '7 DAY')::TIMESTAMP::DATE, membership_start +FROM memberships; From ce3bdd9dc102a25c5f8306f51404b5c130550a4d Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Sat, 28 Oct 2023 15:18:56 +0200 Subject: [PATCH 09/13] Understanding LIKE & Pattern Matching --- data/06-like-pattern-matching.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 data/06-like-pattern-matching.sql diff --git a/data/06-like-pattern-matching.sql b/data/06-like-pattern-matching.sql new file mode 100644 index 0000000..cf49201 --- /dev/null +++ b/data/06-like-pattern-matching.sql @@ -0,0 +1,9 @@ +SELECT first_name LIKE '__o%', first_name +FROM memberships; + +SELECT first_name LIKE 'Ma%', first_name +FROM memberships; + +SELECT first_name +FROM memberships +WHERE first_name LIKE 'J____'; From b43b66c40f23e869b11ded0fb1f8b413c27f9977 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Sat, 28 Oct 2023 15:25:59 +0200 Subject: [PATCH 10/13] Understanding EXISTS --- data/07-exists-subquery-expressions.sql | 9 +++++++++ data/create-data/04-create-additional-tables.sql | 14 ++++++++++++++ data/create-data/05-insert-additional-data.sql | 8 ++++++++ 3 files changed, 31 insertions(+) create mode 100644 data/07-exists-subquery-expressions.sql create mode 100644 data/create-data/04-create-additional-tables.sql create mode 100644 data/create-data/05-insert-additional-data.sql diff --git a/data/07-exists-subquery-expressions.sql b/data/07-exists-subquery-expressions.sql new file mode 100644 index 0000000..5c9407c --- /dev/null +++ b/data/07-exists-subquery-expressions.sql @@ -0,0 +1,9 @@ +SELECT first_name, last_name +FROM customers +WHERE email = 'max@test.com'; + +SELECT EXISTS( + SELECT first_name, last_name + FROM customers + WHERE email = 'manu@test.com' +); diff --git a/data/create-data/04-create-additional-tables.sql b/data/create-data/04-create-additional-tables.sql new file mode 100644 index 0000000..9d198f9 --- /dev/null +++ b/data/create-data/04-create-additional-tables.sql @@ -0,0 +1,14 @@ +CREATE TABLE customers( + id INT PRIMARY KEY AUTO_INCREMENT, -- MySQL syntax + -- id SERIAL PRIMARY KEY, --PostgreSQL syntax + first_name VARCHAR(200), + last_name VARCHAR(200), + email VARCHAR(200) +); + +CREATE TABLE orders( + id INT PRIMARY KEY AUTO_INCREMENT, -- MySQL syntax + -- id SERIAL PRIMARY KEY, --PostgreSQL syntax + amount_billed NUMERIC(5, 2), + customer_id INT REFERENCES customers +); \ No newline at end of file diff --git a/data/create-data/05-insert-additional-data.sql b/data/create-data/05-insert-additional-data.sql new file mode 100644 index 0000000..7f8363e --- /dev/null +++ b/data/create-data/05-insert-additional-data.sql @@ -0,0 +1,8 @@ +INSERT INTO customers(first_name, last_name, email) +VALUES + ('Max', 'Schwarz', 'max@test.com'), + ('Manu', 'Lorenz', 'manu@test.com'), + ('Julia', 'Meyers', 'juli@test.com'); + +INSERT INTO orders(amount_billed, customer_id) +VALUES (48.99,1), (27.45, 2), (19.49, 1), (8.49, 3); From 7e44df6319f4826c8d7c2aeb436b6e34ab31c142 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Sat, 28 Oct 2023 15:26:09 +0200 Subject: [PATCH 11/13] Working with Subquery Expressions and EXISTS --- data/07-exists-subquery-expressions.sql | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/data/07-exists-subquery-expressions.sql b/data/07-exists-subquery-expressions.sql index 5c9407c..f7ea05c 100644 --- a/data/07-exists-subquery-expressions.sql +++ b/data/07-exists-subquery-expressions.sql @@ -7,3 +7,11 @@ SELECT EXISTS( FROM customers WHERE email = 'manu@test.com' ); + +SELECT o.id +FROM orders AS o +WHERE EXISTS( + SELECT c.email + FROM customers as c + WHERE o.customer_id = c.id AND c.email = 'max@test.com' +); From d57331a2078bc88b8b8bc742f0d298ff0d029d0a Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Sat, 28 Oct 2023 15:29:59 +0200 Subject: [PATCH 12/13] Working with Subquery Expressions and IN --- data/08-in-subquery-expressions.sql | 19 +++++++++++++++++++ data/create-data/06-add-customer.sql | 2 ++ 2 files changed, 21 insertions(+) create mode 100644 data/08-in-subquery-expressions.sql create mode 100644 data/create-data/06-add-customer.sql diff --git a/data/08-in-subquery-expressions.sql b/data/08-in-subquery-expressions.sql new file mode 100644 index 0000000..5fda70a --- /dev/null +++ b/data/08-in-subquery-expressions.sql @@ -0,0 +1,19 @@ +SELECT email FROM customers; + +SELECT c.email FROM customers AS c +INNER JOIN orders AS o ON c.id = o.customer_id; + +SELECT id +FROM customers +WHERE first_name = 'Max' OR first_name = 'Manu'; + +SELECT id, first_name +FROM customers +WHERE first_name IN('Max', 'Manu'); + +SELECT email +FROM customers +WHERE id IN( + SELECT customer_id + FROM orders +); diff --git a/data/create-data/06-add-customer.sql b/data/create-data/06-add-customer.sql new file mode 100644 index 0000000..b6a0e58 --- /dev/null +++ b/data/create-data/06-add-customer.sql @@ -0,0 +1,2 @@ +INSERT INTO customers(first_name, last_name, email) +VALUES('Ken', 'Brooks', 'ken@test.com'); From 77cb5cd4613874fe5e4584cb051f0262634d20d8 Mon Sep 17 00:00:00 2001 From: ThomasCode92 Date: Sat, 28 Oct 2023 15:33:14 +0200 Subject: [PATCH 13/13] Introducing Conditional Expressions --- data/09-conditional-expressions.sql | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 data/09-conditional-expressions.sql diff --git a/data/09-conditional-expressions.sql b/data/09-conditional-expressions.sql new file mode 100644 index 0000000..3cf625e --- /dev/null +++ b/data/09-conditional-expressions.sql @@ -0,0 +1,21 @@ +SELECT amount_billed, + CASE WHEN amount_billed > 15 AND amount_billed <= 30 THEN 'Normal Day' + WHEN amount_billed > 30 THEN 'Good Day' + ELSE 'Bad Day' + END +FROM orders; + +-- MySQL syntax +SELECT weekday_nr, + CASE WHEN weekday_nr = 1 THEN 'Monday' + WHEN weekday_nr = 2 THEN 'Tuesday' + WHEN weekday_nr = 3 THEN 'Wednesday' + WHEN weekday_nr = 4 THEN 'Thursday' + WHEN weekday_nr = 5 THEN 'Friday' + WHEN weekday_nr = 6 THEN 'Saturday' + ELSE 'Sunday' + END +FROM ( + SELECT WEEKDAY(last_checkin) + 1 AS weekday_nr + FROM memberships +) AS weekday_numbers;