Structured Query Language
Structured Query Language
SQL
A - being able to sort out margins efficiently in Microsoft WORD B - an ability to throw your PC at your workmate? C - the ability to send e-mails to the wrong people D - SQL
What is SQL?
non-procedural
http://uadisq01.uad.ac.uk:5560/isqlplus
Basic Form
SELECT <attribute(s)> FROM <table(s)> WHERE <condition>;
Renames attributes for output result SELECT salary AS Pay FROM Personnel WHERE Surname = 'FRENCH';
Youll see from your database that Frenchs salary is 20184
RESULT Pay 20184
query 2
E.g.
query 3
SELECT p.div, b.div, surname FROM personnel p, branch b WHERE p.div=b.div and City='BRISTOL';
Table aliases List all tables used in FROM clause Specify matching columns in WHERE clause!!!!!! Make it clear which table each column belongs to
WHERE Clause
Combine conditions with AND, OR Text strings must be enclosed in single quotes case sensitive (in Oracle)! E.g. this will return nothing from your database SELECT * FROM PERSONNEL WHERE Sex='f';
query 4
LIKE operator
Used for string comparisons and pattern matching in WHERE clause Uses wildcards: _ (underscore): any single character (? in Access) % (percent): string of any length (* in Access)
ORDER BY
Sorts the result according to the column Can use several levels, e.g. SELECT * FROM PERSONNEL query 6 ORDER BY JobTitle, Salary Desc;
Sorts results by jobtitle, and where jobtitle is the same, sorts by salary, highest first
query 7
SELECT Surname,City,Salary AS Income FROM Personnel,Branch B WHERE Personnel.Div = b.div AND (City LIKE '%S%' OR Surname LIKE '_R%') ORDER BY CITY, SALARY DESC; ASURNAME
JAMES RAINES HAMILTON TRINGHAM KUMAR FRENCH BRAY MACRAE BROCK
SURNAME TRINGHAM CITY BRISTOL BRISTOL BRISTOL BRISTOL LONDON LONDON LONDON LONDON LONDON INCOME 42000 25872 18534 9384 30816 20184 18000 16200 12288
CITY BRISTOL BRISTOL BRISTOL BRISTOL LONDON LONDON LONDON CITY BRISTOL LONDON LONDON LONDON
INCOME 42000 25872 18534 9384 20184 18000 12288 INCOME 9384 20184 18000 12288
D SURNAME
Explicit Join
can specify JOINS explicitly in the From clause different types of JOIN operations: INNER, LEFT, RIGHT, FULL
query 8
SELECT city, jobtitle Worked FROM branchExample b LEFT JOIN personnel p ON b.div=p.div WHERE city <>'BRISTOL';
CITY JOBTITLE
LONDON LONDON LONDON LONDON LONDON LONDON LONDON LONDON LONDON LONDON LONDON MANCHESTER BIRMINGHAM
SECRETARY CLERK CHAIRMAN DIRECTOR MANAGER SECRETARY ACCOUNTANT CONSULTANT CONSULTANT MANAGER CONSULTANT
These are included in the LEFT JOIN even though there is no match. They would NOT be included if it were an INNER JOIN
12
13
Aggregates
extends SQL COUNT COUNT(*) how many tuples? COUNT(DISTINCT <field>) how many unique values in field? SUM, MAX, MIN, AVG Examples
14
GROUP BY
SELECT Div, SUM(Salary) FROM Personnel GROUP BY Div SELECT SUM(Salary) FROM Personnel
30
20 10
98400
95790 179340
SUM(SALARY) 373530
15
Error!
HAVING
For conditions at the group level Can only be used with GROUP BY
query10
16
For each division where total salary is more than 25,000, show no. of employees and total salary. Which SQL will achieve this?
A
B
SELECT Div, COUNT(Surname), SUM(SALARY) FROM Personnel GROUP BY Div HAVING SUM(Salary)>25000;
SELECT Div, COUNT(Surname), SUM(SALARY) FROM Personnel WHERE Salary > 25000 GROUP BY Div;
SELECT Div,COUNT(Surname),SUM(SALARY) Total FROM Personnel GROUP BY Div HAVING Total>25000; Both A and C are correct
C D
Use of Aliases
Renaming
Finds employees who share the same manager and the same job title
columns in the result output table abbreviations for use within SQL
Query11
SELECT p1.surname , p2.surname FROM personnel p1, personnel p2 WHERE p1.manager = p2.manager and p1.surname <> p2.surname and p1.jobtitle = p2.jobtitle;
18
Syntax of SELECT
The full syntax of an SQL Select statement is
SELECT [DISTINCT] <attribute list> FROM <table list> [WHERE <condition>] [GROUP BY <attribute list>] [HAVING <group condition>] [ORDER BY <attribute list>]; [] denotes optional parts. Explicit JOIN not included
19
Keyword Definitions
WHERE
A condition on individual tuples determines whether it is included in the result implicit joins (e.g. table1.key = table2.key) Collects together tuples which have the same value for the specified fields A condition on each group determines whether that group is included in result The result table is sorted with this clause
GROUP BY
HAVING
ORDER BY
20
21
Interactive practice environment for SQL Available in the DatabasePlace online You should have details and a password in your copy of Connolly/Begg
22