2.1-Dql Adc - Part 1
2.1-Dql Adc - Part 1
2
SQL
3
STRUCTURED QUERY LANGUAGE
STRUCTURED QUERY LANGUAGE
DDL — Data Definition Language
Core concept:
DDL is used to define or change the structure of database
objects like tables.
It answers:
• What table should exist?
• What columns should it have?
• Should we remove or change a table?
DATA SELECTION
1 Ali IT 50000
SELECT dept, COUNT(*)
2 Sara HR 70000 1) FROM Employees
3 Ahmed IT 60000 FROM Employees
4 Ayesha HR 65000 i dep
WHERE salary >= 55000 d
name
t
salary
5 Bilal IT 55000
1 Ali IT 50000
3 Ahmed IT 60000
HAVING COUNT(*) > 1 4 Ayesha HR 65000
5 Bilal IT 55000
ORDER BY
total_employees DESC;
8
FROM → WHERE → GROUP BY → HAVING →
SELECT → ORDER BY
i dep
name salary
d t
1 Ali IT 50000
SELECT dept, COUNT(*)
2 Sara HR 70000 2) WHERE salary >= 55000
3 Ahmed IT 60000 FROM Employees
4 Ayesha HR 65000
WHERE salary >= 55000 id name dept salary
5 Bilal IT 55000
2 Sara HR 70000
GROUP BY dept
3 Ahmed IT 60000
HAVING COUNT(*) > 1 4 Ayesha HR 65000
5 Bilal IT 55000
ORDER BY
total_employees DESC;
9
FROM → WHERE → GROUP BY → HAVING →
SELECT → ORDER BY
i dep
name salary
d t
1 Ali IT 50000
SELECT dept, COUNT(*) 3) GROUP BY dept
2 Sara HR 70000
1 Ali IT 50000
SELECT dept, COUNT(*) 4) HAVING COUNT(*) > 1
2 Sara HR 70000
ORDER BY
total_employees DESC;
11
FROM → WHERE → GROUP BY → HAVING →
SELECT → ORDER BY
i dep
name salary
d t [Link] dept, COUNT(*) AS
1 Ali IT 50000
SELECT dept, COUNT(*) total_employees
2 Sara HR 70000
ORDER BY
total_employees DESC;
12
FROM → WHERE → GROUP BY → HAVING →
SELECT → ORDER BY
i dep
name salary
d t 6) ORDER BY total_employees
1 Ali IT 50000
SELECT dept, COUNT(*) DESC
2 Sara HR 70000
ORDER BY
total_employees DESC;
13
SELECT
SELECT column1, column2 Student
id name age
FROM table_name;
1 Ali 20
2 Sara 21
3 Ahmed 19
name age
SELECT name, age Ali 20
FROM students;
Sara 21
Ahmed 19
14
SELECT * (ALL COLUMNS)
Select all attributes from a Students
table.
id name age
1 Ali 20
2 Sara 21
3 Ahmed 19
Students
SELECT *
id name age
FROM students;
1 Ali 20
2 Sara 21
3 Ahmed 19 15
SELECT TABLE.* (ALL COLUMNS FROM ONE TABLE)
employee table
Useful in joins.
id name age position
Students
id name age 1 Hassan 30 Manager
1 Ali 20 2 Fatima 26 Engineer
2 Sara 21
3 Usman 28 Accountant
3 Ahmed 19
employee table
SELECT E.*
id name age position
FROM employees E;
1 Hassan 30 Manager
2 Fatima 26 Engineer
3 Usman 28 Accountant 16
SELECT [Link]-NAME (EXPLICIT ATTRIBUTE
(TABLE ALIAS USED))
Clear and safe when multiple employee table
tables exist.
id name age position
Students
id name age 1 Hassan 30 Manager
1 Ali 20 2 Fatima 26 Engineer
2 Sara 21
3 Usman 28 Accountant
3 Ahmed 19
employee table
SELECT [Link]
name
FROM employees E;
Hassan
Fatima
Usman 17
SELECT WITH ALIAS (AS)
Rename column in output (for employee table
readability).
id name age position
Students
id name age 1 Hassan 30 Manager
1 Ali 20 2 Fatima 26 Engineer
2 Sara 21
3 Usman 28 Accountant
3 Ahmed 19
employee table
SELECT name AS 'Employee Name'
Employee Name
FROM employees;
Hassan
Fatima
Usman 18
SELECT WITH DISTINCT (REMOVE DUPLICATES)
id name department
1 Ali IT
2 Sara HR
3 Ahmed IT
4 Zain Finance
5 Hina HR
6 Bilal IT
departm
id name
ent
SELECT DISTINCT *
1 Ali IT
FROM employees;
2 Sara HR
3 Ahmed IT
20
4 Zain Finance
SELECT WITH AGGREGATE FUNCTIONS
(SUM, COUNT, AVG, MAX, MIN) id name salary
1 Ali 50000
2 Sara 60000
3 Ahmed 55000
4 Zain 70000
5 Hina 60000
21
SELECT WITH SCALAR EXPRESSION
Calculation in output.
id name salary
1 Ali 50000
2 Sara 60000
3 Ahmed 55000
4 Zain 70000
bonus
SELECT salary * 0.10 AS bonus 5000
FROM employees; 6000
5500
7000
22
SIMPLE FROM (SINGLE TABLE)
SELECT column1, column2 Student
id name age
FROM table_name;
1 Ali 20
2 Sara 21
3 Ahmed 19
name age
SELECT name, age Ali 20
FROM student;
Sara 21
Ahmed 19
23
FROM WITH TABLE ALIAS
Short name for table (very employee table
common in joins).
Students id name age position
id name age 1 Hassan 30 Manager
1 Ali 20 2 Fatima 26 Engineer
2 Sara 21 3 Usman 28 Accountant
3 Ahmed 19
employee table
SELECT E.*
id name age position
FROM employees E;
1 Hassan 30 Manager
2 Fatima 26 Engineer
3 Usman 28 Accountant 24
FROM WITH MULTIPLE TABLES (CROSS JOIN –
CARTESIAN PRODUCT)
Combines every row of both employee
tables.
Students id name age position
id name age
1 Hassan 30 Manager
1 Ali 20
2 Fatima 26 Engineer
2 Sara 21
3 Usman 28 Accountant
3 Ahmed 19
SELECT *
FROM students, employee;
25
FROM WITH MULTIPLE TABLES (CROSS JOIN –
CARTESIAN PRODUCT)
student_ student_ student_ emp_na
emp_id emp_age position
id name age me
Manage
1 Ali 20 1 Hassan 30
r 3 students × 3
1 Ali 20 2 Fatima 26
Enginee employees = 9 rows
r
Account
1 Ali 20 3 Usman 28
ant
Manage
2 Sara 21 1 Hassan 30
r
Enginee
2 Sara 21 2 Fatima 26
r
Account
2 Sara 21 3 Usman 28
ant
Manage
3 Ahmed 19 1 Hassan 30
r
Enginee
3 Ahmed 19 2 Fatima 26
r 26
Account
3 Ahmed 19 3 Usman 28
ant
FROM WITH JOINS [ WE WILL STUDY JOINS IN NEXT
LECTURE IN DETAIL ]
Join Type FROM Clause Syntax
27
OUTER JOIN (General) FROM A OUTER JOIN B ON condition
1. SIMPLE WHERE [WHERE WITH COMPARISON
OPERATORS (=, >, <, >=, <=, <>)]
The WHERE clause is used to filter rows based on a
condition.
Table: Employees SELECT *
ID Name Salary FROM Employees
WHERE salary > 50000;
1 Ali 40000
2 Sara 60000
3 Ahmed 55000 ID Name Salary
4 Ayesha 30000 2 Sara 60000
3 Ahmed 55000
28
2. WHERE WITH AND
All conditions must be true.
SELECT *
Table: Employees FROM Employees
WHERE dept = 'IT' AND salary > 60000;
ID Name Dept Salary
1 Ali IT 50000
2 Sara HR 70000
3 Ahmed IT 65000
4 Ayesha IT 40000
31
5. WHERE WITH BETWEEN
BETWEEN is used to filter values within a range
(inclusive). SELECT *
Table: Employees FROM Employees
ID Name Dept Salary WHERE salary BETWEEN 45000
AND 65000;
1 Ali IT 50000
2 Sara HR 70000
3 Ahmed IT 65000
4 Ayesha IT 40000
1 Ali IT 50000
2 Sara HR 70000
3 Ahmed IT 65000
4 Ayesha IT 40000
SELECT *
FROM students
WHERE age BETWEEN 18 AND 21;
SELECT *
FROM students
WHERE age IN (18, 21, 22);
34
7. WHERE WITH NOT IN
SELECT *
Table: Employees
FROM Employees
ID Name Dept Salary
WHERE dept NOT IN
1 Ali IT 50000
('IT', 'HR');
2 Sara HR 70000
3 Ahmed IT 65000
4 Ayesha IT 40000
SELECT *
Table: Employees
FROM Employees
ID Name Dept Salary
WHERE Name LIKE
1 Ali IT 50000
'A%';
2 Sara HR 70000
3 Ahmed IT 65000
4 Ayesha IT 40000
3 Ahmed IT 65000
4 Ayesha IT 40000
[Link] WITH LIKE (PATTERN MATCHING)
37
9. WHERE WITH IS NULL
SELECT *
Table: Employees
FROM Employees
ID Name Dept Salary
WHERE dept IS NULL;
1 Ali IT 50000
2 Sara HR 70000
3 Ahmed IT 65000
4 Ayesha null 40000
10. WHERE with IS NOT NULL: not looking for null values
11. WHERE WITH SUBQUERY
SELECT Name
FROM Employees e
WHERE EXISTS ( Name
SELECT 1 Ali
FROM Projects p Ahmed
WHERE [Link] = [Link]
);
42
UNCORRELATED EXISTS
Inner query is not linked to outer query.
ID Name Department
SELECT Name, Department
1 Areeba CS FROM Students s
2 Bilal SE WHERE EXISTS (
SELECT 1
3 Hamza IT
FROM Students
WHERE Department = 'SE'
);
Name Department
In this case
Areeba CS Exist return Yes or No
Bilal SE
Hamza IT
43
CORRELATED EXISTS
Inner query is linked to the outer query.
SELECT Name
FROM Students s
Name
WHERE EXISTS (
SELECT 1 Areeba
FROM LibraryBooks l Hamza
WHERE [Link] = [Link]
); 45
[Link] WITH ALL
ALL compares a value with all values from a subquery.
2 Sara HR 70000 46
[Link] WITH ALL
ALL compares a value with all values from a subquery.
Table: Employees SELECT *
FROM Employees
ID Name Dept Salary WHERE salary > ALL (
1 Ali IT 50000 SELECT salary
FROM Employees
2 Sara HR 70000
WHERE dept = 'IT'
3 Ahmed IT 65000 );
4 Ayesha IT 40000
Subquery result (IT salaries):
ID Name Dept Salary 50000, 65000, 40000
salary > ALL means:
2 Sara HR 70000
Salary must be greater than every IT
salary
47
So, salary must be > 65000 (highest IT
salary)
14. WHERE WITH ARITHMETIC CONDITION
◦ Uses mathematical operations (+, −, *, /) in the WHERE
clause.
2 Sara HR 70000 48
3 Ahmed IT 65000
GROUP BY AND HAVING
1. BASIC GROUP BY (SINGLE COLUMN)
GROUP BY is used to group rows based on one column.
Dept
50
IT
HR
2. GROUP BY WITH MULTIPLE COLUMNS
Groups data based on more than one column.
Dept Total_Employees
IT 3 52
HR 1
3. GROUP BY WITH AGGREGATE FUNCTIONS
GROUP BY is used to group rows based on one column.
Dept Total_Salary
53
IT 155000
HR 70000
4. GROUP BY WITH WHERE (FILTER BEFORE
GROUPING)
WHERE filters rows first, then GROUP BY groups the
remaining data.
Table: Employees
ID Name Dept Salary SELECT Dept, AVG(Salary)
1 Ali IT 50000 AS Avg_Salary
2 Sara HR 70000 FROM Employees
3 Ahmed IT 65000
GROUP BY Dept
HAVING AVG(Salary) >
4 Ayesha IT 40000
60000;
Table: Employees
ID Name Dept Salary SELECT Dept, SUM(Salary)
1 Ali IT 50000 AS Total_Salary
2 Sara HR 70000 FROM Employees
3 Ahmed IT 65000 GROUP BY Dept
4 Ayesha IT 40000 HAVING SUM(Salary) >
100000;
◦ Uses more than one condition to filter groups after GROUP BY.
Table: Employees
SELECT Dept, SUM(Salary)
ID Name Dept Salary
AS Total_Salary, COUNT(*)
1 Ali IT 50000 AS Total_Employees
2 Sara HR 70000 FROM Employees
3 Ahmed IT 65000 GROUP BY Dept
4 Ayesha IT 40000 HAVING SUM(Salary) >
100000 AND COUNT(*) > 2;
◦ When GROUP BY is not used, the whole table is treated as one single group.
Table: Employees
SELECT SUM(Salary) AS
ID Name Dept Salary
Total_Salary
1 Ali IT 50000 FROM Employees
2 Sara HR 70000 HAVING SUM(Salary) >
3 Ahmed IT 65000 200000;
4 Ayesha IT 40000
•“If GROUP BY is
Total_Salary not used, HAVING
applies the
condition on the
225000
whole table as one
single group.” 59
5. GROUP BY WITH EXPRESSIONS
Table: Employees
SELECT Salary/10000 AS
ID Name Dept Salary
Salary_Group, COUNT(*)
1 Ali IT 50000 AS Total_Employees
2 Sara HR 70000 FROM Employees
3 Ahmed IT 65000 GROUP BY Salary/10000;
4 Ayesha IT 40000
•Expression = a
Salary_Group Total_Employees calculation (like
Salary/10000)
4 1
5 1 •GROUP BY can
6.5 1 group data based
7 1 on calculations, not 60
only columns
HOMEWORK : STUDY THIS: KEEP THIS IN MIND :
UNDERTSAND THIS
FROM → WHERE → GROUP BY → HAVING → SELECT →
ORDER BY
Execute a query in your free time while following this
sequence
61
HOMEWORK : STUDY THIS AS WELL
Aggregate functions like:
SUM()
AVG()
COUNT()
MAX()
MIN()
62
THANK YOU
Any Questions
[ all slides after this is – stated similar concepts that we studied
before ]
63