我正在寻找初学者和中级 SQL 谜题,我可以指导学员练习。
我知道http://sqlzoo.net/是一个很好的资源 - 你还有什么可以推荐的吗?
是否有任何指导方针或经验法则来确定何时存储聚合值以及何时动态计算它们?
例如,假设我有用户可以评分的小部件(请参阅下面的架构)。每次我显示一个小部件时,我都可以从Ratings表格中计算出平均用户评分。或者,我可以将平均评分存储在Widget表格中。这将使我不必在每次显示小部件时计算评分,但是每次用户对小部件进行评分时我都必须重新计算平均评分。
Ratings Widgets
--------- -------
widget_id widget_id
user_id name
rating avg_rating <--- The column in question
Run Code Online (Sandbox Code Playgroud) 假设我有一个包含字段A和的表B。我在A+上进行常规查询B,所以我在 上创建了一个复合索引(A,B)。A复合索引是否也会对查询进行全面优化?
此外,我在 上创建了一个索引A,但 Postgres 仍然只使用复合索引来查询A。如果前面的答案是肯定的,我想这并不重要,但是为什么它默认选择复合索引,如果单个A索引可用?
我正在使用 T-SQLCOALESCE函数,其中第一个参数在大约 95% 的运行时间不会为空。如果第一个参数是NULL,第二个参数是一个相当漫长的过程:
SELECT COALESCE(c.FirstName
,(SELECT TOP 1 b.FirstName
FROM TableA a
JOIN TableB b ON .....)
)
Run Code Online (Sandbox Code Playgroud)
例如,如果 ,c.FirstName = 'John'SQL Server 仍会运行子查询吗?
我知道使用 VB.NETIIF()函数,如果第二个参数为 True,代码仍会读取第三个参数(即使不会使用它)。
我正在观看一些 Brent Ozar 视频(例如这个视频),他建议不要在表格前加上‘tbl’或‘TBL’。
在网上我发现一些博客说它没有增加文档,而且“阅读它需要更长的时间”。
问题和考虑
我主要对 MySQL 和 PostgreSQL 感兴趣,但您可以大致回答以下问题:
将空字符串存储为...的物理存储含义是什么?
我不确定这是否属实,但我记得读过你是否在 linux 中运行以下命令
mysqldump -u username -p database_name > backup_db.sql
Run Code Online (Sandbox Code Playgroud)
在对数据库进行读取和写入时,转储可能包含错误。
命令中是否有特定选项mysqldump可确保在实时系统上安全完成此操作?我可以对我们的用户禁用读/写几秒钟(数据库 <50MB)
我真的对术语数据库、用户和模式感到困惑。谁能解释一下它们之间的区别(如果是的话)?
如果它们相同,那么它们之间有什么相似之处?我们如何使用它们?我们如何创建它们?
我有一个data类型的列,json其中包含这样的 JSON 文档:
{
"name": "foo",
"tags": ["foo", "bar"]
}
Run Code Online (Sandbox Code Playgroud)
我想将嵌套tags数组转换为连接字符串 ( 'foo, bar')。array_to_string()从理论上讲,使用该函数很容易做到这一点。但是,此功能不接受json输入。所以我想知道如何将这个 JSON 数组变成 Postgres 数组(类型text[])?
我经常需要从结果集中的每个组中选择一些行。
例如,我可能想列出每个客户最近的“n”个最高或最低订单值。
在更复杂的情况下,要列出的行数可能因组而异(由分组/父记录的属性定义)。这部分绝对是可选的/为了额外的学分,而不是为了劝阻人们回答。
在 SQL Server 2005 及更高版本中解决这些类型问题的主要选项是什么?每种方法的主要优点和缺点是什么?
AdventureWorks 示例(为清晰起见,可选)
TransactionHistory,每个产品以从 M 到 R 的字母开头。n每个产品都有历史记录行,其中n是DaysToManufactureProduct 属性的五倍。TransactionDate, .tie-break on TransactionID.sql-server ×3
mysql ×2
null ×2
postgresql ×2
aggregate ×1
array ×1
backup ×1
coalesce ×1
empty-string ×1
index ×1
index-tuning ×1
json ×1
learning ×1
linux ×1
mysqldump ×1
oracle ×1
performance ×1
schema ×1
t-sql ×1
users ×1