advanced sql aggregations, grouping, sql functions, ddl softuni team technical trainers software...

Post on 30-Dec-2015

228 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Advanced SQLAggregations, Grouping,

SQL Functions, DDL

SoftUni TeamTechnical TrainersSoftware Universityhttp://softuni.bg

Table of Contents

1. Nested SELECT Statements

2. Aggregating Data Group Functions: COUNT, SUM, MIN, MAX Grouping with GROUP BY

3. Microsoft SQL Server Functions

4. Data Definition Language (DDL) Creating Tables in MS SQL Server

5. Transactions in MS SQL Server2

SQL LanguageNested SELECT Statements

SQL

SQL

SQL

SQL

4

SELECT statements can be nested in the WHERE clause

Note: prefer joins to nested SELECT for better performance

Nested SELECT Statements

SELECT FirstName, LastName, SalaryFROM EmployeesWHERE Salary = (SELECT MAX(Salary) FROM Employees)

SELECT FirstName, LastName, DepartmentID, SalaryFROM EmployeesWHERE DepartmentID IN (SELECT DepartmentID FROM Departments WHERE Name='Sales')

FirstName LastName SalaryKen Sanchez 125500.00

5

Tables from the outer SELECT can be referred in the inner SELECT by aliases

Example: find the highest salary for each department and the employee that takes it

Nested SELECT with Table Aliases

SELECT FirstName, LastName, DepartmentID, SalaryFROM Employees eWHERE Salary = (SELECT MAX(Salary) FROM Employees WHERE DepartmentID = e.DepartmentID)ORDER BY DepartmentID

6

Using the EXISTS operator in SELECT statements Find all employees with managers from the first department

Using the EXISTS Operator

SELECT FirstName, LastName, EmployeeID, ManagerIDFROM Employees eWHERE EXISTS (SELECT EmployeeID FROM Employees m WHERE m.EmployeeID = e.ManagerID AND m.DepartmentID = 1)

FirstName LastName EmployeeID ManagerIDRoberto Tamburello 3 12Rob Walters 4 3… … … …

SQL LanguageAggregating Data with Group Functions

8

Group functions operate over sets of rows to return one single result (per group)

Group Functions

EmployeeID Salary1 12500.002 13500.003 43300.004 29800.005 25000.00... ...

MAX(Salary)125500.00

9

COUNT(*) – count of the selected rows COUNT(column) – count of the non-null values in given

column SUM(column) – sum of the values in given column MIN(column) – the minimal value in given column MAX(column) – the maximal value in given column AVG(column) – average of the values in given column

Group Functions in SQL

10

You can use MIN() and MAX() for almost any data type (int, datetime, varchar, ...)

Show the first and last employee's name in alphabetical order:

MIN() and MAX() Functions

SELECT MIN(HireDate) MinHD, MAX(HireDate) MaxHDFROM Employees

MinHD MaxHD1996-07-31 2003-06-03

SELECT MIN(LastName), MAX(LastName)FROM Employees

11

You can use AVG() and SUM() only for numeric data types

AVG() and SUM() Functions

SELECT AVG(Salary) [Average Salary], MAX(Salary) [Max Salary], MIN(Salary) [Min Salary], SUM(Salary) [Salary Sum]FROM EmployeesWHERE JobTitle = 'Production Technician'

Average Salary Max Salary Min Salary Salary Sum12267.5159 15000.00 9500.00 1926000.00

12

COUNT(*) returns the number of rows in the result record set

COUNT(expr) returns the number of rows with non-null values

The COUNT(…) Function

SELECT COUNT(*) Cnt FROM EmployeesWHERE DepartmentID = 3

Cnt18

SELECT COUNT(ManagerID) MgrCount, COUNT(*) AllCountFROM EmployeesWHERE DepartmentID = 16

MgrCount AllCount1 2

13

Group functions ignore NULL values in the target column

If each NULL value in the ManagerID column were considered as 0 in the calculation, the result would be 106

Group Functions and NULLs

