我有两张桌子连在一起.
A有很多B.
通常你会这样做:
select * from a,b where b.a_id = a.id
Run Code Online (Sandbox Code Playgroud)
从b中记录的所有记录中获取记录.
如何获得b中没有任何内容的记录?
"我们应该忘记小的效率,比如大约97%的时间:过早的优化是所有邪恶的根源." (唐纳德克努特)我的SQL表不太可能包含超过几千行(并且那些是大的!).SQL Server数据库引擎优化顾问将数据量视为无关紧要.所以我甚至不应该考虑在这些表上放置显式索引.正确?
我的表格设置如下:
table name: process
fields: name, id_string
table name: value_seach
fields: id_string, value
Run Code Online (Sandbox Code Playgroud)
我想构造一个select语句,它将显示在value_search中没有条目的所有进程名称(使用它的各自的id_string).
进程表中的id_string可以为null,并且仍然具有名称,但如果可能,则需要排除这些名称.value_search中的id_string永远不能为null
我该怎么做呢?
例如,具有有限C#.NET经验的有经验的编码人员是否可以成功地与经验丰富的C#.NET编码器配对,其次要目标是使前者能够快速使用C#.NET?
如果在编辑面板上有一个右键单击菜单来改变字体大小,那就太好了,但是没有.
是否有其他地方的系统设置让我增加默认字体大小?
我们知道MS Access数据库引擎被"限制"以允许最大文件大小为2GB(或者可能内部连线被限制为少于2KB的4KB数据页的某些功率).但这在实践中意味着什么呢?
为了帮助我衡量这一点,您能告诉我可插入MS Access数据库引擎表的最大行数吗?
为了满足表的定义,所有的行必须是唯一的,因此唯一约束(例如PRIMARY KEY
,UNIQUE
,CHECK
,数据宏等)是必需的.
编辑:我意识到有一个理论上的限制,但我感兴趣的是实际(并不一定是可行的)现实生活限制.
在Postgres中,ANY
并且SOME
在谓词表达式的右侧使用时是同义词.例如,这些是相同的:
column = ANY (SELECT ...)
column = SOME (SELECT ...)
Run Code Online (Sandbox Code Playgroud)
这在此处记录:
http://www.postgresql.org/docs/9.1/static/functions-subquery.html#FUNCTIONS-SUBQUERY-ANY-SOME
我已观察ANY
并SOME
至少得到这些SQL DBMS的支持:
我可以安全地假设所有这些方言(以及其他方言)都作为同义词处理ANY
,SOME
或者在任何/某些DBMS中两个关键字之间是否存在细微差别?
我在SQL92定义中找到了这个:
<quantifier> ::= <all> | <some>
<all> ::= ALL
<some> ::= SOME | ANY
Run Code Online (Sandbox Code Playgroud)
这并没有说出ANY
和的语义SOME
.稍后在文档中,仅<some>
引用,而不是两个关键字.我怀疑在NULL
处理方面可能存在细微差别,例如,至少在一些DBMS中.任何/某些指向明确声明的指针是否可以被假定是值得欢迎的.
我有一个包含子查询的查询,该子查询总是导致一个非常大的表的SCAN导致查询时间很短.
这是我正在使用的查询:
SELECT PersonId
FROM person
WHERE PersonId IN (
SELECT PersonId
FROM relationship
WHERE RelatedToPersonId = 12270351721
);
Run Code Online (Sandbox Code Playgroud)
查询计划报告为:
SCAN TABLE person (~100000 rows)
EXECUTE LIST SUBQUERY 1
SEARCH TABLE relationship USING INDEX relationship_RelatedToPersonId_IDX (RelatedToPersonId=?) (~10 rows)
Run Code Online (Sandbox Code Playgroud)
具有静态列表的相同查询(相当于子查询的结果):
SELECT PersonId
FROM person
WHERE PersonId IN (12270351727,12270351730,12270367969,12387741400);
Run Code Online (Sandbox Code Playgroud)
以及查询计划:
SEARCH TABLE person USING COVERING INDEX sqlite_autoindex_person_1 (PersonId=?) (~5 rows)
EXECUTE LIST SUBQUERY 1
Run Code Online (Sandbox Code Playgroud)
如果第二个查询没有,为什么第一个查询会提示扫描?
一个.列级别
GO
CREATE TABLE Products
(
ProductID INT CONSTRAINT pk_products_pid PRIMARY KEY,
ProductName VARCHAR(25)
);
GO
Run Code Online (Sandbox Code Playgroud)
湾 表级别
CREATE TABLE Products
(
ProductID INT,
ProductName VARCHAR(25),
CONSTRAINT pk_products_pid PRIMARY KEY(ProductID)
);
GO
Run Code Online (Sandbox Code Playgroud)
列级别和表级别约束之间有什么区别吗?
考虑一个包含表Products和Employees的数据库.对当前产品经理进行建模是一项新要求,他是负责产品的唯一员工,并指出某些产品简单或成熟,不需要产品经理.也就是说,每个产品可以有零个或一个产品经理.
方法1:alter table Product
添加一个新的NULL
able列,product_manager_employee_ID
以便没有产品经理的产品由该NULL
值建模.
方法2:创建一个新表ProductManagers
与非NULL
能柱product_ID
和employee_ID
,与独特的约束product_ID
,使没有产品经理一个产品是由该表中没有行的建模.
还有其他方法,但这些是我似乎经常遇到的两种方法.
假设这些都是合法的设计选择(我倾向于相信)并且只代表不同的风格,他们有名字吗?我更喜欢方法2,并且发现很难将风格差异传达给那些喜欢方法1而没有使用实际例子的人(正如我在这里所做的那样!)如果我能说"我更喜欢我自己倾向于6NF(或其他)风格."
假设这些方法中的一个实际上是一个反模式(因为我只是怀疑方法1的情况可能是通过将两个实体之间的关系建模为这些实体之一的属性)这个反模式是否具有名称?
sql ×7
anti-join ×2
ms-access ×2
sql-server ×2
any ×1
exists ×1
indexing ×1
jet ×1
join ×1
ms-jet-ace ×1
oracle ×1
performance ×1
select ×1
sqlite ×1
subquery ×1