0% found this document useful (0 votes)
24 views36 pages

3 Notes of 3 Unit

Uploaded by

Erugu Rahul
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views36 pages

3 Notes of 3 Unit

Uploaded by

Erugu Rahul
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 36

lOMoARcPSD|43668078

3 - NOtes of 3 unit

DBMS Old QPs (Jawaharlal Nehru Technological University, Hyderabad)

Scan to open on Studocu

Studocu is not sponsored or endorsed by any college or university


Downloaded by Erugu Rahul ([email protected])
lOMoARcPSD|43668078

What Is SQL?
The first thing is to know what SQL is. SQL, or Structured Query Language, is a programming language. Like any
language – programming or natural – it is used to communicate, to talk. SQL is designed to talk to a database.
We do that using sentences that we call queries, which are SQL commands for retrieving data from the
database.

dataset, and then we’re off to writing and explaining basic SQL queries.

Dataset
The dataset consists of two tables. The first one is shown below; you can create this table by copying and
running this query from GitHub.

id first_name last_name Department salary

1 Paul Garrix Corporate 3,547.25

2 Astrid Fox Private Individuals 2,845.56

3 Matthias Johnson Private Individuals 3,009.41

4 Lucy Patterson Private Individuals 3,547.25

5 Tom Page Corporate 5,974.41

6 Claudia Conte Corporate 4,714.12

7 Walter Deer Private Individuals 3,547.25

8 Stephanie Marx Corporate 2,894.51

9 Luca Pavarotti Private Individuals 4,123.45

10 Victoria Pollock Corporate 4,789.53

Like any table, it has a name: employees. Each table has columns which also have names. They describe what
data each column contains.

The columns and data in the above table are:

 id – The unique ID of the employee and the table’s primary key.


 first_name – The employee’s first name.
 last_name – The employee’s last name.
 department – The employee’s department.
 salary – The employee’s monthly salary, in USD.

All this tells us that this table is a list of a company’s employees and their salaries. There is also data on the
employees’ departments. All employees work in the sales division, where the department can be either Corporate

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

or Private Individuals. In other words, the employees sell the company’s products to companies and private
individuals.

The other table in the dataset is named quarterly_sales. It is shown below, and the query for creating it is here.

employee_id q1_2022 q2_2022 q3_2022 q4_2022

8 3,471.41 14,789.25 3,478.34 1,254.23

4 5,417.81 12,846.23 8,741.54 3,589.99

10 1,547.52 1,269.66 1,478.65 2,474.33

1 8,715.55 8,465.65 24,747.82 3,514.36

3 12,774.51 24,784.31 12,223.34 8,451.51

2 4,989.23 5,103.22 4,897.98 5,322.05

7 18,415.66 15,279.37 14,634.44 14,445.12

6 2,498.63 8,741.45 3,997.65 2,497.21

5 6,349.74 7,555.55 6,944.35 7,788.01

9 4,485.36 4,101.50 8,787.45 7,648.90

The columns are:

 employee_id – The unique ID of the employee. Also, a foreign key referencing the column id from the
table employees.
 q1_2022 – The sales made by that employee in the first quarter of 2022.
 q2_2022 – The sales made by that employee in the second quarter of 2022.
 q3_2022 – The sales made by that employee in the third quarter of 2022.
 q4_2022 – The sales made by that employee in the fourth quarter of 2022.

In general, this table is a list of each quarter’s sales made by every employee shown in the first table.

The basic form of an SQL query includes three clauses: SELECT, FROM, and WHERE.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

The SELECT clause speci昀椀es the columns that you want to retrieve from the database. For example, if you
want to retrieve all columns from a table, you can use the asterisk (*) symbol.
The FROM clause speci昀椀es the table or tables from which you want to retrieve data.
The WHERE clause is used to 昀椀lter the data based on speci昀椀c conditions. For example, if you want to retrieve
only those records where the value in a particular column is greater than a certain value, you can use the
WHERE clause.
Here is an example of a basic SQL query:
SELECT *
FROM table_name
WHERE column_name = 'value';
This query retrieves all columns from the table named table_name where the value in the column
named column_name is equal to 'value'.

In SQL, UNION, INTERSECT, and EXCEPT are set operators that allow you to combine or exclude rows from
two or more tables
 UNION: The UNION operator combines the results of two or more SELECT statements into a single result set. It
removes duplicate rows by default. If you want to include duplicates, you can use the UNION ALL operator
instead of UNION.
 INTERSECT: The INTERSECT operator returns only the rows that are common to both SELECT statements. It
also removes duplicate rows by default.
 EXCEPT: The EXCEPT operator returns only the rows that are unique to the 昀椀rst SELECT statement. It also
removes duplicate rows by default.
Here is an example of how to use these operators:

SELECT column1, column2, ...

FROM table1

UNION [ALL]

SELECT column1, column2, ...

FROM table2

[INTERSECT | EXCEPT]

SELECT column1, column2, ...

FROM table3;

