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
SQL consists of:
Data Manipulation Language (DML)
SELECT, INSERT, UPDATE, DELETE
Data Definition Language (DDL)
CREATE, DROP, ALTER, GRANT, REVOKE
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
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
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'
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
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
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
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
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
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
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
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%'
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%'
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
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)
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
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
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
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
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 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 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 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 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
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
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')
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
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 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 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
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
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
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
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
Single-row functions
String functions
Mathematical functions
Date functions
Conversion functions
Multiple-row functions
Aggregate 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
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'
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 commands for defining/editing objects
CREATE
ALTER
DROP
Data Control Language (DCL) for managing access permissions
GRANT
REVOKE
DENY
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
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
DROP command
DROP TABLE <name>
DROP TRIGGER <name>
DROP INDEX &<name>
DROP <object
DROP TABLE Persons
ALTER TABLE Cities
DROP CONSTRAINT FK_Cities_Countries
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.
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
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 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
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