SQL (MSSQL)
Telerik Academy Alpha
Databases
Table of contents
SQL Overview
What is SQL?
-
SQL is a standard language for accessing and manipulating databases.
-
SQL stands for Structured Query Language
-
SQL lets you access and manipulate databases
-
SQL is an ANSI (American National Standards Institute) standard
What is SQL?
-
SQL consists of:
-
Data Manipulation Language (DML)
-
SELECT, INSERT, UPDATE, DELETE
-
-
Data Definition Language (DDL)
-
CREATE, DROP, ALTER, GRANT, REVOKE
-
-
Relational Databases and SQL
-
A relational database can be accessed and modified by executing SQL statements
-
SQL allows
-
Defining / modifying the database schema
-
Searching / modifying table data
-
-
A set of SQL commands are available for extracting subset of the table data
-
Most SQL commands return a single value or record set
Execution
-
SQL commands are executed through a database connection
-
DB connection is a channel between the client and the SQL server
-
DB connections take resources and should be closed when no longer used
-
Multiple clients can be connected to the SQL server at the same time
-
SQL commands can be executed in parallel
Transactions and isolation deal with concurrency
-
Some examples
SELECT first_name, last_name, job_title
FROM employees
SELECT * FROM projects
WHERE start_date= '1/1/2018'
INSERT INTO projects(name, start_date)
VALUES('Introduction to SQL Course', '1/10/2018')
UPDATE projects
SET end_date = '8/31/2018'
WHERE start_date= '1/1/2018'
DELETE FROM projects
WHERE start_date= '1/1/2020'
SQL
Capabilities
-
Selection
-
A select operation reduces the length of a table by filtering out unwanted rows
-
-
Projection
-
Just as the select operation reduces the number of rows, the project operation reduces the number of columns
-
-
Join
-
Used to relate two or more independent tables that share a common column
-
Database Schema
SELECT
SELECT
-
SELECT identifies what columns
-
FROM identifies which table
-
Examples
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
SELECT * FROM Departments
SELECT LastName, Salary, Salary + 300 FROM Employees
SELECT
-
Aliases rename a column heading
-
Useful with calculations
-
Immediately follows the column name
-
There is an optional AS keyword
-
-
Double quotation marks or [ ] if contains spaces
SELECT FirstName, LastName, Salary, Salary * 0.2 AS [Salary Bonus]
FROM Employees
SELECT FirstName, LastName, Salary, Salary * 0.2 AS "Salary Bonus"
FROM Employees
SELECT
-
A literal is a character, a number, or a date included in the SELECT list
-
Date and character literal values must be enclosed within single quotation marks
-
Each character string is output once for each row returned
-
SELECT FirstName + '''s last name is ' + LastName AS [Our Employees]
FROM Employees
SELECT
-
The default display of queries is all rows, including duplicate rows
-
Eliminate duplicate rows by using the DISTINCT keyword in the SELECT clause
-
SELECT DISTINCT DepartmentID FROM Employees
SELECT
-
UNION combines the results from several SELECT statements
-
The columns count and types should match
-
By default UNION selects only distinct values
-
-
INTERSECT/EXCEPT perform logical intersection/difference between given two sets of records
SELECT FirstName AS Name FROM Employees UNION SELECT LastName AS Name
FROM Employees
SELECT
-
Restrict the rows returned by using the WHERE clause
-
The WHERE clause is used to extract only those records that fulfill a specified condition
SELECT FirstName, LastName, DepartmentID
FROM Employees
WHERE LastName = 'Sullivan'
SELECT LastName, Salary
FROM Employees
WHERE Salary <= 20000
SELECT
-
Using BETWEEN operator to specify a range
-
Using IN/NOT IN to specify a set of values
-
Using LIKE operator to specify a pattern
-
% means 0 or more chars;
-
_ means one char
-
SELECT LastName, Salary FROM Employees
WHERE Salary BETWEEN 20000 AND 22000
SELECT FirstName, LastName, ManagerID FROM Employees
WHERE ManagerID IN (109, 3, 16)
SELECT FirstName FROM Employees WHERE FirstName LIKE 'S%'
SELECT
-
Using BETWEEN operator to specify a range
-
Using IN/NOT IN to specify a set of values
-
Using LIKE operator to specify a pattern
-
% means 0 or more chars;
-
_ means one char
-
SELECT LastName, Salary FROM Employees
WHERE Salary BETWEEN 20000 AND 22000
SELECT FirstName, LastName, ManagerID FROM Employees
WHERE ManagerID IN (109, 3, 16)
SELECT FirstName FROM Employees WHERE FirstName LIKE 'S%'
SELECT
-
Checking for NULL value:
-
IS NULL
-
IS NOT NULL
-
-
Attention: COLUMN = NULL is always false!
SELECT LastName, ManagerId FROM Employees
WHERE ManagerId IS NULL
SELECT LastName, ManagerId FROM Employees
WHERE ManagerId IS NULL
-- Always FALSE
SELECT LAST_NAME, MANAGER_ID FROM EMPLOYEES
WHERE MANAGER_ID = NULL
SELECT
-
Logical operators
-
NOT
-
OR
-
AND
-
SELECT FirstName, LastName FROM Employees
WHERE Salary >= 20000 AND LastName LIKE 'C%'
SELECT LastName FROM Employees
WHERE ManagerID IS NOT NULL OR LastName LIKE '%so_'
SELECT LastName FROM Employees
WHERE NOT (ManagerID = 3 OR ManagerID = 4)
SELECT
-
Sort rows with the ORDER BY clause
-
ASC: ascending order, default
-
DESC: descending order
-
SELECT e.EmployeeID, e.LastName, e.DepartmentID, d.DepartmentID
FROM Employees e
INNER JOIN Departments d
ON e.DepartmentID = d.DepartmentID
JOIN
JOINS
-
A JOIN clause is used to combine rows from two or more tables, based on a related column between them.
-
(INNER) JOIN: Returns records that have matching values in both tables
-
LEFT (OUTER) JOIN: Return all records from the left table, and the unmatched records from the right table
-
RIGHT (OUTER) JOIN: Return all records from the right table, and the unmatched records from the left table
-
FULL (OUTER) JOIN: Return all records when there is a match in either left or right table
JOINS
Cartesian product
-
A Cartesian product is formed when:
-
A join condition is omitted
-
A join condition is invalid
-
All rows in the first table are joined to all rows in the second table
-
-
To avoid a Cartesian product, always include a valid join condition
INNER JOIN
-
To specify arbitrary conditions or specify columns to join, the ON clause is used
-
Such JOIN is called also INNER JOIN
-
SELECT e.EmployeeID, e.LastName, e.DepartmentID,
d.DepartmentID, d.Name AS DepartmentName
FROM Employees e
INNER JOIN Departments d
ON e.DepartmentID = d.DepartmentID
Equijoins
-
Inner joins with join conditions pushed down to the WHERE clause
SELECT e.EmployeeID, e.LastName, e.DepartmentID,
d.DepartmentID, d.Name AS DepartmentName
FROM Employees e, Departments d
WHERE e.DepartmentID = d.DepartmentID
Self-Join
-
Self-join means to join a table to itself
Always used with table aliases
SELECT e.FirstName + ' ' + e.LastName +
' is managed by ' + m.LastName as Message
FROM Employees e JOIN Employees m
ON (e.ManagerId = m.EmployeeId)
Self-Join
-
Self-join means to join a table to itself
Always used with table aliases
SELECT e.FirstName + ' ' + e.LastName +
' is managed by ' + m.LastName as Message
FROM Employees e JOIN Employees m
ON (e.ManagerId = m.EmployeeId)
INSERT, UPDATE, DELETE
INSERT
-
INSERT command
-
INSERT INTO <table> VALUES (<values>)
-
INSERT INTO <table>(<columns>) VALUES (<values>)
-
INSERT INTO <table> SELECT <values>
-
INSERT INTO EmployeesProjects VALUES (229, 25)
INSERT INTO Projects(Name, StartDate)
VALUES ('New project', GETDATE())
INSERT INTO Projects(Name, StartDate)
SELECT Name + ' Restructuring', GETDATE()
FROM Departments
UPDATE
-
UPDATE command
-
UPDATE <table> SET <column=expression> WHERE <condition>
-
Note: Don't forget the WHERE clause!
-
UPDATE Employees
SET LastName = "Brown"
WHERE EmployeeID = 1;
UPDATE Employees
SET Salary = Salary * 1.10, JobTitle = 'Senior ' + JobTitle
WHERE DepartmentID = 3
DELETE
-
Deleting rows from a table
-
DELETE FROM <table> WHERE <condition>
-
Note: Don’t forget the WHERE clause!
-
-
DELETE FROM Employees
WHERE EmployeeID = 1
DELETE FROM Employees
WHERE LastName LIKE 'S%'
-
Delete all rows from a table at once
TRUNCATE TABLE Users
Advanced SQL
Nested SELECT
Nested SELECT
-
SELECT statements can be nested in the where clause
-
Note: always prefer joins to nested SELECT statements for better performance
-
SELECT FirstName, LastName, Salary
FROM Employees
WHERE Salary =
(SELECT MAX(Salary) FROM Employees)
SELECT FirstName, LastName, DepartmentID, Salary
FROM Employees
WHERE DepartmentID IN
(SELECT DepartmentID FROM Departments
WHERE Name='Sales')
Nested SELECT
-
Tables from the main SELECT can be referred in the nested SELECT by aliases
-
Example:
-
Find the maximal salary for each department and the name of the employee that gets it
-
SELECT FirstName, LastName, DepartmentID, Salary
FROM Employees e
WHERE Salary =
(SELECT MAX(Salary) FROM Employees
WHERE DepartmentID = e.DepartmentID)
ORDER BY DepartmentID
Group Functions
Group Functions
-
COUNT(*) – count of the selected rows
-
SUM(column) – sum of the values in given column from the selected rows
-
AVG(column) – average of the values in given column
-
MAX(column) – the maximal value in given column
-
MIN(column) – the minimal value in given column
-
Group functions ignore NULL values in the target column
Group Functions
-
Group functions operate over sets of rows to give one single result (per group)
SELECT
AVG(Salary) [Average Salary],
MAX(Salary) [Max Salary],
MIN(Salary) [Min Salary],
SUM(Salary) [Salary Sum]
FROM Employees
WHERE JobTitle = 'Design Engineer'
Group Functions
-
Group functions operate over sets of rows to give one single result (per group)
SELECT MIN(HireDate) MinHD, MAX(HireDate) MaxHD
FROM Employees
SELECT COUNT(*) Cnt FROM Employees
WHERE DepartmentID = 3
-
Group functions ignore NULL values in the target column
SELECT AVG(ManagerID) Avg,
SUM(ManagerID) / COUNT(*) AvgAll
FROM Employees
Groups of data
GroupBy
-
The GROUP BY statement is often used with aggregate functions (COUNT, MAX, MIN, SUM, AVG) to group the result-set by one or more columns
SELECT DepartmentID, JobTitle,
SUM(Salary) as Salaries, COUNT(*) as Count
FROM Employees
GROUP BY DepartmentID, JobTitle
GroupBy Illeal
-
Can not combine columns with groups functions unless when using GROUP BY
-
Can not use `WHERE` for group functions
SELECT DepartmentID, COUNT(LastName)
FROM Employees
SELECT DepartmentID, AVG(Salary)
FROM Employees
WHERE AVG(Salary) > 30
GROUP BY DepartmentID
GroupBy Restrictions
-
When using groups we can select only columns listed in the GROUP BY and grouping functions over the other columns
SELECT DepartmentID, JobTitle,
SUM(Salary) AS cost, MIN(HireDate) as StartDate
FROM Employees
GROUP BY DepartmentID, JobTitle
-
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 has no sense
GroupBy Having
-
Grouping function can be applied on columns from joined tables
SELECT COUNT(*) AS EmpCount, d.Name AS DeptName
FROM Employees e JOIN Departments d
ON e.DepartmentID = d.DepartmentID
WHERE e.HireDate BETWEEN '1999-2-1' AND '2002-12-31'
GROUP BY d.Name
HAVING COUNT(*) > 5
ORDER BY EmpCount DESC
Functions in SQL Server
Functions
-
Single-row functions
-
String functions
-
Mathematical functions
-
Date functions
-
Conversion functions
-
-
Multiple-row functions
-
Aggregate functions
-
Functions
-
ISNULL(<value>,<default_value>) – converts NULL values to given default value
-
COALESCE(<value>,<value>,<value>) – returns the first that is not NULL
SELECT Name AS [Projects Name],
ISNULL(EndDate, GETDATE()) AS [End Date]
FROM Projects
Functions
-
Changing the casing
-
LOWER, UPPER
-
-
Manipulating characters
-
SUBSTRING, LEN, LEFT, RIGHT, TRIM, REPLACE
-
SELECT LastName, LEN(LastName) AS LastNameLen,
UPPER(LastName) AS UpperLastName
FROM Employees
WHERE RIGHT(LastName, 3) = 'son'
Functions
-
Mathematical Functions
-
ROUND, FLOOR, POWER, ABS, SQRT, ...
-
-
Date Functions
-
GETDATE, DATEADD, DAY, MONTH, YEAR, …
-
-
Conversion Functions
-
CONVERT, CAST
-
SELECT FLOOR(3.14) --> 3
SELECT 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`
DDL (Data Definition Language)
DDL
-
DDL commands for defining/editing objects
-
CREATE
-
ALTER
-
DROP
-
-
Data Control Language (DCL) for managing access permissions
-
GRANT
-
REVOKE
-
DENY
-
Creating
-
CREATE command
-
CREATE TABLE <name> (<field_definitions>)
-
CREATE VIEW <name> AS <select>
-
CREATE <object> <definition>
-
CREATE TABLE Persons (
PersonID int IDENTITY,
Name nvarchar(100) NOT NULL,
CONSTRAINT PK_Persons PRIMARY KEY(PersonID)
)
GO
Modifying
-
ALTER command
-
ALTER TABLE <name> <command>
-
ALTER <object> <command>
-
-- Add a foreign key constraint Cities --> Country
ALTER TABLE Cities
ADD CONSTRAINT FK_Cities_Countries
FOREIGN KEY (CountryID)
REFERENCES Countries(CountryID)
-- Add column Population to the table Country
ALTER TABLE Countries ADD Population int
-- Remove column Population from the table Country
ALTER TABLE Countries DROP COLUMN Population
Deleting
-
DROP command
-
DROP TABLE <name>
-
DROP TRIGGER <name>
-
DROP INDEX &<name>
-
DROP <object
-
DROP TABLE Persons
ALTER TABLE Cities
DROP CONSTRAINT FK_Cities_Countries
T-SQL
What is T-SQL?
-
Transact-SQL (T-SQL) is database manipulation language, an extension to SQL
-
Supported by Microsoft SQL Server and Sybase
-
Used for stored procedures, functions, triggers
-
-
Transact-SQL extends SQL with few additional features:
-
Local variables
-
Control flow constructs (ifs, loops, etc.)
-
Functions for strings, dates, math, etc.
-
What is T-SQL?
-
There are 3 types of statements in the Transact-SQL (T-SQL) language:
-
Data Definition Language (DDL) Statements
-
Data Control Language (DCL) Statements
-
Data Manipulation Language (DML) Statements
-
Batch Directives
-
USE <database>
-
Switch the active database
-
-
GO
-
Separates batches (sequences of commands)
-
-
EXEC(<command>)
-
Executes a user-defined or system function stored procedure, or an extended stored procedure
-
Can supply parameters to be passed as input
-
Can execute SQL command given as string
-
Stored Procedures
-
Stored procedures are named sequences of T-SQL statements
-
Encapsulate repetitive program logic
-
Can accept input parameters
-
Can return output results
-
-
Benefits of stored procedures
-
Share application logic
-
Improved performance
-
Reduced network traffic
-
Stored Procedures
USE TelerikAcademy
GO
-- Create
CREATE PROC dbo.usp_SelectSeniorEmployees
AS
SELECT *
FROM Employees
WHERE DATEDIFF(Year, HireDate, GETDATE()) > 5
GO
-- Execute
EXEC usp_SelectSeniorEmployees
INSERT INTO Customers
EXEC usp_SelectSpecialCustomers
Questions?
[Databases] SQL
By telerikacademy
[Databases] SQL
- 1,436