A nested query is a query that appears inside another query, and it helps retrieve data from multiple tables or
apply conditions based on the results of another query. There are two types of nested queries: independent and
correlated. In independent nested queries, the execution of the inner query is independent of the outer query,
but the result of the inner query is used in the execution of the outer query. In correlated nested queries, the
output of the inner query depends on the row that is currently being executed in the outer query.
Here is an example of a nested query that uses the WHERE clause

SELECT column1, column2, ...

FROM table1
WHERE column1 IN (SELECT column1 FROM table2 WHERE condition);

This query retrieves all columns from table1 where the value in column1 is equal to any value returned by
the inner query.

Aggregation operators are used to perform calculations on a set of values and return a single value. The
most commonly used aggregation operators are:

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

 COUNT: This operator returns the number of rows in a table or the number of non-null values in a column.
 SUM: This operator returns the sum of all the values in a column.
 AVG: This operator returns the average of all the values in a column.
 MIN: This operator returns the minimum value in a column.
 MAX: This operator returns the maximum value in a column.

Here is an example of how to use these operators:

SELECT COUNT(column_name) FROM table_name;

SELECT SUM(column_name) FROM table_name;

SELECT AVG(column_name) FROM table_name;

SELECT MIN(column_name) FROM table_name;


SELECT MAX(column_name) FROM table_name;

NULL value is a 昀椀eld with no value. If a 昀椀eld in a table is optional, it is possible to insert a new record or
update a record without adding a value to this 昀椀eld. Then, the 昀椀eld will be saved with a NULL value. Note that a
NULL value is di昀昀erent from a zero value or a 昀椀eld that contains spaces 1.
To test for NULL values in SQL, you can use the IS NULL and IS NOT NULL operators instead of comparison
operators such as =, <, or > .
Here is an example of how to use these operators:
SELECT column_names

FROM table_name
WHERE column_name IS NULL;

SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;

integrity constraints are rules that help ensure the accuracy and reliability of data in the database. They
ensure that certain conditions are met when data is inserted, updated, or deleted. While primary key, unique,
and foreign key constraints are commonly discussed and used, SQL allows for more complex constraints
through the use of CHECK and custom triggers. Here are some examples of complex integrity constraints:
1. Using CHECK Constraints: Ensuring a range: You might want a column to only have values within a certain
range. Example: CREATE TABLE Employees ( ID INT PRIMARY KEY, Age INT CHECK (Age
>= 18 AND Age <= 30) ); Pattern matching: Ensure data in a column matches a particular format.
Example: CREATE TABLE Students ( ID INT PRIMARY KEY, Email VARCHAR(255) CHECK
(Email LIKE '%@%.%') );
2. Composite Primary and Foreign Keys: These are cases where the uniqueness or referential integrity
constraint is applied over more than one column. Example: CREATE TABLE OrderDetails ( OrderID
INT, ProductID INT, Quantity INT, PRIMARY KEY (OrderID, ProductID), FOREIGN
KEY (OrderID) REFERENCES Orders(OrderID), FOREIGN KEY (ProductID)
REFERENCES Products(ProductID) );

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

3. Using Stored Procedures: Sometimes, instead of direct data manipulation on tables, using stored procedures
can help maintain more complex integrity constraints by wrapping logic inside the procedure. For instance, you
could have a procedure that checks several conditions before inserting a record.
4. Using Triggers: A trigger is a procedural code in a database that automatically executes in response to certain
events on a particular table or view. Essentially, triggers are special types of stored procedures that run
automatically when an INSERT, UPDATE, or DELETE operation occurs. A trigger is a prede昀椀ned action that the
database automatically executes in response to certain events on a particular table or view. Triggers are
typically used to maintain the integrity of the data, automate data-related tasks, and extend the database
functionalities. When implementing complex constraints, it’s crucial to strike a balance. While they can ensure
data integrity, they can also add overhead to the database system and increase the complexity of the schema
and the operations performed on it. Proper documentation and understanding of each constraint’s purpose are
essential.

A trigger is a procedure which is automatically invoked by the DBMS in response to changes to the database, and is
specified by the database administrator (DBA). A database with a set of associated triggers is generally called an
active database.

Parts of trigger
A triggers description contains three parts, which are as follows −

 Event − An event is a change to the database which activates the trigger.


 Condition − A query that is run when the trigger is activated is called as a condition.
 Action −A procedure which is executed when the trigger is activated and its condition is true.

Use of trigger
Triggers may be used for any of the following reasons −

 To implement any complex business rule, that cannot be implemented using integrity constraints.
 Triggers will be used to audit the process. For example, to keep track of changes made to a table.
 Trigger is used to perform automatic action when another concerned action takes place.

Types of triggers
The different types of triggers are explained below −

 Statement level trigger − It is 昀椀red only once for DML statement irrespective of number of rows a昀昀ected
by statement. Statement-level triggers are the default type of trigger.
 Before-triggers − At the time of de昀椀ning a trigger we can specify whether the trigger is to be 昀椀red before a
