Slide 1

Slide 1 text

2 December 2005 Introduction to Databases Structured Query Language Prof. Beat Signer Department of Computer Science Vrije Universiteit Brussel beatsigner.com

Slide 2

Slide 2 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 2 March 13, 2019 Context of Today's Lecture Access Methods System Buffers Authorisation Control Integrity Checker Command Processor Program Object Code DDL Compiler File Manager Buffer Manager Recovery Manager Scheduler Query Optimiser Transaction Manager Query Compiler Queries Catalogue Manager DML Preprocessor Database Schema Application Programs Database and System Catalogue Database Manager Data Manager DBMS Programmers Users DB Admins Based on 'Components of a DBMS', Database Systems, T. Connolly and C. Begg, Addison-Wesley 2010

Slide 3

Slide 3 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 3 March 13, 2019 Structured Query Language (SQL) ▪ Declarative query language to create database schemas, insert, update, delete and query information based on a data definition and data manipulation language ▪ Data definition language (DDL) ▪ definition of database structure (relation schemas) ▪ data access control ▪ Data manipulation language (DML) ▪ query language to create, read, update and delete tuples (CRUD operations)

Slide 4

Slide 4 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 4 March 13, 2019 Structured Query Language (SQL) ... ▪ The SQL language further deals with the following issues ▪ transaction control ▪ integrity constraints (DDL) ▪ authorisation (DDL) ▪ views (DDL) ▪ embedded SQL and dynamic SQL

Slide 5

