How-To-Learn SQL Coding Roadmap - Computer Engineering

Framework: How-To-Learn SQL Coding Roadmap - Computer Engineering
by Mavericks-for-Alexander-the-Great(ATG)

Learning SQL (Structured Query Language) is a valuable skill for interacting with databases. Here’s a detailed approach to learning SQL, inspired by the infographic you shared:

Start from the basics, practice regularly, and progressively tackle more complex queries and operations. Happy querying!




________




A detailed framework for learning SQL is structured as follows:

1. Introduction to SQL and Databases

2. Setting Up the Learning Environment

3. Data Definition Language (DDL)

4. Data Manipulation Language (DML)

5. Basic SQL Commands and Operations

6. Advanced Data Selection and Analysis

7. Functions and Expressions

8. Subqueries and Nested Queries

9. Data Control Language (DCL) and Security

10. Transaction Control Language (TCL)

11. Advanced SQL Features

12. Best Practices and Performance Optimization

13. Real-world SQL Practice

14. Continuing Education and Community Involvement

15. Teaching and Sharing Knowledge

By following this framework, you would gradually build up from foundational knowledge to advanced SQL techniques, with an emphasis on practical application and community engagement for continuous improvement.




________




Here's a set of practice exercises, one for each section of the framework, that illustrates how to write SQL code.

1. Introduction to SQL and Databases Write a SQL statement to select all records from a table named customers.

sql

SELECT * FROM customers;


2. Setting Up the Learning Environment Create a new database named practice_db.

sql

CREATE DATABASE practice_db;


3. Data Definition Language (DDL) Create a table named products with three columns: product_id (integer and primary key), product_name (string), and price (decimal).

sql

CREATE TABLE products (

  product_id INT PRIMARY KEY,

  product_name VARCHAR(255),

  price DECIMAL(10, 2)

);


4. Data Manipulation Language (DML) Insert a new product into the products table with an id of 1, a name of 'Widget', and a price of 9.99.

sql

INSERT INTO products (product_id, product_name, price) VALUES (1, 'Widget', 9.99);


5. Basic SQL Commands and Operations Select the name and price of all products in the products table that have a price greater than 5.00, ordered by price in ascending order.

sql

SELECT product_name, price FROM products WHERE price > 5.00 ORDER BY price ASC;


6. Advanced Data Selection and Analysis Find the total number of products and the average price of all products in the products table.

sql

SELECT COUNT(*) AS total_products, AVG(price) AS average_price FROM products;


7. Functions and Expressions Update the product_name of all products to be uppercase.

sql

UPDATE products SET product_name = UPPER(product_name);


8. Subqueries and Nested Queries Select the names of products that are priced higher than the average price of all products.

sql

SELECT product_name FROM products WHERE price > (SELECT AVG(price) FROM products);


9. Data Control Language (DCL) and Security Grant SELECT permission on the products table to a user named 'user123'.

sql

GRANT SELECT ON products TO 'user123';


10. Transaction Control Language (TCL) Begin a transaction, update the price of a product, and then commit the transaction.

sql

START TRANSACTION;

UPDATE products SET price = 10.99 WHERE product_id = 1;

COMMIT;


11. Advanced SQL Features Create an index on the price column of the products table to improve the performance of queries that search based on the price.

sql

CREATE INDEX idx_price ON products (price);


12. Best Practices and Performance Optimization Select the product_id and product_name of all products without using the wildcard * to promote good performance practices.

sql

SELECT product_id, product_name FROM products;


13. Real-world SQL Practice Write a query that joins the products table with an orders table (assuming it exists) to find all orders that include Widgets.

sql

SELECT o.order_id, p.product_name

FROM orders o

JOIN products p ON o.product_id = p.product_id

WHERE p.product_name = 'Widget';


14. Continuing Education and Community Involvement For this section, instead of a SQL statement, the task would be to find and participate in an SQL-related discussion on an online platform such as Stack Overflow.

15. Teaching and Sharing Knowledge Prepare an explanation of how the GROUP BY clause works in SQL to share with a beginner, using the products table as an example.