command like INSERT, DELETE, or UPDATE is executed or after the command is executed. Before triggers are
automatically used to check the validity of data before the action is performed. For instance, we can use
before trigger to prevent deletion of rows if deletion should not be allowed in a given case.
 After-triggers − It is used after the triggering action is completed. For example, if the trigger is associated
with the INSERT command then it is 昀椀red after the row is inserted into the table.
 Row-level triggers − It is 昀椀red for each row that is a昀昀ected by DML command. For example, if an UPDATE
command updates 150 rows then a row-level trigger is 昀椀red 150 times whereas a statement-level trigger is
昀椀red only for once.

Create database trigger


To create a database trigger, we use the CREATE TRIGGER command. The details to be given at the time of creating a
trigger are as follows −

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

 Name of the trigger.


 Table to be associated with.
 When trigger is to be 昀椀red: before or after.
 Command that invokes the trigger- UPDATE, DELETE, or INSERT.
 Whether row-level triggers or not.
 Condition to 昀椀lter rows.
 PL/SQL block is to be executed when trigger is 昀椀red.

The syntax to create database trigger is as follows −

CREATE [OR REPLACE] TRIGGER triggername


{BEFORE|AFTER}
{DELETE|INSERT|UPDATE[OF COLUMNS]} ON table
[FOR EACH ROW {WHEN condition]]
[REFERENCE [OLD AS old] [NEW AS new]]
BEGIN
PL/SQL BLOCK
END.

A database with a set of triggers is known as an active database. Due to the overall complexity involved
in understanding the impacts of different triggers, maintaining these databases is extremely tough.
Before executing the query in such a database, the DBMS checks to see if the specific trigger provided
in the query that updates the database is activated.

Multiple triggers can be activated within a single statement at once. If the trigger is active, the condition
section is executed first, followed by the action part if the stated condition is true.

In this case, the DBMS randomly executes each of the triggers. When an action phase of a trigger is
executed, it might either activate other triggers or the same trigger that initiated the action. The term
“recursive trigger” refers to a sort of trigger that triggers itself. Although the DBMS executes such
trigger chains in a predetermined manner, it has an impact on the idea of comprehension.

Let’s Understand the concept more thoroughly…

ACTIVE DATABASES

An active database is one that has an event-driven structure, which is typically implemented in the
process of Event Condition Action rules which can respond to events both inside and outside the
database.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Source: Active Databases

An active database system (ADBS) monitors events of interest and, when they arise, initiates a prompt
response.

It’s commonly used for security monitoring, alerting, information gathering, and authorization.

ADVANTAGES OF ACTIVE DATABASE

CHARACTERISTICS OF ACTIVE DATABASE

 It has all of the principles of a traditional database, such as data modeling capabilities, query
language, and so on.

 It includes all typical database tasks such as data definition, data manipulation, storage
management, and so on.

 It detects the occurrence of events.

 It must be able to assess situations and carry out actions. This implies that rule execution must be
implemented.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

 It assists in the development and administration of ECA rules.

TRIGGERS

A trigger is a database administrator-defined procedure that is automatically invoked by the database


management system (DBMS) in reaction to database changes (DBA). A database with a set of
associated triggers is generally called an active database.

Source: Triggers

PARTS OF TRIGGER-

Event

An event is a database change that activates the trigger. A triggering event is the SQL statement that
fires a trigger.
An INSERT, UPDATE, or DELETE statement are the example for a specific table that can be its
triggering event.

Restriction

A trigger restriction specifies a Boolean statement that must be TRUE for the trigger to activate. If the
trigger restriction is FALSE, the trigger action will not be executed. A trigger restriction is an option for
triggers which are activated for each row. Its goal is to govern the execution of a trigger on a conditional
basis. A trigger restriction is provided using a WHEN clause. It is an optional component of trigger.

Action

A trigger action is the technique that contains the SQL statements and PL/SQL code that will be
invoked when a triggering statement is delivered and the trigger restriction is TRUE.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

TYPES OF TRIGGERS

Different types of triggers are classified into three categories -

A. Level triggers-

Level trigger has two types i.e. Row Level Trigger and Statement Level Trigger that are explained below
-

1. Row Level Trigger

 A row-level trigger triggers once for each row affected by the triggering event. Row level trigger uses
a FOR EACH ROW clause in its triggering statement always.

 Data-related operations including data auditing and data validation derive from row-level triggers.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Syntax for creating row level trigger

2. Statement Level Trigger

Whenever a triggering event occurs on a database, a statement-level trigger is triggered, irrespective of


how many rows are affected.

Key points to remember -

 Statement level triggers are default triggers that can be created once a trigger is created without
requiring use for each row statement.

 Statement level trigger fires for only once for each triggering event.

 It also fires once if no rows are impacted.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Syntax of creating a statement-level trigger

DEMO-

CODE:

OUTPUT:

B. Event Triggers -

Event triggers are categorized into three types that are DDL, DML and database triggers. Operations
performed by them are listed below -

