0% found this document useful (0 votes)
7 views

SQL Questions 1-100

100 SQL Questions to learn basics of SQL
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

SQL Questions 1-100

100 SQL Questions to learn basics of SQL
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

Sure!

Let's start with a structured plan to help you learn the basics of SQL through practical
exercises. We'll cover various aspects of SQL, including data definition, data manipulation, and
querying. Here is a list of 100 SQL exercises to get you started:

Basic SQL

1. Create a Database:

sql Copy code

CREATE DATABASE sample_db;

2. Create a Table:

sql Copy code

CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50), position


VARCHAR(50), salary DECIMAL(10, 2) );

3. Insert Data into Table:

sql Copy code

INSERT INTO employees (id, name, position, salary) VALUES (1, 'Alice', 'Manager',
60000.00);

4. Insert Multiple Rows:

sql Copy code

INSERT INTO employees (id, name, position, salary) VALUES (2, 'Bob', 'Developer',
50000.00), (3, 'Charlie', 'Designer', 40000.00);

5. Select All Data:

sql Copy code

SELECT * FROM employees;

6. Select Specific Columns:


sql Copy code

SELECT name, salary FROM employees;

7. Where Clause:

sql Copy code

SELECT * FROM employees WHERE salary > 45000.00;

8. AND, OR Operators:

sql Copy code

SELECT * FROM employees WHERE position = 'Developer' AND salary > 45000.00;

9. Order By Clause:

sql Copy code

SELECT * FROM employees ORDER BY salary DESC;

10. Distinct Keyword:

sql Copy code

SELECT DISTINCT position FROM employees;

Intermediate SQL

11. Update Data:

sql Copy code

UPDATE employees SET salary = 65000.00 WHERE name = 'Alice';

12. Delete Data:

sql Copy code


DELETE FROM employees WHERE id = 3;

13. Alter Table - Add Column:

sql Copy code

ALTER TABLE employees ADD COLUMN email VARCHAR(100);

14. Alter Table - Drop Column:

sql Copy code

ALTER TABLE employees DROP COLUMN email;

15. Inner Join:

sql Copy code

CREATE TABLE departments ( id INT PRIMARY KEY, name VARCHAR(50) ); INSERT INTO
departments (id, name) VALUES (1, 'HR'), (2, 'IT'), (3, 'Design'); SELECT
employees.name, departments.name AS department FROM employees INNER JOIN
departments ON employees.id = departments.id;

16. Left Join:

sql Copy code

SELECT employees.name, departments.name AS department FROM employees LEFT JOIN


departments ON employees.id = departments.id;

17. Right Join:

sql Copy code

SELECT employees.name, departments.name AS department FROM employees RIGHT JOIN


departments ON employees.id = departments.id;

18. Full Join:


sql Copy code

SELECT employees.name, departments.name AS department FROM employees FULL OUTER


JOIN departments ON employees.id = departments.id;

19. Group By Clause:

sql Copy code

SELECT position, COUNT(*) FROM employees GROUP BY position;

20. Having Clause:

sql Copy code

SELECT position, COUNT(*) FROM employees GROUP BY position HAVING COUNT(*) > 1;

Advanced SQL

21. Subquery in Select:

sql Copy code

SELECT name, (SELECT name FROM departments WHERE id = employees.id) AS department


FROM employees;

22. Subquery in Where:

sql Copy code

SELECT name FROM employees WHERE id IN (SELECT id FROM departments WHERE name =
'IT');

23. Case Statement:

sql Copy code

SELECT name, CASE WHEN salary > 55000 THEN 'High' WHEN salary BETWEEN 40000 AND
55000 THEN 'Medium' ELSE 'Low' END AS salary_level FROM employees;
24. Union Operator:

sql Copy code

SELECT name FROM employees UNION SELECT name FROM departments;

25. Union All Operator:

sql Copy code

SELECT name FROM employees UNION ALL SELECT name FROM departments;