Each of these exercises is designed to practice a specific aspect of SQL, starting with the basics and progressing to more complex tasks. Remember, the best way to learn is by doing, so actively writing and running these SQL statements against a real database will be most beneficial.




________




For the second practice set (P-Set), let's dive into a bit more complexity with each example. These are designed to build upon the first P-Set and introduce new concepts or slightly more advanced usage of SQL.

1. Introduction to SQL and Databases Count the number of unique customer countries in the customers table.

sql

SELECT COUNT(DISTINCT country) FROM customers;


2. Setting Up the Learning Environment Select a database to work with, such as practice_db.

sql

USE practice_db;


3. Data Definition Language (DDL) Add a new column category of type VARCHAR(50) to the products table.

sql

ALTER TABLE products ADD COLUMN category VARCHAR(50);


4. Data Manipulation Language (DML) Update the category for product with product_id 1 to 'Electronics'.

sql

UPDATE products SET category = 'Electronics' WHERE product_id = 1;


5. Basic SQL Commands and Operations Select products with price between 10 and 20, inclusive, and only return products from the 'Electronics' category.

sql

SELECT * FROM products WHERE price BETWEEN 10 AND 20 AND category = 'Electronics';


6. Advanced Data Selection and Analysis Find the minimum and maximum prices for each category of products.

sql

SELECT category, MIN(price) AS min_price, MAX(price) AS max_price FROM products GROUP BY category;


7. Functions and Expressions Select the product_name and calculate the sale price with a 10% discount.

sql

SELECT product_name, price, price * 0.9 AS sale_price FROM products;


8. Subqueries and Nested Queries Select product_name for products that have a price above the sale price average.

sql

SELECT product_name FROM products WHERE price > (SELECT AVG(price * 0.9) FROM products);


9. Data Control Language (DCL) and Security Revoke the INSERT permission from the user 'user123' on the products table.

sql

REVOKE INSERT ON products FROM 'user123';


10. Transaction Control Language (TCL) Start a transaction to delete a product, but roll back the transaction instead of committing it.

sql

START TRANSACTION;

DELETE FROM products WHERE product_id = 2;

ROLLBACK;


11. Advanced SQL Features Create a view v_expensive_products that contains all products with a price higher than 50.

sql

CREATE VIEW v_expensive_products AS SELECT * FROM products WHERE price > 50;


12. Best Practices and Performance Optimization Rewrite a SELECT statement using aliases for tables and columns to improve readability.

sql

SELECT p.product_id AS id, p.product_name AS name FROM products p WHERE p.category = 'Electronics';


13. Real-world SQL Practice Write a query that uses a LEFT JOIN to find all products that have never been ordered (assuming there is an order_details table with a product_id column).

sql

SELECT p.product_id, p.product_name

FROM products p

LEFT JOIN order_details od ON p.product_id = od.product_id

WHERE od.product_id IS NULL;


14. Continuing Education and Community Involvement Research the latest SQL features released in the most recent version of the SQL database you are using.

15. Teaching and Sharing Knowledge Write a guide on how to use the EXPLAIN command to analyze the execution plan of a query for a blog or tutorial.

These exercises are slightly more advanced, using concepts like DISTINCT, BETWEEN, subqueries, transactions, views, and joins. They're designed to further deepen your understanding and proficiency in SQL.




________



Moving forward to the third practice set (P-Set), we will introduce even more complexity and some real-world scenarios that might require more intricate SQL commands and concepts.

1. Introduction to SQL and Databases Find the top 3 most common customer last names in the customers table.

sql

SELECT last_name, COUNT(*) AS count

FROM customers

GROUP BY last_name

ORDER BY count DESC

LIMIT 3;


2. Setting Up the Learning Environment Create a new table supplier with columns supplier_id (primary key), supplier_name, and contact_name.

sql

CREATE TABLE supplier (

  supplier_id INT PRIMARY KEY,

  supplier_name VARCHAR(255),

  contact_name VARCHAR(255)

);