1. DDL triggers

 SQL Server’s DDL triggers are triggered by various data definition language (DDL) events such as
Create, Alter, Drop, Grant, etc,. DDL triggers are only activated once the DDL statements that set
them off have been executed.

 INSTEAD OF triggers cannot be used with DDL triggers.

 Events that affect local or global temporary tables and stored procedures do not activate DDL
triggers.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

2. DML triggers

Source: DML Triggers

 DML triggers are a form of stored method that takes place automatically whenever a data
manipulation language (DML) event occurs that affects the table or view specified in the trigger.

 INSERT, UPDATE, and DELETE statements are examples of DML events.

3. DATABASE triggers

 Database triggers are triggered by the execution of any database operation, such as LOGON,
LOGOFF, SHUTDOWN, SERVERERROR, and so on.

DEMO-

CODE:

OUTPUT (before updating):

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

To get the salary information:

CODE:

OUTPUT:

C. Timing Triggers -

1. Before trigger

 A Before Trigger is a sort of trigger which executes automatically before a specific operation on the
table actually occurs.

 Before triggers are used to validate data before it is accepted into the table and to evaluate values
before they are deleted from the table.

2. After trigger

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

 An after trigger is a sort of trigger that fires automatically after a specific action on the table.

 After triggers are used to update data in a table after a change occurs.

DEMO-

CODE:

OUTPUT:

ADVANTAGES

Some of the advantages of using MySQL triggers are listed below:

1. Trigger can assist us in automating data changes.

2. Triggers can provide a way to check the database’s data integrity.

3. It is useful for identifying errors in database layers.

4. Facilitates data auditing.

5. It allows us to reuse queries that have already been written.

6. Plays a major role in the detection of database faults.

7. Triggers can be used to log an event and can also store the information on the table.

DISADVANTAGES

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

The disadvantages of using MySQL triggers are listed below:

1. Tends to increase the site’s overhead expenses.

2. It only provides expanded validations; not all validations are available through SQL triggers.

3. If we activate the incorrect trigger by accident, we risk losing the original data.

4. It takes a long time to troubleshoot difficulties caused by triggers.

5. Even if there is a minor inaccuracy in the query, it can generate logical issues in the application.

USESS OF TRIGGER-

1. To establish data consistency, duplicate data to separate files.

2. It’s useful for keeping track of the changes to a table.

3. Triggers are used to perform automatic actions when another action is triggered.

4. Enforces referential integrity, Synchronous replication of tables and Preventing invalid


transactions.

Now, let’s start writing SQL queries.

1. Selecting All Columns From One Table


This query is useful when you want to quickly get all the columns from a table without writing every column in
the SELECT statement.

Query
SELECT *

FROM employees;

Explanation

Whenever you want to select any number of columns from any table, you need to use the SELECT statement. You
write it, rather obviously, by using the SELECT keyword.

After the keyword comes an asterisk (*), which is shorthand for “all the columns in the table”.

To specify the table, use the FROM clause and write the table’s name afterward.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Output

The query’s output is the whole table employees, as shown below.

id first_name last_name department salary

1 Paul Garrix Corporate 3,547.25

2 Astrid Fox Private Individuals 2,845.56

3 Matthias Johnson Private Individuals 3,009.41

4 Lucy Patterson Private Individuals 3,547.25

5 Tom Page Corporate 5,974.41

6 Claudia Conte Corporate 4,714.12

7 Walter Deer Private Individuals 3,547.25

8 Stephanie Marx Corporate 2,894.51

9 Luca Pavarotti Private Individuals 4,123.45

10 Victoria Pollock Corporate 4,789.53

2. Selecting One Column From One Table


You can use this query when you only need one column from the table..

Query
SELECT first_name

FROM employees;

Explanation

The approach is similar to the previous query. However, this time, instead of an asterisk, we write the specific
column name in SELECT. In this case, it’s the column first_name.

The second line of the query is the same: it references the table in the FROM clause.

Output

The query returns the list of employees’ first names.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

first_name

Paul

Astrid

Matthias

Lucy

Tom

Claudia

Walter

Stephanie

Luca

Victoria

3. Selecting Two Columns From One Table


This query is useful when selecting two (or more) columns from one table.

Query
SELECT first_name,

last_name

FROM employees;

Explanation

Again, the approach is similar to earlier examples. To select two columns, you need to write their names
in SELECT. The important thing is that the columns need to be separated by a comma. You can see in the example
that there’s a comma between the columns first_name and last_name.

Then, as usual, reference the table employees in FROM.

Output

Now the query shows the employees’ full names.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

first_name last_name

Paul Garrix

Astrid Fox

Matthias Johnson

Lucy Patterson

Tom Page

Claudia Conte

Walter Deer

Stephanie Marx

Luca Pavarotti

Victoria Pollock

4. Selecting Two (or More) Columns From One Table


