相关疑难解决方法(0)

theta join,equijoin和natural join之间的区别

当谈到theta连接,equijoins和自然连接时,我无法理解关系代数.有人可以帮我更好地理解吗?如果我在theta上使用=符号,那么它与使用自然连接完全相同吗?

sql database relational-algebra relational-database

91
推荐指数
5
解决办法
12万
查看次数

SQL Server - 缺少NATURAL JOIN/x JOIN y USING(字段)

我刚刚阅读了自然连接/使用 - SQL92的功能,这些功能(遗憾地?)缺少SQL Server当前的保留节目.

有没有人来自支持SQL Server(或其他不支持的DBMS)的DBMS - 它们听起来有用,还是一堆蠕虫(听起来也可能!)?

sql t-sql sql-server

9
推荐指数
2
解决办法
1万
查看次数

在性能方面,自然加入比SELECT FROM WHERE更好吗?

可能重复:
内部联接vs其中

今天我和我的项目经理就Cartesian产品进行了辩论.他说'自然连接'比使用'select from where'要好得多,因为后者会导致db引擎在内部执行笛卡尔积,但前者使用另一种方法来阻止这种情况.据我所知,自然连接语法在性能或含义方面与"从哪里选择"没有任何不同,我的意思是你可以根据自己的喜好使用.

SELECT * FROM table1,table2 WHERE table1.id=table2.id
SELECT * FROM table1 NATURAL JOIN table2
Run Code Online (Sandbox Code Playgroud)

请详细说明导致笛卡尔积的第一个查询,但第二个查询更加智能

sql select product cartesian

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

哪个表在嵌套循环连接中被视为"内部"

任何人都可以告诉我哪个表被认为是嵌套循环连接中的内部表?例如,如果查询是from a inner join b on...,哪一个a,或b将被视为内部?我知道它是b,但是从dbsophic的文章来看,在具有良好索引的内部输入的小外环下的第一个例子似乎暗示了反过来.

sql join nested-loops

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

Inner Join vs Natural Join vs USING子句:有什么优势吗?

想象一下,我有两个简单的表,例如:

CREATE TABLE departments(dept INT PRIMARY KEY, name);
CREATE TABLE employees(id PRIMARY KEY, fname, gname,
    dept INT REFERENCES departments(dept));
Run Code Online (Sandbox Code Playgroud)

(当然简化).

我可以有以下任何陈述:

SELECT * FROM employees e INNER JOIN departments d ON e.dept=d.dept;
SELECT * FROM employees e NATURAL JOIN departments d;
SELECT * FROM employees e JOIN departments d USING(dept);
Run Code Online (Sandbox Code Playgroud)

可以在这里找到一个工作示例:SQL Fiddle:http://sqlfiddle.com/#!15/864a5/13/10

它们都给出了几乎相同的结果 - 当然是相同的行.

我一直更喜欢第一种形式,因为它具有灵活性,可读性和可预测性 - 你清楚地定义了什么与什么有关.

现在,除了第一种形式有重复的列之外,其他两种形式是否真的有优势?或者他们只是语法糖?

我可以看到后一种形式的缺点是你应该命名你的主键和外键相同,这并不总是实用的.

sql join

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

table.*<> table.* - 有没有办法做这样的事情?

我有一张桌子,设计非常糟糕(不是我感谢),它以类似于以下的方式存储数据:

[key],[lease_id],[building_name],~20多列数据

对于中心和总部,可以并且将存在lease_id.我被要求找到所有实例,其中建筑物中的租赁数据与总部的数据不匹配相同的租约.

我可以通过自我加入很容易地做到这一点.这里的挑战是有大约20列可供比较,虽然我可以手动输入每一列我想知道是否有更好的方法来做到这一点(这也意味着查询可以在将来使用,考虑到任何表更改).

在语法上荒谬的伪代码 - 我想做一些类似于下面的工作:

select  lp.*
from    lease_proposal lp
        inner join
        (
            select  *
            from    lease_proposal lp2
            where   building_id = '001' -- assume 001 is head office for sake of example
        ) lp2
            on lp2.lease_id = lp.lease_id
where   lp.* <> lp2.*
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2008

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

如何在SQL查询中显示特定范围的数字

所以这比标题所暗示的要多一点.我有其中包含的表列和数量列,我想显示谁拥有500和1500之间的总和数量的结果.

例:

name     qty
------  ----
brad     100
cody     300
kylie   1100
brad     800
nelson  1200
bob      600
nelson   100
kylie    600
Run Code Online (Sandbox Code Playgroud)

我想要显示结果

name     qty
------  ----
brad     900
nelson  1300
bob      600
Run Code Online (Sandbox Code Playgroud)

希望这是有道理的.这是我得到的查询

SELECT name, SUM(qty) AS Total 
FROM t1 
    NATURAL JOIN t2 
WHERE qty BETWEEN 500 AND 1500 
GROUP BY name 
ORDER BY name
Run Code Online (Sandbox Code Playgroud)

问题是它似乎只是将qty中的字段汇总在500到1500之间,而不是仅显示该范围内的Total字段.我尝试做"WHERE SUM(qty)BETWEEN ...."但这会导致编译错误(我正在使用SQLite studio)

这是我所在的数据库课的作业问题,我正在学习,而不仅仅是得到答案.谢谢!

mysql sql database sqlite sqlitestudio

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