SQL的特性,各种数据库的支持
To get a more in-depth comparison about some of the SQL features compared here, please visit Modern SQL
| Feature | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
|---|---|---|---|---|---|---|---|---|---|---|---|
| Queries | |||||||||||
| Window functions | Yes | Yes(*) | Yes(*) | Yes | Yes(*) | Yes(*) | Yes(*) | No | No | No | Yes(*) | 
| Common Table Expressions | Yes | Yes | Yes | Yes | Yes(*) | Yes(*) | Yes | No | Yes | No | Yes(*) | 
| CTE in a sub-query(*) | Yes | Yes | No | No | Yes(*) | No | Yes | No | Yes | No | Yes | 
| Recursive Queries | Yes | Yes | Yes | Yes | Yes(*) | Yes | Yes | (Yes)(*) | Yes | No | Yes(*) | 
| Row constructor(*) | No | Yes | Yes(*) | Yes | No | No | No | No | Yes | Yes | Yes | 
| Filtered aggregates(*) | No | Yes(*) | No | No | No | No | No | No | Yes | No | Yes(*) | 
| PIVOT Support | Yes | No(*) | Yes | No | No | No | No | No | No | No | No | 
| GROUP BY .. ROLLUP | Yes | Yes(*) | Yes | Yes | Yes | Yes | No | No | No | Yes | No | 
| GROUP BY .. GROUPING SETS(*) | Yes | Yes(*) | Yes | Yes | No | No | No | No | No | No | No | 
| Temporal queries(*) | Yes | No | Yes(*) | Yes | No | Yes(*) | No | No | No | No | No | 
| SELECT without a FROM clause | No | Yes | Yes | No | (Yes)(*) | (Yes)(*) | No | Yes | Yes(*) | No | Yes | 
| Parallel queries(*) | Yes | Yes(*) | Yes | Yes | No | No | No | No | No | No | No | 
| Aggregates for strings | Yes(*) | Yes | Yes(*) | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | 
| Tuple comparison | (Yes)(*) | Yes | No | Yes | Yes(*) | Yes(*) | No | (Yes)(*) | Yes | No | (Yes)(*) | 
| Tuple updates | Yes | Yes(*) | No | Yes | No | No | No | Yes | Yes | No | Yes(*) | 
| UPDATE with a join | No | Yes | Yes | No | Yes | Yes | No | No | No | No | No | 
| ANSI date literals(*) | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | 
| Query variables(*) | No | No | Yes | No | Yes | Yes | No | Yes | No | No | No | 
| UNNEST(*) | No | Yes | No | Yes | No | No | No | No | Yes | No | No | 
| Regular Expressions | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| Comparison based on RegEx(*) | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | No | No | 
| Substring(*) | Yes | Yes | No | No | Yes(*) | Yes(*) | Yes(*) | No | Yes | No | No | 
| Replace(*) | Yes | Yes | No | No | Yes(*) | Yes(*) | No | Yes | Yes(*) | No | No | 
| Constraints | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| Deferred constraints(*) | Yes | Yes | No | No | No | No | No | No | No | Yes(*) | Yes | 
| Check constraints | Yes | Yes | Yes | Yes | No | Yes(*) | Yes | Yes | Yes | Yes | Yes | 
| Check constraints with sub-query | No | No | No | No | No | No | Yes | No | No | No | No | 
| Check constraints using custom functions(*) | No | Yes | Yes | Yes | No | No | Yes | No | No | No | No(*) | 
| Exclusion constraints(*) | No | Yes | No | Yes(*) | No | No | No | No | No | No | No | 
| Statement based constraint evaluation | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | 
| ON DELETE CASCADE(*) | Yes | Yes | (Yes)(*) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 
| ON UPDATE CASCADE(*) | No | Yes | (Yes)(*) | No | Yes | Yes | Yes | Yes | Yes | No | Yes | 
| Indexing | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| Partial index(*) | Yes(*) | Yes | (Yes)(*) | No | No | No | No | No | No | No | Yes | 
| Descending Index(*) | Yes | Yes | Yes | Yes | Yes(*) | No | (Yes)(*) | Yes | Yes | No | Yes | 
| Index on expression(*) | Yes | Yes | (No)(*) | (Yes)(*) | (No)(*) | (No)(*) | (Yes)(*) | No | No | No | Yes(*) | 
| Index using a custom function(*) | Yes | Yes | No | Yes | No | No | No | No | No | No | No(*) | 
| Index include columns(*) | No | Yes(*) | Yes | Yes | No | No | No | No | No | No | No | 
| Clustered index(*) | Yes(*) | No | Yes | Yes | Yes | Yes | No | No | No | No | Yes | 
| Duplicate NULL values in unique index(*) | No(*) | Yes | No | No | Yes(*) | Yes(*) | No | Yes | Yes | No | Yes | 
| DML | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| Writeable CTEs(*) | No | Yes(*) | Yes(*) | No | No | No | No | No | No | No | No | 
| Multi-row INSERTs(*) | No | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | 
| TRUNCATE table with FK(*) | Yes(*) | Yes | No | No | No | No | No | No | No | No | No | 
| Read consistency during DML operations(*) | Yes | Yes | Yes | Yes | No | Yes(*) | Yes | Yes | Yes | Yes | Yes | 
| Use target table in sub-queries(*) | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | No(*) | 
| MERGE support(*) | Yes | Yes(*) | Yes | Yes | Yes(*) | Yes(*) | Yes | Yes | Yes | Yes(*) | No | 
| SELECT .. FOR UPDATE NOWAIT(*) | Yes | Yes | No(*) | No | Yes(*) | No | No | No | No | No | No | 
| RETURNING clause as a result set | No | Yes | Yes | No | No | No | Yes | No | No | No | No | 
| Parallel DML(*) | Yes | No | No | No | No | No | No | No | No | No | No | 
| Data Types(*) | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| User defined datatypes(*) | Yes | Yes | No(*) | Yes | No | No | No | No | Yes | No | No | 
| Domains(*) | No | Yes | (Yes)(*) | No | No | No | Yes | Yes | Yes | No | No | 
| Distinct types(*) | No | No | No | Yes | No | No | No | No | No | No | No | 
| Arrays | No | Yes | No | No | No | No | (Yes)(*) | Yes | Yes | No | No | 
| Enums(*) | No | Yes | No | No | Yes | Yes | No | No | No | No | No | 
| IP address | No | Yes | No | No | No | No | No | No | No | No | No | 
| BOOLEAN(*) | No(*) | Yes | No(*) | No(*) | No(*) | No(*) | Yes(*) | Yes | Yes | Yes | No | 
| Interval | Yes | Yes | No | No | No | No | No | No | Yes | No | No | 
| TIME(*) | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | 
| DATE(*) | No(*) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | 
| TIMESTAMP(*) | Yes | Yes | Yes(*) | Yes | Yes(*) | Yes(*) | Yes | Yes | Yes | Yes | No | 
| TIME ZONE Support(*) | Yes | Yes | Yes(*) | No | No | No | No | Yes | Yes | No | No | 
| Range types(*) | (No)(*) | Yes | No | No | No | No | No | No | No | No | No | 
| DDL | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| Transactional DDL(*) | No | Yes | Yes | Yes | No | No | Yes | No | No | No | Yes | 
| Computed columns(*) | Yes | No(*) | Yes | Yes | Yes(*) | Yes(*) | Yes | Yes | Yes | No | No | 
| Functions as column default(*) | (Yes)(*) | Yes | Yes | No | No | Yes(*) | Yes(*) | Yes | Yes(*) | No | (Yes)(*) | 
| Sequences | Yes | Yes | Yes | Yes | No | Yes(*) | Yes | Yes | Yes | Yes | No | 
| Auto increment columns(*) | Yes(*) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 
| Synonyms | Yes | No | Yes | Yes | No | No | No | No | Yes(*) | Yes | No | 
| Non-blocking index creation(*) | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | 
| Partitioning | Yes | (Yes)(*) | Yes | Yes | Yes | Yes | No | No | No | No | No | 
| Cascading DROP(*) | Yes | Yes | No | Yes | No(*) | No(*) | No | Yes | Yes | No | No | 
| DDL Triggers(*) | Yes | Yes | Yes | No | No | No | Yes(*) | No | No | No | No | 
| TRUNCATE Trigger(*) | (No)(*) | Yes | No | No | No | No | No | No | No | No | No | 
| Custom name for PK constraint(*) | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | 
| ALTER a table used in a view(*) | Yes | No(*) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 
| Add table column at specific position(*) | No | No | No | No | Yes | Yes | Yes | Yes | Yes | No | No | 
| Materialized views(*) | Yes | Yes | Yes(*) | Yes(*) | No | No | No | No | No | No | No | 
| MVIEW with query rewrite(*) | Yes | No | Yes | No | No | No | No | No | No | No | No | 
| Automatically updated MVIEWS(*) | Yes | No | Yes | Yes | No | No | No | No | No | No | No | 
| Temporary Tables | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| Permanent global temporary tables(*) | Yes | No | No | Yes | No | No | Yes | No | Yes | No | No | 
| Global temporary tables(*) | No | No | Yes | No | No | No | No | Yes | No | No | No | 
| Session local temporary tables(*) | No | Yes | Yes | No | Yes | Yes | No | Yes | Yes | No | Yes | 
| Use a temporary table twice in a single query | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | No(*) | Yes | 
| Programming | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| Stored procedures(*) | Yes | Yes(*) | Yes | Yes | Yes | Yes | Yes | No | Yes | No(*) | No(*) | 
| Table functions(*) | Yes | Yes | Yes | Yes | No | No | Yes | No | Yes | No | No(*) | 
| Custom aggregates(*) | Yes | Yes | No(*) | No | No | No | No | No | Yes | No | No | 
| Function overloading(*) | Yes(*) | Yes | No | Yes | No | No | No | No | Yes | No | No | 
| User defined operators(*) | No(*) | Yes | No | No | No | No | No | No | No | No | No | 
| Statement level triggers(*) | Yes | Yes | Yes | Yes | No | No | No | No(*) | Yes | Yes | No | 
| Row level triggers(*) | Yes | Yes | No | Yes | Yes | Yes | Yes | No(*) | Yes | Yes | Yes | 
| RETURNING clause in a programming language(*) | Yes | Yes | Yes | No | No | No | Yes | No | No | No | No | 
| Before triggers(*) | Yes | Yes | (No)(*) | Yes | Yes | Yes | Yes | No(*) | Yes | Yes | Yes | 
| Dynamic SQL in functions(*) | Yes | Yes | No(*) | Yes | No | No | Yes | No | No | No | No | 
| Dynamic SQL in triggers(*) | Yes | Yes | Yes | No | No | No | Yes | No | No | No | No | 
| Delete triggers fired by cascading deletes(*) | Yes | Yes | Yes | Yes | No | No | Yes | No | Yes | Yes | Yes(*) | 
| Built-in scheduler | Yes | No | Yes | Yes | Yes | Yes | No | No | No | No | No | 
| Views | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| Updateable Views | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | 
| WITH CHECK OPTION(*) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | 
| Triggers on views | Yes | Yes | Yes | Yes | No | No | Yes | No | Yes | No | Yes | 
| Views with derived tables(*) | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | 
| JOINs and Operators | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| CROSS JOIN | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | 
| FULL OUTER JOIN | Yes | Yes | Yes | Yes | No | No | Yes | No | Yes | Yes | No | 
| LATERAL JOIN | Yes(*) | Yes | (Yes)(*) | Yes | No | No | No | No | Yes | No | No | 
| JOIN ... USING (...)(*) | Yes | Yes | No | No | Yes | Yes | Yes | No | Yes | Yes | Yes | 
| JOINs using tuple comparison(*) | Yes | Yes | No | Yes | Yes | Yes | No | Yes | Yes | No | No | 
| INTERSECT | (Yes)(*) | Yes | (Yes)(*) | Yes | No | Yes(*) | No | (Yes)(*) | Yes | Yes | (Yes)(*) | 
| EXCEPT | (Yes)(*) | Yes | (Yes)(*) | Yes | No | Yes(*) | No | (Yes)(*) | Yes | Yes | (Yes)(*) | 
| ORDER BY ... NULLS LAST | Yes | Yes | No | Yes | No | No | Yes | Yes | Yes | Yes | No | 
| IS DISTINCT FROM | No | Yes | No | (Yes)(*) | Yes(*) | Yes(*) | Yes | No | Yes | No | No | 
| BETWEEN SYMMETRIC | No | Yes | No | No | No | No | No | No | Yes | No | No | 
| OVERLAPS(*) | (Yes)(*) | Yes | No | Yes(*) | No | No | No | No | Yes | No | No(*) | 
| Other | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| Catalogs ("databases") | (Yes)(*) | (Yes)(*) | Yes | No | Yes | Yes | (Yes)(*) | Yes | Yes | No | Yes | 
| Schemas | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | No | 
| INFORMATION_SCHEMA(*) | No | Yes | Yes | No | Yes | Yes | No | Yes | Yes | No | No | 
| NoSQL Features | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| XML Support(*) | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | 
| XPath(*) | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | 
| XQuery | Yes | No | Yes | Yes | No | No | No | No | No | No | No | 
| JSON(*) | Yes(*) | Yes | Yes(*) | (Yes)(*) | Yes(*) | Yes(*) | No | No | No | No(*) | Yes(*) | 
| Indexes on JSON documents(*) | Yes | Yes(*) | (Yes)(*) | Yes | (No)(*) | No(*) | No | No | No | No | (Yes)(*) | 
| Key/Value storage | No | Yes | No | No | No(*) | No | No | No(*) | No | No | No | 
| Security | Oracle | Postgres | SQL Server | IBM DB2 | MySQL | MariaDB | Firebird | H2 | HSQLDB | Derby | SQLite | 
| User groups / Roles | Yes | Yes | Yes | Yes | Yes(*) | Yes(*) | Yes | Yes | Yes | Yes | No | 
| Row level security(*) | Yes | Yes(*) | Yes | Yes | No | No | No | No | No | No | No | 
| Grant on column level(*) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | 
                    
                
                
            
        
浙公网安备 33010602011771号