SELECT AVG(ManagerID) Avg, SUM(ManagerID) / COUNT(*) AvgAllFROM Employees

Avg AvgAll108 106

14

Find the earliest hired employee for each department

Group Functions in Nested Queries

SELECT e.FirstName, e.LastName, e.HireDate, d.Name as DeptFROM Employees e JOIN Departments d ON e.DepartmentID = d.DepartmentIDWHERE e.HireDate = (SELECT MIN(HireDate) FROM Employees WHERE DepartmentID = d.DepartmentID)

FirstName LastName HireDate DeptGuy Gilbert 1998-07-31 00:00:00 ProductionKevin Brown 1999-02-26 00:00:00 Marketing… … … …

SQL LanguageGroup Functions with GROUP BY

72000

108600

185600

16

Aggregating Groups of Data

DepartmentID Salary12 1030012 1680012 1680012 1030012 178002 288002 250002 298002 2500016 12550016 60100... ...

DepartmentID SUM (Salary)

12 72000

2 108600

16 185600

... ...

17

The GROUP BY clause: split the table rows into groups The SELECT + GROUP BY syntax:

The <group_by_expression> is a list of columns

The GROUP BY Statement

SELECT <columns>, <group_function(column)>FROM <table>[WHERE <condition>][GROUP BY <group_by_expression> ][HAVING <filtering_expression>][ORDER BY <columns>]

18

Example of grouping data:

The GROUP BY column is not required to be in the SELECT list

The GROUP BY Statement (2)

SELECT DepartmentID, SUM(Salary) as SalariesCostFROM EmployeesGROUP BY DepartmentID

DepartmentID SalariesCost12 720002 10860016 185600... ...

19

Grouping by Several Columns

39700

77000

52800

65000

43300

DepartmentID JobTitle Salary

11 Network Manager 39700

11 Network Administrator 32500

11 Network Administrator 32500

11 Database Administrator 38500

11 Database Administrator 38500

10 Accountant 26400

10 Accountant 26400

10 Finance Manager 43300

... ... ...

DepartmentID JobTitle Salary

11 Network Manager 39700

11 Network Administrator 65000

11 Database Administrator 77000

10 Accountant 52800

10 Finance Manager 43300

... ... ...

20

Example of grouping data by several columns:

Grouping by Several Columns – Example

SELECT DepartmentID, JobTitle, SUM(Salary) as Salaries, COUNT(*) as CountFROM EmployeesGROUP BY DepartmentID, JobTitle

DepartmentID JobTitle Salaries Count2 Senior Tool Designer 58600 22 Tool Designer 50000 27 Production Supervisor 525000 217 Production Technician 1926000 157... ... ... ...

21

This SELECT statement is illegal:

Can not combine columns with group functions unless the columns are in the GROUP BY clause

This SELECT statement is also illegal:

Can not use WHERE for group functions

Illegal Use of Group Functions

SELECT DepartmentID, COUNT(LastName) FROM Employees

SELECT DepartmentID, AVG(Salary)FROM EmployeesWHERE AVG(Salary) > 30GROUP BY DepartmentID

22

When using groups we can select only columns listed in theGROUP BY and grouping functions over the other columns

Can not select columns not listed in the GROUP BY clause It is allowed to apply group functions over the columns in the GROUP BY clause, but this has no sense

Restrictions for Grouping

SELECT DepartmentID, JobTitle, SUM(Salary) AS Cost, MIN(HireDate) as StartDateFROM EmployeesGROUP BY DepartmentID, JobTitle

23

HAVING works like WHERE but is used for the grouping functions

Using GROUP BY with HAVING Clause

SELECT DepartmentID, COUNT(EmployeeID) as EmpCount, AVG(Salary) as AverageSalaryFROM EmployeesGROUP BY DepartmentIDHAVING COUNT(EmployeeID) BETWEEN 3 AND 5DepartmentID EmpCount AverageSalary2 4 2715012 5 14400… … …

24

Grouping can be applied on columns from joined tables

Using Grouping Functions and Table Joins

