<<

AdvSQL

Advanced SQL

Sources: [Mel02] Melton & Simon: SQL:1999 Understanding Relational Language Components, 2002 [Con02] Connolly & Begg: Systems, 3rd ed, 2002 [Gul99] Gulutzan & Pelzer: SQL-99 Complete, Really, 1999 [Cel99] Joe Celko: SQL for Smarties, 2nd ed, 1999

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Standards, Specs, Implementations, ..

See [Con02] • SQL Standards chapter 5 – ANSI X3.135-1986, X3.168-1989 (ESQL), X3.135-1989 (IEF) – ISO/IEC 9075:1992 (SQL-92), 9075:1999 (SQL:1999), 9075:2003 (SQL:2003), 9075:2006 (SQL:2006), .. – FIPS PUB 127-2 (see http://www.ocelot.ca/) • Specifications – IBM SAA / SQL – X/Open • Implementations (dialects) – Vendors: IBM, Oracle, .. • Related standards – ISO IRDS – ISO RDA – X/Open XA

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL SQL:1999 Parts and Conformances (SQL:2003) [Gul99] • Part 1: SQL/Framework - fundamental concepts • Part 2: SQL/Foundation - syntax and operations • Part 3: SQL/Call-Level Interface - function library • Part 4: SQL/Persistent Stored Modules • Part 5: SQL/Host Language Bindings - ESQL – Ada, C, Cobol, Fortran, Mumps, Pascal, PL/I – (note: not included in SQL:2003) • Minimal Conformance – Core SQL Support • Enhanced Conformance – SQL Packages – SQL Flagger

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Parts of SQL:2003

• 9075-1 SQL/Framework • 9075-2 SQL/Foundation • 9075-3 SQL/CLI • 9075-4 SQL/PSM • 9075-9 SQL/MED • 9075-10 SQL/OLB • 9075-11 SQL/Schemata • 9075-13 SQL/JRT • 9075-14 SQL/XML

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL SQL:1999 Packages [Gul99] [Mel02] • Enhanced datetime facility package • Enhanced integrity management package • OLAP facilities package • PSM package • CLI package (call-level interface) • Basic object support package • Enhanced object support package • Active database package • SQL/MM package (multimedia)

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL SQL Flagger [Gul99]

Flags non-conforming extensions • Core SQL Flagging • Part SQL Flagging • Package SQL Flagging • Syntax Only • Catalog Lookup - syntax and access violations – INFORMATION_SCHEMA

(Compare with FIPS-127 flagger)

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL SQL Statement Classes [Gul99] • SQL-Schema statements (DDL) – CREATE / ALTER / DROP ... • SQL-data statements (~ DML) – INSERT, UPDATE, DELETE, SELECT, cursor management • SQL-transaction statements – START TRANSACTION, SET TRANSACTION, COMMIT, ... • SQL-control statements – CALL, RETURN • SQL-connection statements – CONNECT, SET CONNECTION, DISCONNECT • SQL-session statements – SET TIME ZONE, SET ROLE, SET SESSION ... • SQL-diagnostics statements – GET DIAGNOSTICS

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Terminology & Concepts

ISO SQL-92, SQL:1999: • SQL Environment • SQL Objects • Schema objects hierarchy: [ [catalog.]schema .]object • Connection objects, Session objects • SQL Datatypes • SQL Language

Implementation concepts only: • Database, Indexes, ...

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL SQL Object name classes

• Cluster • Character Set • • Collation • Privilige • Translation • Catalog • Trigger • Schema • Module • • SQL-invoked routine • View – procedure • – function • Domain and UDT • Constraint and Assertion

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Name class hierarchy (draft)

Physical Server

DB Instance

(Database) Catalog

AuthorizationID Schema

Domain / UDT Table / View SQL-Routine Trigger Procedure Function Column

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL SQL-92 Definition Schema - just for defining the Information Schema views as part of the standard!

Users Check_constraints Schemata Check_table_usage Data_Type_Descriptor Check_column_usage Domains Assertions Tables Table_privileges Views Column_privileges Columns Usage_privileges View_table_usage Character_sets View_column_usage Collations Table_constraints Translation Key_column_usage SQL_languages Referential_constraint

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL SQL-92 Information Schema - Implemetations should provide these DBMS independent views

Applicable_Roles Check_constraints Schemata Assertions Data_Type_Privileges Table_privileges Domains Usage_privileges Tables Character_sets Views Collations Columns Translations View_table_usage SQL_Languages View_column_usage SQL_Features Table_constraints … Key_column_usage Referential_constraints

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL SQL Datatypes

Pre-defined datatypes: Constructed datatypes: • Number types • reference types • Bit String types • locators • Binary String types • row types • Character String types • collection types • Temporal types (arrays) • Boolean types • User-defined types

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL … Data types

See [Con02] chapter 6 • Boolean data – Boolean • Character data – Char[acter], Character Varying (Varchar), NChar, NVarchar,.. • Bit data – Bit, Bit varying (not included in SQL:2003) • Exact numeric data – Integer, Smallint, Numeric, Decimal • Approximate numeric data – Float, Real, Double precision • Temporal data – Datetime data: Date, Time, Timestamp .. [WITH TIME ZONE] – Interval

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Literals

• Character 'some text' • National character [varying] N'ÅäöÆçÐĦ' 'ﻕﺥﺖﺁ'N • Integer 12345 • Smallint 12 • Numeric 1.234 123 • Decimal 1.234 • Float 1.23E3 1.23E-2 • Real 1.23E3 1.23E-2 • Bit [varying] B'01011111' (deleted in 2001) X'5F'

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Integrity Enhancement Feature (IEF)

• Required data - Not Null • DOMAIN integrity • Entity integrity (EI) - , Unique • (RI) - referential actions ON UPDATE / ON DELETE: – No Action – Cascade – Set NULL – Set Default • Enterprise constraints Assertions

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Create / Alter / Drop object

DROP … [ RESTRICT | CASCADE ] CASCADE: Drops also the related objects RESTRICT: Drop command fails if related objects exist

Note: implementations may differ

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL CREATE DOMAIN

Syntax: CREATE DOMAIN [AS] [ DEFAULT ] [ ... ] [ COLLATE ]

::= [CONSTRAINT ] CHECK ( ) [ ]

::= NOT DEFERRABLE | DEFERRABLE [INITIALLY IMMEDIATE]

Note: no implementations in mainstream products!

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL CREATE TABLE

CREATE [ { GLOBAL | LOCAL} TEMPORARY] TABLE (

) [ ON COMMIT {PRESERVE ROWS | DELETE ROWS} ]

::= | < table constraint > | ... [Gul99] p 356 -

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL ALTER TABLE

• ADD COLUMN ... • DROP COLUMN … [RESTRICT | CASCADE] • ALTER COLUMN .. SET DEFAULT .. • ALTER COLUMN .. DROP DEFAULT • ADD CONSTRAINT • DROP CONSTRAINT … [RESTRICT | CASCADE]

See [Con02] 6.2

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL CREATE VIEW [Con02] 6.4 [Gul99] p 376- • Syntax CREATE [RECURSIVE] VIEW [ (column_name [, …] ) ] AS [WITH [CASCADED | LOCAL] CHECK OPTION ]

• Implementations: – View resolution, restrictions, updatablity – Macro: inline replacements – Materialized into a hidden temporary base table

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Views

Advantages Disadvantages • Data independence • Update restrictions • Currency • Structure restrictions – changes reflected immed. • Performance? • Improved Security • Reduced complexity • Convenience • Customization • Data integrity See [Con02] chapter 6.4.7 – With Check Option

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Materialized Views

Advantages Disadvantages • Data independence • Update restrictions • Currency • Structure restrictions – changes reflected immed. • Performance? • Improved Security • Reduced complexity • Convenience • Customization • Data integrity See [Con02] chapter 6.4.7 – With Check Option

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL CREATE ASSERTION

Syntax: CREATE ASSERTION CHECK ( ) [ ]

Note: no implementations in mainstream products!

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Numeric Value Functions [Mel02]

• ABS ( numeric-value ) • BIT_LENGTH ( string-value ) • OCTET_LENGTH ( string-value ) • CHAR_LEGTH ( character-string ) • CARDINALITY ( collection-value ) • POSITION ( string-value IN string-value ) • EXTRACT ( datetime-field FROM datetime-value ) • EXTRACT ( datetime-field FROM interval-value ) • EXTRACT ( timezone-field FROM datetime-value ) • MOD ( numeric-dividend , numeric-divisor )

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL String Value Functions / Operators [Mel02]

• SUBSTRING ( string-value FROM start [ FOR length ] ) • SUBSTRING ( string-value SIMILAR string-value ESCAPE character-value ) • UPPER ( character-string-value ) • LOWER ( character-string-value ) • TRIM ( [ BOTH | LEADING | TRAILING ] character FROM character-string-value ) • TRANSLATE ( character-string-value USING translation ) • CONVERT ( character-string-value USING conversion ) • OVERLAY (string-value PLACING string-value FROM start [ FOR length ] )

• string-value || string-value

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Built-in Scalar Operators/functions

• USER • CURRENT_USER • SESSION_USER • SYSTEM_USER • CURRENT_ROLE • CURRENT_PATH

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Datetime Value Functions [Mel02]

• CURRENT_DATE • CURRENT_TIME [ ( precision ) ] • CURRENT_TIMESTAMP [ ( precision ) ] • LOCALTIME [ ( precision ) ] • LOCALTIMESTAMP [ ( precision ) ]

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Temporal data

• DATE 'yyyy-mo-dd' • TIME 'hh:mi:ss' • TIMESTAMP 'yyyy-mo-dd hh:mi:ss.ddddd' • INTERVAL

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Temporal data conversions [Gul99]

EXTRACT ( FROM )

::= YEAR | MONTH | DAY| HOUR | MINUTE | SECOND or

TIMEZONE_HOUR | TIMEZONE_MINUTE (for TIME WITH TIME ZONE or TIMESTAMP WITH TIME ZONE)

Note: following ODBC extensions are still missing in the SQL standard DAYOFWEEK, DAYOFYEAR

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Interval Datatype

Intervals are either or type intervals following the production rule: ::= [TO ]

::= {YEAR | MONTH | DAY | HOUR | MINUTE} [() ] | SECOND [( [,] ) ] ::= {YEAR | MONTH | DAY | HOUR | MINUTE} | SECOND [( ) ]

and types are composed of components of a timestamp as follows:

TIMESTAMP 'yyyy-mo-dd hh:mi:ss.ddddd'

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL .. Interval Datatype [TO ]

here is a more significant component then the

TIMESTAMP 'yyyy-mo-dd hh:mi:ss.ddddd'

YEAR TO MONTH

type DAY(2) TO MINUTE

Example:

Create table test ( YrMonInt INTERVAL YEAR(1) TO MONTH, DyMinInt INTERVAL DAY(3) TO SECOND );

Insert into test (YrMonInt, DyMinInt) values ( INTERVAL '1-06' YEAR(1) TO MONTH, INTERVAL '100 12:00' DAY(3) TO MINUTE); .

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Interval arithmetics

+ => - =>

Example SELECT (CURRENT_DATE – BirthDate) YEAR AS Age FROM ...

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL OVERLAPS [Mel02] chapter 7 Syntax: OVERLAPS ::= (, ) | (, )

Examples: (TIME '10:45:00', INTERVAL '1' HOUR) OVERLAPS (TIME '10:00:00', TIME '10:30:00') is false (TIME '10:45:00', INTERVAL '1' HOUR) OVERLAPS (TIME '10:00:00', TIME '11:30:00') is true

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Value Expressions

• Numeric value expressions • String value expressions • Datetime value expressions • Interval value expressions • Boolean value expressions • Array value expressions ARRAY [value-list ] ARRAY [ ] • Row value expressions [ ROW ] ( field-value, … ) • UDT value expressions • Reference value expressions • Conditional value expressions

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Advanced Value Expressions

• Datatype conversion expressions – CAST • Conditional CASE expressions – CASE – NULLIF – COALESCE • Row value constructors

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL CAST

CAST operator converts a given scalar value to a given scalar data type. Syntax:

CAST ( AS )

Examples:

• CAST (empno AS CHAR(6)) • CAST (NULL AS DATE)

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL CASE expression

Simple CASE decodes the given value expression into various scalar values depending on the evaluated value (compare with the DECODE function of Oracle). Syntax: CASE [ WHEN THEN ] … [ ELSE ] END

Example: CASE sex WHEN 1 THEN 'male' WHEN 2 THEN 'female' WHEN 3 THEN 'not applicable' ELSE 'unknown' END

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL NULLIF

• SQL-92 variant of CASE function is NULLIF (, )

This returns NULL if the arguments and are equal, otherwise value of the first argument is returned. • Examples: – NULLIF (our_cost, -1) returns NULL if our_cost = -1, otherwise the value of our_cost

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL COALESCE

This function returns the first NOT NULL value of the given argument list

• Syntax: COALESCE ( , , …)

• Examples: COALESCE (Salary, 0.0)

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL JOINing

• INNER JOIN • LEFT OUTER JOIN • RIGHT OUTER JOIN • FULL OUTER JOIN • CROSS JOIN • UNION JOIN - every column and every row of both tables

• NATURAL ... • JOIN … USING • JOIN … ON

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL … JOIN

Syntax: As implemented in Allbase/SQL

FromDefinition ::= TableDefinition

( FromDefinition ) INNER TableDefinition FromDefinition NATURAL LEFT [OUTER] JOIN ( FromDefinition ) RIGHT [OUTER]

INNER TableDefinition ON SearchCondition FromDefinition LEFT [OUTER] JOIN ( FromDefinition ) USING (ColumnList) RIGHT [OUTER]

Example: SELECT ... FROM Child NATURAL JOIN Parent - applies iff the matching keys have same names

SELECT ... FROM Child JOIN Parent USING (avain) - applies if the matching keys have same names!

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Predicates

• Comparison • BETWEEN • IS NULL • IN • LIKE • SIMILAR TO • EXISTS • UNIQUE • OVERLAPS • SOME, ANY, ALL • MATCH • IS DISTINCT FROM • TYPE

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL MERGE

Syntax: MERGE INTO [ [ AS ] ] USING

ON WHEN MATCHED THEN WHEN NOT MATCHED THEN

• Conditionally rows of a table, or new rows into a table, or both.

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Advanced Query Expressions

• Table expressions • CORRESPONDING • WITH clause • Grouped tables • Table references • CUBE and ROLLUP • WITH RECURSIVE

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Row Value Constructors

• Syntax ( , , … ) |

• In SQL-92 multi-column comparisons, for example WHERE A.a = B.a AND A.b = B.b AND A.c = B.c can be written using row constructors as follows WHERE (A.a, A.b, A.c) = (B.a, B.b, B.c)

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Table Constructor

• Available in – INSERT, SELECT..FROM – UNION, EXCEPT, INTERSECT • Syntax … VALUES (), (), ...

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL Cursors

• DECLARE ... • Updatability • Sensitivity • Scrollable cursors • Holdable cursors • Ordering and Column Naming • OPEN • Result Set • FETCH .. • Positioned UPDATE • Positioned DELETE • CLOSE

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL DECLARE cursor

SENSITIVE DECLARE INSENSITIVE [ ] ASENSITIVE [ ] CURSOR SCROLL [ ] NO SCROLL [ ] FOR [ ] WITH HOLD WITHOUT HOLD [ ]

WITH RETURN WITHOUT RETURN

FOR READ ONLY FOR UPDATE [ OF ]

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL FETCH .. cursor

NEXT PRIOR FIRST LAST ABSOLUTE RELATIVE

FETCH [ FROM ] INTO [, …]

: [ : ] parameter

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL Positioned UPDATE / DELETE

column names on the left must be explicitly or implicitly included in the FOR UPDATE Positioned UPDATE: column list of the cursor UPDATE

SET = [:] [, …] WHERE CURRENT OF

Positioned DELETE:

DELETE FROM

WHERE CURRENT OF

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL SQL/PSM language

• declaration of local variables • cursors • handlers • flow control • value assignment to variables and parameters • signal and resignal conditions

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL SQL/PSM flow control

SET … = BEGIN [ATOMIC] … END CASE … END CASE IF …THEN … [ELSEIF …] END IF FOR .. AS .. DO … END FOR ITERATE

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL CREATE PROCEDURE [Gul99] [Mel02]

CREATE PROCEDURE [[.] .] ( [ [] [, … ] ] )

[ < routine characteristic> IN [, …] ] OUT INOUT

{ < SQL routine body> SQL | ADA | C | COBOL | MUMPS | PASCAL | PLI | EXTERNAL NAME | PARAMETER STYLE { SQL | GENERAL } { | } | SPECIFIC [ PARAMETER STYLE | DETERMINISTIC | NOT DETERMINISTIC ] | { NO SQL [ EXTERNAL SECURITY | CONTAINS SQL { DEFINER | {READS | MODIFIES } SQL DATA } | INVOKER | { RETURNS NULL ON NULL INPUT | IMPLEMENTATION DEFINED | CALLED ON NULL INPUT } | DYNAMIC RESULT SETS } ]

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL CREATE FUNCTION [Mel02]

CREATE FUNCTION [[.] .] ( [ [] [, … ] ] ) RETURNS [ AS LOCATOR] IN [ < routine characteristic> OUT [, …] ] INOUT [ STATIC DISPATCH ] { < SQL routine body> SQL | ADA | C | COBOL | MUMPS | PASCAL | PLI | EXTERNAL NAME | PARAMETER STYLE { SQL | GENERAL } { | } | SPECIFIC [ PARAMETER STYLE | DETERMINISTIC | NOT DETERMINISTIC ] | { NO SQL [ EXTERNAL SECURITY | CONTAINS SQL { DEFINER | {READS | MODIFIES } SQL DATA } | INVOKER | { RETURNS NULL ON NULL INPUT | IMPLEMENTATION DEFINED | CALLED ON NULL INPUT } | DYNAMIC RESULT SETS } ]

Haaga-Helia, Martti Laiho 1997-2007

AdvSQL CREATE TRIGGER [Gul99]

CREATE TRIGGER {BEFORE | AFTER ON

} [REFERENCING ]

::= INSERT | DELETE | UPDATE [OF ] ::= [FOR EACH {ROW | STATEMENT} ] Action Granularity [ WHEN ( ) ] Action Condition { | Action Body BEGIN ATOMIC {;}… END }

Haaga-Helia, Martti Laiho 1997-2007 AdvSQL RDBMS Implementations

• SQL dialects • Principles and • SQL extentions practices – Database • Extensions for – System Catalogs Administration – Index – Start up / Shut down – … – Backups & Recovery – functions, – Import/Export • “Physical level” – Monitoring – files – Replications – devices – etc

Haaga-Helia, Martti Laiho 1997-2007