You are on page 1of 105

Click to edit Master title style

cc

Advanced Excel

Querying Microsoft SQL Server


Delivered By:
Kruti Jain, Business Analytics Consultant
| 1
The Purpose of this Class

This SQL course is provided for people with minimum understanding of


relational databases (Microsoft Access, Oracle Database, Microsoft SQL
Server, MySQL etc) who want to demystify relational database
management systems. The principles taught are common to all relational
database management systems. For the purposes of this SQL training
course, Microsoft SQL Server and Microsoft SQL Server Management
Studio will be used to illustrate the content of the course.

| 2
Course Outline
1 Introduction to DATABASE

2 Structured Querying Language

3 Relational Database

4 Structured Querying Language Data Types

5 Writing Basic Single Table SQL Queries

| 3
Course Outline
6 Performing Data Manipulation

7 Using CASE Expressions

8 AGGREGATING, GROUPING & HAVING

9 SET Operators

10 Creating SQL Views & STORED PROCEDURES

| 4
1

Introduction to Database
Definition, Concepts, Types

| 5
What is a Database?

A database is a collection of data in an organized format so that it can be easily


accessed, managed and updated.

Stored data can either be STRUCTURED data or UNSTRUCTURED data


Structured data is information displayed in Titled columns and rows which can
be easily ordered.
Unstructured data has no identifiable internal arrangement.

| 6
Database Management Systems

A database management system (DBMS) is system software for creating and


managing databases. The DBMS provides users and programmers with a systematic
way to create, retrieve, update and manage stored data (Database)

Types of DBMS
Flat file DBMS
Hierarchical DBMS
Relational DBMS
NoSQL DBMS

| 7
Relational DBMS

Data in relational databases is stored in different access control tables, each having a
key field that mainly identifies each row.

A Relational DBMS is a
database structured to
recognize relations
between stored items of
information

| 8
2

Structured Querying Language


Meaning, History, Benefits, Variants

| 9
What is SQL?

SQL (pronounced "ess-que-el")


stands for Structured Query
Language.

SQL is used to communicate with


the database.
According to ANSI (American
National Standard Institute),
It is the standard language for
querying RDBMS.

| 10
Why SQL?

Flat execute queries against a database Create new databases

Retrieve data from a database Create new tables in a database


Insert records in a database Execute stored procedures in a
database
Update records in a database

Delete records from a database Create views in a database

Set permissions on tables,


procedures, and views

| 11
Variants of SQL

There are varieties of relational database management systems. Examples include


Oracle, Sybase, MS SQL, IBM DB2 etc

Although most database systems use SQL, most of them also have their own
additional proprietary extensions that are usually only used on their system.
T-SQL is a dialect of standard SQL adopted by Microsoft as its language for
managing and manipulating data in Microsoft main relational database
management system (RDBMS) SQL Server

All variants of SQL understand the basic commands such as "Select", "Insert",
"Update", "Delete", "Create", and "Drop.
| 12
SQL Vendors

| 13
3

Relational Database
Explanation, Model, Features, Examples

| 14
Relational Database Management Systems

RDBMS is the basis for SQL, and for all modern database systems such as MS
SQL Server, IBM DB2, Oracle, MySQL, and Microsoft Access.

A relational database system contains one or more objects called TABLES.

A table is a collection of related data entries and it consists of columns and


rows.

| 15
RDBMS Contd

For example you cant store information on customer and order


information on the same table. Instead customer information and
order are stored in two related tables and then relationship between
the two tables is used to view corresponding customer information
at the same time from both tables

| 16
Relational Model

When working with relational database, its important to think of the relationships
between pieces of information.

When a database is created, it is


created based on a conceptual
model or schema

A Schema shows the logical view of


the entire DB. It reveals the
RELATIONSHIPS between OBJECTS

| 17
Relational Model

Do you understand
this DB Schema?

| 18
Relationship Keys

PRIMARY KEY:
Every Entity(table) must have a primary key
Primary key ensures uniqueness of each rows
Unique constraint does not allow for NULL values

FOREIGN KEY:
Constraint which enforces referential integrity
The foreign key references the table containing the primary key.

| 19
Relational Database Model Example

