可能重复:
查询1:
SELECT *
FROM users
JOIN orders ON (orders.user_id = users.user_id)
WHERE users.user_id = 1;
查询2:
SELECT *
FROM users
JOIN orders USING (user_id)
WHERE user_id = 1;
我想加入订单和用户表来获取一些特定的数据。效果很好。我的问题是,因为两个查询都输出相同的结果集,这是相同的吗?使用哪一种更有效?哪一个对表演有好处?哪一个是最好的练习?
SQL Server是否应为以下两个查询生成相同的结果?主要区别在于WHERE子句中放置的条件与前者放在一起,而后者作为连接本身的条件放置。
SELECT *
FROM cars c
INNER JOIN parts p
ON c.CarID = p.CarID
WHERE p.Desc LIKE '%muffler%'
SELECT *
FROM cars c
INNER JOIN parts p
ON c.CarID = p.CarID
AND p.Desc LIKE '%muffler%'
提前感谢我在这方面得到的任何帮助!
我已经做了一张桌子
create table #temp(a int, b int, c int)
我在这张表上有两个索引:
非聚集非唯一索引c聚集索引在上
当我尝试执行以下查询时:
select b from #temp where c = 3
我看到这个系统是用于索引扫描的。这很好,因为非聚集索引没有以b作为键值。因此,它从列a进行索引扫描。
但当我尝试执行以下查询时:
select b from #temp where c= 3 and a = 3
我看到执行计划只有索引查找。没有扫描。为什么会这样呢?
聚集索引或非聚集索引都不是作为列之一的b?
我希望能做个索引扫描。
请澄清
大表(> 150万行)查询3次,还是在同一查询中放入3个条件更好?示例where子句如下。有类似或更复杂的where子句。我的直觉是将它们都放在同一个where中。但是需要一些来自社区的意见。提前谢谢。
where (a =1 or b=1) and (a=2 or b=3) and (c=1 or d=3)
为什么这两个查询给出不同的结果?
无论已删除列的值如何,此查询都会提供所有记录。就好像忽略了这个选择一样:
SELECT mcm.record_id, mc.category, mc.category_id, mc.deleted, mcm.member_id
FROM mailing_category mc
LEFT OUTER JOIN mailing_category_membership mcm
ON mc.category_id = mcm.category_id
AND mcm.member_id = 6346
AND mc.dele
我想表明,即使有人没有价值。
SELECT tablesite.name,
tablesite.family,
tablesite.phone_number,
COUNT(*)
FROM tablesite
LEFT JOIN action
ON tablesite.id_user=action.service_provider_id
WHERE action.vote !='' AND customer_comment =''
GR
我正在尝试执行sql语句
select buyer, issuer, ident, sum(qnty) as sum1
from palete
where sum1 <> 0
group by buyer, issuer, ident
我得到了一个错误:无效的列名'sum1‘。
问题是我得到了很多结果,所以我想避免这些sum1为0的结果。
感谢您的帮助!
我正在处理一个查询,在这个查询中,我连接两个表,然后只保留特别感兴趣的行。一种这样的条件是仅选择在特定列中具有重复值的行。
在这种情况下,数据和值是任意的。Team1和Team2包含团队名称的值,例如“团队红色”、“团队蓝色”、……诸若此类
SELECT date, team1, team2, value
FROM database.team_table
INNER JOIN database.teaminfo_table ON database.team_table
WHERE
date >= sysdate --example condition
AND
我最近开始学习oracle和sql。在学习过程中,我遇到了几个问题,我的朋友在一次面试中被问到。
SELECT *
FROM Employees
WHERE NULL IS NULL;
此查询将生成Employees表中的所有行。正如我所理解的,Oracle在列中搜索数据,因此,NULL,这里是否将其视为列名?当我说Oracle在列中搜索数据时,是否正确?为什么Oracle会给出这个查询中的所有行?在WHERE子句中,条件的左侧不是必须是列名吗?它不应该抛出一个错误吗?
SELECT *
FROM Employees
WHERE NULL = NULL;
不提供选定的行。
嗯,我知
我需要根据其他表的选择结果将2个值插入到一个表中。
IF NOT EXISTS
(
SELECT M.DNUM, M.NAME, U.ID, A.ID, A.RIGHT
FROM [ACCESS] A JOIN [MASTER] M
ON M.DNUM = A.NUM
JOIN [USERS] U
ON U.NUM = D.ID
WHERE M.ALIAS = '0-50'
GROUP BY M.DNUM, M.NAME, U.ID, A.ID, A.RIGHT
)
BEGIN
INSERT INT
我有个疑问..。
SELECT
CONVERT(NUMERIC(8, 2), ResultLevel),
*
FROM
dbo.DrugTestResult
WHERE
DrugID = 'THC'
AND ISNUMERIC(ResultLevel) = 1
AND (CONVERT(NUMERIC(8, 2), ResultLevel) >= 50
AND CONVERT(NUMERIC(8, 2), ResultLevel) <= 99999)
AND CONVERT(
我想知道在使用WHERE子句还是在内部联接的ON中使用匹配时是否有任何不同。
这种情况下的结果是一样的。
第一个查询:
with Catmin as
(
select categoryid, MIN(unitprice) as mn
from production.Products
group by categoryid
)
select p.productname, mn
from Catmin
inner join Production.Products p
on p.categoryid = Catmin.categoryid
and p.unitprice
我已经阅读了许多来自SO的帖子,我理解where子句和on子句中过滤的区别。但这些示例中的大多数都是在右表上进行过滤(当使用左连接时)。如果我有如下查询:
select * from tableA A left join tableB B on A.ID = B.ID and A.ID = 20
返回值不是我所期望的。我认为它首先过滤左边的表,只获取ID = 20的行,然后使用tableB进行左连接。
当然,这在技术上应该与执行以下操作相同:
select * from tableA A left join table B on A.ID = B.ID where A.ID = 20
但我认为
SELECT TestName,
SUM(TestFee) AS TestFee ,
COUNT(*) "No of Tests"
FROM ALLPATIENTINFO
WHERE ReqDate BETWEEN '2016-11-04' AND '2016-11-05'
GROUP BY TestName
这里只显示了测试名、总数和计数号,与我想要显示的数据表中保存的所有Testname的日期一致。如果测试名超出此日期,则它只显示测试名称和测试费& count将为零。
在where中使用条件与在join中使用条件的结果有区别吗?在实际查询中,我可以将AND "noteReads"."id" IS NULL放在where或join中。这有关系吗?
where子句中带有AND "noteReads"."userId" = 1的第一个版本:
SELECT count(distinct("notes"."id")) FROM "notes"
LEFT OUTER JOIN "noteReads" ON "notes".
我试图找出以下两个查询之间的区别
查询1:
其中我在on子句中给出了条件'Orders.OrderID != null'
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON (Customers.CustomerID=Orders.CustomerID and Orders.OrderID is not null)
查询2:
其中我在where子句中给出了条件'Orders.OrderID != null'
SELECT Customers.Custom
我对使用ON和WHERE过滤连接的理解是正确的吗?
WHERE
...will过滤联接表的结果,这意味着LEFT JOIN或RIGHT JOIN不会显示目标表中的所有记录,因为即使WHERE过滤器可能位于另一个表中的某个字段上,这些记录也会被过滤掉。
ON
...can可用作要联接的表的筛选器。我过去认为ON仅用于在连接两个表时比较这两个表之间的字段,但对于要连接的特定表,它也可以充当孤立的WHERE。
当您只连接两个表时,所有这些都无关紧要,但我逐渐意识到,在跨3+表进行非常大的连接时,理解它们之间的差异是至关重要的。
这两个SQL语句返回相同的结果。那么使用where子句和使用having子句有什么不同呢?
有什么想法吗?
select
min(internid), max(internid)
from
v_intern
where
trainingterm= 'Fall - September' and trainingyear = '2020'
group by
trainingTerm, trainingYear
select
min(internid), max(internid)
from
我不明白为什么下面的查询要花这么长时间来排序。在分析中,它表明排序需要很长时间,即使有排序行的索引。
MySQL服务器是一台专用机器,基本上只运行当前Debian稳定版本中的MySQL,具有32 GB的物理内存和良好的MySQL配置。表player (INNODB)目前有32,000,000条条目。表player的索引
gameplayer over game, id, server (唯一)
serverplayer优于id, server (索引)
date over date (索引) <--这是我们要根据的排序
下面的查询用于获取游戏中某个玩家的统计数据,从而获得有关玩家、统计数
大家好,我是plsql的新手,对ROWNUM函数感到困惑。实际上,我有一个plsql代码,它使用了两个表EMPLOYEE和WORKS_ON,我们创建了一个关联数组,然后存储第一条记录和第二条记录,我将把代码、结果和表都放入其中。我的问题是,为什么我们使用rownum <= 1来获取第二条记录,而当我使用rownum <= 2时,它会给出一个错误:
SET SERVEROUTPUT ON;
DECLARE
--Declare the table
TYPE EmpSSNarray
IS TABLE OF employee.ssn%TYPE
INDEX BY SIMPLE_I
我有一个查询如下
SELECT ActivityId,
AnotherId,
PersonId,
StartTime AS MyAlias
FROM Activity
WHERE DeletedStatus='Active' AND
StartTime>='2018-02-01'AND StartTime<='2018-02-08'
正在使用的执行计划在这里
Index1被定义为:
CREATE NONCLUSTERED INDEX Index1 ON Activity
当我跑步时:
SELECT * from actor inner join film_actor fa ON actor.actor_id = fa.actor_id
我得到了结果。
但跑步:
SELECT * from actor inner join film_actor fa WHERE actor.actor_id = fa.actor_id
它会产生错误:
错误:在"WHERE“或”WHERE“附近的语法错误
据我所知,在这种情况下,哪里是正确的用法。
任何输入都会有帮助。
以下SQL语句:
select * from employees e
left join departments d on e.deptid = d.deptid
where ( d.deptname = 'HR' or d.deptname = 'HR & Accounts')
产生与以下内部连接相同的结果:
select * from employees e
inner join departments d on e.deptid = d.deptid and d.deptname like '%HR%'
如果我使用至少包含2列的表,如下所示:
[User]
[FirstName]|[LastName]
Robert-Dupont
Louis-Dupont
Georges-Andre
假设有大量的数据,并且“FirstName”中的结果比“LastName”中的结果更独特,那么哪种查询是最快的:
查询1:
SELECT * USER WHERE LastName = 'Dupont' AND FirstName = 'Robert'
查询2:
SELECT * USER WHERE FirstName = 'Robert' AND LastName
我有一个简单的select语句,如:
SELECT *
FROM [customer] AS [c]
INNER JOIN [customertype] AS [ct] ON [c].[CustTypeKey] = [ct].[CustTypeKey]
INNER JOIN [ProjectCustomer] AS [pc] ON [c].[CustomerKey] = [pc].[CustomerKey]
INNER JOIN [Project] AS [p] ON [pc].[ProjectKey] = [p].[ProjectKey]
INNER JOIN
我有以下问题:
SELECT s.LogonId "StaffId" FROM [dbo].[SQMap] sq
INNER JOIN [dbo].[Staff] s ON s.Id = sq.StaffId
INNER JOIN [dbo].[Queue] q ON q.Id = sq.QueueId
WHERE sq.QueueId = @queueId AND q.IsAuto = 1
我被要求更改查询以向where子句添加更多条件。
WHERE sq.QueueId = @queueId
AND q.Id = @queueId
AND q.IsAutoAssigne
我正在做我同事的旧项目,我在她的代码WHERE TRUE AND ID='1' AND STAT='1'上找到了她。我尝试删除TRUE AND,所以查询变成了WHERE ID='1' AND STAT='1',并得到了相同的结果。
我知道我们可以使用TRUE作为布尔值来搜索WHERE FLAG = TRUE和之类的“什么是真的”
常数TRUE和FALSE分别计算为1和0。常量名称可以用任何字母写成。
我也试过SELECT * FROM MYTABLE WHERE TRUE,但它和SELECT * FROM MYTABLE一
我有一个使用左联接和条件的复杂查询,我将尽量简化它,以避免复杂性。
我有两个表posts和metadata,两个表都有索引,我的查询如下:
SELECT `posts`.* FROM posts
LEFT JOIN `metadata` ON `metadata`.`extended_type`='App\Post' AND `metadata`.`extended_id` = `posts`.`id` AND `metadata`.`key`='display_date'
WHERE metadata.value <= DATE(NOW()) AND p
当我对dbase(oracle)视图使用时
from f in MYVIEW
where f.Order=="HERE"
select f
我得到相同的结果(行)。
和..。
from f in MYVIEW
where f.Order=="HERE"
select f.ColA
我得到了为ColA返回的正确结果
我知道这肯定是个新手问题。仍然提前使用learning...thanks
我试图构建一个带有几个依赖项的筛选函数,但是当我向SQL查询中添加an和和时,似乎没有找到任何结果,但是如果我在AND之前和之后使用查询进行搜索,就会找到正确的结果。
我试图构建一个过滤函数,用户可以在其中过滤,例如:价格:100美元到200美元,以及30到80平方英尺。
我的方法是这样的:
SELECT * FROM 'tableXY' WHERE value BETWEEN 100 AND 200 AND key ='price'
AND value BETWEEN 2 AND 5 AND key = 'rooms'
AND value B