相关疑难解决方法(0)

如何在不使用JOIN的情况下实现SQL连接?

如何在不使用JOIN关键字的情况下实现SQL连接?

这不是必要的,但我认为通过这样做我可以更好地理解联接实际上做了什么.

sql join

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

这些查询JOIN类型之间有什么区别,有什么警告吗?

我正在执行多个查询(来自我网站的不同部分)

有些是这样的:

SELECT field, field1 
FROM table1, table2 
WHERE table1.id = table2.id 
AND ....
Run Code Online (Sandbox Code Playgroud)

有些是这样的:

SELECT field, field1 
FROM table1 
JOIN table2 
USING (id)  
WHERE ...
AND ....
Run Code Online (Sandbox Code Playgroud)

有些是这样的:

SELECT field, field1 
FROM table1 
LEFT JOIN table2 
 ON (table1.id = table2.id)
WHERE ...
AND ....
Run Code Online (Sandbox Code Playgroud)

哪些查询更好,或更慢/更快或更标准?

mysql join inner-join left-join

10
推荐指数
1
解决办法
527
查看次数

简单的SQL加入理解?

可能重复:
显式vs隐式SQL连接
使用多表中的join和select有区别吗?
SQL连接:SQL ANSI标准的未来(vs加入)?

JOIN和在FROM子句中声明多个表有什么区别?

如:

SELECT *
FROM  table1 AS t1,
      table2 AS t2
WHERE t1.id = t2.id
Run Code Online (Sandbox Code Playgroud)

相比:

SELECT *
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t2.id = t1.id
Run Code Online (Sandbox Code Playgroud)

mysql sql database sql-server-2008

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

哪个查询更好,更有效 - mysql

我遇到了以不同的方式编写查询,如下面的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)

mysql database database-design inner-join

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

JOINs与许多表中的SELECT

我一直在寻找广泛,但我找不到答案,可能是因为我无法找出正确的方式来提问.所以这就是:有没有理由更喜欢这两个查询中的任何一个?

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

SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;
Run Code Online (Sandbox Code Playgroud)

问题源于我正在尝试优化的更复杂的查询,但我认为这两个查询包含问题的本质,并希望以这种方式询问它对其他人更有用.提前致谢.

mysql join inner-join

7
推荐指数
2
解决办法
3763
查看次数

带内连接和不带内连接的 SQL 查询

可能的重复:
在 from 子句或 where 子句中进行等值连接是否更好

我是 SQL 菜鸟,我有 2 个查询:

SELECT 
    A.COLUMN1,B.COLUMN2, C.COLUMN3
FROM
     TB_ITEM A,
     TB_ITEM_CAT B,
     TB_ITEM_SUBCAT C
WHERE
     A.COLUMN1 = B.COLUMN1
     AND A.COLUMN1 = c.COLUMN1
Run Code Online (Sandbox Code Playgroud)

SELECT 
    A.COLUMN1,B.COLUMN2, C.COLUMN3
FROM
     TB_ITEM A 
INNER JOIN TB_ITEM_CAT B on A.COLUMN1 = B.COLUMN1
INNER JOIN TB_ITEM_SUBCAT C on A.COLUMN1 = C.COLUMN1
Run Code Online (Sandbox Code Playgroud)

在第一个查询中,我们没有 INNER JOINS,并从 3 个表中进行选择。在第二个中,我们使用 INNER JOINS 进行相同的查询,并从 3 个表中进行选择。

他们应该显示相同的结果?这些查询之间有什么区别?

sql sql-server

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

显式JOINs与隐式连接?

我的数据库教授告诉我们使用:

SELECT A.a1, B.b1 FROM A, B WHERE A.a2 = B.b2;
Run Code Online (Sandbox Code Playgroud)

而不是:

SELECT A.a1, B.b1 FROM A INNER JOIN B ON A.a2 = B.b2;
Run Code Online (Sandbox Code Playgroud)

据推测,Oracle不喜欢JOIN-Syntaxes,因为这些JOIN语法比笛卡尔积的WHERE限制更难优化.

我无法想象为什么会出现这种情况.唯一的性能问题可能是解析器需要更多地解析几个字符.但在我眼里,这一点可以忽略不计.

我发现了这个Stack Overflow问题:

这篇文章在Oracle文档中:https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries006.htm

Oracle建议您使用FROM子句OUTER JOIN语法而不是Oracle join运算符.

有人可以通过链接向我提供Oracle的最新建议.因为她不承认StackOverflow(这里可以回答所有人),10g文档在这里是过时的.

如果我错了,Oracle真的不喜欢JOINS现在比那还好,但是我找不到文章.我只是想知道谁是对的.

非常感谢能帮助我的每个人!

database oracle performance join

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

有人可以帮助解释为什么不使用SQL JOIN是不好的做法和错误?

可能重复:
显式vs隐式SQL连接
SQL JOIN:USING,ON或WHERE之间有区别吗?

我正在查看由不熟悉SQL的开发人员维护的代码.我在他的代码中经常看到以下代码片段:

SELECT *
FROM person, status
WHERE person.status_id = status.id
Run Code Online (Sandbox Code Playgroud)

我已向他建议他使用以下代码:

SELECT *
FROM person
INNER JOIN status ON status.id = person.status_id
Run Code Online (Sandbox Code Playgroud)

他指出,在这种特殊情况下,两个查询在相同的时间范围内返回相同的结果(67毫秒中的34k行).我的新查询在这种情况下没有改变任何事实这一事实证明了这种方法没有任何问题.我曾尝试向他解释笛卡尔等产品,但他坚持认为这种方法没有任何问题.有人可以帮助提供负面的例子,说明依赖于此的方法会失败,和/或为什么从实施的角度来看这种查询行是危险的?

mysql sql join

4
推荐指数
1
解决办法
1041
查看次数

如何包含缺少一半联接的记录?

假设我有这样的查询:

SELECT 
    s.staffID as staffID, 
    CONCAT_WS(", ", lname, fname) AS name, 
    GROUP_CONCAT(unit SEPARATOR ", ") AS units 
FROM 
    staff s, 
    units u, 
    staff_units r 
WHERE 
    s.staffID = r.staffID 
    AND u.unitID = r.unitID 
GROUP BY s.staffID 
ORDER BY lname
Run Code Online (Sandbox Code Playgroud)

这得到一个这样的列表:

Alice    Accounting
Bob      Systems
Charlie  Customer Services, Administration
Run Code Online (Sandbox Code Playgroud)

好的,到目前为止.现在假设我删除了staff_units记录Alice作为Accounting成员的条目.然后,运行此查询将生成一个列表,从中排除Alice,即使她仍然存在于staff表中:

Bob      Systems
Charlie  Customer Services, Administration
Run Code Online (Sandbox Code Playgroud)

我可以调整这个SQL,以便它继续返回Alice,结果显示她未分配给一个单元吗?

我当然可以运行一个查询来获取人员列表,并为每个人员查询另一个查询以获取当前分配.但这意味着要运行n + 1个查询来构建列表,其中n是人员数量,这只是让我错了.

mysql sql

4
推荐指数
1
解决办法
55
查看次数

选择有和没有连接的区别

以下2个SQL脚本的结果集看起来相同.但应该有一些区别.那是什么?

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 


SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
Run Code Online (Sandbox Code Playgroud)

性能有何不同?

更新

我刚刚比较了SQL Server 2008 R2上的实际查询计划.它们完全相同.所以没有性能差异.内部联接用于两种情况.

sql

4
推荐指数
1
解决办法
725
查看次数