More Complex Queries

26. Create Index:

sql Copy code

CREATE INDEX idx_salary ON employees(salary);

27. Drop Index:

sql Copy code

DROP INDEX idx_salary ON employees;

28. Create View:

sql Copy code

CREATE VIEW high_salary_employees AS SELECT * FROM employees WHERE salary > 50000;

29. Select from View:

sql Copy code

SELECT * FROM high_salary_employees;

30. Delete View:


sql Copy code

DROP VIEW high_salary_employees;

31. Create Stored Procedure:

sql Copy code

CREATE PROCEDURE get_employee_by_id(IN emp_id INT) BEGIN SELECT * FROM employees


WHERE id = emp_id; END;

32. Call Stored Procedure:

sql Copy code

CALL get_employee_by_id(1);

33. Create Function:

sql Copy code

CREATE FUNCTION get_employee_count() RETURNS INT BEGIN DECLARE emp_count INT;


SELECT COUNT(*) INTO emp_count FROM employees; RETURN emp_count; END;

34. Use Function:

sql Copy code

SELECT get_employee_count();

35. Transaction Control - Begin, Commit, Rollback:

sql Copy code

BEGIN; UPDATE employees SET salary = 70000 WHERE name = 'Alice'; COMMIT; BEGIN;
UPDATE employees SET salary = 70000 WHERE name = 'Alice'; ROLLBACK;

Aggregation Functions

36. Count:
sql Copy code

SELECT COUNT(*) FROM employees;

37. Sum:

sql Copy code

SELECT SUM(salary) FROM employees;

38. Average:

sql Copy code

SELECT AVG(salary) FROM employees;

39. Min:

sql Copy code

SELECT MIN(salary) FROM employees;

40. Max:

sql Copy code

SELECT MAX(salary) FROM employees;

String Functions

41. Concatenate:

sql Copy code

SELECT CONCAT(name, ' - ', position) FROM employees;

42. Substring:

sql Copy code


SELECT SUBSTRING(name, 1, 3) FROM employees;

43. Upper and Lower:

sql Copy code

SELECT UPPER(name), LOWER(name) FROM employees;

44. Length:

sql Copy code

SELECT LENGTH(name) FROM employees;

45. Replace:

sql Copy code

SELECT REPLACE(name, 'a', 'A') FROM employees;

Date Functions

46. Current Date:

sql Copy code

SELECT CURRENT_DATE;

47. Current Time:

sql Copy code

SELECT CURRENT_TIME;

48. Date Add:

sql Copy code


SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);

49. Date Sub:

sql Copy code

SELECT DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY);

50. Extract:

sql Copy code

SELECT EXTRACT(YEAR FROM CURRENT_DATE);

Data Manipulation

51. Insert Data with Select:

sql Copy code

INSERT INTO employees (id, name, position, salary) SELECT id, name, position,
salary FROM employees_backup;

52. Update Multiple Rows:

sql Copy code

UPDATE employees SET salary = salary + 5000 WHERE position = 'Developer';

53. Delete with Condition:

sql Copy code

DELETE FROM employees WHERE salary < 45000;

Advanced Joins

54. Self Join:


sql Copy code

SELECT e1.name AS Employee, e2.name AS Manager FROM employees e1, employees e2


WHERE e1.manager_id = e2.id;

55. Cross Join:

sql Copy code

SELECT e.name, d.name FROM employees e CROSS JOIN departments d;

56. Natural Join:

sql Copy code

SELECT e.name, d.name FROM employees e NATURAL JOIN departments d;

Advanced Subqueries

57. Correlated Subquery:

sql Copy code

SELECT name, salary FROM employees e1 WHERE salary > (SELECT AVG(salary) FROM
employees e2 WHERE e1.position = e2.position);

58. Exists:

sql Copy code

SELECT name FROM employees e WHERE EXISTS (SELECT 1 FROM departments d WHERE e.id
= d.id);

