小编Dan*_*and的帖子

我应该在加入之前使用子查询来限制表吗?

在连接后跟 where 子句的情况下,使用子查询来限制结果,然后进行连接会更好吗?例子:

SELECT * 
FROM Customers 
    NATURAL JOIN Orders 
WHERE shipped=1
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它接缝 DBMS 将整个客户表与整个订单表连接,然后根据 where 子句过滤结果。使用子查询的等效查询是:

SELECT * 
FROM Customers 
    NATURAL JOIN (SELECT * 
                     FROM Orders 
                     WHERE shipped=1) AS O
Run Code Online (Sandbox Code Playgroud)

在这里,可能有一个较小的 Orders 表要加入。同样,如果有限制客户和订单的 where 子句:

SELECT * 
FROM Customers 
    NATURAL JOIN Orders 
WHERE country='US' AND shipped=1
(assuming country attribute belongs to Customers table)
Run Code Online (Sandbox Code Playgroud)

等效的子查询查询:

SELECT * 
FROM (SELECT *
            FROM Customers 
            WHERE country='US') AS C 
    NATURAL JOIN (SELECT * 
                                 FROM Orders 
                                 WHERE shipped=1) AS O
Run Code Online (Sandbox Code Playgroud)

performance optimization subquery query-performance

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

select语句列中的MYSQL子查询

select(投影)的列字段中的子查询如何与主查询的结果配对?形式:

 SELECT id,email,(SELECT name From Names WHERE Names.id=Users.id) as name
 FROM Users
Run Code Online (Sandbox Code Playgroud)

子查询是从 , 的输出中每行执行一次SELECT id,email FROM Users,因此应该LIMIT 1在子查询上使用(因为子查询中只有 1 行可以与主查询中的一行配对),还是子查询运行一次,并且然后每个结果都与来自 的相应行配对SELECT id,email FROM Users,很像等效连接:SELECT id,email,name FROM Users JOIN Names ON Users.id=Names.id

mysql subquery

6
推荐指数
2
解决办法
5万
查看次数

关系代数中并集运算产生的关系中的主键

我对关系代数中联合运算的结果表/关系有疑问。结果关系没有主键吗?或者它返回一个带有隐藏主键的表?

示例:假设我们取以下两个表的并集:

R1:
id | name
----------
1    a
2    b
3    c

R2:
id | name
----------
1    b
2    c
3    d
Run Code Online (Sandbox Code Playgroud)

其中属性“id”是关系 R1 和 R2 中的主键,现在这两者的并集将是:

id | name
------------
1     a
1     b
2     b
2     c
3     c
3     d
Run Code Online (Sandbox Code Playgroud)

现在,结果关系中的任何属性都不能成为主键,因为 id 和 name 都包含重复项。DBMS 如何解决这个问题?

union relational-theory

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