Use Advanced Structured Query Language: Module Title: Nominal Duration
Use Advanced Structured Query Language: Module Title: Nominal Duration
Compiled by Date: / /
A Left Exception Join returns only the rows from the left table that do not have a match in the right table.
Columns in the result table that come from the right table have the null value.
A Right Exception Join returns only the rows from the right table that do not have a match in the left table.
Columns in the result table that come from the left table have the null value.
A Cross Join returns a row in the result table for each combination of rows from the tables being joined (a
Cartesian product).
Subqueries:
A Subquery or Inner query or Nested query is a query within another SQL query, and embedded within the WHERE
clause.
- You use subqueries to break down a complex query into a series of logical steps and, as a result, to solve a
problem with single statements.
- Each select statement in the subquery has its own:
. select list
. where clause
A subquery is used to return data that will be used in the main query as a condition to further restrict the data to be
retrieved.
Subqueries can be used with the SELECT, INSERT, UPDATE, and DELETE statements (or inside another
subquery) along with the operators like =, <, >, >=, <=, IN, BETWEEN etc.
There are a few rules that subqueries must follow:
Subqueries must be enclosed within parentheses.
A subquery can have only one column in the SELECT clause, unless multiple columns are in the main query
for the subquery to compare its selected columns.
An ORDER BY cannot be used in a subquery, although the main query can use an ORDER BY. The
GROUP BY can be used to perform the same function as the ORDER BY in a subquery.
Subqueries that return more than one row can only be used with multiple value operators, such as the
IN operator.
A subquery cannot be immediately enclosed in a set function.
The BETWEEN operator cannot be used with a subquery; however, the BETWEEN can be used within
the subquery.
Example: For each department that has more than five employees, retrieve the department number and the number
of its employees who are making more than $40,000.
SELECT DNUMBER, COUNT (*) FROM DEPARTMENT, EMPLOYEE
WHERE DNUMBER=DNO AND SALARY>40000 AND
DNO IN (SELECT DNO FROM EMPLOYEE
GROUP BY DNO
HAVING COUNT (*) > 5)
GROUP BY DNUMBER
Compiled by Date: / /
Union, Intersect, Except
With the help of set operators, the results of individual table expressions can be combined. This type of combination
is called UNION. SQL supports other set operators besides the UNION operator.
Here is the complete list:
UNION
UNION ALL
INTERSECT
INTERSECT ALL
EXCEPT
EXCEPT ALL
Combining tables with union
The UNION operator is used to combine the result-set of two or more SELECT statements.
- Each SELECT statement within the UNION must have the same number of columns and similar data types.
- Also, the columns in each SELECT statement must be in the same order.
Syntax: SELECT <column_name_list> FROM <table_name> UNION SELECT <column_name_list>
FROM <table_name>
Note: The UNION operator selects only distinct values by default. To allow duplicate values, use UNION ALL.
Rules for using UNION
The following rules must be applied to use the UNION operator:
. The SELECT clauses of all relevant table expressions must have the same number of expressions
. Each SELECT statement within the UNION must have similar data types. If this applies, the table
expressions are union compatible.
. An ORDER BY clause can be specified only after the last table expression. The sorting is performed on the
entire end result; after all intermediate results have been combined.
. The SELECT clauses should not contain DISTINCT because SQL automatically removes duplicate rows when
using UNION.
Combining with INTERSECT
INTERSECT returns all rows that are both in the result of query1 and in the result of query2. Duplicate rows are
eliminated unless ALL is specified.
If two table expressions are combined with the INTERSECT operator, the end result consists of those rows that appear
in the results of both table expressions.
Example: SELECT * FROM EMPLOYEE INTERSECT SELECT * FROM PROJECT;
- Just as with the UNION operator, duplicate rows are automatically removed from the result.
Combining with EXCEPT
EXCEPT returns all rows those are in the result of query1 but not in the result of query2. Again, duplicates are
eliminated unless ALL is specified.
If two table expressions are combined with the EXCEPT operator, the end result consists of only the rows that appear
in the result of the first table expression but do not appear in the result of the second.
Example: SELECT * FROM EMPLOYEE EXCEPT SELECT * FROM PROJECT;
Just as with the UNION operator, duplicate rows are automatically removed from the result.
Compiled by Date: / /
1.6. Basics of the SELECT Statement and conditional selection
The SELECT statement is used to select data from a database.
The result is stored in a result table, called the result-set.
Syntax of the basic select statement includes: Select-From-Where Statements
SELECT desired attributes
FROM one or more tables
WHERE condition about tuples of the tables
A conditional selection statement allows to choose a set of statements for execution depending on a condition.
If statement and switch...case statements are the two conditional selection statements.
SELECT
if (selectField1 = true) Field1 ELSE do not select Field1
if (selectField2 = true) Field2 ELSE do not select Field2
FROM Table
If the condition is true, statement1 and statement2 is executed; otherwise statement 3 and statement 4 is executed.
The expression or condition is any expression built using relational operators which either yields true or false
condition.
1.7. Operators in SQL
1.7.1. Comparison operators
A comparison (or relational) operator is a mathematical symbol or a keyword which is used to compare between
two values.
- Comparison operators are used in conditions that compare one expression with another.
- The result of a comparison can be TRUE, FALSE, or UNKNOWN.
- SQL Comparison operator is used mainly with the SELECT statement to filter data based on specific conditions.
Comparison operator Description
= equal to
<>, != is not equal to
< less than
> greater than
>= greater than or equal to
<= less than or equal to
In "Equivalent to any member of" test, Equivalent to "= ANY".
Not In Equivalent to "! = ANY".
All Compares a value with every value in a list
[Not] between [Not] greater than or equal to x and less than or equal to y.
Is [not]null Tests for nulls
Note: The != operator is converted to <> in the parser stage.
1.7.2. Boolean operators in SQL
Boolean Operators are simple words (AND, OR, or NOT) used as conjunctions to combine or exclude keywords in a search.
. When you want retrieving data using a SELECT statement, you can use logical operators in the WHERE clause
to combine more than one condition.
Example: Retrieve all students’ first name, last name, subject who are studying either ‘Maths’ or ‘Science’.
SELECT first_name, last_name,subject FROM student
WHERE subject = 'Maths' OR subject = 'Science'
The AND and OR operator combines two logical operands.
. The NOT operator inverts the result of a comparison expression or a logical expression.
Compiled by Date: / /
1.7.3. SQL Equality Operator Query
Operators are the mathematical and equality symbols which are used to compare, evaluate, or calculate values.
Equality operators include the (<), (>), and (=) symbols, which are used to compare one value against another.
Equality involves comparing two values. To do so requires the use of the (<), (>), or (=) special characters.
Does X = Y? Is Y < X?
These are both questions that can be answered using a SQL Equality Operator expression.
SQL operators are generally found inside of queries-- more specifically, in the conditional statements of the
WHERE clause.
SELECT customer,day_of_order FROM orders
WHERE day_of_order > '7/31/08'
1.7.4. SQL - Mathematical Operators
SQL mathematical operators are reserved words or characters which are used primarily in a SQL statement's WHERE
clause to perform operation(s), such as comparisons and arithmetic operations.
SQL mathematical operations can be performed using mathematical operators (+, -, *, /, and % (Modulo) and
comparisons operators ((<, >, and =)).
SELECT EmpID, FirstName, LastName FROM EMPLOYEE WHERE (Salary + Bonus)>5000;
Compiled by Date: / /
abs() : This SQL ABS() returns the absolute value of a number passed as
argument Example: SELECT ABS(-17.36)FROM TRAINEE
floor() : The SQL FLOOR() rounded up any positive or negative decimal value down to the next least integer
value. SQL DISTINCT along with the SQL FLOOR() function is used to retrieve only unique value
after rounded down to the next least integer value depending on the column specified.
Example: SELECT floor(17.26)FROM TRAINEE
exp() : The SQL EXP() returns e raised to the n-th power(n is the numeric expression), where e is the base of
natural algorithm and the value of e is approximately 2.71828183.
Example: SELECT EXP(2) AS e_to_2s_power FROM TRAINEE
power() : This SQL POWER() function returns the value of a number raised to another, where both of the
numbers are passed as arguments.
Example: SELECT POWER(2,3)FROM TRAINEE
sqrt() : The SQL SQRT() returns the square root of given value in the
argument. Example: SELECT SQRT(Credit)FROM TRAINEE
SQL Character Function
SQL character or string function is a function which takes one or more characters as parameters and returns a
character value. Some Character functions are -
lower() : The SQL LOWER() function is used to convert all characters of a string to lower case.
upper(): The SQL UPPER() function is used to convert all characters of a string to uppercase.
syntax: SELECT UPPER('testing for upper function')
AS Testing_Upper
FROM TRAINEE
Compiled by Date: / /
DATEPART() : The DATEPART() function is used to return a single part of a date/time, such as year,
month, day, hour, minute, etc.
Syntax: DATEPART(datepart,date)
Example: SELECT DATEPART(yyyy,OrderDate) AS OrderYear,
DATEPART(mm,OrderDate) AS OrderMonth,
DATEPART(dd,OrderDate) AS OrderDay
FROM Orders
WHERE OrderId=1
Compiled by Date: / /
OrderId ProductName OrderDate
1 computer 2008-11-11
2 Digital Camera 2008-11-09
3 Printer 2008-11-11
4 Scanner 2008-10-29
Now we want to select the records with an OrderDate of "2008-11-11" from the table above.
We use the following SELECT statement:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
The result-set will look like this:
OrderId ProductName OrderDate
1 Computer 2008-11-11
3 Printer 2008-11-11
Now, assume that the "Orders" table looks like this (notice the time component in the "OrderDate" column):
OrderId ProductName OrderDate
1 Computer 2008 11-11 13:23:44
2 Digital Camera 2008 11-09 15:45:21
3 Printer 2008 11-11 11:12:01
4 Scanner 2008 10-29 14:56:59
If we use the same SELECT statement as above:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
We will get no result! This is because the query is looking only for dates with no time portion.
Tip: If you want to keep your queries simple and easy to maintain, do not allow time components in your dates!
2.4. SQL aggregate functions
An aggregate function operates on many records and produces a summary; works with GROUP BY.
Useful SQL Aggregate Functions
MIN returns the smallest value in a given column
MAX returns the largest value in a given column
SUM returns the sum of the numeric values in a given column
AVG returns the average value of a given column
COUNT returns the total number of values in a given column
COUNT(*) returns the number of rows in a table
SUM() Returns the sum
Aggregate functions are used to compute against a "returned column of numeric data" from your SELECT
statement. They basically summarize the results of a particular column of selected data.
The count function Returns the number of items in expression. The data type returned is of type int.
Syntax: COUNT ( [ALL | DISTINCT] <expression> | * )
Example: select COUNT(*), AVG(Employee.Salary) from dbo. Employee
Compiled by Date: / /
- With the exception of the COUNT (*) function, all aggregate functions return a NULL if no rows satisfy the
WHERE clause. The COUNT (*) function returns a value of zero if no rows satisfy the WHERE clause.
The MAX function Returns the maximum value from expression. Max ignores any NULL values.
Syntax: MAX ( [ALL | DISTINCT] <expression> )
Example: select MAX(Employee.Salary) from dbo. Employee
The MIN function Returns the smallest value from expression. Min ignores any NULL values.
Syntax: MIN ( [ALL | DISTINCT] <expression> )
Example: select MIN(Employee.Salary) from dbo. Employee
The SUM function Returns the total of all values in expression. Sum ignores any NULL values.
Syntax: SUM ( [ALL | DISTINCT] <expression> )
Example: select SUM(Employee.Salary) from dbo. Employee
The AVERAGE function Returns the average of the values in expression. The expression must contain
numeric values. Null values are ignored.
syntax: AVG ([ ALL | DISTINCT ] <expression>)
Example: select ID, avg(Employee.Salary) from dbo. Employee
Compiled by Date: / /
LO3. Write advanced SQL statements that use aggregation and filtering
3.1. SQL - Grouping By Multiple Columns
When an aggregate function is executed, SQL Server summarizes values for an entire table or for groups of columns
within the table, producing a single value for each set of rows for the specified columns.
- You can use aggregate functions with the SELECT statement or in combination with the GROUP BY clause
- Use the GROUP BY clause on columns or expression to organize rows into groups and to summarize those
groups. The GROUP BY clause groups rows on the basis of similarities between them.
When you use the GROUP BY clause, consider the following facts and guidelines:
. SQL Server returns only single rows for each group that you specify; it does not return detail information.
. All columns that are specified in the GROUP BY clause must be included in the select list.
. If you include a WHERE clause, SQL Server groups only the rows that satisfy the search conditions.
. Do not use the GROUP BY clause on columns that contain multiple null values.
Example1: For each department, retrieve the department name, the number of employees in the department, and
their average salary; catagorize by the TraineeID, Departement and name respectively.
SELECT DEPARTEMENT.Dname ,
COUNT (EMPLOYEE.ID)'number of employee',
AVG (EMPLOYEE.salary)'average salary'
FROM EMPLOYEE,DEPARTEMENT
where EMPLOYEE.dnum =DEPARTEMENT.Dnumber
GROUP BY DEPARTEMENT.Dname
Example2: Retrieve all trainees’ TraineeID, Name, Departement , the number of course taken by each trainee and catagorize
by the TraineeID, Departement and name.
select TRAINEE .TraineeID ,
TRAINEE .Name,
TRAINEE .Departement,
COUNT(COURSE.Course_Code )'number of course taken'
from TRAINEE ,GRADE_REPORT ,COURSE
where TRAINEE .TraineeID =GRADE_REPORT .TraineeID and GRADE_REPORT .Course_Code =COURSE .Course_Code
group by TRAINEE .TraineeID , TRAINEE .Departement,TRAINEE .Name
3.1.1. SQL - Group By Aggregate
The SQL Aggregate Functions are functions that provide mathematical operations. If you need to add, count or
perform basic statistics, these functions will be of great help.
Basic syntax of Aggregate Functions:
SELECT <column_name1>, <column_name2> <aggregate_function(s)>
FROM <table_name>
GROUP BY <column_name1>, <column_name2>
HAVING <aggregate_function(column_name> < operator> <values>
Example: select customer_name, SUM(amount),MIN(amount),MAX(amount),AVG(amount),COUNT(amount)
from customers c join purchases p on c.cid = p.cid
group by customer_name
having SUM(amount) > '20.00';
Compiled by Date: / /
3.1.2. Filtering SQL: HAVING Clause
The Having clause is optional and used in combination with the Group By clause. It is similar to the Where clause,
but the Having clause establishes restrictions that determine which records are displayed after they have been
grouped.
The HAVING clause was added to SQL because the WHERE keyword could not be used with aggregate functions.
Basic syntax of having clause:
SELECT column1, ... column_n, aggregate_function (expression)
FROM table_name
[WHERE condition]
[GROUP BY column1, ... column_n]
HAVING condition
3.1.3. SQL: Sub-select, sorting by aggregate review data
Subquery or Inner query or Nested query is a query in a query. A subquery is usually added in the WHERE Clause
of the sql statement. Most of the time, a subquery is used when you know how to search for a value using a
SELECT statement, but do not know the exact value.
Subqueries can be used with select, insert, update, and delete along with the comparision operators like
=, <, >, >=, <= etc.
Example: SELECT first_name, last_name, subject
FROM student_details
WHERE games NOT IN ('Cricket', 'Football');
1) Usually, a subquery should return only one record, but sometimes it can also return multiple records when used
with operators like IN, NOT IN in the where clause. The query would be like,
2) Lets consider the student_details table which we have used earlier. If you know the name of the students who are
studying science subject, you can get their id's by using this query below,
but, if you do not know their names, then to get their id's you need to write the query in this manner,
Output:
Compiled by Date: / /
id first_name
100 Rahul
102 Stephen
In the above sql statement, first the inner query is processed first and then the outer query is processed.
3) Subquery can be used with INSERT statement to add rows of data from one or more tables to another table.
Lets try to group all the students who study Maths in a table 'maths_group'.
4) A subquery can be used in the SELECT statement as follows. Lets use the product and order_items table
defined in the sql_joins section.
Correlated Subquery
A query is called correlated subquery when both the inner query and the outer query are interdependent. For every
row processed by the inner query, the outer query is processed as well. The inner query depends on the outer query
before it can be processed.
NOTE:
1) You can nest as many queries you want but it is recommended not to nest more than 16 subqueries in oracle.
2) If a subquery is not dependent on the outer query it is called a non-correlated subquery.
SQL SubSelect-SubQueries
A sub query or sub select is a select statement that returns a single value
output result and it can be nested inside other subquery or any SELECT, INSERT,
DELETE OR UPDATE statement.
Example:
USE NORTHWIND
SELECT P.PRODUCTNAME,
(SELECT CATEGORYNAME FROM CATEGORIES WHERE CATEGORYID = P.CATEGORYID)
FROM PRODUCTS P
Subquery used in the above example returns the category name of each product
in every tuple.
Example:
Compiled by Date: / /
Compiled by Date: / /
SELECT P.PRODUCTNAME, P.UNITPRICE, P.CATEGORYID
FROM
PRODUCTS P
WHERE
P.PRODUCTID = (SELECT PRODUCTID FROM PRODUCTS WHERE PRODUCTNAME='VEGIE-SPREAD')
Here subquery returns product id as single value to the main SQL query.
Example:
SELECT C.CATEGORYNAME,
Compiled by Date: / /