Slide 5 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 5 March 13, 2019 ▪ SEQUEL (70's) ▪ structured english query language ▪ developed by Raymond F. Boyce and Donald D. Chamberlin ▪ access data stored in IBM's System R relational database ▪ SQL-86 ▪ first ANSI standard version ▪ SQL-89 / SQL 1 ▪ SQL-92 / SQL 2 ▪ we will mainly discuss features of the SQL-92 standard History of SQL Donald D. Chamberlin Raymond F. Boyce

Slide 6

Slide 6 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 6 March 13, 2019 History of SQL ... ▪ SQL:1999 / SQL 3 ▪ recursive queries, triggers, object-oriented features, ... ▪ SQL:2003 ▪ window functions, XML-related features, ... ▪ SQL:2006 ▪ XML Query Language (XQuery) support, ... ▪ SQL:2008 ▪ SQL:2011 ▪ improved support for temporal databases ▪ …

Slide 7

Slide 7 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 7 March 13, 2019 SQL "Standard" ▪ Each specific SQL implementation by a database vendor is called a dialect ▪ The vendors implement parts of the SQL standard (e.g. most implement SQL-92) but add their vendor- specific extensions ▪ Most relational database vendors conform to a set of Core SQL features but portability might still be limited due to missing or additional features

Slide 8

Slide 8 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 8 March 13, 2019 Data Definition Language (DDL) ▪ The data definition language (DDL) is used to specify the relation schemas as well as other information about the relations ▪ relation schemas ▪ attribute domain types ▪ integrity constraints (e.g. foreign keys) ▪ relation indexes ▪ access information ▪ physical storage structure of relations

Slide 9

Slide 9 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 9 March 13, 2019 Database Creation ▪ The concrete process of creating a new database might differ for different relational database products ▪ According to the SQL standard, an SQL environment contains one or more catalogues ▪ Each catalogue manages various metadata ▪ set of schemas consisting of - relations/tables - views - assertions - indexes ▪ SET SCHEMA name can be used to set the current schema ▪ users and user groups environment catalogue catalogue schema schema schema

Slide 10

Slide 10 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 10 March 13, 2019 Database Creation ... ▪ The creation of catalogues is not covered by the SQL standard and therefore implementation specific ▪ Schemas can be created and deleted via the CREATE and DROP statements ▪ The default parameter of the DROP SCHEMA statement is RESTRICT ▪ only empty schema can be deleted ▪ If CASCADE is specified, all objects associated with the schema will be dropped createSchema = "CREATE SCHEMA" , name , "AUTHORIZATION" , creator , [ ddlStatements ]; dropSchema = "DROP SCHEMA" , name , [ "RESTRICT" | "CASCADE" ];

Slide 11

Slide 11 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 11 March 13, 2019 Extended Backus-Naur Form (EBNF) ▪ Notation to describe computer program- ming languages (context-free grammars) ▪ developed by Niklaus Wirth Notation Meaning = Definition , Sequence ; Termination | Choice [...] Option {...} Repetition (...) Grouping "..." Terminal String Niklaus Wirth We use the EBNF to describe different SQL concepts http://en.wikipedia.org/wiki/Extended_Backus-Naur_Form

Slide 12

Slide 12 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 12 March 13, 2019 Relational Database Example customerID name street postcode city 1 Max Frisch Bahnhofstrasse 7 8001 Zurich 2 Eddy Merckx Pleinlaan 25 1050 Brussels 5 Claude Debussy 12 Rue Louise 75008 Paris 53 Albert Einstein Bergstrasse 18 8037 Zurich 8 Max Frisch ETH Zentrum 8092 Zurich cdID name duration price year 1 Falling into Place 2007 17.90 2007 2 Carcassonne 3156 15.50 1993 3 Chromatic 3012 16.50 1993 customer cd

Slide 13

Slide 13 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 13 March 13, 2019 Relational Database Example ... supplierID name postcode city 5 Max Frisch 8037 Zurich 2 Mario Botta 6901 Lugano orderID customerID cdID date amount status 1 53 2 13.02.2010 2 open 2 2 1 15.02.2010 1 delivered order supplier Customer (customerID, name, street, postcode, city) CD (cdID, name, duration, price, year) Order (orderId, customerID, cdID, date, amount, status) Supplier (supplierID, name, postcode, city) relational database schema

Slide 14

Slide 14 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 14 March 13, 2019 Table Definition Example CREATE TABLE Customer ( customerID INTEGER CHECK (customerID > 0) PRIMARY KEY, name VARCHAR(30) NOT NULL, street VARCHAR(30) NOT NULL, postcode SMALLINT CHECK (postcode > 0), city VARCHAR(20) ); CREATE TABLE CD ( cdID INTEGER PRIMARY KEY, name VARCHAR(30) NOT NULL, duration TIME, price NUMERIC(6,2), year SMALLINT );

Slide 15

Slide 15 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 15 March 13, 2019 Table Definition Example ... CREATE TABLE Supplier ( supplierID INTEGER PRIMARY KEY, name VARCHAR(30) NOT NULL, postcode SMALLINT CHECK (postcode > 0), city VARCHAR(20) ); CREATE TABLE Order ( orderID INTEGER CHECK (orderID > 0) PRIMARY KEY, customerID INTEGER, cdID INTEGER , date DATE, amount INTEGER, Status VARCHAR(20) NOT NULL DEFAULT 'open', UNIQUE (customerID, cdID, date), FOREIGN KEY (customerID) REFERENCES Customer(customerID) ON UPDATE CASCADE ON DELETE SET NULL, FOREIGN KEY (cdID) REFERENCES CD(cdID) ON UPDATE CASCADE );

Slide 16

Slide 16 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 16 March 13, 2019 Table Constraints ▪ We can have only one PRIMARY KEY constraint but multiple UNIQUE constraints ▪ if no primary key is defined, duplicates are allowed (bag) ▪ Referential integrity ▪ a foreign key always has to have a matching value in the referenced table (or it can be null) ▪ different referential actions can be defined for update (ON UPDATE) and delete (ON DELETE) operations on the referenced candidate key - CASCADE: propagate operations to the foreign keys which might lead to further cascaded operations - SET DEFAULT: set the foreign keys to their default value - SET NULL: set the foreign keys to NULL - NO ACTION: the operation on the candidate key will be rejected (default)

Slide 17

Slide 17 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 17 March 13, 2019 Table Definition createTable = "CREATE TABLE" , table , "(" , ( columnElement | tableConstraint ) , { "," , ( columnElement | tableConstraint ) } , ")"; columnElement = column , datatype , [ "DEFAULT" , ( value | "NULL" ) ] , { columnConstraint }; columnConstraint = "NOT NULL" | "UNIQUE" | "PRIMARY KEY" | ( "REFERENCES" , table , [ "(" , column , ")" ] , { referentialAction } ) | ( "CHECK (" , searchCondition , ")" ); tableConstraint = ( ( "UNIQUE" | "PRIMARY KEY ) , "(" , column , { "," , column } , ")" ) | ( "FOREIGN KEY (" , column , { "," , column } , ")" , "REFERENCES" , table , [ "(" , column , { "," , column } , ")" ] , { referentialAction } ) | ( "CHECK (" , searchCondition , ")" );

Slide 18

Slide 18 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 18 March 13, 2019 Table Definition ... referentialAction = ( "ON UPDATE" | "ON DELETE" ) , ( "CASCADE" | "SET DEFAULT" | "SET NULL" | "NO ACTION" );

Slide 19

Slide 19 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 19 March 13, 2019 SQL Datatypes ▪ Character data ▪ fixed-length or variable-length sequence of characters ▪ optional multibyte character sets (e.g. for Japanese etc.) ▪ Large character data or binary data ▪ often a so-called locator is returned to access a large object in pieces instead of loading the entire object into memory char = fixedChar | varyingChar [charSet]; fixedChar = "CHAR" , [ "(" , length , ")" ]; varyingChar = "VARCHAR" , [ "(" , maxLength , ")" ]; charSet = "CHARACTER SET" charSetName; lob = clob | blob; clob = "CLOB" , [ "(" , size , ")" ]; blob = "BLOB" , [ "(" , size , ")" ];

Slide 20

Slide 20 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 20 March 13, 2019 SQL Datatypes ... ▪ Numeric data ▪ The DECIMAL datatype is sometimes used as a synonym for the NUMERIC datatype numeric = decimal | int | smallInt | float | real | double; decimal = "DECIMAL" , [ "(" , precision , [ "," , scale ] , ")" ]; int = "INTEGER"; smallInt = "SMALLINT"; float = "FLOAT" , [ "(" , precision , ")" ]; real = "REAL"; double = "DOUBLE PRECISION";

Slide 21

Slide 21 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 21 March 13, 2019 SQL Datatypes ... ▪ Datetime data ▪ Format of the datetime values ▪ date: YYYY-MM-DD ▪ time: hh:mm:ss.p ± hh:mm ▪ timestamp: YYYY-MM-DD hh:mm:ss.p ± hh:mm datetime = date | time | timestamp; date = "DATE"; time = "TIME" , [ "(" , precision , ")" ] , [ "WITH TIME ZONE" , timezone ]; timestamp = "TIMESTAMP" , [ "(" , precision , ")" ] , [ "WITH TIME ZONE" , timezone ];

Slide 22

Slide 22 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 22 March 13, 2019 SQL Datatypes ... ▪ Boolean ▪ the domain of boolean values consist of the two truth values TRUE and FALSE ▪ a third UNKNOWN truth value is used to represent NULL values ▪ introduced in SQL:1999 ▪ Bit data ▪ fixed or varying sequence of binary digits (0 or 1) boolean = "BOOLEAN"; bit = fixedBit | varyingBit; fixedBit = "BIT" , [ "(" , length , ")" ]; varyingBit = "BIT VARYING" , [ "(" , maxLength , ")" ];

Slide 23

Slide 23 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 23 March 13, 2019 SQL Datatypes ... ▪ For further details about the presented datatypes as well as information about vendor-specific datatypes one has to consult the specific database manuals datatype = char | lob | numeric | datetime | boolean | bit;

Slide 24

Slide 24 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 24 March 13, 2019 Data Manipulation ▪ After a table has been created, we can use the INSERT command to add tuples ▪ unspecified attribute values are set to the default value or NULL ▪ attribute order can be changed via optional column names ▪ "bulk loader" utilities to insert large amounts of tuples ▪ Example INSERT INTO Customer VALUES(8,'Max Frisch','ETH Zentrum', 8001, 'Zurich'); insert = "INSERT INTO" , table , [ "(" , column , { "," , column } , ")" ] , ( "VALUES (" , expr , { "," , expr } , ")" ) | ( "(" , query , ")" );

Slide 25

Slide 25 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 25 March 13, 2019 Expressions expr = exprElement { ( "+" | "-" | "*" | "/" ) , exprElement }; exprElement = column | value | "COUNT" , "(" ( "*" | ( [ "ALL" | "DISTINCT" ] , column ) , ")" | ( "MIN" | "MAX" ) , "(" , expr , ")" | ( "SUM" | "AVG" ) , "(" , [ "DISTINCT" ] , expr , ")";

Slide 26

Slide 26 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 26 March 13, 2019 Data Manipulation ... ▪ The DELETE statement can be used to delete tuples ▪ Tuples can be updated via the UPDATE statement ▪ Example UPDATE Customer SET name = 'Walter Faber' WHERE customerID = 8; update = "UPDATE" , table , "SET" , column , "=" , ( "NULL" | expr | "(" , query , ")" ) , { "," , column , "=" , ("NULL" | expr | "(" , query , ")" ) } , [ "WHERE" , searchCondition ]; delete = "DELETE FROM" , table [ "WHERE" , searchCondition ];

Slide 27

Slide 27 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 27 March 13, 2019 Data Manipulation ... ▪ The DROP TABLE statement can be used to delete a relation from the database ▪ A relation schema can be modified via the ALTER TABLE command ▪ existing tuples are assigned a NULL value for the new attribute ▪ Example alterTable = "ALTER TABLE" , table , "ADD" , ( columnElement | columnConstraint ); ALTER TABLE Customer ADD birthdate DATE; dropTable = "DROP TABLE" , table;

Slide 28

Slide 28 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 28 March 13, 2019 Basic SQL Query Structure ▪ A basic SQL query consists of a SELECT, a FROM and a WHERE clause ▪ SELECT - specifies the columns to appear in the result (projection in relational algebra) ▪ FROM - specifies the relations to be used (cartesian product in relational algebra) ▪ WHERE - filters the tuples (selection in relational algebra) - join conditions are explicitly specified in the WHERE clause ▪ GROUP BY - groups rows with the same column values - the HAVING construct can be used to further filter the groups ▪ ORDER BY - defines the order of the resulting tuples

Slide 29

Slide 29 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 29 March 13, 2019 Basic SQL Query Structure ... ▪ In general, the SELECT FROM WHERE parts are evaluated as follows 1. generate a cartesian product of the relations listed in the FROM clause 2. apply the predicates specified in the WHERE clause on the result of the first step 3. for each tuple in the result of the second step output the attri- butes (or results of expressions) specified in the SELECT clause ▪ The evaluation is normally optimised by a query optimiser

Slide 30

Slide 30 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 30 March 13, 2019 Basic SQL Query Structure ... ▪ The order of clauses in an SQL query cannot be changed ▪ Note that the SELECT is equivalent to a relational algebra projection ▪ In contrast to the relational algebra, SQL does not eliminate duplicates automatically ▪ the automatic elimination of duplicates would be time consuming ▪ user has to eliminate duplicates explicitly via DISTINCT keyword SELECT A1 , A2 ,..., An FROM r1 , r2 ,..., rm WHERE P pA1,A2,...,An (sP (r1  r2  ...  rm ) is equivalent to

Slide 31

Slide 31 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 31 March 13, 2019 SELECT Clause ▪ A '*' can be used in the SELECT clause as a shortcut to get all tuple attributes SELECT * FROM Customer; customerID name street postcode city 1 Max Frisch Bahnhofstrasse 7 8001 Zurich 2 Eddy Merckx Pleinlaan 25 1050 Brussels 5 Claude Debussy 12 Rue Louise 75008 Paris 53 Albert Einstein Bergstrasse 18 8037 Zurich 8 Max Frisch ETH Zentrum 8092 Zurich

Slide 32

Slide 32 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 32 March 13, 2019 SELECT Clause ... ▪ Duplicate tuples resulting from a projection to specific attributes are not eliminated by default SELECT name FROM Customer; name Max Frisch Eddy Merckx Claude Debussy Albert Einstein Max Frisch

Slide 33

Slide 33 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 33 March 13, 2019 SELECT Clause ... ▪ The DISTINCT keyword can be used to eliminate duplicates SELECT DISTINCT name FROM Customer; name Max Frisch Eddy Merckx Claude Debussy Albert Einstein

Slide 34

Slide 34 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 34 March 13, 2019 Computed Attributes and Rename ▪ Computations can be performed in the SELECT clause ▪ multiple numeric attributes can be used in a computation ▪ The rename operation (AS) is used to rename relations as well as attributes ▪ computed columns have no name by default ▪ also used when multiple relations have the same attribute names SELECT name, price * 1.5 AS newPrice FROM CD; name newPrice Falling into Place 26.85 Carcassonne 23.20 Chromatic 24.75

Slide 35

Slide 35 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 35 March 13, 2019 WHERE Clause ▪ In the WHERE clause we can use five basic predicates (search conditions) ▪ comparison - compare two expressions ▪ range - check whether the value is within a specified range of values (BETWEEN) ▪ set membership - check whether the value is equal to a value of a given set (IN) ▪ pattern matching - test whether the expression matches a specifies string pattern (LIKE) ▪ check for NULL values - check whether the expression is a NULL value (IS NULL)

Slide 36

Slide 36 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 36 March 13, 2019 WHERE Clause ... SELECT name, postcode FROM Customer WHERE city = 'Zurich' AND postcode >= 8040; name postcode Max Frisch 8092 SELECT name, price FROM CD WHERE price BETWEEN 15.0 AND 17.0; name price Carcassonne 15.50 Chromatic 16.50

Slide 37

Slide 37 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 37 March 13, 2019 WHERE Clause ... ▪ Check for set membership with the IN construct SELECT * FROM Customer WHERE city IN ('Zurich', 'Brussels'); customerID name street postcode city 1 Max Frisch Bahnhofstrasse 7 8001 Zurich 2 Eddy Merckx Pleinlaan 25 1050 Brussels 53 Albert Einstein Bergstrasse 18 8037 Zurich 8 Max Frisch ETH Zentrum 8092 Zurich

Slide 38

Slide 38 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 38 March 13, 2019 Pattern Matching ▪ Strings are enclosed in single quotes ▪ use a double single quote for escaping ▪ The LIKE operator is used for pattern matching ▪ the underscore (_) is a placeholder for a single character ▪ the percent sign (%) is a placeholder for any substring ▪ e.g. LIKE '_e%' name Albert Einstein SELECT DISTINCT name FROM Customer WHERE name LIKE '%Ein%';

Slide 39

Slide 39 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 39 March 13, 2019 Null Values ▪ Missing (unknown) info is represented by NULL values ▪ result of any comparison involving a NULL value is Unknown ▪ three-valued logic (3VL) based on True, False and Unknown True False Unknown True True False Unknown False False False False Unknown Unknown False Unknown AND True False Unknown True True True True False True False Unknown Unknown True Unknown Unknown OR = True False Unknown True True False Unknown False False True Unknown Unknown Unknown Unknown Unknown NOT True False Unknown False True Unknown

Slide 40

Slide 40 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 40 March 13, 2019 Null Values ... ▪ The NULL keyword can also be used in predicates to check for null values ▪ Note that a check for NULL is not the same as a check for the empty String '' SELECT * FROM CD WHERE price IS NOT NULL; cdID name duration price year 1 Falling into Place 2007 17.90 2007 2 Carcassonne 3156 15.50 1993 3 Chromatic 3012 16.50 1993

Slide 41

Slide 41 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 41 March 13, 2019 FROM Clause ▪ The FROM clause creates a cartesian product of multiple relations and can be used to specify join operations ▪ In a previous lecture we have seen the following relational algebra expression - "list the name and street of customers whose order is still open" - pname, street (sstatus="open" (order ⋈ customer)) - the same can be achieved in SQL by explicitly specifying the matching attributes SELECT name, street FROM Customer, Order WHERE Order.customerID = Customer.customerID AND status = 'open'; name street Albert Einstein Bergstrasse 18

Slide 42

Slide 42 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 42 March 13, 2019 Inner and Outer Joins ▪ Note that there exist SQL extensions to perform join operations between two relations R and S in the FROM clause ▪ Inner Joins ▪ Outer Joins SELECT * FROM R NATURAL JOIN S; SELECT * FROM R CROSS JOIN S; SELECT * FROM R JOIN S ON R.A > S.B; SELECT * FROM R LEFT OUTER JOIN S ON R.A = S.B; SELECT * FROM R RIGHT OUTER JOIN S ON R.A = S.B; SELECT * FROM R FULL OUTER JOIN S ON R.A = S.B;

Slide 43

Slide 43 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 43 March 13, 2019 Correlation Variable ▪ A correlation variable can be used as an alias for a table ▪ Example ▪ "Find all pairs of CDs that were produced in the same year" SELECT c1.name AS name1, c2.name AS name2 FROM CD c1, CD c2 WHERE c1.year = c2.year AND c1.cdID < c2.cdID; name1 name2 Carcassonne Chromatic

Slide 44

Slide 44 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 44 March 13, 2019 Sorting ▪ The ORDER BY clause can be used to arrange the result tuples in ascending (ASC) or descending (DESC) order ▪ multiple sort keys can be specified; highest priority first ▪ tuples with NULL values are either before or after non-NULL tuples SELECT name, street, city FROM Customer ORDER BY city ASC, name DESC; name street city Eddy Merckx Pleinlaan 25 Brussels Claude Debussy 12 Rue Louise Paris Max Frisch ETH Zentrum Zurich Max Frisch Bahnhofstrasse 7 Zurich Albert Einstein Bergstrasse 18 Zurich

Slide 45

Slide 45 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 45 March 13, 2019 Set Operations ▪ The UNION, INTERSECT and EXCEPT operations correspond to the ,  and - relational algebra operations ▪ the relations have to be compatible (same attributes) ▪ these operations remove duplicates by default - the ALL keyword has to be used to retain duplicates (SELECT name FROM Customer) INTERSECT (SELECT name FROM Supplier); name Max Frisch

Slide 46

Slide 46 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 46 March 13, 2019 Aggregate Functions and Grouping ▪ In SQL there are five aggregate functions (MIN, MAX, AVG, SUM and COUNT) that take a set or multiset of values as input and return a single value ▪ Example ▪ "Find the number of customers in each city" ▪ Aggregate functions (except COUNT(*)) ignore NULL values in the input set ▪ input set might be empty in which case NULL is returned SELECT city, COUNT(customerID) AS number FROM Customer GROUP BY city; city number Zurich 3 Brussels 1 Paris 1

Slide 47

Slide 47 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 47 March 13, 2019 Subqueries ▪ A subquery is a SELECT FROM WHERE expression that is nested within another query ▪ e.g. via check for set membership (IN or NOT IN) ▪ Example ▪ "Find all the suppliers who are no customers" SELECT DISTINCT name FROM Supplier WHERE name NOT IN (SELECT name FROM Customer); name Mario Botta

Slide 48

Slide 48 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 48 March 13, 2019 Nested Subqueries ... ▪ Example ▪ "Find all CDs with a price smaller than average" SELECT * FROM CD WHERE price < (SELECT AVG(price) FROM CD); cdID name duration price year 2 Carcassonne 3156 15.50 1993 3 Chromatic 3012 16.50 1993

Slide 49

Slide 49 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 49 March 13, 2019 Set Comparison ▪ For nested queries with conditions like "greater than at least one" we can use these set comparison operators ▪ > SOME, >= SOME, < SOME, <= SOME, = SOME, <> SOME as well as the same combination with ALL ▪ Example ▪ "Find the customers with a postcode greater than all supplier postcodes" SELECT name ,postcode FROM Customer WHERE postcode > ALL (SELECT postcode FROM Supplier); name postcode Claude Debussy 75008 Max Frisch 8092

Slide 50

Slide 50 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 50 March 13, 2019 Existence Test ▪ The EXISTS operator can be used to check if a tuple exists in a subquery ▪ Example ▪ "Find the customers who are also suppliers" SELECT name FROM Customer WHERE EXISTS (SELECT * FROM Supplier WHERE Supplier.name = Customer.name); name Max Frisch

Slide 51

Slide 51 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 51 March 13, 2019 Derived Relations ▪ A subquery expression can also be used in the FROM clause ▪ in this case, a name has to be given to the relation ▪ Example ▪ "Find the number of customers in the city with the most customers" SELECT MAX(noCustomers) AS max FROM (SELECT city, COUNT(customerID) FROM Customer GROUP BY city) AS CityTotal(city, noCustomers); max 3

Slide 52

Slide 52 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 52 March 13, 2019 Basic SQL Query Structure ▪ The query statement can be used to retrieve information from one or multiple database tables ▪ can perform the relational algebra's selection, projection and join operation in a single SELECT FROM WHERE command query = select { ("UNION" | "INTERSECT" | "EXCEPT") , [ "ALL" ] , select}; select = "SELECT" [ "ALL" | "DISTINCT" ] , ("*" | ( expr , [ "AS" , newName ] , { "," , expr , [ "AS" , newName ] } ) , "FROM" , table , [ correlationVar ] , { "," , table , [ correlationVar ] } , [ "WHERE" , searchCondition ] , [ "GROUP BY" , column , { "," , column } , [ "HAVING" , searchCondition ] ]; orderedQuery = query , "ORDER BY" , column , [ "ASC" | "DESC" ] , { "," , column , [ "ASC" | "DESC" ] };

Slide 53

Slide 53 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 53 March 13, 2019 Basic SQL Query Structure ... searchCondition = [ "NOT" ] , search , { ( "AND" | "OR" ) , [ "NOT" ] , search }; search = ( expr , [ "NOT" ] , "BETWEEN" , expr , "AND" , expr ) | ( expr , [ "NOT" ] , "LIKE" , "'" , ( string | "_" | "%" ) , { string | "_" | "%" } , "'" ) | ( column | ( "(" , expr , ")" ) , "IS" , [ "NOT" ] , "NULL" ) | ( expr , ( "=" | "<>" | ">" | ">=" | "<" | "<=" ) , ( expr | ( [ "SOME" | "ALL" ] , "(" , query , ")" ) ) ) | ( expr , [ "NOT" ] , "IN (" , ( ( value , { "," , value } ) | query ) , ")" | ( "EXISTS (" , query , ")";

Slide 54

Slide 54 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 54 March 13, 2019 WITH Clause ▪ The WITH clause can be used to improve the readability by introducing temporary new relations ▪ introduced only in SQL:1999 and not supported by all databases ▪ Example ▪ "Find all customers who bought one of the most expensive CDs" WITH Expensive(price) AS SELECT MAX(price) FROM CD SELECT Customer.name FROM Customer, CD, Order WHERE CD.price = Expensive.price AND CD.cdID = Order.cdID AND Order.customerID = Customer.customerID; name Albert Einstein

Slide 55

Slide 55 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 55 March 13, 2019 Views ▪ New virtual relations (views) can be defined on top of an existing logical model ▪ simplify queries ▪ provide access to only parts of the logical model (security) ▪ computed by executing the query whenever the view is used ▪ Some DBMS allow views to be stored (materialised views) ▪ materialised views have to be updated when its relations change (view maintenance) createView = "CREATE VIEW" , table , [ "(" , column , { "," , column } , ")" ] , "AS" , query;

Slide 56

Slide 56 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 56 March 13, 2019 Views ▪ Example ▪ Note that a view can be used like any other relation ▪ Views are useful for queries but they present a serious problem for UPDATE, INSERT and DELETE operations ▪ modifications are difficult to be propagated to the actual relations ▪ modifications on views are therefore generally not permitted CREATE VIEW CustomerCD AS SELECT Customer.customerID, Customer.name, CD.cdID, CD.name AS cdName FROM Customer, Order, CD WHERE Customer.customerID = Order.customerID AND Order.cdID = CD.cdID;

Slide 57

Slide 57 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 57 March 13, 2019 Transactions ▪ A transaction consists of a sequence of query and/or update statements ▪ atomic set of statements ▪ A transaction explicitly starts when an SQL statement is executed and is ended by ▪ a COMMIT statement ▪ a ROLLBACK statement ▪ In many SQL implementations each SQL statement is a transaction on its own (automatic commit) ▪ this default behaviour can be disabled ▪ SQL:1999 introduced BEGIN ATOMIC ... END blocks ▪ Transactions will be discussed in detail later

Slide 58

Slide 58 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 58 March 13, 2019 Homework ▪ Study the following chapters of the Database System Concepts book ▪ chapter 3 - sections 3.1-3.10 - Introduction to SQL ▪ chapter 4 - sections 4.1-4.5 and section 4.7 - Intermediate SQL

Slide 59

Slide 59 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 59 March 13, 2019 Exercise 5 ▪ Structured Query Language (SQL) ▪

Slide 60

Slide 60 text

Beat Signer - Department of Computer Science - bsigner@vub.ac.be 60 March 13, 2019 References ▪ A. Silberschatz, H. Korth and S. Sudarshan, Database System Concepts (Sixth Edition), McGraw-Hill, 2010 ▪ Donald D. Chamberlin and Raymond F. Boyce, SEQUEL: A Structured English Query Language, Proceedings of the 1974 ACM SIGFIDET Workshop on Data Description, Access and Control (SIGFIDET 1974), Michigan, USA, May 1974 ▪ https://doi.org/10.1145/800296.811515

Slide 61

Slide 61 text

2 December 2005 Next Lecture Advanced SQL