| 20
Another Model Example

| 21
Advantages of Relational Databases

Reduces Data redundancy


Easier to Store data
Easier to access database
Ensure Security
Avoids inconsistent Records

| 22
SQL Server as a RDBMS

An RDBMS stores information in tables representing single ENTITIES

For Example, CUSTOMER and SALE are separate entities.


RDBMS also stores the relationship between CUSTOMER Table and SALES Table.
| 23
Attributes and Rows

| 24
Attributes
Represents a property of an ENTITY

| 25
Rows
Represent an instance of an ENTITY. Also referred to as tuples

| 26
4

SQL Data Types


Meaning, Classification, Common types

| 27
Data Types
There are 3 main SQL data types

Character

Numbers

Dates

| 28
Common SQL Data Types
NUMERIC-A fixed precision and scale numbers
INT: Whole number values between -32,768 and 32,767
VARCHAR and nVARCHAR : Variable length alphanumeric data. i.e. Can
contain letters, numbers and special characters. It can also store up to 255
characters.
CHAR and nCHAR :Fixed length alphanumeric data. i.e. Can contain letters,
numbers and special characters.
DATETIME :Stores date and time combination.
REAL: Stores a small number with a floating decimal point.
| 29
5

Writing Basic SQL Queries


Create, Alter, Delete, Drop, Select

| 30
Create Statement
CREATE statement are used to create databases, and tables.

The CREATE database statement is used to create a database in SQL Server

The CREATE table statement is used to create a table in a database


Insert into
Insert into specified column
Add constraint

| 31
Create Table Statement
Tables are organized into rows and columns; and each table must have a name

Syntax:
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
....
);

The column name parameters specify the names of the columns of the table.
The data type parameter specifies what type of data the column can hold (e.g.
varchar, integer, decimal, date, etc.).
The size parameter specifies the maximum length of the column of the table.
| 32
SQL Constraints
SQL Constraints are used to specify rules for data in a table. Where there is any
deviation from the set constraint, any data action is aborted.

Constraint are usually specified when a table is being created (Within the CREATE
Statement), but can as well be specified after the table has been created (Using the
ALTER Statement).

There are six main types of constraints


Primary Key
Foreign Key
Not Null
Unique
Check
Default

| 33
Types of Constraints
NOT NULL - Indicates that a column cannot store NULL value

UNIQUE - Ensures that each row of a column must have a unique value

PRIMARY KEY - A combination of a NOT NULL and UNIQUE. Ensures that a column
(or combination of two or more columns) have a unique identity which helps to find
a particular record in a table more easily and quickly

FOREIGN KEY - Ensure the referential integrity of the data in one table to match
values in another table

CHECK - Ensures that the value in a column meets a specific condition

DEFAULT - Specifies a default value when specified none for this column

| 34
Constraints
PRIMARY KEY
Ensures that a column (or combination of two or more columns) have a unique identity
which helps to find a particular record in a table more easily and quickly

FOREIGN KEY
Ensure the referential integrity of the data in one table to match values in another table

Syntax
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);

| 35
Select Statement

| 36
Select Statement Basic
The select statement is used to query the database and retrieve selected data that
match the criteria that you specify.

SELECT Columnname1, Columnname2,


FROM tablename;

The columnname1, Columnname2, . that follow the SELECT keyword determine


which columns will be returned in the results .

The table name that follows the keyword FROM specifies the table that will be
queried to retrieve the desired results.

| 37
Try This
Selecting all columns from a table
Using the AdventureWorks Database, retrieve all information from the
HumanResource.Employee table.

Selecting one or more columns from the table


Using the AdventureWorks Database, retrieve Information regarding
BusinessEntityID, Jobtittle, Gender, Marital Status from
HumanResource.Employee table.

Tip: if you want to select all the fields (Columns) in the table, you can use
the syntax below
SELECT *
FROM tablename;
| 38
SQL Joins Clause
A JOIN clause is used to combine rows from two or more tables, based on a
related column between them

It allow you to link data from two or more tables together into a single query
result--from one single SELECT statement.

Simply put, "Join" makes relational database systems "relational".

