小编Roy*_*oyM的帖子

FROM子句中的嵌套select语句?内部联接声明?还是只是表名?

我正在构建一个需要来自5个表的数据的查询.过去,DBA告诉我,从某些性能/内存方面来看,指定列列表与获取所有列(*)是首选.我还被告知,当FROM子句中有一个表列表时,数据库会在幕后执行JOIN操作,以创建一个表(或视图).

现在的数据库目前只有非常少的数据,因为我们处于一个非常初始的阶段.所以不确定我能否在实践中衡量性能.我不是数据库专家.我可以得到我需要的数据.dillema是以什么价格出售的.

补充:目前我正在使用MS SQL Server 2008 R2.

我的问题是:

  1. 以下是否存在性能差异以及原因:a.SELECT ... FROM tbl1,tbl2,tbl3等为简单起见?(不知怎的,我觉得这可能会影响性能)b.SELECT ... FROM tbl1 inner join tbl2 on ... inner join tbl3 on ... etc(这会对服务器更加明确并节省性能/内存)吗?C.SELECT ... FROM(从tbl1中选择x,y,z)作为t1内连接...等(这会保存anythig吗?还是只是为服务器和我们创造更多工作的额外选择语句)?

  2. 有没有更好的方法来做到这一点?

下面是两个查询,它们都获得了我需要的数据片段.一个包含更多嵌套的select语句.

如果他们不是以标准形式编写或无助地过于复杂,我会道歉 - 希望你能破译.我尽量让他们保持井井有条.

洞察力也将受到最多的赞赏.谢谢你检查一下.

5个表:设备池,用户,旅行,TripTracker和订单

查询1(更多选择语句):

SELECT
      username, 
      base.devid devid, 
      tripstatus, 
      stops, 
      stopnumber, 
      [time], 
      [orderstatus], 
      [destaddress]

FROM    
((
 (  SELECT 
           username, 
           devicepool.devid devid,
           groupid
    FROM
           devicepool INNER JOIN users 
           ON devicepool.userid = users.userid 

     WHERE devicepool.groupid = 1
 ) 
 AS [base] 

 INNER JOIN

 (
      SELECT 
              tripid, 
              [status] tripstatus, 
              stops, 
              devid,
              groupid …
Run Code Online (Sandbox Code Playgroud)

select nested-queries sql-server-2008r2-express

1
推荐指数
1
解决办法
4847
查看次数