3. Data Definition Language (DDL) Modify the category column in the products table to have a default value of 'General'.

sql

ALTER TABLE products ALTER COLUMN category SET DEFAULT 'General';


4. Data Manipulation Language (DML) Delete all products from the products table that have not been categorized (i.e., category is NULL).

sql

DELETE FROM products WHERE category IS NULL;


5. Basic SQL Commands and Operations Select all distinct prices from the products table in descending order, but exclude any prices that are NULL.

sql

SELECT DISTINCT price FROM products WHERE price IS NOT NULL ORDER BY price DESC;


6. Advanced Data Selection and Analysis Calculate the total revenue (price times quantity) for each category of products from the order_details table.

sql

SELECT p.category, SUM(od.quantity * p.price) AS total_revenue

FROM products p

JOIN order_details od ON p.product_id = od.product_id

GROUP BY p.category;


7. Functions and Expressions Select the product_name and round the price to the nearest whole number.

sql

SELECT product_name, ROUND(price) AS rounded_price FROM products;


8. Subqueries and Nested Queries Identify customers who have placed orders totaling more than the average order value.

sql

SELECT customer_id, SUM(order_value) AS total_spent

FROM orders

GROUP BY customer_id

HAVING total_spent > (SELECT AVG(order_value) FROM orders);


9. Data Control Language (DCL) and Security Create a new user analytics_user with the ability to execute SELECT statements on the products table.

sql

CREATE USER 'analytics_user' IDENTIFIED BY 'password';

GRANT SELECT ON products TO 'analytics_user';


10. Transaction Control Language (TCL) Perform a series of updates to the products table within a transaction, and then commit the transaction if all updates succeed. Otherwise, roll back the transaction.

sql

START TRANSACTION;

UPDATE products SET price = price * 1.1 WHERE category = 'Electronics'; -- 10% price increase for electronics

UPDATE products SET price = price * 0.9 WHERE category = 'Books'; -- 10% price decrease for books


-- Add more updates as needed


-- Check for errors, and commit or roll back

IF @@ERROR_COUNT = 0

THEN COMMIT;

ELSE ROLLBACK;

END IF;


11. Advanced SQL Features Write a trigger that automatically updates the last_updated column to the current date and time whenever a product is updated.

sql

CREATE TRIGGER update_product_last_updated

BEFORE UPDATE ON products

FOR EACH ROW

SET NEW.last_updated = CURRENT_TIMESTAMP;


12. Best Practices and Performance Optimization Create a composite index on the orders table for customer_id and order_date to improve the performance of queries that filter on these columns.

sql

CREATE INDEX idx_customer_order ON orders (customer_id, order_date);


13. Real-world SQL Practice Generate a list of customers and the number of orders they've placed, including customers who haven't placed any orders, sorted by the number of orders in descending order.

sql

SELECT c.customer_id, c.customer_name, COUNT(o.order_id) AS orders_count

FROM customers c

LEFT JOIN orders o ON c.customer_id = o.customer_id

GROUP BY c.customer_id

ORDER BY orders_count DESC;


14. Continuing Education and Community Involvement Contribute to a community-written document on advanced SQL techniques, perhaps by adding a section on window functions.

15. Teaching and Sharing Knowledge Prepare a lesson or workshop that covers the use of SQL for data analysis, including practical exercises on aggregations, filtering, and joining data from multiple tables.

In this set, we've introduced concepts like triggers, advanced aggregate functions, window functions, and error handling in transactions. These are geared towards users who are becoming more comfortable with SQL and are ready to tackle database administration and optimization




________




Let's move on to the fourth practice set (P-Set) with SQL examples that incorporate complex queries, data manipulation, and administration tasks. This set is designed for advanced users who are familiar with the previous concepts and are looking to refine their skills further.

1. Introduction to SQL and Databases Find the second highest number of orders placed by a customer from the orders table.

sql

SELECT MAX(order_count) 