A "Join" can be recognized in a SQL SELECT statement if it has more than one
table after the FROM keyword.

| 39
SQL Joins Structure

| 40
SQL-Inner Join
The INNER JOIN keyword selects records that have matching values in both
tables.

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

The ON keyword forms the basis upon which the join is established. i.e. the
common key between both tables.

| 41
My Example

I would like to see all the customers who have orders and all the
orders that have corresponding customers. For each customer
show me the customer account number and for each order,
show me the order date

| 42
Your Exercise

FOR each employee in the person.person table. I would like to


know the employee firstname, lastname, job title, gender and
maritalstatus

| 43
SQL Left Outer Join
The LEFT JOIN keyword returns all records from the left table (table1), and
the matched records from the right table (table2).

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

The result is NULL from the right side, if there is no match.

| 44
My Example

Extract information on all customers and customers who have


made orders. I would also like to see the account number for
every customer and if the customer has an order.

| 45
SQL Right Outer Join
The Right JOIN keyword returns all records from the right table (table2), and
the matched records from the left table (table1).

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

The result is NULL from the left side, if there is no match.

| 46
SQL Full Outer Join
The full outer join returns all the rows from the left and right table, even if
there are no matches in both tables.

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;

The resultis NULL from the left side, if there is no match.

| 47
Multi Table Join

Please provide information on all Customers who made orders


and the product they ordered, including the product colour. I
would also like information on the Year, Month name and
Quarter of the order, how many days it took to ship the order
and the Revenue for each order, arrange by colour.

| 48
Keyed in the Order of SELECT Statement

The select statement is the main statement used to retrieve data in T-


SQL. Depending on what you are interested in, the order of a select
statement (keyed in order) is shown below;

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

| 49
Logical Query Processing
However the database engine does not use the keyed in order to
process your query, it uses the logical query processing order (this is a
conceptual interpretation order), shown below;

FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY

| 50
WHERE Clause
This allows user to retrieve specific information from a rows by filtering
through the column

SELECT <Column_Name>
FROM <Table_Name>
WHERE<column_name, operator value>

| 51
WHERE Clause
The WHERE clause filter the rows returned by the FROM phrase.

With the WHERE clause the following operators can be used:


= Equal
<> Not equal
> Greater than
< Less than
>= Greater than or equal
<= Less than or equal
BETWEEN Between an inclusive range
LIKE Search for a pattern
IN To specify multiple possible values for a column
| 52
Try This
I Would Like Information On All Marketing Assistant In Human Resources.
Employee Table

I Would Like All Information On All Employees With Jobtitle Like Research

I Would Like The Following Information On Female Employees :


Id,jobtittle,gender,marital Status Hired Between 01/01/2001 And 31/12/2003

I Would Like The Following Information On Male Employees :


Id,jobtittle,gender,marital Status Hired Before 31/12/2003

I Would Like The Following Information On Male Employees :


Id,jobtittle,gender,marital Status, In The Following Jobtitle; Design Engineer,
Marketing Assistant And Tool Designer
| 53
My Example & Your Exercise

FOR each employee in the person.person table. I would like to


know the employee firstname, lastname, job title, gender and
maritalstatus

| 54
AND/OR Operator
Using AND / OR

AND operator displays record if both the first condition and the
second condition is true

OR operator displays records if either the first condition or the


second condition is true

| 55
ORDER BY
Order by clause imposes an order on the results of the query

Multiple columns can be ordered

User can specify whether to order in ascending or descending


order

Ascending is default

| 56
Try This

Extract employee Login ID, Job Title, Birth Date, Gender and
Marital Status of all employees that are single or Male arranged
by their job title

| 57
6

Date Manipulation
Date Extraction, Date Difference, Date Formatting

| 58
Date Manipulation
These functions are used for working with Datetime Datatype
Common Date functions Description
YEAR( ) These three functions return an integer date part of
MONTH( ) datetime type value. They allow users to create unique
date format
DAY( )
DATEPART( )/DATENAME( ) Returns an unit of a datetime value.
DATEPART returns an integer while
DATENAME returns a string character
DATEDIFF( ) Returns the difference in integer value between two
dates in the interval units provided
GETDATE( ) Function returns the current date and time as a date type