and Filtering Using Numeric Comparison in WHERE
Knowing this SQL query will allow you to filter data according to numeric values. You can do that using
comparison operators in the WHERE clause.

Here’s the overview of the SQL comparison operators.

Comparison Operator Description

= Is equal to

> Is greater than

< Is less than

>= Is greater than or equal to

<= Is less than or equal to

<> Is not equal to

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Query
SELECT

first_name,

last_name,

salary

FROM employees

WHERE salary > 3800;

Explanation

The query actually selects three, not two columns. It’s the same as with two columns: simply write them
in SELECT and separate them with commas.

Then we reference the table in FROM.

Now, we need to show only employees with a salary above 3,800. To do this, you need to use WHERE. It’s a clause
that accepts conditions and is used for filtering the output. It goes through the table and returns only the data that
satisfies the condition.

In our case, we’re looking for salaries ‘greater than’ a certain number. In other words, a condition using the >
comparison operator.

To set the condition, we write the column name in WHERE. Then comes the comparison operator, and after that,
the value that the data has to be greater than. This condition will now return all the salaries that are above 3,800.

Output

The query returns four employees and their salaries. As you can see, they all have salaries above 3,800.

first_name last_name salary

Tom Page 5,974.41

Claudia Conte 4,714.12

Luca Pavarotti 4,123.45

Victoria Pollock 4,789.53

5. Selecting Two Columns and Filtering Using an


Equality Condition in WHERE
Once again, this basic SQL query example is useful when you want to select several columns but not all the rows
from the table. Now you want to find the values that are the same as the value from the condition. For that, you
need the equality condition (=).

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Query
SELECT

first_name,

last_name

FROM employees

WHERE first_name = 'Luca';

Explanation

The query selects employees’ first and last names.

However, we want to show only employees whose name is Luca. For this, we again use WHERE. The approach is
similar to the previous example: we use WHERE, write the column name, and use the comparison operator. This
time, our condition uses the equal sign (=).

In other words, the values in the column first_name have to be equal to Luca. Also, when the condition is not a
number but a text or a date/time, it has to be written in single quotes (''). That’s why our condition is written as
'Luca', not simply Luca.

Output

The output shows there’s only one employee named Luca, and his full name is Luca Pavarotti.

first_name last_name

Luca Pavarotti

6. Selecting Two Columns and Ordering by One


Column
Here’s another basic SQL query example that you’ll find useful. It can be used whenever you have to order the
output in a certain way to make it more readable.

Ordering or sorting the output is done using the ORDER BY clause. By default, it orders the output in ascending
order. This works alphabetically (for text data), from the lowest to the highest number (for numerical data), or
from the oldest to the newest date or time (for dates and times).

Query
SELECT

first_name,

last_name

FROM employees

ORDER BY last_name;

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Explanation

We again select employees’ first and last names. But now we want to sort the output in a specific way. In this
example, it’s by employees’ surname. To do that, we use ORDER BY. In it, we simply write the column name.

We might add the keyword ASC after that to sort the output ascendingly. However, that’s not mandatory, as
ascending sorting is a default in SQL.

Output

The query returns a list of employees ordered alphabetically by their last names.

first_name last_name

Claudia Conte

Walter Deer

Astrid Fox

Paul Garrix

Matthias Johnson

Stephanie Marx

Tom Page

Lucy Patterson

Luca Pavarotti

Victoria Pollock

7. Selecting Two Columns and Ordering Descendingly


by One Column
This example is similar to the previous one and has the same purpose: sorting your SQL query output. However,
in this case, the data is ordered in descending order (Z to A, 10 to 1).

Query
SELECT

first_name,

last_name

FROM employees

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

ORDER BY last_name DESC;

Explanation

The query is almost exactly the same as in the previous example. The only difference is we’re ordering the output
by the employee’s name descendingly.

To do that, put the keyword DESC after the last_name column in the ORDER BY clause.

Output
first_name last_name

Victoria Pollock

Luca Pavarotti

Lucy Patterson

Tom Page

Stephanie Marx

Matthias Johnson

Paul Garrix

Astrid Fox

Walter Deer

Claudia Conte

You can see that the output is ordered the way we wanted.

8. Selecting Two Columns From One Table and


Ordering Descendingly by Two Columns
Sorting an SQL query can get more sophisticated. It’s common to sort data by two or more columns, which you’re
probably already familiar with as an Excel or Google Sheets user. The same can be done in SQL.

Query
SELECT

first_name,

last_name,

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

salary

FROM employees

ORDER BY salary DESC, last_name ASC;

Explanation

With this query, we’re building on the previous example; we want to sort the output by the employee’s
salary and their last name. This time, we sort by salary descending and then by last name ascendingly.

We reference the column salary in ORDER BY and follow it with the keyword DESC. The DESC keyword indicates
descending order. Before the second ordering criteria, we need to put a comma. After it comes the second
criteria/column, which is last_name in this case. You can add or omit the keyword ASC to sort the output in
ascending order.

