在关系查询中,null是什么意思?
问题描述:
我在阅读a paper on SCOPE,它讨论了大数据应用程序的SQL查询语义。它并不遵循SQL如何处理空值,并讨论了我之前没有遇到的“空扩展”变量。考虑伪查询在关系查询中,null是什么意思?
“谓词A!= B只对B上的空扩展的行满足”是什么意思?
答
术语“空扩展”通常用于指现代DBMS中的集合代数。也就是说,它通过引入NULL
值或更确切地说是一个单一的通用NULL
值来“扩展”常规关系代数。涉及NULL
的每个谓词都有一个定义的结果,它与其余的代数在逻辑上一致。
我也看过这个术语用来指外连接。例如,下面的查询:
SELECT A.id, A.name AS NameA, B.name AS NameB
FROM A
LEFT JOIN B
ON B.id = A.id
可能给你以下结果:
id | NameA | NameB
------+-----------+-----------
10 | John | Smith
11 | Jane | Doe
12 | Bob | NULL
这里发生的事情是,ID 12,A被“零扩展”与列从B,因为那里没有可用的B值。一般来说,当你在两个关系A和B上执行一个连接时,并且你想要在A中包含元组中的元组(在B中没有匹配的元组)时,那么A必须按顺序用B的属性进行null扩展以形成完整的结果集。
,你把在此报价具体线路:
谓词A = B满足时只对那些空扩展基于B
...没有按”行当脱离情境时真的很有意义。你必须看整个事情:
SQ = SELECT DISTINCT Sc FROM S WHERE Sa < 20;
M1 = SELECT Ra, Rb, Rc FROM R WHERE Rb < 100;
M2 = SELECT Ra, Rb, Rc, Sc
FROM M1 LEFT OUTER JOIN SQ ON Rc == Sc;
Q = SELECT Ra, Rb FROM M2
WHERE Ra > 5 OR Rc != Sc;
后来一点点:
不与任何SQ行加入M1行是空值扩展SC上。第四个选择(Q)通过应用引用子查询的谓词来计算最终结果。请注意,谓词Rc!= Sc仅适用于在Sc上为空值扩展的行。
现在,在某些情况下,理解他们想说的内容会更容易。由于M2中的连接条件为Rc == Sc
,因此条件Rc != Sc
只有在Sc
为NULL
时才为真 - 否则,Sc
将等于Rc
,因为这就是它的连接方式。换句话说,条件Rc != Sc
只适用于M2
中的行,其中M1
由于与SQ
中的任何行不匹配而被从SQ
的列进行空值扩展。
希望能够消除一些混淆。