SQL的特性,各种数据库的支持

To get a more in-depth comparison about some of the SQL features compared here, please visit Modern SQL

FeatureOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
Queries           
Window functionsYesYes(*)Yes(*)YesYes(*)Yes(*)Yes(*)NoNoNoYes(*)
Common Table ExpressionsYesYesYesYesYes(*)Yes(*)YesNoYesNoYes(*)
CTE in a sub-query(*)YesYesNoNoYes(*)NoYesNoYesNoYes
Recursive QueriesYesYesYesYesYes(*)YesYes(Yes)(*)YesNoYes(*)
Row constructor(*)NoYesYes(*)YesNoNoNoNoYesYesYes
Filtered aggregates(*)NoYes(*)NoNoNoNoNoNoYesNoYes(*)
PIVOT SupportYesNo(*)YesNoNoNoNoNoNoNoNo
GROUP BY .. ROLLUPYesYes(*)YesYesYesYesNoNoNoYesNo
GROUP BY .. GROUPING SETS(*)YesYes(*)YesYesNoNoNoNoNoNoNo
Temporal queries(*)YesNoYes(*)YesNoYes(*)NoNoNoNoNo
SELECT without a FROM clauseNoYesYesNo(Yes)(*)(Yes)(*)NoYesYes(*)NoYes
Parallel queries(*)YesYes(*)YesYesNoNoNoNoNoNoNo
Aggregates for stringsYes(*)YesYes(*)YesYesYesYesYesYesNoYes
Tuple comparison(Yes)(*)YesNoYesYes(*)Yes(*)No(Yes)(*)YesNo(Yes)(*)
Tuple updatesYesYes(*)NoYesNoNoNoYesYesNoYes(*)
UPDATE with a joinNoYesYesNoYesYesNoNoNoNoNo
ANSI date literals(*)YesYesNoYesYesYesYesYesYesNoNo
Query variables(*)NoNoYesNoYesYesNoYesNoNoNo
UNNEST(*)NoYesNoYesNoNoNoNoYesNoNo
Regular ExpressionsOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
Comparison based on RegEx(*)YesYesNoNoYesYesYesYesYesNoNo
Substring(*)YesYesNoNoYes(*)Yes(*)Yes(*)NoYesNoNo
Replace(*)YesYesNoNoYes(*)Yes(*)NoYesYes(*)NoNo
ConstraintsOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
Deferred constraints(*)YesYesNoNoNoNoNoNoNoYes(*)Yes
Check constraintsYesYesYesYesNoYes(*)YesYesYesYesYes
Check constraints with sub-queryNoNoNoNoNoNoYesNoNoNoNo
Check constraints using custom functions(*)NoYesYesYesNoNoYesNoNoNoNo(*)
Exclusion constraints(*)NoYesNoYes(*)NoNoNoNoNoNoNo
Statement based constraint evaluationYesYesYesYesNoNoNoYesYesYesYes
ON DELETE CASCADE(*)YesYes(Yes)(*)YesYesYesYesYesYesYesYes
ON UPDATE CASCADE(*)NoYes(Yes)(*)NoYesYesYesYesYesNoYes
IndexingOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
Partial index(*)Yes(*)Yes(Yes)(*)NoNoNoNoNoNoNoYes
Descending Index(*)YesYesYesYesYes(*)No(Yes)(*)YesYesNoYes
Index on expression(*)YesYes(No)(*)(Yes)(*)(No)(*)(No)(*)(Yes)(*)NoNoNoYes(*)
Index using a custom function(*)YesYesNoYesNoNoNoNoNoNoNo(*)
Index include columns(*)NoYes(*)YesYesNoNoNoNoNoNoNo
Clustered index(*)Yes(*)NoYesYesYesYesNoNoNoNoYes
Duplicate NULL values in unique index(*)No(*)YesNoNoYes(*)Yes(*)NoYesYesNoYes
DMLOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
Writeable CTEs(*)NoYes(*)Yes(*)NoNoNoNoNoNoNoNo
Multi-row INSERTs(*)NoYesYesYesYesYesNoYesYesYesYes
TRUNCATE table with FK(*)Yes(*)YesNoNoNoNoNoNoNoNoNo
Read consistency during DML operations(*)YesYesYesYesNoYes(*)YesYesYesYesYes
Use target table in sub-queries(*)YesYesYesYesNoNoYesYesYesYesNo(*)
MERGE support(*)YesYes(*)YesYesYes(*)Yes(*)YesYesYesYes(*)No
SELECT .. FOR UPDATE NOWAIT(*)YesYesNo(*)NoYes(*)NoNoNoNoNoNo
RETURNING clause as a result setNoYesYesNoNoNoYesNoNoNoNo
Parallel DML(*)YesNoNoNoNoNoNoNoNoNoNo
Data Types(*)OraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
User defined datatypes(*)YesYesNo(*)YesNoNoNoNoYesNoNo
Domains(*)NoYes(Yes)(*)NoNoNoYesYesYesNoNo
Distinct types(*)NoNoNoYesNoNoNoNoNoNoNo
ArraysNoYesNoNoNoNo(Yes)(*)YesYesNoNo
Enums(*)NoYesNoNoYesYesNoNoNoNoNo
IP addressNoYesNoNoNoNoNoNoNoNoNo
BOOLEAN(*)No(*)YesNo(*)No(*)No(*)No(*)Yes(*)YesYesYesNo
IntervalYesYesNoNoNoNoNoNoYesNoNo
TIME(*)NoYesYesYesYesYesYesYesYesNoNo
DATE(*)No(*)YesYesYesYesYesYesYesYesYesNo
TIMESTAMP(*)YesYesYes(*)YesYes(*)Yes(*)YesYesYesYesNo
TIME ZONE Support(*)YesYesYes(*)NoNoNoNoYesYesNoNo
Range types(*)(No)(*)YesNoNoNoNoNoNoNoNoNo
DDLOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
Transactional DDL(*)NoYesYesYesNoNoYesNoNoNoYes
Computed columns(*)YesNo(*)YesYesYes(*)Yes(*)YesYesYesNoNo
Functions as column default(*)(Yes)(*)YesYesNoNoYes(*)Yes(*)YesYes(*)No(Yes)(*)
SequencesYesYesYesYesNoYes(*)YesYesYesYesNo
Auto increment columns(*)Yes(*)YesYesYesYesYesYesYesYesYesYes
SynonymsYesNoYesYesNoNoNoNoYes(*)YesNo
Non-blocking index creation(*)YesYesYesYesNoNoNoNoNoNoNo
PartitioningYes(Yes)(*)YesYesYesYesNoNoNoNoNo
Cascading DROP(*)YesYesNoYesNo(*)No(*)NoYesYesNoNo
DDL Triggers(*)YesYesYesNoNoNoYes(*)NoNoNoNo
TRUNCATE Trigger(*)(No)(*)YesNoNoNoNoNoNoNoNoNo
Custom name for PK constraint(*)YesYesYesYesNoNoYesYesYesYesYes
ALTER a table used in a view(*)YesNo(*)YesYesYesYesYesYesYesYesYes
Add table column at specific position(*)NoNoNoNoYesYesYesYesYesNoNo
Materialized views(*)YesYesYes(*)Yes(*)NoNoNoNoNoNoNo
MVIEW with query rewrite(*)YesNoYesNoNoNoNoNoNoNoNo
Automatically updated MVIEWS(*)YesNoYesYesNoNoNoNoNoNoNo
Temporary TablesOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
Permanent global temporary tables(*)YesNoNoYesNoNoYesNoYesNoNo
Global temporary tables(*)NoNoYesNoNoNoNoYesNoNoNo
Session local temporary tables(*)NoYesYesNoYesYesNoYesYesNoYes
Use a temporary table twice in a single queryYesYesYesYesNoNoYesYesYesNo(*)Yes
ProgrammingOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
Stored procedures(*)YesYes(*)YesYesYesYesYesNoYesNo(*)No(*)
Table functions(*)YesYesYesYesNoNoYesNoYesNoNo(*)
Custom aggregates(*)YesYesNo(*)NoNoNoNoNoYesNoNo
Function overloading(*)Yes(*)YesNoYesNoNoNoNoYesNoNo
User defined operators(*)No(*)YesNoNoNoNoNoNoNoNoNo
Statement level triggers(*)YesYesYesYesNoNoNoNo(*)YesYesNo
Row level triggers(*)YesYesNoYesYesYesYesNo(*)YesYesYes
RETURNING clause in a programming language(*)YesYesYesNoNoNoYesNoNoNoNo
Before triggers(*)YesYes(No)(*)YesYesYesYesNo(*)YesYesYes
Dynamic SQL in functions(*)YesYesNo(*)YesNoNoYesNoNoNoNo
Dynamic SQL in triggers(*)YesYesYesNoNoNoYesNoNoNoNo
Delete triggers fired by cascading deletes(*)YesYesYesYesNoNoYesNoYesYesYes(*)
Built-in schedulerYesNoYesYesYesYesNoNoNoNoNo
ViewsOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
Updateable ViewsYesYesYesYesYesYesYesNoYesNoNo
WITH CHECK OPTION(*)YesYesYesYesYesYesYesNoYesNoNo
Triggers on viewsYesYesYesYesNoNoYesNoYesNoYes
Views with derived tables(*)YesYesYesYesNoNoYesYesYesYesYes
JOINs and OperatorsOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
CROSS JOINYesYesYesYesYesYesYesYesYesYesYes
FULL OUTER JOINYesYesYesYesNoNoYesNoYesYesNo
LATERAL JOINYes(*)Yes(Yes)(*)YesNoNoNoNoYesNoNo
JOIN ... USING (...)(*)YesYesNoNoYesYesYesNoYesYesYes
JOINs using tuple comparison(*)YesYesNoYesYesYesNoYesYesNoNo
INTERSECT(Yes)(*)Yes(Yes)(*)YesNoYes(*)No(Yes)(*)YesYes(Yes)(*)
EXCEPT(Yes)(*)Yes(Yes)(*)YesNoYes(*)No(Yes)(*)YesYes(Yes)(*)
ORDER BY ... NULLS LASTYesYesNoYesNoNoYesYesYesYesNo
IS DISTINCT FROMNoYesNo(Yes)(*)Yes(*)Yes(*)YesNoYesNoNo
BETWEEN SYMMETRICNoYesNoNoNoNoNoNoYesNoNo
OVERLAPS(*)(Yes)(*)YesNoYes(*)NoNoNoNoYesNoNo(*)
OtherOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
Catalogs ("databases")(Yes)(*)(Yes)(*)YesNoYesYes(Yes)(*)YesYesNoYes
SchemasYesYesYesYesNoNoNoYesYesYesNo
INFORMATION_SCHEMA(*)NoYesYesNoYesYesNoYesYesNoNo
NoSQL FeaturesOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
XML Support(*)YesYesYesYesYesYesNoNoNoNoNo
XPath(*)YesYesYesYesYesYesNoNoNoNoNo
XQueryYesNoYesYesNoNoNoNoNoNoNo
JSON(*)Yes(*)YesYes(*)(Yes)(*)Yes(*)Yes(*)NoNoNoNo(*)Yes(*)
Indexes on JSON documents(*)YesYes(*)(Yes)(*)Yes(No)(*)No(*)NoNoNoNo(Yes)(*)
Key/Value storageNoYesNoNoNo(*)NoNoNo(*)NoNoNo
SecurityOraclePostgresSQL ServerIBM DB2MySQLMariaDBFirebirdH2HSQLDBDerbySQLite
User groups / RolesYesYesYesYesYes(*)Yes(*)YesYesYesYesNo
Row level security(*)YesYes(*)YesYesNoNoNoNoNoNoNo
Grant on column level(*)YesYesYesYesYesYesYesNoYesNoNo

转载于:https://www.cnblogs.com/liuwd/p/10904387.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值