- 浏览: 260022 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
no_studio:
期待实现SqlServer
发布异种数据库导入工具jmyetl-1.0.2 -
babydeed:
不错 再接再厉
发布异种数据库导入工具jmyetl-1.0.2 -
iihero:
niwtsew 写道贴个俺自己写的linux下的版本,其实没必 ...
命令行快速找出class文件所在的jar包 -
niwtsew:
说错,是strings不是string
命令行快速找出class文件所在的jar包 -
niwtsew:
贴个俺自己写的linux下的版本,其实没必要用7z,直接jar ...
命令行快速找出class文件所在的jar包
Comparison of different SQL implementations
The goal of this page — which is a work in progress — is to gather information relevant for people who are porting SQL from one product to another and/or are interested in possibilities and limits of 'cross-product' SQL.
The following tables compare how different DBMS products handle various SQL (and related) features. If possible, the tables also state how the implementations should do things, according to the SQL standard.
I will only write about subjects that I've worked with personally, or subjects which I anticipate to find use for in the near future. Subjects on which there are no significant implementation variances are not covered. Beta-versions of software are not examined.
I'm sorry about the colors. They are a result of wanting to mark each DBMS differently and at the same time wanting to be relatively nice to printers.
If you have corrections or suggestions, please contact me; even notifications about spelling errors are welcome.
Contents:
- Legend, definitions, and notes
- Features
- Data definition language (DDL)
-
The SELECT statement
- Ordering result sets
-
Limiting result sets
(RANK() / ROW_NUMBER() / FETCH FIRST / LIMIT / TOP)
- Simple limit
- Top-n (quota-queries)
- Limit—with offset , including a note about the importance of sorting on unique values
- The INSERT statement
- Data types
- Functions and operators
- Constraint handling
-
Mixture of type and operations
- Automatic key generation (IDENTITY/SERIAL/AUTO_INCREMENT)
- Bulk operations
- Command line operations / metadata
- JDBC
- Other topics
- Related work
- Acknowledgments
- TODOs
Legend, definitions, and notes
The following SQL standard and implementations have been examined, if not otherwise stated:
Standard | The latest official version of SQL is SQL:2008.
I don't have access to the official ISO standard text, but
Whitemarsh Information Systems Corporation
provides a rather final draft
as a zip-archive, containing several files. Most important to this
page is the file No books cover SQL:2008 yet. Regarding the previous standard, SQL:2003, the only book covering the subject
is in German which I was never any good at.
Therefore, I also use the following book as reference:
|
PostgreSQL |
PostgreSQL 8.4.1 on CentOS Linux. Documentation |
DB2 |
DB2 Express-C v. 9.1 on Fedora Linux. Note that there are differences between various DB2 flavors
; this page is about DB2 for "LUW" (Linux/Unix/Windows). Documentation |
MS SQL Server |
MS SQL Server 2005 on Windows XP.
Microsoft's SQL implementation is sometimes named Transact-SQL
, or TSQL
.
In this document, I'll generally write MSSQL
as a short-hand for
Microsoft's SQL Server product. Documentation |
MySQL |
MySQL Database Server 5.0.18 on Fedora Linux (i.e. MySQL AB's "classic" DBMS product—not MaxDB). Documentation |
Oracle |
Oracle Database 11g
Release 2 on Red Hat Enterprise Linux. Documentation |
Informix |
Informix Dynamic Server Workgroup Edition v. 11.50 on Red Hat Enterprise Linux. Documentation |
The products are running with their default settings. This is important for MySQL and MSSQL: Their interpretation of SQL may be changed rather drastically by adjusting certain configuration options, potentially increasing the level of standard compliance (for MySQL, there is a dedicated documentation page about this). However, such non-default configuration options are not of great value for people writing SQL applications because the developer often cannot rely on non-default configuration settings.
Features
Views
Standard | Views are part of the standard, and they may be updated, as long as it 'makes sense'.
SQL:2008 has a rather complicated set of rules governing when a view is updatable, basically saying that a view is updatable, as long as the update-operation translates into an unambiguous change. SQL-92 was more restrictive, specifying that updatable views cannot be derived from more than one base table. |
PostgreSQL | Has views. Breaks that standard by not allowing updates to views; offers the non-standard 'rules'-system as a work-around. |
DB2 | Conforms to at least SQL-92. |
MSSQL | Conforms to at least SQL-92. |
MySQL | Conforms to at least SQL-92. |
Oracle | Conforms to at least SQL-92. |
Informix | Conforms to at least SQL-92. |
Join types and features
All the DBMSes support basic INNER JOINs, but vary in their support for other join types.
In the following feature chart, a means yes ; an empty table cell means no .
Natural joins (only tested: NATURAL LEFT JOIN
) |
<!-- {12738888657262}-->
<!-- {12738888657263}--> | <!-- {12738888657264}--> | <!-- {12738888657265}--> | <!-- {12738888657266}--> | <!-- {12738888657267}--> | |
USING
-clause |
<!-- {12738888657268}-->
<!-- {12738888657269}--> | <!-- {127388886572610}--> | <!-- {127388886572611}--> | <!-- {127388886572612}--> | <!-- {127388886572613}--> | |
FULL joins1
(tested: SELECT...FULL JOIN...ON...=...
) |
<!-- {127388886572614}-->
<!-- {127388886572615}--> | <!-- {127388886572616}--> | <!-- {127388886572617}--> | <!-- {127388886572618}--> | <!-- {127388886572619}--> | |
Explicit CROSS JOIN
(cartesian product) |
<!-- {127388886572620}-->
<!-- {127388886572621}--> | <!-- {127388886572622}--> | <!-- {127388886572623}--> | <!-- {127388886572624}--> | <!-- {127388886572625}--> |
Remarks:
- Note that
FULL
joins may be emulated with a union of a left and a right join .
Data definition language (DDL)
Copying structure
Objective: An existing table, t1 needs to be copied to a new table, t2 , without copying data. I.e., only the structure/definition of the table is copied.
Standard | Optional feature T171 defines LIKE clause in table definition
:
CREATE TABLE t2
( LIKE t1
)
The DBMS may support an extension of this (feature T173) which allows for more table properties to be copied:
If Triggers, CHECK constraints, and other 'non-trivial' table features are not copied to the new table. |
PostgreSQL | Complies
with the core of the feature (T171). The extended T173 feature is only
partially supported, and extended with a few non-standard options:
PostgreSQL does not allow you to copy the structure of a view, using |
DB2 | Behaves as if inspired
by the standard. I.e., DB2 conforms to the standard, except:
Example:
DB2 allows you to copy the structure of a view into a table. |
MSSQL | Does not support the standard. Instead, MSSQL has a special SELECT ... INTO ... FROM ...
construct which can be combined with an impossible WHERE-clause to copy structure only:
SELECT * INTO t2
FROM t1
WHERE 1<>1
The source (t1 ) may be a view, as well as a table.
|
MySQL | Complies with the core of the feature (T171), but not with the extended features (T173).
MySQL does not allow you to copy the structure of a view into a table. |
Oracle | Does not support the standard. Oracle lets you copy a table structure using a special CREATE TABLE ... AS
construct, combined with an impossible WHERE
-clause:
CREATE TABLE t2
AS SELECT * FROM t1
WHERE 1<>1
|
Informix | On my TODO. |
The SELECT statement
Ordering result sets
Standard | The SQL-standard states that relations are unordered, but
result sets may be ordered when returned to the user through a cursor:
The DBMS may additionally allow The
standard doesn't
specify how NULLs should be ordered in comparison with
non-NULL values, except that any two NULLs are to be considered equally ordered, and
that NULLs should sort either above or below all non-NULL values. However, the DBMS may
optionally (as part of feature ID T611, "Elementary OLAP operations")
allow the user to specify whether NULLs should sort first or last:
|
PostgreSQL | As well as in cursor definitions, it allows ORDER BY
in other contexts.
By default, NULLs are considered higher
than any non-NULL value; however,(since version 8.3)
this sorting behaviour may be changed by adding |
DB2 | As well as in cursor definitions, it allows ORDER BY
in other contexts.
NULLs are considered higher
than any non-NULL value.
|
MSSQL | As well as in cursor definitions, it allows ORDER BY
in other contexts.
NULLs are considered lower
than any non-NULL value.
|
MySQL | As well as in cursor definitions, it allows ORDER BY
in other contexts.
NULLs are considered lower
than any non-NULL value,
except if a |
Oracle | As well as in cursor definitions, it allows ORDER BY
in other contexts.
By default, NULLs are considered higher
than any non-NULL value; however, this sorting behaviour may be changed
by adding Beware of Oracle's strange treatment of empty strings and NULLs as the same 'value'. |
Informix | As well as in cursor definitions, it allows ORDER BY
in other contexts.
NULLs are considered lower
than any non-NULL value.
|
Limiting result sets
Simple limit
Objective: Want to only get n
rows in the result set.
Usually only makes sense in connection with an ORDER BY
expression.
Note: This is not the same as a top-n query — see next section .
Note also: Some of the queries below may not be legal in all situations, such as in views or sub-queries.
Standard | The SQL standard provides three ways of performing a 'simple limit':
|
PostgreSQL |
Supports all standards-based approaches.
In old PostgreSQL versions (versions 8.3 and older), a special PostgreSQL (and MySQL) specific method was used:
Note that Documentation: |
DB2 | Supports all standards-based approaches.
Documentation:
|
MSSQL |
Supports the ROW_NUMBER()
(since MSSQL 2005)
and cursor standards-based approaches; doesn't support FETCH FIRST
.
MSSQL 2000 didn't support |
MySQL |
Doesn't support the standard. Alternative solution:
|
Oracle |
Supports ROW_NUMBER
; doesn't support FETCH FIRST
.
As Oracle doesn't allow
A reader of this page told me that using the Oracle-specific |
Informix | Doesn't support ROW_NUMBER(), nor FETCH FIRST.
Alternative solution (which is illegal in plain sub-queries):
|
Top-n query
Objective: Like the simple limit-query above, but include rows with tie conditions. Thus, the query may return more than n rows.
Some call this a quota -query.
The following examples are based on this table:
SELECT * FROM person ORDER BY age ASC; +----------+-------------+-----+ |PERSON_ID | PERSON_NAME | AGE | +----------+-------------+-----+ | 7 | Hilda | 12 | | 8 | Bill | 12 | | 4 | Joe | 23 | | 2 | Veronica | 23 | | 3 | Michael | 27 | | 9 | Marianne | 27 | | 1 | Ben | 50 | | 10 | Michelle | 50 | | 5 | Irene | 77 | | 6 | Vivian | 77 | +----------+-------------+-----+
Now, we only want the three (n =3) youngest persons displayed, i.e. a result set like this:
+----------+-------------+-----+ |PERSON_ID | PERSON_NAME | AGE | +----------+-------------+-----+ | 7 | Hilda | 12 | | 8 | Bill | 12 | | 4 | Joe | 23 | | 2 | Veronica | 23 | +----------+-------------+-----+
Standard | With standard SQL, there are two principal ways to obtain the wanted data:
In the article Going To Extremes by Joe Celko , there is a description of yet another principle for performing quota queries, using scalar subqueries . Scalar subqueries are more tedious to write but might yield better performance on your system. |
PostgreSQL |
Supports the fast standard SQL
variant.
In version 8.3 and older, PostgreSQL only supported the slow standard SQL
query variant. In practice, a PostgreSQL-only method was used instead, in order to obtain
acceptable query performance: (Change |
DB2 | Supports the fast standard SQL variant. |
MSSQL |
Supports the fast standard SQL
variant.
MSSQL 2000 supported the slow standard SQL
variant. In practice, a MSSQL-only expression had to be used instead, in order to obtain acceptable query performance:
|
MySQL |
Supports the slow standard SQL
solution. In practice, this MySQL-specific solution should be used instead,
in order to obtain acceptable query performance:
(Change The offset-value 2 is the result of n-1 (remember: n is 3 in these examples). The second argument to the |
Oracle |
Supports the fast standard SQL
variant.
However, as Oracle doesn't like "AS...
" after subqueries
(and doesn't require naming of subqueries), the query has to be
paraphrased slightly:
(Change |
Informix | On my TODO. |
Limit—with offset
Objective: Want to only get n
rows in the result set,
and we want the first skip
rows in the result set discarded.
Usually only makes sense in connection with an ORDER BY
expression.
In the recipes below, basic ordering is ASCending, i.e.
lowest-first queries. If you want the opposite, then change
ASC->DESC
and DESC->ASC
at the places emphasized like this
.
Standard | The SQL standard provides three ways of performing 'limit with offset':
|
PostgreSQL |
Supports all the standards-based approaches.
In version 8.3 and older, cursors should be used, or a special construct: Documentation: |
DB2 | Supports the window function
based approach.
Regarding cursors: DB2 for Linux/Unix/Windows doesn't support Documentation : OLAP functions , the FETCH statement . |
MSSQL |
Supports the window function
and cursor based approaches.
MSSQL 2000 didn't support |
MySQL |
Doesn't support the standard approaches. Alternative solution:
SELECT columns
In older versions of MySQL, the LIMIT-syntax is less clear:
|
Oracle |
Supports ROW_NUMBER()
. I'm unsure if Oracle's cursor support is standards-compliant.
As Oracle doesn't accept
A reader of this page told me that using the Oracle-specific |
Informix | Supports neither OFFSET
...FETCH FIRST
nor ROW_NUMBER
. Supports cursors.
An alternative to using cursors is to us an Informix-specific construct:
|
FETCH FIRST/LIMIT/TOP queries with offset are often used in a result presentation context: To retrieve only—say—30 rows at a time so that the end-user isn't overwhelmed by the complete result set, but instead is offered a paginated result presentation. In this case, be careful not to (only) sort on a non-unique column.
Consider the following example (where PostgreSQL is used):
SELECT * FROM person ORDER BY age ASC; person_id | person_name | age -----------+-------------+----- 7 | Hilda | 12 8 | Bill | 12 4 | Joe | 23 2 | Veronica | 23 3 | Michael | 27 9 | Marianne | 27 1 | Ben | 50 10 | Michelle | 50 5 | Irene | 77 6 | Vivian | 77
When ordering is performed on the non-unique age-value, ties may occur and it's not guaranteed that the DBMS will fetch the rows in the same order every time.
Instead of the above listing, the DBMS is allowed to return the following display order where Michael and Marianne are displayed in the opposite order compared to above:
SELECT * FROM person ORDER BY age ASC; person_id | person_name | age -----------+-------------+----- 7 | Hilda | 12 8 | Bill | 12 4 | Joe | 23 2 | Veronica | 23 9 | Marianne | 27 3 | Michael | 27 1 | Ben | 50 10 | Michelle | 50 5 | Irene | 77 6 | Vivian | 77
Now, suppose the end-user wants the results displayed five rows at a time. The result set is fetched in two queries where the DBMS happens to sort differently, as above. We will use PostgreSQL's legacy syntax in the example:
SELECT * FROM person ORDER BY age ASC LIMIT 5; person_id | person_name | age -----------+-------------+----- 7 | Hilda | 12 8 | Bill | 12 4 | Joe | 23 2 | Veronica | 23 3 | Michael | 27 SELECT * FROM person ORDER BY age ASC LIMIT 5 OFFSET 5; person_id | person_name | age -----------+-------------+----- 3 | Michael | 27 1 | Ben | 50 10 | Michelle | 50 5 | Irene | 77 6 | Vivian | 77
Notice that Marianne was not displayed in any of the two split result set presentations.
The problem could be avoided if the result set ordering had been done in
a deterministic way, i.e. where the unique person_id value was considered
in case of a tie:SELECT * FROM person ORDER BY age ASC, person_id ASC ...
This is safer than to pray for the DBMS to behave in a predictable way when
handling non-unique values.
Note : If the table is updated between parts of the result set pagination, then the user might still get an inconsistent presentation. If you want to guard against this, too, then you should see if use of an insensitive cursor is an option in your application. Use of cursors to paginate result sets usually require that your application is stateful , which is not the case in many web-application settings. Alternatively, you could let the application cache the complete result set (e.g. in a session if your web application environment provides for sessions).
The INSERT statement
Inserting several rows at a time
Standard | An optional SQL feature is row value constructors
(feature ID F641). One handy use
of row value constructors is when inserting several rows at a time, such as:
— which may be read as a shorthand for
|
PostgreSQL | Supported .(since version 8.2) |
DB2 | Supported . |
MSSQL | Supported .(since version 2008) |
MySQL | Supported . |
Oracle | An Oracle-specific kludge:INSERT INTO tablename
|
Informix | On my TODO. |
Data types
The BOOLEAN type
Standard | The BOOLEAN type is optional (has feature ID T031), which is
a bit surprising for such a basic type. However, it seems that endless discussions of how
NULL is to be interpreted for a boolean value is holding BOOLEAN from becoming
a core type.
The standard says that a BOOLEAN may be one of the following literals:
The DBMS may interpret NULL as equivalent to UNKNOWN. It is unclear from the specification if the DBMS must support UNKNOWN, NULL or both as boolean literals. In this author's opinion, you should forget about the UNKNOWN literal in order to simplify the situation and let the normal SQL three-way logic apply. It's defined that TRUE>FALSE (true larger than false). |
PostgreSQL | Follows the standard.
Accepts NULL as a boolean literal; doesn't accept UNKNOWN as a boolean literal. |
DB2 | Doesn't support the BOOLEAN type.
Judging from various JDBC-documentation, it seems that IBM recommends a CHAR(1) field constrained to values '0' and '1' (and perhaps NULL) as the way to store boolean values. |
MSSQL | Doesn't support the BOOLEAN type.
Possible alternative type: the BIT type which may have 0 or 1 (or NULL) as value. If you insert an integer value other than these into a field of type BIT, then the inserted value will silently be converted to 1. Rudy Limeback has some notes about oddities with the MSSQL BIT type. |
MySQL | Offers a non-conforming BOOLEAN type. MySQL's BOOLEAN
is one of many aliases to its TINYINT(1) type.
MySQL accepts the literals TRUE and FALSE as aliases to 1 and 0, respectively. However, you may also assign a value of — e.g. — 9 to a column of type BOOLEAN (which is non-conforming). If you use JDBC with MySQL, then BOOLEAN is the preferred type for booleans: MySQL's JDBC-driver implicitly converts between Java's boolean and MySQL's pseudo-BOOLEAN type. Side note: MySQL has a |
Oracle | Doesn't support the BOOLEAN type.
Judging from various JDBC documentation and a discussion at Ask Tom , it seems that Oracle recommends NUMBER(1) as the way to store boolean values; it's probably wise to constrain such columns to values 0 and 1 (and perhaps NULL). |
Informix | On my TODO. |
Warning
to JDBC users:
According to the JDBC standard, getBoolean()
must convert a
SQL-'value' of NULL to the false
Java value. To check if
the database-value was really NULL, use wasNull()
.
The CHAR type
For the following section, I have used this test-SQL to try to illuminate differences (unfortunately, even standard SQL as simple as this has to be adjusted for some products):
Test steps:CREATE TABLE chartest (
charval1 CHAR(10) NOT NULL,
charval2 CHAR(10) NOT NULL,
varcharval VARCHAR(30) NOT NULL
);
INSERT INTO chartest VALUES ('aaa','aaa','aaa');
INSERT INTO chartest
VALUES ('aaaaaa','aaa','aaa'); -- should truncate to 'aaaaaa'
INSERT INTO chartest
VALUES ('aaaaaaaaaaaa','aaa','aaa'); -- should raise error
SELECT * FROM chartest; -- should show two rows
DELETE FROM chartest WHERE charval1='aaaaaa';
SELECT * FROM chartest; -- should show one row
SELECT * FROM chartest WHERE charval1=varcharval;
SELECT charval1 || 'X' AS res FROM chartest;
SELECT CHAR_LENGTH(charval1 || charval2) AS res FROM chartest;
SELECT CHAR_LENGTH(charval1) + CHAR_LENGTH(charval2)
AS res
FROM chartest;
Expected results, after CREATE and INSERTs:
SELECT * FROM chartest; -- should show two rows CHARVAL1 CHARVAL2 VARCHARVAL ========== ========== ============================== aaa aaa aaa aaaaaa aaa aaa DELETE FROM chartest WHERE charval1='aaaaaa'; SELECT * FROM chartest; -- should show one row CHARVAL1 CHARVAL2 VARCHARVAL ========== ========== ============================== aaa aaa aaa SELECT * FROM chartest WHERE charval1=varcharval; CHARVAL1 CHARVAL2 VARCHARVAL ========== ========== ============================== aaa aaa aaa SELECT charval1 || 'X' FROM chartest AS res; res =========== aaa X SELECT CHAR_LENGTH(charval1 || charval2) AS res FROM chartest; res =========== 20 SELECT character_length(charval1) + character_length(charval2) AS res FROM chartest; res ============ 20
Standard |
|
PostgreSQL | Stores CHARs in space padded form, but violates the standard by (conceptually) truncating
trailing white-space before performing most functions, operators, and comparisons
(like the CHARACTER_LENGTH
-function
and the
concatenation(||
) operator).
|
DB2 | Follows the standard. |
MSSQL | Generally follows standard, but (conceptually) truncates
trailing white-space before performing some functions
(at least before LEN()
).
|
MySQL | Breaks the standard by silently inserting the string, truncated to specified column CHAR-length. (It's actually not completely silent, as it issues warnings if values were truncated: If you manually check for warnings, you will know that something bad happened, but not which of the rows are now invalid.) Violates the standard by effectively truncating all trailing spaces. The documentation states that MySQL truncates trailing spaces when CHAR values are retrieved . That may be true, but |
发表评论
-
发布异种数据库导入工具jmyetl-1.0.2
2012-06-11 05:14 1735利用空闲时间,折腾了一个,界面不太擅长,比较简陋,但是相信大家 ... -
各种数据库临时表的使用区别总结
2012-05-24 08:22 2452[size=large]虽然SQL92, 99, 2003, ... -
Oracle11.2.0非安装版(简装版)制作完成(仅供开发人员参考使用)
2012-03-11 13:57 1807作者: iihero@CSDN, 2012.3.11. 请尊重 ... -
常用的数据库连接串(JDBC篇)
2011-12-23 06:58 0看到网上传来传去的jdbc url连接串总结,好多都是粘来粘去 ... -
DBCP连接池的最简单应用(用于ORACLE数据库)
2011-11-19 05:54 4461鉴于有人问起DBCP直接用于JDBC连接的问题,我做了一个最简 ... -
7zip命令行用法
2011-10-14 10:54 38177zip功能很强大,你只要两个文件: 7z.exe以及7z.d ... -
SQLite指南(5) - PRAGMA命令用法(完整)
2011-10-11 14:55 22948如若转载,请加上本文 ... -
SQLite指南(4) - 最新SQLite FAQ列表
2011-09-28 07:30 1如若转载,请带上本文链接,以示尊重个人劳动。 -
SQLite指南(3) - 5分钟了解熟悉SQLite
2011-09-28 07:18 1799在没有大量阅读SQLite在线文档并且不了解相关配置之前,几分 ... -
SQLite指南(2) -- 帮助及编译SQLite
2011-09-27 14:04 1781关于SQLite的帮助,直接上http://www.sqlit ... -
SQLite指南(1) -- SQLite的特性
2011-09-27 13:34 1965使用SQLite也有一段时日 ... -
DBeaver数据库管理工具连接Sybase数据库使用体验
2011-09-26 20:12 7254从http://dbeaver.jkiss.org/下 ... -
Sybase ASA中获取表定义的SQL语句及SP
2011-09-26 17:07 1427ASA功能本来非常强大, 可是不理解为什么没有一个功能强大的描 ... -
Sybase ASE及其它产品的license获取与生成
2011-09-26 10:37 1859在使用正版Sybsase产品的时候,都会根据你机器的hosti ... -
Sybase DBISQL的小奥秘
2011-09-22 22:26 1677目前,在所有Sybase数据库产品里,都使用dbisql来访问 ... -
SQLite指南(0) 表和索引的文件存储结构
2011-09-20 21:56 2779SQLite采用的是B+树来存 ... -
MongoDB入门简介(转)
2011-04-25 15:38 1008有关于MongoDB的资料现在较少,且大多为英文网站,以上内容 ... -
有关prepare statement在ODBC、JDBC、ADO.NET上的对比使用(以DB2为例)
2005-12-11 00:02 1119参数标记的概述 对于需要执行多次的 SQL 语句,通常准备 ... -
ADO在.NET应用程序中挥洒自如
2005-12-15 19:09 985ADO 在 .NET 应用程序中挥 ... -
JDBC4中的新特性
2005-12-15 22:34 976看了FrankSommers在artima上的一篇短文, ...
相关推荐
### 字典实现的不同算法对比分析 #### 引言 在计算机科学领域中,映射(Mapping)的概念极为常见。映射是一种将一个集合中的元素与另一个集合中的元素相对应的函数。例如,假设存在两个集合A和B,映射f:A→B表示...
`MS_SQL_SELECT.html`文件可能包含关于MSSQL SELECT语句的详细比较,而`Comparison of different SQL implementations.html`可能对比了不同SQL实现的特性。 标签中的“tsql”代表Transact-SQL,这是MSSQL的SQL方言...
C++ 字符串实现比较 在 C++ 编程语言中,字符串实现是非常重要的一部分。本文将比较 STL 字符串、copy-on-write 算法和非 copy-on-write 算法在性能方面的差异,并且讨论 GNU libstdc++ 和 STLport 实现的字符串...
The goal of this paper is to provide an experimental comparison of the efficiency of min-cut/max flow algorithms for applications in vision. We compare the running times of several standard ...
这篇论文《Performance comparison among popular implementations of H.264 encoders》由H Y El-Arsh等人撰写,发表在《IOP Conference Series: Materials Science and Engineering》上,主要进行了H.264编码器不同...
标题中的"A Comparison of Clinical Follow-Up of Different Total"指的是对不同全颞下颌关节置换假体临床追踪比较的研究。描述进一步细化为"Total Temporomandibular Joint Replacement Prostheses_ A Systematic ...
根据提供的文件信息,本文的知识点包括如下几个方面: 1. 电荷对定量构效关系(QSAR)研究的影响:在定量构效关系研究中,电荷的正确分配是至关重要的步骤。电荷分布的准确性直接影响到模型的预测精度和可靠性。...
### DB2与Oracle数据库对比分析 #### 引言:为何选择IBM DB2? 随着全球数字化进程的加速,企业面临着前所未有的数据处理挑战。为了更好地利用信息技术(IT),许多组织正在寻求更智能、更高效的解决方案来应对日益...
详细的介绍多目标有化算法以及相应的测试函数,以及对比各种多目标优化算法(Comparison of Multiobjective Evolutionary Algorithms: Empirical Results)
### 非线性滤波器对比分析:扩展卡尔曼滤波器(EKF)、无迹卡尔曼滤波器(UKF)与粒子滤波器(PF) #### 概述 本文探讨了非线性滤波器在追踪再入大气层的弹道目标时的应用与性能比较。该研究聚焦于三个主要的非...
本文是一篇由K. Mikolajczyk等来自不同研究机构的学者合作撰写的学术论文,旨在对仿射不变区域检测器(affine region detectors)进行评估和比较。论文的主要内容包括对六种不同的区域检测器在不同成像条件下的性能...
software Blender, if they supported the required features and if they appeared to have some form of complete specification. The formats were then evaluated by looking at the available specification。
本文对比分析了几代视频编码标准的压缩能力,重点关注了高效率视频编码(HEVC)技术。文章利用峰值信噪比(PSNR)和主观测试结果来对比不同视频编码标准的设计,包括H.262/MPEG-2视频、H.263、MPEG-4视觉、H.264/...
### 视频编码标准的编码效率比较 #### 引言 本文主要探讨了视频编码标准在编码效率方面的表现。编码效率是指在达到特定视频质量水平时所需的比特率最小化的能力,或者反过来讲,在给定比特率下所能实现的最大视频...
### VHDL、Verilog与SystemVerilog的对比分析 #### 引言 随着硬件描述语言(HDL)的各种增强功能在过去几年中不断增多,选择最适合特定设计的语言也变得越来越复杂。许多设计师和组织正在考虑是否应该从一种HDL转向...
System planning for direct-sampling receivers is reviewed, highlighting dBFS/Hz as an intrinsic measure of dynamic range, independent of channel and Nyquist bandwidths. Power dissipation versus ...
Digital Change Detection by Post-Classification Comparison of RS Data in Land Use of Guangzhou,樊风雷,Wang Yunpeng,Remote sensing has long time been an important component of regional planning for ...
### 网络模拟器性能比较研究 #### 引言 网络模拟作为一种广泛采用的方法论,在通信系统工程领域中占据着举足轻重的地位。它主要用于新型通信架构及网络协议的发展与评估。通过网络模拟器,研究者可以构建任意...
SQLServer vs Oracle Comparison
Comparison of fast discrete wavelet transform algorithms