FROM (

  SELECT customer_id, COUNT(*) AS order_count

  FROM orders

  GROUP BY customer_id

) AS order_counts 

WHERE order_count < (

  SELECT MAX(order_count) 

  FROM (

    SELECT customer_id, COUNT(*) AS order_count

    FROM orders

    GROUP BY customer_id

  ) AS all_order_counts

);


2. Setting Up the Learning Environment Create a new table customer_feedback with feedback_id, customer_id, feedback_text, and feedback_date.

sql

CREATE TABLE customer_feedback (

  feedback_id INT PRIMARY KEY AUTO_INCREMENT,

  customer_id INT,

  feedback_text TEXT,

  feedback_date DATETIME DEFAULT CURRENT_TIMESTAMP

);


3. Data Definition Language (DDL) Convert the price column in the products table from DECIMAL to FLOAT.

sql

ALTER TABLE products MODIFY price FLOAT;


4. Data Manipulation Language (DML) Insert multiple new records into the products table with different categories using a single SQL statement.

sql

INSERT INTO products (product_id, product_name, price, category) VALUES

(2, 'Gadget', 15.99, 'Electronics'),

(3, 'Novel', 7.99, 'Books'),

(4, 'Chair', 45.99, 'Furniture');


5. Basic SQL Commands and Operations Select the product_name and price from the products table where price is within the 75th percentile of prices.

sql

SELECT product_name, price 

FROM products 

WHERE price <= (

  SELECT PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY price) FROM products

);


6. Advanced Data Selection and Analysis Use a window function to rank products by price within each category.

sql

SELECT product_name, category, price, 

       RANK() OVER (PARTITION BY category ORDER BY price DESC) AS price_rank 

FROM products;


7. Functions and Expressions Update the products table to set the price column to the average price if it's currently set to more than twice the average price.

sql

UPDATE products 

SET price = (SELECT AVG(price) FROM products) 

WHERE price > 2 * (SELECT AVG(price) FROM products);


8. Subqueries and Nested Queries Select the customer_id from the orders table for all customers who have never ordered a specific product (e.g., product_id = 3).

sql

SELECT DISTINCT customer_id 

FROM orders 

WHERE order_id NOT IN (

  SELECT order_id 

  FROM order_details 

  WHERE product_id = 3

);


9. Data Control Language (DCL) and Security Change the password for the analytics_user account.

sql

ALTER USER 'analytics_user' IDENTIFIED BY 'newpassword';


10. Transaction Control Language (TCL) Demonstrate a savepoint within a transaction, allowing part of the transaction to be rolled back.

sql

START TRANSACTION;

INSERT INTO products (product_name, price) VALUES ('Table', 89.99);

SAVEPOINT table_inserted;

INSERT INTO products (product_name, price) VALUES ('Lamp', 24.99);

-- Rollback to savepoint, the lamp won't be inserted

ROLLBACK TO table_inserted;

COMMIT;


11. Advanced SQL Features Write a stored procedure AddNewProduct that adds a new product to the products table and returns the new product_id.

sql

DELIMITER //

CREATE PROCEDURE AddNewProduct(IN p_name VARCHAR(255), IN p_price DECIMAL(10, 2), OUT new_id INT)

BEGIN

  INSERT INTO products (product_name, price) VALUES (p_name, p_price);

  SET new_id = LAST_INSERT_ID();

END //

DELIMITER ;


12. Best Practices and Performance Optimization Rewrite a query to use a UNION ALL instead of OR for selecting products either in the 'Books' category or priced below 10.00.

sql

SELECT * FROM products WHERE category = 'Books'

UNION ALL

SELECT * FROM products WHERE price < 10.00 AND category <> 'Books';


13. Real-world SQL Practice Create a complex report that lists each category, the total number of products, the average price of the products, and the total stock value of the products (assuming a stock_quantity column exists).

sql

SELECT 

  category, 

  COUNT(*) AS total_products, 

  AVG(price) AS average_price, 

  SUM(price * stock_quantity) AS stock_value

FROM products

GROUP BY category;