| 59
Try This

Use employee table to derive the age of each employee at time


of hiring, also retrieve information on how long employees with
job title LIKE marketing have been employed

| 60
7

String Manipulation
Uppercase, Lowercase, Text Length, Concatenation

| 61
String Manipulation
String functions are used to manipulate and replace characters values
COMMON STRING FUNCTION

UPPER() Simply converts a character string to all lowercases or all uppercases characters.
LOWER()
LEN() Returns all the length of a string as an integer
LEFT() Both function return the substring specified size.
RIGHT () LEFT function returns character from the left-most part of the string , counting
the characters to the right.
The RIGHT () function starts at the right-most character and counts to the left
returning the specified number of characters
SUBSTRING () it starts at a position and counts to right , returning a substring of a specified
length. It allows you to extract a substring from anywhere within a character
string
CONCAT() Joins together two or more characters together.

| 62
Try This

Return first name and last name of employee, I would also like
to see the first 2 letters of First name in Lowercase and the last
2 Characters of the Last name in Uppercase.

Please create email address for all employees using their


FirstName and LastName and adding @pairview.co.uk at the
end, ensuring the full email address is in lower case.

| 63
8

Mathematical Calculation
Simple Operations, Functions, Nested Formula

| 64
Mathematical Functions
Arithmetic operators
Addition: +
Subtraction: -
Multiplication: *
Division: /
Modulus: %

Common Mathematical Functions


POWER ( ), CAST ( ), SQRT ( ), SUM ( ), MIN ( ), ROUND ( ), RAND( ), CEILING ( ),
FLOOR ( ), ABS

| 65
Try This

Using Sales order detail table. Calculate the revenue as the


order quantity and unit price. Also calculate profit. If profit is
2.5% of the revenue divided by the SQRT of order quantity

| 66
9

Aggregating, Grouping & Having


Simple Operations, Functions, Nested Formula

| 67
Aggregate Function
Aggregate function results a single value, calculated from values in a column.

Aggregate Function

COUNT(*) / COUNT(>column<) Return the number of rows

SUM() Returns the sum

AVG() Returns the average value

MAX() Returns the largest value

MIN() Returns the smallest value

| 68
GROUP BY Clause
Group by clause is used in conjunction with aggregate function to
group the result set by one or more columns.

Any other field in the select list that is not aggregated must be
included in the Group By clause

SELECT [Color],
AVG([ListPrice])
FROM [Production].[Product]
GROUP BY [Color]

| 69
Try This
Derive the total value of orders from the Sales Order Detail table

Calculate the total volume, average volume, maximum volume, minimum


volume of each number of orders where order quantity is greater than 3
from Sales Order Detail Table.

Derive the total number of products, maximum price for each colour and the
sum of list price from the product table

Calculate Total Profit, Average Profit, Max Profit, Min Profit and total
Number of product where List price is less than 10 for all White Products

| 70
HAVING Clause
In SQL, WHERE clause cannot be used to filter aggregate function
as its written before GROUP BY.

Hence any filtering condition based on aggregate function must


be specified after the GROUP BY

HAVING is used to filter based on the result of Aggregate function

| 71
My Example
Please provide the average list price of products, grouped by colour
only where the average price is greater than $1200.
SELECT [Color],
AVG([ListPrice])
FROM [Production].[Product]
GROUP BY [Color]
HAVING AVG([ListPrice]) > 1200

| 72
Try This
Please provide the count of employees, grouped by Gender only
where the marital status is Married

Please provide me with volume of products sold, and revenue


generated grouped by their product category name where volume
sold is greater than 65000

| 73
10

CASE Expressions
Making conditional statements in a simple way

| 74
CASE Expression
This is a conditional statement which returns a value based on the
evaluation of a statement.

Case statement can have 2 forms:


Simple expression
A simple case expression only returns equivalent values, if theres is no
match, then the else clause is evaluated.

Comparison or searched expression


Comparison or searched CASE expression contain comparison operators

| 75
CASE Expression
Simple expression
A simple case expression only returns equivalent values, if theres is no
match, then the else clause is evaluated.

Comparison or searched expression


