SQL Tutorial: A Comprehensive Guide
SQL (Structured Query Language) is used to create, retrieve, update, and delete data in
relational databases. It is essential for database management and supports various operations.
SQL Basics
SQL Syntax
Every SQL statement follows this structure:
sql
CopyEdit
SELECT column_name(s) FROM table_name WHERE condition;
SELECT → Retrieves data
FROM → Specifies the table
WHERE → Filters records
SQL Data Types
Common SQL data types include:
INT → Integer numbers
VARCHAR(n) → Variable-length text
DATE → Stores date values
DECIMAL(p,s) → Fixed-point number (e.g., price)
SQL CRUD Operations (Create, Read, Update, Delete)
CREATE: Insert Data
sql
CopyEdit
INSERT INTO students (id, name, age)
VALUES (1, 'Alice', 22);
READ: Retrieve Data
sql
CopyEdit
SELECT name, age FROM students WHERE age > 18;
* → Selects all columns
WHERE → Filters results
ORDER BY → Sorts results
Example:
sql
CopyEdit
SELECT * FROM students ORDER BY age DESC;
UPDATE: Modify Data
sql
CopyEdit
UPDATE students
SET age = 23
WHERE id = 1;
DELETE: Remove Data
sql
CopyEdit
DELETE FROM students WHERE id = 1;
SQL Constraints & Keys
PRIMARY KEY (PK)
Ensures uniqueness in a table.
sql
CopyEdit
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
FOREIGN KEY (FK)
Establishes a relationship between two tables.
sql
CopyEdit
CREATE TABLE enrollments (
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES students(id)
);
NOT NULL
Prevents NULL values.
sql
CopyEdit
ALTER TABLE students MODIFY name VARCHAR(50) NOT NULL;
UNIQUE
Ensures column values are unique.
sql
CopyEdit
ALTER TABLE students ADD CONSTRAINT unique_email UNIQUE (email);
SQL Joins
Joins combine data from multiple tables.
INNER JOIN (Matches in Both Tables)
sql
CopyEdit
SELECT students.name, courses.course_name
FROM students
INNER JOIN enrollments ON students.id = enrollments.student_id
INNER JOIN courses ON enrollments.course_id = courses.id;
LEFT JOIN (All Left + Matching Right)
sql
CopyEdit
SELECT students.name, courses.course_name
FROM students
LEFT JOIN enrollments ON students.id = enrollments.student_id;
RIGHT JOIN (All Right + Matching Left)
sql
CopyEdit
SELECT students.name, courses.course_name
FROM students
RIGHT JOIN enrollments ON students.id = enrollments.student_id;
FULL JOIN (All Left & Right)
sql
CopyEdit
SELECT students.name, courses.course_name
FROM students
FULL JOIN enrollments ON students.id = enrollments.student_id;
SQL Aggregations & Grouping
COUNT, SUM, AVG, MAX, MIN
sql
CopyEdit
SELECT COUNT(*) FROM students; -- Total students
SELECT AVG(age) FROM students; -- Average age
SELECT MAX(age) FROM students; -- Oldest student
GROUP BY & HAVING
sql
CopyEdit
SELECT course_id, COUNT(student_id)
FROM enrollments
GROUP BY course_id
HAVING COUNT(student_id) > 5;
GROUP BY → Groups results
HAVING → Filters groups
SQL Subqueries & Views
Subquery (Query inside a Query)
sql
CopyEdit
SELECT name FROM students
WHERE id IN (SELECT student_id FROM enrollments WHERE course_id = 2);
Views (Virtual Table)
sql
CopyEdit
CREATE VIEW student_courses AS
SELECT students.name, courses.course_name
FROM students
INNER JOIN enrollments ON students.id = enrollments.student_id
INNER JOIN courses ON enrollments.course_id = courses.id;
To use a view:
sql
CopyEdit
SELECT * FROM student_courses;
SQL Transactions
Using Transactions
sql
CopyEdit
START TRANSACTION;
UPDATE students SET age = 25 WHERE id = 1;
DELETE FROM enrollments WHERE student_id = 1;
COMMIT;
ROLLBACK; → Undo changes
COMMIT; → Save changes
SQL Indexes & Performance Optimization
Index for Faster Searches
sql
CopyEdit
CREATE INDEX idx_student_name ON students(name);
Optimizing Queries
Use indexes on frequently searched columns.
Avoid *SELECT ; → Instead, select only required columns.
Use JOINs efficiently instead of subqueries.
SQL Quiz: Test Your Knowledge!
Which SQL statement retrieves all rows from a table?
a) SELECT *
b) RETRIEVE *
c) SHOW ALL
d) DISPLAY *
Which SQL clause is used to filter results?
a) GROUP BY
b) HAVING
c) WHERE
d) ORDER BY
Which JOIN returns only matching rows from both tables?
a) LEFT JOIN
b) FULL JOIN
c) INNER JOIN
d) CROSS JOIN
Which SQL command is used to remove all data from a table?
a) DROP TABLE
b) DELETE FROM table_name
c) TRUNCATE TABLE
d) REMOVE ALL
Which SQL function counts the number of rows?
a) TOTAL()
b) COUNT()
c) SUM()
d) AVG()
Conclusion
SQL is a powerful language for managing relational databases. Mastering CRUD operations,
joins, aggregation, and optimization techniques will help in effective data handling.