Chapter 6. SQL Syntax
Index:
Use ";" to separate multi sql statements. For instance, "insert into test (int1) values(1);insert into test (int1) values(2);". "reserved word", [reserved word] or {v 'reserved word'} is used to quote a column with reserved word name in SQL statement, for instance, 'select {v 'RIGHT'},'other' from states where {v 'RIGHT'}=32. The HXTT XML supports using DATE, TIME, TIMESTAMP, GROUP, ORDER, KEY, DESC, SEQUENCE, INCREMENT, MINVALUE, MAXVALUE, CACHE, CHECK, CYCLE, OTHER, SET, INT, UNIQUE, LEVEL, RELEASE, INDEX, TOP, PACK, CALL, CONNECT, START, PRIMARY, and UPDATE directly in SQL, although they're reserved words too.
select_list: { expression [ [AS] columnAlias] | table.* | * } [,...]
table_reference_list: {table_reference | table_join} [,...]
table_reference: { { table_name | subquery | (table_join) | (VALUES expression[, ...] ) AS tableName(columnName[,...])} [ [AS] tableAlias] } [pivot_clause] [unpivot_clause]
table_name: { [catalog.]tableName} | {UNC path}
table_join: table_reference join_clause [join_clause,...]
join_clause: [NATURAL] { INNER | { [ LEFT | RIGHT | FULL] [OUTER] } } JOIN
table_reference [ ON condition_expression | USING(column1,column2,...) ]
condition_expression: an expression which should return a boolean value.
pivot_clause: PIVOT ( aggregate_function(value_column) FOR pivot_expr IN (column_list) ) [AS] tableAlias
unpivot_clause: UNPIVOT ( value_column FOR pivot_column IN (column_list) ) [AS] tableAlias
group_by_clause: GROUP BY expression [,...] [WITH ROLLUP | CUBE]
union_clause: { UNION | INTERSECT | EXCEPT | MINUS } [ ALL ] select_statement [ union_clause ...]
order_by_clause: ORDER BY expression [ASC|DESC] [,...]
DISTINCT specifies that duplicate rows are discarded. A duplicate row is when each corresponding select_list column has the same value. DISTINCT has no effect on constant, and _rowid_. For instance, "select distinct 'First Name',name,age from users". 'First Name' will be ignored since it's a constant.
expression: a complicated expression which can include parentheses, logical operator(NOT, AND, OR), positives/minus sign(+, -), arithmetical operator(+,-,*,/,%), string operator(|| (left string concat right string), +(left string concat right string), -(trim left string then concat rightstring), $(check whether left string is contained in right string), condition operator(>, >=, =, ==, <=, <, !=, <>), bitwise logical operator(&, |, ~, ^, <<, >>), [NOT] LIKE pattern {escape 'escape_character'},[NOT] ILIKE pattern {escape 'escape_character'}, IS [NOT] NULL, BETWEEN ... AND ..., [NOT] IN, [NOT] EXISTS, [ALL|ANY|SOME] (subquery), [NOT] CASE WHEN expr THEN result [WHEN expr THEN result ...] [ELSE expr] END, CASE expr WHEN compare_expr THEN result [WHEN compare_expr THEN result ...] [ELSE result] END, SQL Escape Syntax({d 'yyyy-mm-dd'}, {t 'hh:mm:ss'}, {ts 'yyyy-mm-dd hh:mm:ss.f...'},{v 'reserved_word'}, {fn functionExpression}, {escape 'oneEcapeCharacter'}, {"varbinary" 'string'}), function(more than 200), aggregate function(MAX, MIN, AVG, COUNT, SUM, STD, STDDEV), constant(null, true, false, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, date, time, timestamp, number, string), column, parameter(?), subquery(single-row subquery, multirow subquery, multiple-column subquery, inline views, correlated subquery) and so on.
"SELECT select_list" can be used to get some calculated values through an one-row ResultSet. Column can be used in all sql except for "SELECT select_list". Parameter(?) can only be used in PreparedStatement.
For instance:
select val('123.222')
select CONVERT('123',SQL_INTEGER) as a,TTOC({d '1999-10-10'},1) as b, IFNULL(1,33) as c, 123 in(456,123,789,'abc') as d, EXTRACT(DECADE FROM '2001-02-16 20:38:40'), '88'+IIF(3<6,'1','0')
select encode('adsdfsdf');
select decode(encode('adsdfsdf'))+'';
SELECT top 8 percent * FROM data.sz9010;
select distinct top 10 * from test where not deleted() order by int1,char1 desc;
select int1,float1 from test where int1>0 group by int1,double1;
select distinct on (int1) int1,double1 from test;
select sum(int1),max(dec1),min(double1) from test;
SELECT SUM(apmast.fnamount), SUM(glcshi.fnadjamt),SUM(glcshi.fncashamt),SUM(glcshi.fndiscount) FROM apmast, glcshi WHERE apmast.fcinvoice +apmast.fvendno = glcshi.fcinvoice + glcshi.fcnameid AND apmast.fduedate between {d '1999-01-01'} AND {d '1999-11-30'} AND apmast.finvdate <= {d '1999-11-30'};
SELECT cellID, columnID, reference, function, parameter FROM repLayout WHERE reportID = '1' AND rowID = 0 ORDER BY columnID;
select distinct int1,double1 from test group by int1,double1,float1;
select distinct * from test where int1>0
select distinct int1,count(*),sum(int1) from brain.user group by int1
SELECT date1,time1,int1 FROM test where TIMESTAMPdIFF(SQL_TSI_YEAR,time1,{ts '3999-03-24 00:59:23.22222'})<-2000 and date1>{d '1900-01-01'} and date1>{d '1960-01-01'} and date1<{d '2000-01-02'}+20;
select int1 as a,c+23 as b,a+b as c from test where a=1;
SELECT INT1,FLOAT1,A.* FROM TEST A WHERE {fn abs(-TEST.INT1)}>0 or a.float1<0 order by int1 asc,currency1,double1*5+int1 desc;
select int1,count(*),sum(int1+count(*)),sum(int1)+int1 from test group by int1 having int1>10;
SELECT SCHOOLNUM, STULINK,CHGNUMBER, {v 'ABSEN$0101'}, {v 'ABSEN$0102'}, USERSTAMP, DATESTAMP, {v 'TIMESTAMP'},SEQUENCE FROM AATD2019 where {v 'ABSEN$0101'}='1234' ORDER BY SCHOOLNUM, STULINK, SEQUENCE;
select char1,char1 like 'Z%',char1 in('ZZAA','Z'),char1 between 'A' and 'ZZZ',char1 in('ZZAA','Z') or char1 between 'A' and 'Z',* from test where char1='Z';
select int1 from test where int1=(select distinct top 1 int1 from test where int1>0);
select int1 from test where int1 in(select int1 from test where not deleted());
select recno(),int1 from test where (recno(),int1) in(select top 2 recno(),int1 from test where int1>0);
select subquery.int1,recno('subquery') from (select top 2 recno(),int1 from test where int1>0) as subquery;
select subquery.int1,recno('test'),test.int1,recno('subquery') from (select top 2 recno(),int1 from test where int1>0) as subquery, test where test.int1=subquery.int1;
ELECT INT1 FROM test as a WHERE EXISTS(SELECT 1 FROM test WHERE int1 >0);
SELECT INT1 FROM test as a WHERE int1>=all(SELECT int1 FROM test);
SELECT INT1 FROM test as a WHERE int1>=any(SELECT int1 FROM test);
SELECT INT1 FROM test as a WHERE int1>=some(SELECT int1 FROM test);
select int1,recno() from test where (int1,recno())>(3,5);
select int1,recno() from test where (recno(),int1)=(6,222);
SELECT * FROM (SELECT * FROM test WHERE int1 = 222 ) as a WHERE EXISTS(SELECT 1 FROM test WHERE int1 >0);
select recno('a'),recno('b'),a.int1,a.char1,b.int1,b.char1 from test a, test as b where recno('a')=recno('b');
select a.int1,a.char1,b.int1,b.char1 from test a inner join test as b on a.int1=b.int1;
select a.int1,a.char1,b.int1,b.char1 from test a NATURAL inner join test as b on a.int1=b.int1;
select recno('a'),recno('b'),a.int1,a.char1,b.int1,b.char1 from test a left join test as b on a.int1=b.int1;
select a.int1,a.char1,b.int1,b.char1 from test a right join test as b on a.int1=b.int1;
select a.int1,a.char1,b.int1,b.char1 from test a full join test as b on a.int1=b.int1;
select recno('a'),recno('b'),a.int1,a.char1,b.int1,b.char1 from test a full join test as b on a.int1==b.int1 and recno('a')!=recno('b');
SELECT * FROM test a LEFT JOIN (test b JOIN test c ON (b.int1 = c.int1)) as d ON (a.int1 = d.int1);
SELECT * FROM test a,test b,test c WHERE a.int1 = b.int1 AND b.int1 = c.int1;
SELECT * FROM test a NATURAL CROSS JOIN test b CROSS JOIN test c WHERE a.int1 = b.int1 AND b.int1 = c.int1;
SELECT * FROM test a LEFT JOIN (test b JOIN test c ON (b.int1 = c.int1)) on recno('a')=recno(2);
SELECT int1 FROM test where int1>0 UNION ALL select int1 from test where int1>3000 order by int1 desc
SELECT int1,* FROM test where int1>0 UNION select int1,* from test where int1>3000 order by int1
ELECT int1,* FROM test where int1>0 INTERSECT all select int1,* from test where int1>3000 order by int1;
SELECT int1,* FROM test where int1>0 EXCEPT select int1,* from test where int1>3000 order by int1 descl
SELECT int1,* FROM test where int1>0 MINUS select int1,* from test where int1>3000 order by int1,double1 desc;
select double1,sum(double1),int1 from test where int1>0 group by int1 having sum(double1)>0 and double1>0;
select distinct 1,a.int1,sum(a.int1) from test as a,test as b group by a.int1,B.int1
select a.int1,a.char1,b.int1,b.char1 from test a NATURAL inner join test as b
select * from (select 'ab5' as a) where a like '%[a-c][^ac][12345]'
select lpad(' ',2*(level-1)) || str(child) s from test_connect_by start with parent=0 connect by prior child = parent;
column_identifier = columnName | "reserved_word" | {v 'reserved_word'}
Adds one or more new rows of data into a table. SQL does't permit that table1 is the same table as table2 when INSERT INTO table1 select * from table2, but the HXTT XML support such an unadvisable operation, for example, INSERT INTO test (INT1,DATE1) select distinct int1,date1 from test.
For instance:
INSERT INTO test (INT1,dec1,time1) VALUES(-1999,-222.33333,{ts '1333-11-30 22:22:22.999999999'});
INSERT INTO test ("INT1","DATE1") VALUES(1999.0111,{d '1996-10-21'});
INSERT INTO test ("INT1","DATE1") VALUES(1999.0111,{d '1996-10-21'}),(333,{d '2006-10-21'});
INSERT INTO test ("INT1") VALUES 1999.0111,333;
insert into ecode values('Maciej', 'Kowalski');
insert into test values (reccount()+1,'abc',date(),{ts '2003-12-18 19:42:17.88'});
INSERT INTO AATD2019 ({v 'ABSEN$0101'}) values('1234');
insert into test select * from test order by int1 asc;
insert into test select * from test order by int1 asc;
For instance:
update order set buyer=(SELECT name FROM user WHERE user.id = order.buyerid);
update test set int1=null where SequenceID=26;
update test set INT1=323232,DEC1=-DEC1 where FLOAT1=3.00 and INT1=222 and DEC1=3.00 and DOUBLE1=34.0 and TIME1 is NULL and CHAR1='ZZAA' and CURRENCY1=0 and BOOLEAN1 is NULL
update AATD2019 set {v 'ABSEN$0101'}='1234' where SequenceID=1;
update test set int1=3333555 where exists(SELECT 1 FROM test WHERE int1 = 222 ) and SequenceID=3;
DELETE FROM table_name [ [AS] tableAlias] [WHERE condition_expression]
Removes rows in a table according to condition_expression.
For instance:
delete from test where SequenceID=4;
CREATE CATALOG [IF NOT EXISTS] catalogName
Create a subdirectory to contain database files.
For instance:
create catalog if not exists data222;
CREATE DATABASE [IF NOT EXISTS] compressed-file-name ?
CREATE DATABASE [IF NOT EXISTS] compressed-file-name ?" sql can be used to create a database from any compressed java.io.InputStream object. Sample is here.
DROP DATABASE [IF EXISTS] databaseName
The DROP DATABASE statement is used to delete a database. IF that database doesn't exist without using IF EXIST, an SQLException will be thrown.
data_type: CHAR(n) | CHARACTER(n) | VARCHAR(n) | BINARY (n) | VARBINARY (n) | NUMERIC(n1[,n2]) | DEC[IMAL](n1[,n2]) | INT[EGER] [ AUTO_INCREMENT] | SMALLINT | FLOAT [(n)] | REAL | DOUBLE | BIT | BOOLEAN | DATE [(dateFormat)] | TIME [(dateFormat)] | TIMESTAMP [(dateFormat)] | LONGVARCHAR [(n)] | LONGVARBINARY [(n)] | JAVA_OBJECT [(n)] | CLOB | BLOB| OTHER(type_name [,n])
n, n1,n2: positive integer, n2 can be 0
constraint: [NULL| NOT NULL] [UNIQUE] [DEFAULT expression] [PRIMARY KEY] [COMMENT 'string']
constraint_clause: [ CONSTRAINT constraint_name ] PRIMARY KEY (column1, column2, . column_n) | CONSTRAINT constraint_name FOREIGN KEY (column1, column2, ... column_n) REFERENCES parent_table (column1, column2, ... column_n) [ON DELETE CASCADE] [ON UPDATE CASCADE] | CONSTRAINT constraint_name UNIQUE (column1, column2, . column_n) | CONSTRAINT constraint_name CHECK (column_name condition)
For instance:
create table testxml.abc (efg varchar(10));
DROP TABLE [IF EXISTS] table_name
Removes a table, and its indexes from the database. IF that table doesn't exist without using IF EXIST, an SQLException will be thrown.
For instance:
drop table if exists states;
ALTER TABLE table_name alter_specification [,...]
alter_specification: {{ADD|MODIFY} column_identifier data_type [constraint]}| DROP column_identifier | RENAME column_identifier 1 TO column_identifier 2 | RENAME TO table_name2 | ADD constraint_clause
When some alter operations are in one ALTER sql, the HXTT XML will complete all RENAME column operations first, then do all ADD, MODIFY, AND DROP column operations at one time, and RENAME table is the last operation.
For instance:
alter table test rename int11 to int1;
alter table test rename int1 to int2, rename to test22;
alter table test22 rename to test;
alter table test add column1 int DEFAULT 3 NULL, drop clob1, modify double1 int;
TRUNCATE TABLE [IF EXISTS] table_name
Remove all table rows.
For instance:
truncate table test;
PACK TABLE [IF EXISTS] table_name
pack the table.
For instance:
pack table test;
RENAME TABLE table_name TO table_name2
Rename the table.
For instance:
RENAME table test to test1;
lock the table. Returns 1 if sucess, 0 if failed to lock a table.
For instance:
lock table test;
unlock the table. Returns 1 if sucess, 0 if failed to unlock a table.
For instance:
unlock table test;
Create an index file which can contains one or more index expressions for a table. The HXTT XML will utilize index when condition_expression contains indexed expression.
For instance:
DROP INDEX [IF EXISTS] {ALL | indexName[,...]} [of indexFileName] ON table_name
Removes the specified index from the database.
For instance:
drop index all on test;
REINDEX {ALL | indexFileName[,...]} ON table_name
Rebuild the specified index.
For instance:
reindex all on test;
Creates a virtual table whose contents (columns and rows) are defined by a query. Temporary view is only visible in the current connection.
For instance:
create or replace temporary view abcv (aaa) select FEC_ANAL FROM ANALISIS;
Drop a virtual table.
For instance:
drop view if exists abcv;
CREATE SEQUENCE [IF NOT EXISTS] sequence_name [AS {INT|SMALLINT|TINYINT|BIGINT}] [START [WITH] n] [INCREMENT [BY] n] [MINVALUE n | NO MINVALUE] [ MAXVALUE n | NO MAXVALUE ] [ CACHE n | NO CACHE] [ [ NO ] CYCLE ]
sequence_name: [catalog.]sequenceName
The optional clause START WITH n allows the sequence to begin anywhere. The default starting value is minvalue for ascending sequences and maxvalue for descending ones. The optional clause INCREMENT BY n specifies which value is added to the current sequence value to create a new value. A positive value will make an ascending sequence, a negative one a descending sequence. The default value is 1. The optional clause MINVALUE n determines the minimum value a sequence can generate. If this clause is not supplied or NO MINVALUE is specified, then defaults will be used. The defaults are 1 and -128(-32768,0x80000000,0x8000000000000000L) for ascending and descending sequences, respectively. The optional clause MAXVALUE n determines the maximum value for the sequence. If this clause is not supplied or NO MAXVALUE is specified, then default values will be used. The defaults are 127(32767,0x7fffffff,0x7fffffffffffffffL)and -1 for ascending and descending sequences, respectively. The optional clause CACHE cache specifies how many sequence numbers are to be preallocated and stored in memory for faster access. The minimum value is 1 (only one value can be generated at a time, i.e., no cache), and this is also the default. The maximum value for cache is 65535. The CYCLE option allows the sequence to wrap around when the maxvalue or minvalue has been reached by an ascending or descending sequence respectively. If the limit is reached, the next number generated will be the minvalue or maxvalue, respectively. If NO CYCLE is specified, any calls to nextval after the sequence has reached its maximum value will throw an exception. If neither CYCLE or NO CYCLE are specified, NO CYCLE is the default.
For instance:
create sequence if not exists userID start WITH 100 increment by 2 maxvalue 2000 cache 5 cycle;
DROP SEQUENCE [IF EXISTS] sequence_name
Removes a sequence from the database. IF that sequence doesn't exist without using IF EXIST, an SQLException will be thrown.
For instance:
drop sequence if exists userID;
ALTER SEQUENCE sequence_name [AS {INT|SMALLINT|TINYINT|BIGINT}] [RESTART [WITH] n] [INCREMENT [BY] n] [MINVALUE n | NO MINVALUE] [ MAXVALUE n | NO MAXVALUE ] [ CACHE n | NO CACHE] [ [ NO ] CYCLE ]
ALTER SEQUENCE changes the parameters of an existing sequence generator. Any parameter not specifically set in the ALTER SEQUENCE command retains its prior setting.
For instance:
alter sequence userID restart WITH 100 increment by 1 maxvalue 5000;
SET TRANSACTION transaction_mode [, ...]
transaction_mode: { ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } | { READ WRITE | READ ONLY }
Sets the transaction characteristics of the current transaction. It effects any subsequent transactions in the same connection. java.sql.Connection.setTransactionIsolation(int level) and java.sql.Connection.setReadOnly(boolean readOnly) can do the same task.
For instance:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;START TRANSACTION [ transaction_mode [, ...] ]
Begins a new transaction block. java.sql.Connection.setAutoCommit(false), java.sql.Connection.setTransactionIsolation(int level), and java.sql.Connection.setReadOnly(boolean readOnly) can do the same task.
For instance:
START TRANSACTION;Terminates the current transaction and makes all changes under the transaction persistent. It commits the changes to the database. java.sql.Connection.commit() can do the same task.
For instance:
commit;ROLLBACK [WORK] [ TO [ SAVEPOINT ] savepoint_name]
Without savepoint_name, terminates the current transaction and rescinds all changes made under the transaction. It rolls back the changes to the database. With savepoint_name, rolls back all commands that were executed after the savepoint was established. java.sql.Connection.rollback() can do the same task of ROLLBACK [WORK] sql.
For instance:
rollback;
SAVEPOINT establishes a new savepoint within the current transaction. java.sql.Connection.setSavepoint(String name) and java.sql.Connection.setSavepoint() can do the same task.
For instance:
savepoint t1;
RELEASE SAVEPOINT savepoint_name
Destroys a savepoint previously defined in the current transaction. java.sql.Connection.releaseSavepoint(Savepoint savepoint) can do the same task.
For instance:
release savepoint t1;
{ [ ? = ] call procedure_name [ ( ? [, ? [ , ... ]] ) ] }
java.sql.CallableStatement can be used to call stored procedure.
For instance:
{call myview(?)};
_rowid_, is a pseudo column as primary key. A _rowid_ identifies a row in a table.
level is a pseudo column that can be used in hierarchical queries (start with .. connect by). For records that appear in the root, level is 1, for their (direct) children, level is 2 and so on.
CURRENT_DATE is a pseudo variable which returns the current date.
CURRENT_TIME is a pseudo variable which returns the current time.
CURRENT_TIMESTAMP is a pseudo variable which returns the current timestamp.
DECLARE variable_name[,...] type [DEFAULT expression]
Variable is visiable only in the same connection.
For instance:
DECLARE abc CHAR(20) DEFAULT 'Hello';
DECLARE x, y INT;
SET variable_name = expression [,...]
expression can be a complicated expresion. BTW, INTO variable[,...] clause of SELECT syntax can set selected columns directly into variables. SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
For instance:
SET x = 1+int(55.5),y=2;
SELECT name,id INTO x,y FROM table1 WHERE id=33;
SELECT date(),pi() INTO x,y;
#one-line comment
--one-line comment
/*multiline comment*/For instance:
select * /* column list */ from test;#This is a select sql.
SQL State Description 01001Cursor operation conflict 01427single-row subquery returns more than one row 01428single-column subquery returns more than one column 01429subquery returns mismatch column number 01436CONNECT BY loop in user data 01430single-row subquery returns none row 07006Restricted data type attribute violation 08000Connection exception 08003Connection not open 08007Connection failure during transaction 08S01Remote database access failure 0A000Feature not supported 0A001Multiple server transactions 21S01Insert value list does not match column list 22000Data exception 22019Invalid escape character 22023Invalid parameter value 23000Integrity constraint violation 24000Invalid cursor state 25000Invalid transaction state 26000Invalid SQL statement name 2A000Direct SQL syntax error or access rule violation 2D000Invalid transaction termination 2E000Invalid connection name 34000Invalid cursor name 34102Invalid variable name 34103Invalid funciton name 34104Invalid index file name 3C000Duplicate cursor name 3D000Invalid catalog name 3F000Invalid schema name 40000Transaction rollback 42000Syntax error or access violation 42001Syntax error 42002Access violation 42003Statement has been closed 60000System errors 99999Catch all others C0100Unknown CodePageID C0101Unknown File Format C0102Unknown Table Version C0103Unknown Index Version C0104Corrupt Index File C0105Invalid Record Number C0106Convert dirty data into null value S0001Base table or view already exists S0021Index already exists S0022Column not found S1002Invalid column number S1009Invalid Argument value S1T00Timeout expired
Copyright © 1999-2011 Hongxin Technology & Trade Ltd. | All Rights Reserved. |