Comparison or searched CASE expression contain comparison operators

CASE
WHEN [Expression] THEN [result]
WHEN [Expression] THEN [result]
...
ELSE
END

| 76
Try This

Change the Gender from M to Male and F to Female, From the Human
Resource Employee Table

We want to rename our Marital Status with the appropriate names, so


that our Marital Status reads Married or Single From the Human Resource
Employee Table

Get the names of our employees, and their ages at the point of hire.
Categorize them into five different age bands. Give me what age band has
the highest number of employees.

| 77
Try This

I would like to increase the List Price of product that are multi, silver,
silver /black, blue by 15% and for other colors by 5%.

Group the List price into 3 categories (i.e. Low, medium and High)
using the criteria of your choice.

Please produce a report categorizing employees based on the rate of


their pay. I would like to see rate of pay categorized as : Low rate,
Medium rate and High rate

| 78
11

Set Operators
Union, Union ALL, Intersection

| 79
UNION
The UNION operator allows user to draw information from two or
more table that have the same structure. This means

The tables must all have the same number of columns


Corresponding columns must all have identical data types and lengths.

Implement a new price pitch on the product table base on the


colour of the item
If red increase by 10%
If yellow decrease by 5%
If silver/black ,blue and silver, take the square root of the price and
double the value | 80
Stacking Results with UNION ALL

Using Sales order detail table : increase price by 15% for all
transaction where more than 3 item were purchased and for
transactions where less than 3 items were purchased give a
discount of 25%

Implement a new price pitch on Production.Product table base


on the colour of the item
If red increase by 10%
If black decrease by 25%
If silver/black and silver, take the square root of the price and
double the value.
| 81
Except & Intersection

| 82
Set Operation (Intersection)

The INTERSECT operator return all rows present in all


source tables .
EXAMPLE
I would like to know all ProductID from product table that
has been ordered in SalesOrderDetail table

Retrieve data for Employee table and Jobcandidate table


where BusinessEntityID is a match in both tables.

| 83
Set Operation (Except)

The Except operator returns rows that appear in the


first table but DO NOT appear in the second table
EXAMPLE

Return all Product ID that have been Ordered in sales order


detail table

I would like to know the BusinessEntityID in the job


candidate table but not present in Employee table.

| 84
RANK Function

The Except operator returns rows that appear in the


first table but DO NOT appear in the second table
EXAMPLE
Return all Product ID that have been Ordered in sales order
detail table

I would like to know the BusinessEntityID in the job


candidate table but not present in Employee table.

| 85
12

Subqueries
Segmenting SQL queries

| 86
Subqueries

A subquery is a query that is nested inside a SELECT, INSERT,


UPDATE, or DELETE statement, or inside another subquery. A
subquery can be used anywhere an expression is allowed.

A subquery is also called an inner query or inner select, while


the statement containing a subquery is also called an outer
query or outer select.

| 87
How to use subqueries

As a Filter in a where Clause: From the Production.Product Table,


please identify the product(s) with the maximum ListPrice

As an AGGREGATE in Subquery: From the Production.Product Table,


please identify Which product(s) have their list price greater than or
equals to the average list price

As an ATTRIBUTE in the select list: We want to see the avg list price
of products and at the same time the list price that are <= avg list price
from the Production.Product Table

| 88
How to use subqueries

As a Filter in a where Clause: From the Production.Product Table,


please identify the product(s) with the maximum ListPrice

As an AGGREGATE in Subquery: From the Production.Product Table,


please identify Which product(s) have their list price greater than or
equals to the average list price

As an ATTRIBUTE in the select list: We want to see the avg list price
of products and at the same time the list price that are <= avg list price
from the Production.Product Table

| 89
Subquery with Exist Predicate

The EXISTS key word accepts the results of a subquery as its


input. If the subquery satisfies the EXISTS condition, rows will be
returned. If it doesn't satisfy it, then no rows will be returned.

EXISTS keyword, is used in the WHERE clause portion of your


query.

| 90
13

Stored Procedure
Gaining time with stored queries

| 91
Stored Procedure

A STORED PROCEDURE is a collection of SQL statement


