下面两个查询之间有什么区别
UPDATE
这个问题已在类似的问题中得到解答,这里有LEFT JOIN和LEFT OUTER JOIN在SQL Server中.
SELECT * FROM ca
LEFT JOIN exam
ON ca.subject = exam.subject
Run Code Online (Sandbox Code Playgroud)
和
SELECT * FROM ca
LEFT OUTER JOIN exam
ON ca.subject = exam.subject
Run Code Online (Sandbox Code Playgroud)
表
Table 'CA'
--------------------
subject|score
----------------
ENG |25
MTH |34
BIO |18
Table 'Exam'
--------------------
subject|score
----------------
ENG |25
Run Code Online (Sandbox Code Playgroud)
运行2个查询会在mysql,sqlserver 2008中产生相同的结果.我没有在Oracle中测试.
subject | score1 | subject | score1
--------------------------------------
ENG 14 ENG 44
MTH 28 NULL NULL
BIO 22 NULL NULL
Run Code Online (Sandbox Code Playgroud)
OUTER子句的目的是什么?
我在oracle数据库中有两个表(fruit_cost和fruit_availability),详情如下:
fruit_cost如下所示:
fruit_name | fruit_cost
apple | 30
橙色| 7
瓜| 14
fruit_availability看起来像这样:
fruit_name | fruit_availability
表是空
的有任何好的选项来获得这样的结果:
fruit_name | fruit_cost | fruit_availability
apple | 30 | null
orange | 7 | null
瓜| 14 | 空值
假设我有表A和表B.A
有5列:F,G,H,I和X.B
有1列:X.A
和B中的X具有相同类型的值.
说我跑下面.
SELECT *
FROM A
LEFT JOIN B
ON A.X = B.X
结果数据集有6列.但是,有时由于LEFT JOIN,表B中行的数据为NULL. 我的最终目标是能够从A返回*但是在结果集中有一个额外的(第六)列,如果连接确实找到匹配则显示"是",如果没有,则显示"否".
任何帮助将不胜感激!
谢谢,
马特
我正在尝试从数据库中获取一些数据。我Taak有一个可能的idPartij列的表。可能,因为它可以是真实的idPartij,但也可以是null。
我得到的查询:
SELECT T.idTaak,
T.Taaktype,
P.Partijnaam,
T.Naar,
T.UltimatumDatum,
T.Opmerking,
T.Status,
T.Prioriteit
FROM Taak AS T,
Partij AS P
WHERE T.idPartij = P.idPartij
ORDER BY idTaak DESC
Run Code Online (Sandbox Code Playgroud)
当我有一个 id 时T.idPartij,这工作正常,但如前所述,该 id 可以是null. 在这种情况下,该行将不会出现在结果中。
唯一的问题:当我删除 where 子句时,我得到了很多行(因为Partij表不再被过滤......
我对 SQL 完全是个菜鸟,所以我想不出“解决”这个问题的方法。我唯一能想到的是创建 2 个查询,但我认为这不是一个好方法...
服务器: SQL Server 2008 R2
SQL小提琴: http ://sqlfiddle.com/#!6/112a6/4/0
我为可怜的主题/标题道歉,但我很难说出如何陈述我的问题,所以我将用一个(可能)冗长的例子来画出来:
下面是一个相当简单的查询,它可以获取特定日期范围内PC的会话数.请注意,WHERE子句已被注释掉.我希望收到的是PC的完整列表,即使是在该范围内具有ZERO/NULL会话的PC.但是,当我添加WHERE子句时,我只能获得在该范围内有会话的PC.这是有问题的,因为我无法看到在此期间未使用的PC.
SELECT
f_assetnetbiosname,
COUNT(f_sessiondate) as 'Sessions'
FROM
tb_assets ass
LEFT JOIN
tb_sessions ses
ON
ses.f_sessionnetbiosname = ass.f_assetnetbiosname
--WHERE (f_sessiondate BETWEEN '04/01/2015' AND '04/30/2015')
GROUP BY f_assetnetbiosname
======================== =======================================|
| tb_assets | | tb_sessions |
======================== =======================================|
| f_assetnetbiosname | | f_sessionnetbiosname f_sessiondate |
------------------------ ---------------------------------------|
| COMP_001 | | COMP_002 03/29/2015 |
| COMP_002 | | COMP_002 03/30/2015 |
| COMP_003 | | COMP_001 03/30/2015 |
------------------------ | COMP_001 04/02/2015 …Run Code Online (Sandbox Code Playgroud) 我需要在视图中使用LEFT JOIN,但是每次保存视图时,SQL Server都会将LEFT JOIN替换为LEFT OUTER JOIN。
尝试显式使用LEFT INNER JOIN时,出现错误“单词'INNER'附近的语法不正确”。此外,当我想为视图创建索引时,出现错误“无法使用OUTER JOINS向视图添加聚簇索引”。
这太疯狂了,为什么会发生这种想法?

因此,当我尝试为视图创建索引时,得到的消息是我使用了外部联接,尽管我没有。

我有三个具有以下结构的表
CUSTOMER
OwnerID | ProfileID (PK)| Name | Surname | Address
Owner1 Profile1 John Brown some address
Owner1 Profile2 John Brown some address
Owner1 Profile3 John Brown some address
Owner2 Profile4 Charles Snow some address
Owner2 Profile5 Charles Snow some address
Owner2 Profile6 Charles Snow some address
Owner3 Profile7 Edward Glork some address
Owner3 Profile8 Edward Glork some address
LOANS
LoanID (PK)| ProfileID | Amount | Duration
Loan1 Profile1 5000 31
Loan2 Profile2 1000 31
Loan3 Profile4 4000 31
Loan4 …Run Code Online (Sandbox Code Playgroud) 这是代码
SELECT username,count(username) FROM users WHERE status = '1' // $vuser to get the verified user only (it's the main query)
SELECT username FROM banned_users WHERE username = $vuser // if yes $bad_user is true else false
Run Code Online (Sandbox Code Playgroud)
是否可以使用一个 sql 查询仅选择/计算在banned_users中不存在的已验证用户?
有什么想法吗?