SELECT COUNT(*) AS EmpCount, d.Name AS DeptNameFROM Employees e JOIN Departments d ON e.DepartmentID = d.DepartmentIDWHERE e.HireDate BETWEEN '1999-2-1' AND '2002-12-31'GROUP BY d.NameHAVING COUNT(*) > 5ORDER BY EmpCount DESC

EmpCount DeptName95 Production8 Finance… …

SQL LanguageSQL Server Functions

26

Single-row functions String functions Mathematical functions Date functions Conversion functions

Multiple-row functions Aggregate functions

Standard Functions in MS SQL Server

SQL

27

ISNULL(<value>,<default_value>) Converts NULL values to given default value

ISNULL() Function

SELECT Name AS [Projects Name], ISNULL(EndDate, GETDATE()) AS [End Date]FROM Projects

Projects Name End DateClassic Vest 2015-02-11 16:43:00Cycling Cap 2003-06-01 00:00:00.000Full-Finger Gloves 2003-06-01 00:00:00.000... ...

EndDate is NULL, so the current date is returned instead

28

Changing the character casing: LOWER(), UPPER() String manipulation functions: SUBSTRING(), LEN(), LEFT(), RIGHT(), TRIM(), REPLACE()

String Functions

SELECT LastName, LEN(LastName) AS LastNameLen, UPPER(LastName) AS UpperLastNameFROM EmployeesWHERE RIGHT(LastName, 3) = 'son'

LastName LastNameLen UpperLastNameErickson 8 ERICKSONJohnson 7 JOHNSON... ... ...

29

Mathematical functions: ROUND, FLOOR, POWER, ABS, SQRT, …

Date functions: GETDATE, DATEADD, DAY, MONTH, YEAR, …

Conversion functions: CONVERT, CAST

Other Functions

SELECT FLOOR(3.14) 3SELECT ROUND(5.86, 0) 6.00

SELECT CONVERT(DATETIME, '20051231', 112) 2005-12-31 00:00:00.000-- 112 is the ISO formatting style YYYYMMDD

SELECT DATEADD(day, 15, GETDATE())

30

We can combine functions to achieve more complex behavior

Combining Functions

SELECT Name AS [Projects Name], ISNULL(CONVERT(nvarchar(50), EndDate), 'Not Finished') AS [Date Finished]FROM Projects

Projects Name Date FinishedHL Mountain Front Wheel Jun 1 2003 12:00AMLL Touring Handlebars Not FinishedHL Touring Handlebars Not FinishedLL Road Front Wheel Jun 1 2003 12:00AM... ...

31

We can aggregate strings with STUFF function.

SQL Aggregation

SELECT STUFF(( SELECT ', ' + Name FROM Towns FOR XML PATH('')), 1, 2, '') AS Towns

TownsRedmond, Calgary, Edmonds, Seattle, Bellevue, Issaquah, Everett, Bothell, San Francisco, Index, Snohomish, Monroe, Renton, Newport Hills, Carnation, Sammamish, Duvall, Gold Bar, Nevada, Kenmore, Melbourne, Kent, Cambridge, Minneapolis, Portland, Duluth, Detroit, Memphis, Ottawa, Bordeaux, Berlin, Sofia

SQL LanguageData Definition Language (DDL)

33

Data Definition Language (DDL) for defining / editing objects CREATE ALTER DROP

Data Control Language (DCL) for managing access permissions GRANT REVOKE DENY

DDL and DCL Commands

34

The SQL CREATE command: CREATE TABLE <name> (<field_definitions>) CREATE VIEW <name> AS <select> CREATE <object> <definition>

Creating Database Objects

CREATE TABLE Persons ( PersonID int IDENTITY, Name nvarchar(100) NOT NULL, CONSTRAINT PK_Persons PRIMARY KEY(PersonID))GO

CREATE VIEW [First 10 Persons] ASSELECT TOP 10 Name FROM Persons

35

Creating Objects – More Examples

CREATE TABLE Countries ( CountryID int IDENTITY, Name nvarchar(100) NOT NULL, CONSTRAINT PK_Countries PRIMARY KEY(CountryID))