59. Not Exists:

sql Copy code

SELECT name FROM employees e WHERE NOT EXISTS (SELECT 1 FROM departments d WHERE
e.id = d.id);
Set Operations

60. Intersect:

sql Copy code

SELECT name FROM employees INTERSECT SELECT name FROM departments;

61. Except:

sql Copy code

SELECT name FROM employees EXCEPT SELECT name FROM departments;

Window Functions

62. Row Number:

sql Copy code

SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num FROM
employees;

63. Rank:

sql Copy code

SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank FROM employees;

64. Dense Rank:

sql Copy code

SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank FROM
employees;

65. NTILE:

sql Copy code


SELECT name, salary, NTILE(4) OVER (ORDER BY salary DESC) AS quartile FROM
employees;

66. Lag:

sql Copy code

SELECT name, salary, LAG(salary, 1) OVER (ORDER BY salary DESC) AS prev_salary


FROM employees;

67. Lead:

sql Copy code

SELECT name, salary, LEAD(salary, 1) OVER (ORDER BY salary DESC) AS next_salary


FROM employees;

68. First Value:

sql Copy code

SELECT name, salary, FIRST_VALUE(salary) OVER (ORDER BY salary DESC) AS top_salary


FROM employees;

69. Last Value:

sql Copy code

SELECT name, salary, LAST_VALUE(salary) OVER (ORDER BY salary DESC) AS


bottom_salary FROM employees;

Advanced Data Types

70. JSON Data Type:

sql Copy code

CREATE TABLE employees_json ( id INT PRIMARY KEY, details JSON );


71. Insert JSON Data:

sql Copy code

INSERT INTO employees_json (id, details) VALUES (1, '{"name": "Alice", "position":
"Manager", "salary": 60000}');

72. Select JSON Data:

sql Copy code

SELECT details->>'$.name' AS name FROM employees_json;

Common Table Expressions (CTE)

73. Simple CTE:

sql Copy code

WITH HighSalary AS ( SELECT * FROM employees WHERE salary > 50000 ) SELECT * FROM
HighSalary;

74. Recursive CTE:

sql Copy code

WITH RECURSIVE EmployeeHierarchy AS ( SELECT id, name, manager_id FROM employees


WHERE manager_id IS NULL UNION ALL SELECT e.id, e.name, e.manager_id FROM
employees e INNER JOIN EmployeeHierarchy eh ON e.manager_id = eh.id ) SELECT *
FROM EmployeeHierarchy;

More Complex Queries

75. Pivot Table:

sql Copy code

SELECT * FROM ( SELECT position, salary FROM employees ) AS SourceTable PIVOT (


AVG(salary) FOR position IN ([Manager], [Developer], [Designer]) ) AS PivotTable;

76. Unpivot Table:


sql Copy code

SELECT position, salary FROM PivotTable UNPIVOT ( salary FOR position IN (Manager,
Developer, Designer) ) AS UnpivotTable;

Data Security

77. Create User:

sql Copy code

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';

78. Grant Privileges:

sql Copy code

GRANT SELECT, INSERT ON sample_db.* TO 'new_user'@'localhost';

79. Revoke Privileges:

sql Copy code

REVOKE INSERT ON sample_db.* FROM 'new_user'@'localhost';

80. Drop User:

sql Copy code

DROP USER 'new_user'@'localhost';

Practice Projects

81. Create a Library Database:

sql Copy code

CREATE DATABASE library;

82. Create Books Table:


sql Copy code

CREATE TABLE books ( id INT PRIMARY KEY, title VARCHAR(100), author VARCHAR(100),
published_year INT );

83. Create Members Table:

sql Copy code

CREATE TABLE members ( id INT PRIMARY KEY, name VARCHAR(100), join_date DATE );

84. Create Loans Table:

sql Copy code