that are stored under a name and can be executed with
the name its stored with.
Why Use It
Allows user to execute the same code for frequently used
Queries
Maintain records
Process Business logic

| 92
Advantages of Stored Procedure
Executes faster as the code is already complied and resides in
memory
Reduces Network Traffic as you execute a PROC command
statement rather than batch of SQL queries across the network
Enforces Consistency
Provides Security. Users can be given permission to execute a stored
procedure that modifies data rather than permission directly
modifying the table

| 93
Creating Procedure Statement
To create a stored procedure, you use a Create PROCEDURE command
CREATE PROCEDURE ProcedureName
AS
BEGIN
SQL STATEMENTS
END;

To execute Stored Procedure, the name of procedure precedes an


EXECUTE command.
EXECUTE ProcedureName OR ProcedureName

| 94
14

Creating Views
Generating a virtual table for queried dataset

| 95
SQL Views

A view in SQL is a virtual table based on the result-set of a SQL statement.


It contains rows and columns, just like a real table. The fields in a view are
fields from one or more real tables in the database.

You can add SQL functions, WHERE, and JOIN statements to a view and
present the data as if the data were coming from one single table.

Key Point: The database engine recreates the data, using the view's SQL
statement, every time a user queries a view, hence A view always shows
up-to-date data from the database

| 96
Types of SQL Views

Partitioned Views: they join horizontally partitioned data from


a set of tables, making the data appear as one table

System views are used by SQL Server to expose catalog


metadata for SQL Server

Index View is one in which the definition of the view has


already been computed with the data store just like a table

| 97
Create and Alter SQL View

CREATE VIEW view_name AS ALTER VIEW view_name AS

SELECT column_name(s) SELECT column_name(s)


FROM table_name1 FROM table_name1
JOIN table_name2 JOIN table_name2
WHERE condition WHERE condition

Example:
Please create a view on the Production.product table that gives us
a list of products that takes one day to manufacture

| 98
Purpose of SQL Views

To focus, simplify, and customize the perception each user has


of the database
Read only access
As a security mechanism by allowing users to access data
through the view, without granting the users permissions to
directly access the underlying base tables
To provide a backward compatible interface to emulate a table
whose schema has changed

| 99
15

Syntax Summary
Refresh your memory

| 100
Remember your Syntax

SELECT column1, column2....columnN


FROM table_name;
SELECT Statement

SELECT *
FROM table_name;

SELECT column1, column2....columnN


FROM table_name WHERE Clause
WHERE CONDITION;

SELECT column1, column2....columnN


FROM table_name IN Clause
WHERE column_name IN (val-1, val-2,...val-N);

| 101
Remember your Syntax
SELECT column1, column2....columnN
FROM table_name BETWEEN Clause
WHERE column_name BETWEEN val-1 AND val-2;

SELECT column1, column2....columnN


FROM table_name LIKE Clause
WHERE column_name LIKE { PATTERN };

SELECT column1, column2....columnN


FROM table_name AND/OR Clause
WHERE CONDITION-1 {AND|OR} CONDITION-2;

SELECT column1, column2....columnN


FROM table_name ORDER BY Clause
WHERE CONDITION
ORDER BY column_name {ASC|DESC};
| 102
Remember your Syntax

SELECT AGGREGATE_FUNCTION(column_name)
FROM table_name GROUP BY Clause
WHERE CONDITION
GROUP BY column_name;

SELECT AGGREGATE_FUNCTION(column_name)
FROM table_name
WHERE CONDITION HAVING Clause
GROUP BY column_name
HAVING (arithematic function condition);

| 103
Remember your Syntax

CREATE DATABASE database_name; CREATE db

DROP DATABASE database_name; DROP db

CREATE TABLE table_name(


column1 datatype,
column2 datatype,
column3 datatype,
CREATE table
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);

DROP TABLE table_name; DROP table

| 104
Remember your Syntax

ALTER TABLE table_name


{ADD|DROP|MODIFY} column_name {data_ype} ALTER table

ALTER TABLE table_name RENAME TO new_table_name;

INSERT INTO table_name( column1, INSERT INTO


column2....columnN)
VALUES ( value1, value2....valueN);

USE database_name; USE db

| 105

You might also like