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

49
Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University http:// softuni.bg

Upload: julian-harrell

Post on 30-Dec-2015

228 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

Advanced SQLAggregations, Grouping,

SQL Functions, DDL

SoftUni TeamTechnical TrainersSoftware Universityhttp://softuni.bg

Page 2: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 3: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

SQL LanguageNested SELECT Statements

SQL

SQL

SQL

SQL

Page 4: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 5: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 6: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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… … … …

Page 7: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

SQL LanguageAggregating Data with Group Functions

Page 8: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 9: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 10: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 11: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 12: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 13: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 14: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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… … … …

Page 15: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

SQL LanguageGroup Functions with GROUP BY

Page 16: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

... ...

Page 17: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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>]

Page 18: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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... ...

Page 19: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

... ... ...

Page 20: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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... ... ... ...

Page 21: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 22: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 23: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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… … …

Page 24: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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… …

Page 25: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

SQL LanguageSQL Server Functions

Page 26: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

26

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

Multiple-row functions Aggregate functions

Standard Functions in MS SQL Server

SQL

Page 27: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 28: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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... ... ...

Page 29: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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())

Page 30: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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... ...

Page 31: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 32: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

SQL LanguageData Definition Language (DDL)

Page 33: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 34: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 35: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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))

Page 36: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 37: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 38: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 39: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

Creating Tables in SQL ServerBest Practices

Page 40: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 41: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 42: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

TransactionsBegin / Commit / Rollback in SQL Server

Page 43: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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?

Page 44: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 45: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 46: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 48: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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

Page 49: Advanced SQL Aggregations, Grouping, SQL Functions, DDL SoftUni Team Technical Trainers Software University

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