GO

CREATE TABLE Cities ( CityID int IDENTITY, Name nvarchar(100) NOT NULL, CountryID int NOT NULL, CONSTRAINT PK_Cities PRIMARY KEY(CityID))

36

The SQL ALTER command ALTER TABLE <name> <command> ALTER <object> <command>

Modifying Database Objects

-- Add a foreign key constraint Cities --> CountryALTER TABLE CitiesADD CONSTRAINT FK_Cities_Countries FOREIGN KEY (CountryID) REFERENCES Countries(CountryID)

-- Add a column Population to the table CountryALTER TABLE Countries ADD Population int

-- Remove the column Population from the table CountryALTER TABLE Countries DROP COLUMN Population

37

DROP command DROP TABLE <name> DROP TRIGGER <name> DROP INDEX <name> DROP <object>

Deleting Database Objects

DROP TABLE Persons

ALTER TABLE CitiesDROP CONSTRAINT FK_Cities_Countries

38

GRANT command

Example:

REVOKE command

Example:

Managing Access Permissions

GRANT <persmission> ON <object> TO <role>

GRANT SELECT ON Persons TO public

REVOKE <persmission> ON <object> FROM <role>

REVOKE SELECT ON Employees FROM public

Creating Tables in SQL ServerBest Practices

40

Creating a new table: Define the table name

Should have good name Define the columns and their types

Use proper data type Define the table primary key

Use IDENTITY for enabling auto increment of the primary key Define foreign keys and constraints

Creating Tables in SQL Server

41

CREATE TABLE Groups ( GroupID int IDENTITY, Name nvarchar(100) NOT NULL, CONSTRAINT PK_Groups PRIMARY KEY(GroupID))

CREATE TABLE Users ( UserID int IDENTITY, UserName nvarchar(100) NOT NULL, GroupID int NOT NULL, CONSTRAINT PK_Users PRIMARY KEY(UserID), CONSTRAINT FK_Users_Groups FOREIGN KEY(GroupID) REFERENCES Groups(GroupID))

Creating Tables in SQL Server – Examples

TransactionsBegin / Commit / Rollback in SQL Server

43

Pessimistic concurrency (default in SQL Server) Locks table data during each data modification Concurrent users wait until the lock is released

Optimistic concurrency (default in MySQL and Oracle) No locks are performed when data is being read or changed Concurrent users don’t see the changes until they are committed /

rolled-back Supported with the SNAPSHOT isolation level in SQL Server

What Is Concurrency Control?

44

Transactions start with BEGIN TRANSACTION (or just BEGIN TRAN)

Use COMMIT to confirm changes and finish the transaction Use ROLLBACK to cancel changes and abort the transaction Example:

Transactions

BEGIN TRANDELETE FROM EmployeesProjects;DELETE FROM Projects;ROLLBACK TRAN

45

What is implicit transactions mode? Automatically start a new transaction after each commit or

rollback Nested transactions are not allowed Transaction must be explicitly completed with COMMIT or ROLLBACK TRANSACTION

By default, IMPLICIT_TRANSACITONS setting is switched off

The Implicit Transactions Option

SET IMPLICIT_TRANSACTIONS ON

46

1. How do we nest SELECT statements?

2. How do we aggregate data in SQL? Explain the group functions in SQL Explain the GROUP BY clause

3. Explain a few MS SQL Server functions?

4. What are the DDL commands in SQL? How to create a table in MS SQL Server?

5. How to start / commit / cancel a transaction?

Summary

License

This course (slides, examples, demos, videos, homework, etc.)is licensed under the "Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International" license

48

Attribution: this work may contain portions from "Databases" course by Telerik Academy under CC-BY-NC-SA license

Free Trainings @ Software University Software University Foundation – softuni.org Software University – High-Quality Education,

Profession and Job for Software Developers softuni.bg

Software University @ Facebook facebook.com/SoftwareUniversity

Software University @ YouTube youtube.com/SoftwareUniversity

Software University Forums – forum.softuni.bg

top related