Note: The order of the columns in ORDER BY is important! The query written as it is above will first sort by
salary descendingly and then by the last name ascendingly. If you wrote ORDER BY last_name ASC, salary DESC, it
would sort by last name first and then by salary in descending order.

Output
first_name last_name salary

Tom Page 5,974.41

Victoria Pollock 4,789.53

Claudia Conte 4,714.12

Luca Pavarotti 4,123.45

Walter Deer 3,547.25

Paul Garrix 3,547.25

Lucy Patterson 3,547.25

Matthias Johnson 3,009.41

Stephanie Marx 2,894.51

Astrid Fox 2,845.56

The output is ordered by salary. When the salary is the same (green rows), the data is ordered alphabetically by
last name.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

9. Selecting Two Columns With a Complex Logical


Condition in WHERE
This example will again demonstrate how to filter output using WHERE. It will be a bit more advanced this time,
as we’ll use a logical operator. In SQL, logical operators allow you to test if the filtering condition is true or not.
They also allow you to set multiple conditions.

The three basic logical operators in SQL are AND, OR, and NOT. In the query below, we’ll use OR to get
salaries below 3,000 or above 5,000.

Query
SELECT

first_name,

last_name,

salary

FROM employees

WHERE salary > 5000 OR salary < 3000;

Explanation

We use this query to select the employee’s first name, last name, and salary from the table employees.

However, we want to show only those employees whose salaries are either above $5,000 or below $3,000. We
do that by using the logical operator OR and the comparison operators in WHERE.

We write the first condition in WHERE, where we reference the salary column and set the condition that the values
must be above 5,000. Then we use the OR operator, followed by the second condition. The second condition
again references the salary column and uses the ‘less than’ operator to return the values below 3,000.

Output
first_name last_name salary

Astrid Fox 2,845.56

Tom Page 5,974.41

Stephanie Marx 2,894.51

The query returns only three employees and their salaries, as they are the only ones that satisfy the conditions.

10. Simple Computations on Columns


In this example, we’ll show how you can perform simple mathematical operations on the table’s columns.

We’ll use one of SQL’s arithmetic operators.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Arithmetic Operator Description

+ Addition

- Subtraction

* Multiplication

/ Division

% Modulo, i.e. returns the remainder of the integer division.

Query
SELECT

employee_id,

q1_2022 + q2_2022 AS h1_2022

FROM quarterly_sales;

Explanation

In the above query, we want to find the sales in the first half of 2022 for each employee.

We do it by first selecting the column employee_id from the table quarterly_sales.

Then we select the column q1_2022 and use the addition arithmetic operator to add the q2_2022 column. We also
give this new calculated column an alias of h1_2022 using the AS keyword.

Output
employee_id h1_2022

8 18,260.66

4 18,264.04

10 2,817.18

1 17,181.20

3 37,558.82

2 10,092.45

7 33,695.03

6 11,240.08

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

employee_id h1_2022

5 13,905.29

9 8,586.86

The output shows all the employees’ IDs and their respective sales in the first half of 2022.

11. Using SUM() and GROUP BY


This query uses the aggregate function SUM() with GROUP BY. In SQL, aggregate functions work on groups of
data; for example, SUM(sales) shows the total of all the values in the sales column. It’s useful to know about this
function when you want to put data into groups and show the total for each group.

Query
SELECT

department,

SUM(salary) AS total_salaries

FROM employees

GROUP BY department;

Explanation

The purpose of the above query is to find the total salary amount for each department. This is achieved in the
following way.

First, select the column department from the table employees. Then, use the SUM() function. As we want to add the
salary values, we specify the column salary in the function. Also, we give this calculated column the
alias total_salaries.

Finally, the output is grouped by the column department.

Note: Any non-aggregated column appearing in SELECT must also appear in GROUP BY. But this is logical
– the whole purpose is to group data by department, so of course we’ll put it in GROUP BY.

Output
department total_salaries

Corporate 21,919.82

Private Individuals 17,072.92

The output shows all the departments and the sum of total monthly salary costs by department.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

12. Using COUNT() and GROUP BY


Here’s another basic SQL query that uses an aggregate function. This time, it’s COUNT(). You can use it if you
want to group data and show the number of occurrences in each group.

Query
SELECT

department,

COUNT(*) AS employees_by_department

FROM employees

GROUP BY department;

Explanation

We want to show the number of employees by department.

Select the department from the table employees. Then, use the COUNT() aggregate function. In this case, we use
the COUNT(*) version, which counts all the rows. We give the column the alias employees_by_department.

As a final step, we group the output by the department.

Note: COUNT(*) counts all the rows, including those with the NULL values. If you don’t want to include the
possible NULL values in your output, use the COUNT(column_name) version of the function. We can
use COUNT(*) here because we know no NULL values are in the table.

Output
department employees_by_department

Corporate 5

Private Individuals 5

There are two departments, each with five employees.

13. Using AVG() and GROUP BY


The AVG() function calculates the average value. You can use this query whenever you want to group data and
show the average value for each group.

