English 中文(简体)
页: 1 选择性询问
原标题:SQL Select queries
  • 时间:2010-04-18 00:48:51
  •  标签:
  • sql

什么更好,什么是差别?

SELECT * FROM TABLE_A A WHERE A.ID IN (SELECT B.ID FROM TABLE_B B)

SELECT * FROM TABLE_A A, TABLE_B B WHERE A.ID = B.ID
问题回答

“最佳”方式是使用标准ANSIJOIN syntax:

SELECT (columns)
FROM TABLE_A a
INNER JOIN TABLE_B b
    ON b.ID = a.ID

第一个<代码>WHERE IN版本将often产生相同的执行计划,但在某些平台上,这种计划可能比较缓慢,并非始终一致。 <IN query(相当于EXISTS) 随着你开始增加更多的表格或创造更复杂的加入条件,将逐渐变得更加繁琐,因为它不像实际的那样灵活。

第二, com合的yn合物并非一贯支持为。 该系统对大多数房舍管理事务都做了工作,但并不使用“专用”版本,因为如果你离开<代码>。 WHERE 之后,条款最后是交叉产品。 如果你忘记在<编码>JOIN中写字,那么你就只字不提。 JOIN由于这一安全网而倾向于选择。

我发表了“Aaronatt”的答复,但我有一些评论:

  • com式加入 s和JOIN syntax均为ANSI。 第一个是S-89,第二个是SQ-92。 喀克-89 s仍是标准的一部分,以支持落后的兼容性。

  • 您能举出一个支持Kall-92 syntax但不是Q-89的RDBMS的例子吗? 我认为没有任何东西,因为“没有一贯支持”可能不准确。

  • 您也可使用<条码>JOINsyntax, 并生成tes产品。 例: ......来自JOIN B是有效的(校正:仅在一些品牌实施标准辛醇,如MySQL)。

    但无论如何,我同意,在你使用Kall-92 syntax时,更容易发现这一点。 如果你使用Kall-89 syntax,你可使用一个长的<代码>。 WHERE 该条款非常容易使你加入其中之一。

差异在于,第一个层次是分局,在某些数据库中可能较慢。 第二种做法是合并,将两个表格合并为同一问题。

一般来说,如果数据库获得最佳数据,则其速度将加快,因为数据库必须有一个分局,以保持分局的成果。

这两项查询结果不同。 首先,你只从TABLE_A中挑选一栏。

第十组之间至少存在三个差异:

SELECT * FROM TABLE_A A WHERE A.ID IN (SELECT B.ID FROM TABLE_B B)

和Y:

SELECT * FROM TABLE_A A, TABLE_B B WHERE A.ID = B.ID

<>1> 正如Michas所说,如果查询Y将从表A &回到栏目;B,但查询X只从表A中排出。 如果你明确标明你想要背书的栏目,查询X只能包括表A的栏目,但查询Y将包含表B的栏目。

<>2> 浏览次数可能有所不同。 如果表B比表A所示的ID配对比值要多,那么与Kery Y相比,将退还更多的款项。

create table TABLE_A (ID int, st VARCHAR(10))
create table TABLE_B (ID int, st VARCHAR(10))

insert into TABLE_A values (1,  A-a )

insert into TABLE_B values (1,  B-a )
insert into TABLE_B values (1,  B-b )

SELECT * FROM  TABLE_A A WHERE A.ID IN (SELECT B.ID FROM TABLE_B B)

ID          st
----------- ----------
1           A-a
(1 row(s) affected) 

SELECT * FROM TABLE_A A, TABLE_B B WHERE A.ID = B.ID  

ID          st         ID          st
----------- ---------- ----------- ----------
1           A-a        1           B-a
1           A-a        1           B-b
(2 row(s) affected)

3) 执行计划可能有所不同,因为询问要求数据库得出不同结果。 <代码>Inner并入,其运行速度超过in,或exists, 在某些情况下可能仍然更快。 But,因为结果可能有所不同,因此,需要确保数据支持从<条码>、<>条/代码>或<条码>至<条码>>的转变。





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...