查询之间有什么区别
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
Run Code Online (Sandbox Code Playgroud)
还有这个
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
Run Code Online (Sandbox Code Playgroud) 写什么联接使用2个之间的差异from条款和where这样的:
var SomeQuery = from a in MyDC.Table1
from b in MyDC.Table2
where a.SomeCol1 == SomeParameter && a.SomeCol2 === b.SomeCol1
Run Code Online (Sandbox Code Playgroud)
并join使用join运算符编写一个.
这是针对join2个表,但有时,我们需要连接更多的表from,where如果我们选择上面的语法,我们需要结合其他子句.
我知道两种语法查询都返回相同的数据,但我想知道是否存在性能差异或其他类型的差异,这将最终支持一种语法而不是另一种语法.
谢谢你的建议.
使用逗号或两个不同表之间的连接有什么区别.
比如这两个代码:
SELECT studentId, tutorId FROM student, tutor;
SELECT studentId, tutorId FROM student JOIN tutor;
Run Code Online (Sandbox Code Playgroud) 我遇到了以不同的方式编写查询,如下面的Type-I所示
SELECT JS.JobseekerID
, JS.FirstName
, JS.LastName
, JS.Currency
, JS.AccountRegDate
, JS.LastUpdated
, JS.NoticePeriod
, JS.Availability
, C.CountryName
, S.SalaryAmount
, DD.DisciplineName
, DT.DegreeLevel
FROM Jobseekers JS
INNER
JOIN Countries C
ON JS.CountryID = C.CountryID
INNER
JOIN SalaryBracket S
ON JS.MinSalaryID = S.SalaryID
INNER
JOIN DegreeDisciplines DD
ON JS.DegreeDisciplineID = DD.DisciplineID
INNER
JOIN DegreeType DT
ON JS.DegreeTypeID = DT.DegreeTypeID
WHERE
JS.ShowCV = 'Yes'
Run Code Online (Sandbox Code Playgroud)
II型
SELECT JS.JobseekerID
, JS.FirstName
, JS.LastName
, JS.Currency
, JS.AccountRegDate
, JS.LastUpdated
, …Run Code Online (Sandbox Code Playgroud) 在加入表格或从多个表格中选择之间哪个更好?
例如,让我们假设以下类似的场景:
使用join:
SELECT COALESCE(SUM(SALARY),0) FROM X
JOIN Y ON X.X_ID=Y.Y_X_ID
Run Code Online (Sandbox Code Playgroud)
要么
通过从多个表中选择
SELECT COALESCE(SUM(SALARY),0) FROM X, Y
WHERE X.X_ID=Y.Y_X_ID
Run Code Online (Sandbox Code Playgroud) SQL 1: select * from t1 join t2 on t1.f1 = t2.f2
SQL 2: select * from t1,t2 where t1.f1 = t2.f2
他们返回的结果是一样的.它们之间有什么不同吗?例如,在DBMS如何运行它们或在查询计划中?
有没有办法用greenDao按相关表格中的字段排序?比如我有一张汽车桌和一张司机桌.每辆车都有一个司机.现在我想查询(例如蓝色)汽车并按驱动程序的名称排序
我今天错误地输入了一个查询,但它仍然有效,并给出了预期的结果.我打算运行这个查询:
SELECT e.id FROM employees e JOIN users u ON u.email=e.email WHERE u.id='139840'
Run Code Online (Sandbox Code Playgroud)
但我不小心跑了这个查询
SELECT e.id FROM employees e JOIN users u ON u.email=e.email AND u.id='139840'
Run Code Online (Sandbox Code Playgroud)
(注意AND而不是WHERE在最后一个子句中)
并且都从用户ID返回了正确的员工ID.
这两个查询有什么区别?第二种形式是否只加入满足条件的2个表的成员,而第一个表是否会加入整个表,然后运行查询?一个比另一个更有效还是更低效?这是我缺少的其他东西吗?
谢谢!
我刚刚意识到我一直在为表中的一列捕获错误的数据.我已经解决了这个问题,但到目前为止我捕获的数据仍然不正确.
让我们来命名我的表TableIWantToCorrect和TableWithIDs
在TableIWantToCorrect,我有一个外键TableWithIDs.这是不正确的.
我可以通过比较列的子字符串和列中TableIWantToCorrect的列来更正数据TableWithIDs.
所以目前,我有
TableIWantToCorrect
Name ForeignKey
123-abc-123 15
456-def-456 15
789-ghi-789 15
Run Code Online (Sandbox Code Playgroud)
TableWithIDs
CompareName id
abc 1
def 2
ghi 3
Run Code Online (Sandbox Code Playgroud)
因此,TableIWantToCorrect当Name中的子字符串与Compare name中的子字符串相等时,我想要更新以获得正确的ForeignKey值.子串的位置始终相同,因此我可以使用该Substring方法.
我的尝试:
Update TableIWantToCorrect
SET ForeignKey =
(SELECT id
FROM TableWithIDs
WHERE UPPER(CompareName) = UPPER((SUBSTRING(TableIWantToCorrect.Name, 4, 3)))
Run Code Online (Sandbox Code Playgroud)
结果 :
子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.该语句已终止.
我知道我做了些傻事.我在这里做错了什么?
几周前,我做了一个查询(不记得要做什么),它涉及到BETWEEN运算符。刚开始,我在WHERE子句中使用了它,但是它没有产生正确的结果集(再次,我不记得问题出在哪里)。我考虑了为什么,最后得出结论,我不得不将其移至该JOIN条款。
例如
“原始”查询:
SELECT --something
FROM table1 a
/*type of*/ JOIN table2 b ON a.field = b.field
WHERE b.field2 BETWEEN a.field2 AND a.field3 /*some other conditions*/
Run Code Online (Sandbox Code Playgroud)
修改后的查询:
SELECT --something
FROM table1 a
/*type of*/ JOIN table2 b ON a.field = b.field
AND b.field2 BETWEEN a.field2 AND a.field3
WHERE /*some other conditions*/
Run Code Online (Sandbox Code Playgroud)
与JOIN版本相比,该版本返回的结果集较小WHERE,并且该JOIN版本产生了正确的结果集,而WHERE没有。
我现在要问的原因是因为当时我什么都没想到,但是今天老板问我为什么要这样做(针对完全不同的查询),我告诉他我上次做过的经历,两者他和我对这两种用法之间的差异很感兴趣。
从我的观点来看,为什么一个版本产生与另一个WHERE版本不同的原因是,子句版本仅选择了一系列数据,而该JOIN版本则寻找了一系列要连接的数据。是这样吗 或者,我确实遇到了受其余查询影响的独特体验(查询比示例复杂得多)。
编辑
我不同意可能的重复内容,因为我的内容专门针对该BETWEEN …
sql ×8
join ×4
database ×3
mysql ×3
sql-server ×3
inner-join ×2
t-sql ×2
android ×1
between ×1
c# ×1
greendao ×1
linq-to-sql ×1
oracle ×1
oracle10g ×1
performance ×1
sql-update ×1
where ×1