14. Continuing Education and Community Involvement Contribute an example of a complex query to a SQL knowledge repository like an SQL cookbook or a community coding challenge.

15. Teaching and Sharing Knowledge Develop a comprehensive workshop or tutorial on SQL performance tuning, including index usage, query optimization, and understanding explain plans.

In this set, you would be delving into advanced operations, such as percentile calculations, window functions, savepoints in transactions, and creating stored procedures. These will challenge your understanding of SQL's capabilities and help you master its use for complex data manipulation and analysis.




________




Moving on to the fifth practice set (P-Set), we will approach SQL with examples that demand a high level of understanding and often are used to solve complex problems. This set is intended for SQL practitioners who are comfortable with advanced features and are looking to stretch their abilities further.

1. Introduction to SQL and Databases Find customers who have placed more than the average number of orders, and return their names and order counts.

sql

SELECT c.customer_name, COUNT(o.order_id) AS order_count

FROM customers c

JOIN orders o ON c.customer_id = o.customer_id

GROUP BY c.customer_name

HAVING COUNT(o.order_id) > (

  SELECT AVG(order_count) FROM (

    SELECT COUNT(*) AS order_count

    FROM orders

    GROUP BY customer_id

  ) AS avg_orders

);


2. Setting Up the Learning Environment Design a complex table customer_orders that includes a primary key, foreign keys, various data types, and default values.

sql

CREATE TABLE customer_orders (

  order_id INT PRIMARY KEY AUTO_INCREMENT,

  customer_id INT NOT NULL,

  order_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,

  status VARCHAR(20) NOT NULL DEFAULT 'pending',

  total DECIMAL(10, 2),

  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)

);


3. Data Definition Language (DDL) Add a CHECK constraint on the total column in the customer_orders table to ensure total cannot be negative.

sql

ALTER TABLE customer_orders

ADD CONSTRAINT chk_total CHECK (total >= 0);


4. Data Manipulation Language (DML) Write an UPSERT statement (insert or update on duplicate key) to add a new order or update an existing order's total if the order_id already exists.

sql

INSERT INTO customer_orders (order_id, customer_id, total)

VALUES (1, 101, 299.99)

ON DUPLICATE KEY UPDATE total = VALUES(total);


5. Basic SQL Commands and Operations Select the top 10% of products by price and include a column that shows their price rank among all products.

sql

SELECT product_name, price,

       NTILE(10) OVER (ORDER BY price DESC) AS price_percentile_rank

FROM products

QUALIFY price_percentile_rank = 1;


6. Advanced Data Selection and Analysis For each customer, select the highest total order value they've ever placed and the date of that order.

sql

SELECT customer_id, MAX(total) AS highest_order_value, order_date

FROM customer_orders

GROUP BY customer_id, order_date

ORDER BY highest_order_value DESC;


7. Functions and Expressions Write a query that extracts the year from a DATETIME column named order_date and groups the orders by year.

sql

SELECT YEAR(order_date) AS order_year, COUNT(*) AS number_of_orders

FROM orders

GROUP BY order_year;


8. Subqueries and Nested Queries Select products that are priced higher than the average price of all products in the 'Electronics' category.

sql

SELECT product_id, product_name, price

FROM products

WHERE price > (

  SELECT AVG(price)

  FROM products

  WHERE category = 'Electronics'

) AND category = 'Electronics';


9. Data Control Language (DCL) and Security Create a role named data_analyst and grant this role the ability to perform SELECT, INSERT, and UPDATE on the customer_orders table.

sql

CREATE ROLE data_analyst;

GRANT SELECT, INSERT, UPDATE ON customer_orders TO data_analyst;


10. Transaction Control Language (TCL) Illustrate how to use CHECKPOINT in a transaction (this is vendor-specific; the example is for SQL Server).

sql

BEGIN TRANSACTION;

-- Make several changes in various tables.

CHECKPOINT; -- This creates a point to which a database can be restored.

-- More changes here.

COMMIT;


