求这样一句高效的少占服务器资原的SQL查询
求这样一句高效的SQL嵌套查询语句怎么写?
我有两个表: (两表是同一个数据库,没有什么其它关系)
表A: 含字段 A1、A2、A3、A4、A5......
表B: 含字段 B1、B2、B3、B4、B5、B6......
现在要在表A里进行依据两个条件查询
Select * from 表A where A2=我的条件1 and A3=我的条件2
这样可以在表A里查出N条结果
然后再用上面查到的N条结果作为条件到表B里面去查
Select * from 表B where B2=刚才从表A得到的N条件结果作为条件
谢谢大家指教,高效,少占服务器资源,因为查询量大,数据量也很大,谢谢
[解决办法]
inner join
[解决办法]
select * from b where a in (select a1 from b)
[解决办法]
上面写错了select * from b where b1 in (select a1 from a)
[解决办法]
当然是Inner Join
[解决办法]
Inner Join
怎么没有写两表的关系?
[解决办法]
B2=刚才从表A得到的N条件结果作为条件 -----》你这个B2是要和A表的哪个字段相同
[解决办法]
访问和更改关系数据 使用内联接内联接是用比较运算符比较要联接列的值的联接。在 SQL-92 标准中,内联接可在 FROM 或 WHERE 子句中指定。这是 WHERE 子句中唯一一种 SQL-92 支持的联接类型。WHERE 子句中指定的内联接称为旧式内联接。下面的 Transact-SQL 查询是内联接的一个示例:USE pubsSELECT *FROM authors AS a INNER JOIN publishers AS p ON a.city = p.cityORDER BY a.au_lname DESC此内联接称为相等联接。它返回两个表中的所有列,但只返回在联接列中具有相等值的行。下面是结果集:au_id au_lname au_fname phone address city ----------- -------- -------- ------------ --------------- --------238-95-7766 Carson Cheryl 415 548-7723 589 Darwin Ln. Berkeley409-56-7008 Bennet Abraham 415 658-9932 6223 Bateman St. Berkeleystate zip contract pub_id pub_name city state country----- ----- -------- ------ --------------------- -------- ----- -------CA 94705 1 1389 Algodata Infosystems Berkeley CA USA CA 94705 1 1389 Algodata Infosystems Berkeley CA USA (2 row(s) affected)在结果集中,city 列出现两次。由于重复相同的信息没有意义,因此可以通过更改选择列表消除两个相同列中的一个。其结果称为自然联接。可以重新表述前面的 Transact-SQL 查询以形成自然联接。例如:USE pubsSELECT p.pub_id, p.pub_name, p.state, a.*FROM publishers p INNER JOIN authors a ON p.city = a.cityORDER BY a.au_lname ASC, a.au_fname ASC下面是结果集:pub_id pub_name state au_id au_lname au_fname------ --------------- -------- ----------- -------- -------- 1389 Algodata Infosystems CA 409-56-7008 Bennet Abraham1389 Algodata Infosystems CA 238-95-7766 Carson Cherylphone address city state zip contract--------------- ------------- -------- ----- ----- ---------415 658-9932 6223 Bateman St. Berkeley CA 94705 1415 548-7723 589 Darwin Ln. Berkeley CA 94705 1(2 row(s) affected)本示例中,publishers.city 没有出现在结果中。使用等号以外的运算符的联接也可以联接两个不相等的列中的值。用于内联接的运算符和谓词同样也可用于不相等联接。有关联接中可用的运算符和谓词的更多信息,请参见在表达式中使用运算符和 WHERE。 下面的 Transact-SQL 示例是一个大于 (> ) 联接,可用于查找住在 Massachusetts 之后(按字母顺序排列)的州的 New Moon 作家,Massachusetts 是 New Moon Books 的所在地。USE pubsSELECT p.pub_name, p.state, a.au_lname, a.au_fname, a.stateFROM publishers p INNER JOIN authors a ON a.state > p.stateWHERE p.pub_name = 'New Moon Books 'ORDER BY au_lname ASC, au_fname ASC下面是结果集:pub_name state au_lname au_fname state ---------------- ------- -------------------- -------------------- ----- New Moon Books MA Blotchet-Halls Reginald ORNew Moon Books MA del Castillo Innes MINew Moon Books MA Greene Morningstar TNNew Moon Books MA Panteley Sylvia MDNew Moon Books MA Ringer Albert UTNew Moon Books MA Ringer Anne UT(6 row(s) affected)使用不等运算符的联接很少使用不等联接 ( < > )。通常不等联接只有与自联接同时使用才有意义。例如,可以使用下面的不等 Transact-SQL 联接和自联接查找包含不同价格的两本或多本廉价(低于 $15)书的类别:USE pubsSELECT DISTINCT t1.type, t1.priceFROM titles t1 INNER JOIN titles t2 ON t1.type = t2.type AND t1.price <> t2.priceWHERE t1.price < $15 AND t2.price < $15说明 表达式 NOT column_name = column_name 与表达式 column_name < > column_name 等效。下面的 Transact-SQL 示例中,使用不等联接和自联接的组合查找 titleauthor 表中的所有行,在该表中有两行或多行具有相同的 title_id 但 au_id 号不同(即一本书有多个作者):USE pubsSELECT DISTINCT t1.au_id, t1.title_idFROM titleauthor t1 INNER JOIN titleauthor t2 ON t1.title_id = t2.title_idWHERE t1.au_id <> t2.au_idORDER BY t1.au_id下面是结果集:au_id title_id----------- --------213-46-8915 BU1032267-41-2394 BU1111267-41-2394 TC7777409-56-7008 BU1032427-17-2319 PC8888472-27-2349 TC7777672-71-3249 TC7777722-51-5454 MC3021724-80-9391 BU1111724-80-9391 PS1372756-30-7391 PS1372846-92-7186 PC8888899-46-2035 MC3021899-46-2035 PS2091998-72-3567 PS2091(15 row(s) affected)请参见转换函数WHERESELECT 示例SELECT?1988-2000 Microsoft Corporation。保留所有权利。
[解决办法]
慕白兄太敬业了!帮助我们这些不懂的朋友!感动!
[解决办法]
Select B.* from 表B INNER JOIN 表A
ON A.A3=B.B2
WHERE A2=我的条件1 and A3=我的条件2