AdvSQL
Advanced SQL
Sources: [Mel02] Melton & Simon: SQL:1999 Understanding Relational Language Components, 2002 [Con02] Connolly & Begg: Database 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 •
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) - Primary Key, Unique • Referential integrity (RI) - Foreign Key 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
Note: no implementations in mainstream products!
Haaga-Helia, Martti Laiho 1997-2007 AdvSQL CREATE TABLE
CREATE [ { GLOBAL | LOCAL} TEMPORARY] TABLE 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 • Implementations: – View resolution, restrictions, updatablity – Macro: inline replacements – Materialized view 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 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 ( 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 TIMESTAMP 'yyyy-mo-dd hh:mi:ss.ddddd' Haaga-Helia, Martti Laiho 1997-2007 AdvSQL .. Interval Datatype here TIMESTAMP 'yyyy-mo-dd hh:mi:ss.ddddd' 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: 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 ( 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 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 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 • Conditionally update rows of a table, or insert 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 Haaga-Helia, Martti Laiho 1997-2007 AdvSQL DECLARE cursor SENSITIVE DECLARE WITH RETURN WITHOUT RETURN FOR READ ONLY FOR UPDATE [ OF Haaga-Helia, Martti Laiho 1997-2007 AdvSQL FETCH .. cursor NEXT PRIOR FIRST LAST ABSOLUTE FETCH [ : 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 Positioned DELETE: DELETE FROM Haaga-Helia, Martti Laiho 1997-2007 AdvSQL SQL/PSM language • declaration of local variables • cursors • condition handlers • flow control • value assignment to variables and parameters • signal and resignal conditions Haaga-Helia, Martti Laiho 1997-2007 AdvSQL SQL/PSM flow control 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 } { Haaga-Helia, Martti Laiho 1997-2007 AdvSQL CREATE FUNCTION [Mel02] CREATE FUNCTION [[ Haaga-Helia, Martti Laiho 1997-2007 AdvSQL CREATE TRIGGER [Gul99] CREATE TRIGGER 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 ) [ ON COMMIT {PRESERVE ROWS | DELETE ROWS} ]
::=
ON
SET
WHERE CURRENT OF
} [REFERENCING