Query
SELECT

department,

AVG(salary) AS average_salary

FROM employees

GROUP BY department;

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Explanation

The query is the same as the last one, only this time we use the AVG() function, as we want to calculate the
average salary by department.

We select the department, use AVG() with the salary column, and group the output by department.

Output
department average_salary

Corporate 4,383.96

Private Individuals 3,414.58

The output shows two departments and their average salaries.

14. Using MIN() and GROUP BY


This is another query that combines an aggregate function with GROUP BY. Use it whenever you want to find the
minimum values for each group.

Query
SELECT

department,

MIN(salary) AS minimum_salary

FROM employees

GROUP BY department;

Explanation

Again, we use the same query and change only the aggregate function.

The query calculates the minimum salary by department.

Output
department minimum_salary

Corporate 2,894.51

Private Individuals 2,845.56

The output shows the departments and the lowest salary in each department.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

15. Using MAX() and GROUP BY


This example shows how to use the MAX() aggregate function to show the highest value within each group.

Query
SELECT

department,

MAX(salary) AS maximum_salary

FROM employees

GROUP BY department;

Explanation

We use the query to show the highest salary in each department, together with the department’s name.

You already know how this works. The query is the same as in the previous example, but now it uses
the MAX() function.

Output
department maximum_salary

Corporate 5,974.41

Private Individuals 4,123.45

The output shows us the highest salaries in the Corporate and Private Individuals department.

16. Using SUM(), WHERE, and GROUP BY


This one might seem more complicated, but it’s still a basic SQL query. It is used when you want to show the
total values for each group but you want to include only specific rows in the sum.

Query
SELECT

department,

SUM(salary) AS total_salary

FROM employees

WHERE salary > 3500

GROUP BY department;

Explanation

The query will show the total salary by department, but it will include only individual salaries above $3,500 in the
sum. Here’s how it works.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

First, of course, select the departments and use SUM() with the salary column from the table employees. You
learned that already.

Then use the WHERE clause to specify the values you want included in the sum. In this case, it’s where the column
salary is higher than 3,500. In other words, the query will now sum only values above 3,500.

Finally, group by department.

Output
department total_salary

Private Individuals 11,217.95

Corporate 19,025.31

These totals now include only salaries above $3,500. Compare this to the output from the eleventh example
(shown below; mind the different sorting), and you’ll see that the totals are lower. It’s logical, as the below output
also includes salaries equal to or less than $3,500.

department total_salaries

Corporate 21,919.82

Private Individuals 17,072.92

17. Using COUNT(), WHERE, and GROUP BY


This is also one of the queries we advise you to include in your SQL toolbox. It’s similar to the previous one, as it
uses an aggregate function. This type of query can be used when you want to show the number of occurrences
for each group.

Query
SELECT

department,

COUNT(*) AS number_of_employees

FROM employees

WHERE salary > 3500

GROUP BY department;

Explanation

This is similar to the previous query, only it uses the COUNT() aggregate function. Its goal is to show the
department name and the number of employees in that department, but it counts only the employees with a
salary above $3,500.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

To achieve that, first select the department. Then use COUNT(*) to count all the rows within each department.
Each row equals one employee. We are free to use this version of the COUNT() function because we know there
are no NULL rows.

Now, use WHERE to include only employees with salaries higher than $3500 in the counting.

In the end, you only need to group data by department.

Output
department number_of_employees

Private Individuals 3

Corporate 4

The output shows there are three employees in the Private Individuals department paid above $3,500 and there
are four such employees in the Corporate department.

Some employees are obviously missing, as they should be. We learned in one of the previous examples that
there are five employees in each department.

18. Accessing Data in Two Tables Using INNER JOIN


This type of query is used whenever you want to access data from two or more tables. We’ll show you INNER
JOIN, but it’s not the only join type you can use.

Here’s a short overview of join types in SQL. These are the full join names. What’s shown in the brackets can be
omitted in the query and the join will work without it.

SQL Join Type Description

(INNER) JOIN Returns the matching values from both tables.

LEFT (OUTER) JOIN Returns all the values from the left table and only the matching values from the right table.

RIGHT (OUTER) JOIN Returns all the values from the right table and only the matching values from the left table.

FULL (OUTER) JOIN Returns all the rows from both tables.

CROSS JOIN Returns all combinations of all rows from the first and second table, i.e. the Cartesian product.

Query
SELECT

e.id,

e.first_name,

e.last_name,

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

qs.q1_2022 + qs.q2_2022 + qs.q3_2022 + qs.q4_2022 AS total_sales_2022

FROM employees e

JOIN quarterly_sales qs

ON e.id = qs.employee_id;

Explanation

This query wants to show each employee’s ID and name, together with their total sales in 2022.

For that, it uses JOIN, as the required data is in both tables of our dataset.

Let’s start explaining the query with the FROM clause. This is familiar: to use the data from the table employees, you
need to reference it in FROM. We also give this table an alias (‘e’), so that we don’t have to write the table’s full
name later on.