11. Advanced SQL Features Create a partitioned table customer_logs based on the month of the log_date.

sql

CREATE TABLE customer_logs (

  log_id INT PRIMARY KEY,

  customer_id INT,

  log_date DATETIME NOT NULL,

  log_message VARCHAR(255)

) PARTITION BY RANGE(YEAR(log_date) * 100 + MONTH(log_date)) (

  PARTITION p0 VALUES LESS THAN (202301),

  PARTITION p1 VALUES LESS THAN (202302),

  -- Add partitions for each month

);


12. Best Practices and Performance Optimization Create a covering index for a query that selects customer_id, status, and order_date from customer_orders where status is 'shipped' and orders are sorted by order_date.

sql

CREATE INDEX idx_shipped_orders ON customer_orders(status, order_date) INCLUDE (customer_id);


13. Real-world SQL Practice Create a running total of total values from customer_orders over the order date.

sql

SELECT order_id, order_date, total,

       SUM(total) OVER (ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_total

FROM customer_orders;


14. Continuing Education and Community Involvement For this practice set, you might look for SQL puzzles or challenges that involve recursive queries or Common Table Expressions (CTEs) and contribute a solution.

15. Teaching and Sharing Knowledge Develop and share a video tutorial on how to set up and use database replication to improve data availability and disaster recovery capabilities.

These SQL examples involve advanced data manipulation, administration, optimization, and use of the latest SQL features, providing robust practice for seasoned SQL users.




________




Continuing to advance your SQL skills, the sixth practice set (P-Set) involves examples that are typically encountered in complex SQL environments and by seasoned database professionals who are comfortable with database design, query optimization, and database features that ensure data integrity and performance.

1. Introduction to SQL and Databases Generate a report that shows the total number of orders each month, displaying months with zero orders as well.

sql

SELECT 

  DATE_FORMAT(order_date, '%Y-%m') AS month,

  COALESCE(COUNT(order_id), 0) AS total_orders

FROM 

  (SELECT '2024-01-01' + INTERVAL m MONTH AS order_date

   FROM 

     (SELECT 0 m UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 

      UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 

      UNION ALL SELECT 10 UNION ALL SELECT 11) months) AS year_months

LEFT JOIN orders ON DATE_FORMAT(orders.order_date, '%Y-%m') = DATE_FORMAT(year_months.order_date, '%Y-%m')

GROUP BY month;


2. Setting Up the Learning Environment Create a temporary table to hold daily sales data for analysis.

sql

CREATE TEMPORARY TABLE daily_sales (

  sale_date DATE,

  total_sales DECIMAL(10, 2)

);


3. Data Definition Language (DDL) Add a non-nullable email column to the customers table with a unique constraint to prevent duplicate emails.

sql

ALTER TABLE customers

ADD COLUMN email VARCHAR(255) NOT NULL UNIQUE;


4. Data Manipulation Language (DML) Perform an update with a join: increase the total for orders in the customer_orders table by 10% for customers who have an email address with the domain '@loyal-customer.com'.

sql

UPDATE customer_orders AS co

JOIN customers AS c ON co.customer_id = c.customer_id

SET co.total = co.total * 1.1

WHERE c.email LIKE '%@loyal-customer.com';


5. Basic SQL Commands and Operations Use a case statement in a SELECT query to categorize products into 'Cheap', 'Affordable', and 'Expensive' based on their price.

sql

SELECT product_name,

       CASE

         WHEN price < 10 THEN 'Cheap'

         WHEN price BETWEEN 10 AND 100 THEN 'Affordable'

         ELSE 'Expensive'

       END AS price_category

FROM products;


6. Advanced Data Selection and Analysis List customers along with a flag indicating whether they've placed any orders (1) or not (0).

sql

SELECT c.customer_id, c.customer_name,

       CASE WHEN COUNT(o.order_id) > 0 THEN 1 ELSE 0 END AS has_orders

FROM customers c

LEFT JOIN orders o ON c.customer_id = o.customer_id

GROUP BY c.customer_id;


7. Functions and Expressions Create a computed column in the products table that automatically calculates and stores the sales tax based on the price column (assuming a fixed tax rate of 8%).

sql

ALTER TABLE products

ADD COLUMN sales_tax AS (price * 0.08) PERSISTED;


8. Subqueries and Nested Queries Find the product_name of products that have never been included in any order.

sql

SELECT product_name

FROM products

WHERE product_id NOT IN (

  SELECT DISTINCT product_id

  FROM order_details

);


9. Data Control Language (DCL) and Security Define a security policy that allows data_analyst role to execute SELECT statements only during business hours (9 AM to 6 PM).

sql

-- Assuming the use of a database that supports CREATE POLICY, like PostgreSQL

CREATE POLICY business_hours_select

ON customer_orders

FOR SELECT

USING (EXTRACT(HOUR FROM CURRENT_TIME) BETWEEN 9 AND 18)

TO data_analyst;


10. Transaction Control Language (TCL) Demonstrate the use of nested transactions with savepoints, performing multiple data changes, and selectively rolling back some changes.

sql

BEGIN TRANSACTION;


INSERT INTO customers (customer_name, email) VALUES ('New Customer', 'new@email.com');


SAVEPOINT new_customer_added;


UPDATE orders SET total = total * 1.05 WHERE customer_id = 1; -- A 5% increase for customer 1


SAVEPOINT orders_updated;


DELETE FROM orders WHERE order_date < '2024-01-01'; -- Delete old orders


-- Suppose we only want to roll back the DELETE operation

ROLLBACK TO orders_updated;


COMMIT;


11. Advanced SQL Features Create a function that returns the total number of orders for a given customer_id.

sql

CREATE FUNCTION GetTotalOrders(customer_id INT) RETURNS INT

BEGIN

  DECLARE order_count INT;

  SELECT COUNT(*) INTO order_count FROM orders WHERE orders.customer_id = customer_id;

  RETURN order_count;

END;


12. Best Practices and Performance Optimization Rewrite a query to use a recursive common table expression (CTE) to get a list of all dates in the current year.

sql

WITH RECURSIVE DateCTE (date) AS (

  SELECT CAST('2024-01-01' AS DATE)

  UNION ALL

  SELECT DATE_ADD(date, INTERVAL 1 DAY) FROM DateCTE WHERE date < '2024-12-31'

)

SELECT * FROM DateCTE;


13. Real-world SQL Practice Write a query that shows the moving average of daily total sales over the past 7 days from the daily_sales table.

sql

SELECT sale_date,

       AVG(total_sales) OVER (ORDER BY sale_date RANGE BETWEEN INTERVAL 6 DAY PRECEDING AND CURRENT ROW) AS moving_avg_sales

FROM daily_sales;


14. Continuing Education and Community Involvement Participate in a code review session, providing feedback on SQL scripts in terms of efficiency and adherence to best practices.

15. Teaching and Sharing Knowledge Host a seminar on the importance of database normalization, with practical examples showing how to refactor a database design from 1NF through to 3NF.

These exercises reflect high-level database operations, security measures, and data handling practices that are crucial for complex systems and databases that require rigorous management and optimization.




________




To consolidate the "How to Learn SQL Roadmap" and the accompanying SQL commands into long-term memory, students should engage with a variety of questions that challenge their recall, application, and deeper understanding of the concepts. Here are major questions across different categories that can aid in this process:

Fundamental Concepts

DDL (Data Definition Language)

Data Types

DML (Data Manipulation Language)

Operators and Functions

DQL (Data Query Language)

Joins

DCL (Data Control Language) and Security

TCL (Transaction Control Language)

Advanced Topics

Practice and Application

Optimization and Performance

Real-world Applications

Continuous Learning and Community Engagement

Teaching and Memory Retention

These questions cover a broad spectrum of SQL knowledge from the basics to more advanced concepts. Regularly practicing these questions, creating new queries, and teaching SQL concepts to others are effective ways for students to deepen their understanding and retain SQL knowledge over the long term.