CREATE TABLE loans ( id INT PRIMARY KEY, book_id INT, member_id INT, loan_date
DATE, return_date DATE, FOREIGN KEY (book_id) REFERENCES books(id), FOREIGN KEY
(member_id) REFERENCES members(id) );

85. Insert Sample Data into Books:

sql Copy code

INSERT INTO books (id, title, author, published_year) VALUES (1, '1984', 'George
Orwell', 1949), (2, 'To Kill a Mockingbird', 'Harper Lee', 1960);

86. Insert Sample Data into Members:

sql Copy code

INSERT INTO members (id, name, join_date) VALUES (1, 'John Doe', '2023-01-15'),
(2, 'Jane Smith', '2023-03-22');

87. Insert Sample Data into Loans:

sql Copy code

INSERT INTO loans (id, book_id, member_id, loan_date, return_date) VALUES (1, 1,
1, '2023-06-01', '2023-06-15'), (2, 2, 2, '2023-06-05', '2023-06-20');

88. Query to Find All Loans:


sql Copy code

SELECT * FROM loans;

89. Query to Find Books Loaned by a Member:

sql Copy code

SELECT b.title, b.author FROM books b INNER JOIN loans l ON b.id = l.book_id WHERE
l.member_id = 1;

90. Query to Find Overdue Loans:

sql Copy code

SELECT m.name, b.title, l.loan_date, l.return_date FROM members m INNER JOIN loans
l ON m.id = l.member_id INNER JOIN books b ON l.book_id = b.id WHERE l.return_date
< CURRENT_DATE;

Advanced Practice

91. Dynamic SQL:

sql Copy code

SET @sql = 'SELECT name FROM employees WHERE salary > ?'; PREPARE stmt FROM @sql;
SET @salary = 50000; EXECUTE stmt USING @salary; DEALLOCATE PREPARE stmt;

92. Temporary Tables:

sql Copy code

CREATE TEMPORARY TABLE temp_employees AS SELECT * FROM employees WHERE salary >
50000;

93. Common Table Expressions (CTE) with Aggregation:

sql Copy code

WITH EmployeeCounts AS ( SELECT position, COUNT(*) AS count FROM employees GROUP


BY position ) SELECT * FROM EmployeeCounts;

94. Window Functions with Aggregation:

sql Copy code

SELECT name, salary, SUM(salary) OVER (PARTITION BY position) AS total_salary FROM


employees;

95. JSON Functions:

sql Copy code

SELECT JSON_EXTRACT(details, '$.name') AS name FROM employees_json;

96. XML Data Type and Functions:

sql Copy code

CREATE TABLE employees_xml ( id INT PRIMARY KEY, details XML ); INSERT INTO
employees_xml (id, details) VALUES (1, '<employee><name>Alice</name>
<position>Manager</position><salary>60000</salary></employee>'); SELECT
EXTRACTVALUE(details, '/employee/name') AS name FROM employees_xml;

97. Recursive CTE for Hierarchical Data:

sql Copy code

WITH RECURSIVE Subordinates AS ( SELECT id, name, manager_id FROM employees WHERE
manager_id IS NULL UNION ALL SELECT e.id, e.name, e.manager_id FROM employees e
INNER JOIN Subordinates s ON s.id = e.manager_id ) SELECT * FROM Subordinates;

98. Pivot and Unpivot:

sql Copy code

SELECT * FROM ( SELECT position, salary FROM employees ) AS SourceTable PIVOT (


AVG(salary) FOR position IN ([Manager], [Developer], [Designer]) ) AS PivotTable;

99. Create Index for Optimization:


sql Copy code

CREATE INDEX idx_position ON employees(position);

100. Use Explain to Analyze Query:


sql EXPLAIN SELECT * FROM employees WHERE salary > 50000;

These exercises should cover a broad range of SQL functionalities, from basic CRUD operations to
advanced querying techniques and database management. You can practice each of these to get a
solid understanding of SQL. If you need more specific examples or explanations, feel free to ask!

You might also like