After that, we use the JOIN keyword to join the second table. We do that by referencing the
table quarterly_sales in JOIN and giving it the alias ‘qs’.

Now comes the ON condition. It is used to specify the columns on which the two tables will be joined. Usually,
those are the columns that store the same data in both tables. In other words, we join the tables on the primary
and foreign keys. A primary key is a column (or columns) that uniquely defines each row in the table. A foreign
key is a column in the second table that refers to the first table. In our example, the column id from the
table employees is its primary key. The column employee_id from the table quarterly_sales is the foreign key, as it
contains the value of the column id from the first table.

So we’ll use these columns in ON, but we also need to specify which table each column is from. Remember, we
gave our tables aliases. This will come in handy here, as we won’t need to write the tables’ full names – only one
letter for each table. We write the first table’s alias (instead of its full name), separate them with a dot, and then
the column name. We put the equal sign, the second table’s alias, and the column name.

Now that we have two tables joined, we are free to select any column from both tables. We select id, first_name,
and last_name from employees. Then we add each column from the table quarterly_sales showing the quarterly
sales and name it total_sales_2022. Each column in SELECT also has the table alias before it, with the alias and
the column name separated by a dot.

Note: When joining tables, using the table names in front of the column names in SELECT is advisable. This
will make it easier to determine which column comes from which table. Also, the tables can have columns of the
same name. However, table names can become wordy, so giving them aliases in JOIN is also advisable. That
way, you can use much shorter aliases (instead of the full table names) in front of the column names.

Output
id first_name last_name total_sales_2022

8 Stephanie Marx 22,993.23

4 Lucy Patterson 30,595.57

10 Victoria Pollock 6,770.16

1 Paul Garrix 45,443.38

3 Matthias Johnson 58,233.67

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

id first_name last_name total_sales_2022

2 Astrid Fox 20,312.48

7 Walter Deer 62,774.59

6 Claudia Conte 17,734.94

5 Tom Page 28,637.65

9 Luca Pavarotti 25,023.21

The output lists each employee and shows their total sales in 2022.

19. Accessing Data in Two Tables Using INNER JOIN


and Filtering Using WHERE
Of course, you can filter data in joined tables the same way as you can with only one table. You’ll again need
the WHERE clause.

Query
SELECT

e.id,

e.first_name,

e.last_name,

qs.q4_2022-qs.q3_2022 AS sales_change

FROM employees e

JOIN quarterly_sales qs

ON e.id = qs.employee_id

WHERE qs.q4_2022-qs.q3_2022 < 0;

Explanation

We tweaked the previous query to show the decrease in sales between the third and the fourth quarter.

Here’s how we did it. Just as we did earlier, we selected the employee’s ID and name.

We subtracted one quarter from another to calculate the change between the quarters. In this case, it’s the
column with the fourth quarter sales minus the third quarter sales. This new column is named sales_change.

The tables are joined exactly the same way as in the previous example.

To show only the sales decrease, we use the WHERE clause. In it, we again subtract the third quarter from the
fourth and set the condition that the result has to be below zero, i.e. a decrease. As you noticed, WHERE comes
after the tables are joined.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Output
id first_name last_name sales_change

8 Stephanie Marx -2,224.11

4 Lucy Patterson -5,151.55

1 Paul Garrix -21,233.46

3 Matthias Johnson -3,771.83

7 Walter Deer -189.32

6 Claudia Conte -1,500.44

9 Luca Pavarotti -1,138.55

The output shows all the employees who had a sales decrease in the last quarter and the amount of that
decrease.

20. Accessing Data in Two Tables Using INNER JOIN,


Filtering Using WHERE, and Sorting With ORDER BY
You probably noticed that outputs in our two latest examples are sorted a bit randomly. This is not something you
have to put up with – you can order data with ORDER BY even when using two tables.

Query
SELECT

e.id,

e.first_name,

e.last_name,

qs.q4_2022

FROM employees e

JOIN quarterly_sales qs

ON e.id = qs.employee_id

WHERE qs.q4_2022 > 5000

ORDER BY qs.q4_2022 DESC;

Explanation

The query is not much different from the previous one. We again select the employee’s ID and name. We also
add the sales in the last quarter of the year. The tables are then joined the same way as earlier. We use
the WHERE clause to show only quarterly sales above $5,000.

Downloaded by Erugu Rahul ([email protected])


lOMoARcPSD|43668078

Also, we want to sort the output. This is not different from what we learned earlier: simply write the column name
in ORDER BY and sort it the way you want. In our example, we are sorting from the highest to the lowest quarterly
sales.

Output
id first_name last_name q4_2022

7 Walter Deer 14,445.12

3 Matthias Johnson 8,451.51

5 Tom Page 7,788.01

9 Luca Pavarotti 7,648.90

2 Astrid Fox 5,322.05

The output shows all five employees whose sales were above $5,000 in the last three months of 2022.

Downloaded by Erugu Rahul ([email protected])

You might also like