示例数据库练习

我想玩更大的数据库来testing我对SQL的知识。

有一个巨大的.sql在那里,我可以用来玩SQL查询?

你可以尝试经典的MySQL世界数据库 。

world.sql文件可以在这里下载:

http://dev.mysql.com/doc/index-other.html

只要向下滚动到示例数据库 ,你会发现它。

这是一个在线数据库,但你可以尝试使用stackoverflow数据库: http : //data.stackexchange.com/stackoverflow/query/new

您也可以在这里下载它的转储:

https://archive.org/download/stackexchange

查看CodePlex for Microsoft SQL Server社区项目和示例

第三方编辑

在上面的链接顶部,你可以看看

  • github上的微软sql服务器示例
  • codeplex上的msft db产品样本
  • 新的Wide World Importers示例数据库包括OLTP和用于SQL Server 2016及更高版本的OLAP

为什么不下载英文维基百科? 有各种大小的压缩SQL文件,它应该足够大,为您

主要的文章是XML,所以把它们插入到数据库中是一个更多的问题,但你可能会发现有其他文件适合你。 例如,页面间链接SQL文件是2.3GB压缩的。 查看https://en.wikipedia.org/wiki/Wikipedia:Database_download获取更多信息。;

奥斯卡

这是我用来学习sql: employees-db的

这是一个带有集成testing套件的示例数据库,用于testing您的应用程序和数据库服务器

第三方编辑

据launchpad.net 数据库已经转移到github 。

该数据库包含约30万名员工logging,280万条工资条目。 出口数据是167 MB,这不是很大,但重量不够重要的testing。

数据产生了,因此存在不一致和微妙的问题。 我们决定不去除这些内容,而是将这些问题作为数据清理练习。

如果你想要一个大型的真实数据库,你可以报名参加Netflix Prize竞赛,并且可以访问他们的数据,这些数据相当大(有几个条目)。

第三方编辑

上面的url不包含数据集anylonger(2016年10月)。 关于Netflix奖的维基百科页面报告说,有关隐私问题的法律诉讼已经解决。

你想要巨大?

这里有一个小表:创build表foo(id int不是空主键auto_increment,废话字符(2000));

插入foo(废话)值('');

– 每次运行下一行时,foo中的行数都会增加一倍。 插入foo(废话)select * from foo;

运行二十多次,你有超过一百万行玩。

是的,如果他正在寻找关系的导航,这不是答案。 但是如果通过巨大的手段来testing性能和优化的能力 ,这将做到这一点。 我做了这个(然后用随机值更新)来testing一个潜在的答案,我有另一个问题。 (并没有回答,因为我不能提供比提问者更好的performance。)

如果他要求“复杂”,我会有一个不同的答案。 对我来说,“巨大”意味着“很多行”。

因为玩桌子和关系并不需要太多的工作。 考虑一个表,本身没有可为空的列。 可以有多less不同的行? 只有一个,因为所有的列都必须有一些值,因为没有一个可以为null。

每个可为空的列乘以两种不同种类的行的数量:一列是空的行,一列是非空的行。

现在考虑一下,不是孤立的。 考虑一个表是一个子表:对于每个有一个FK到父母的孩子,这是一个多对一的,可以有0,1或许多孩子。 所以我们乘以前一步得到的数量的三倍(没有行为零,一个为正好一个,两个为许多)。 对于父母是多数的祖父母,另外三个。

对于多对多的关系,我们可以没有关系,一对一,一对多,多对一,多对多的关系。 因此,对于每个多对多我们可以从表格中的图表中得到,我们将这些行乘以9,或者就像两个一样的对manys。 如果多对多也有数据,我们乘以可空性数字。

在我们的图表中我们无法达到的表格 – 那些我们没有直接或间接FK的表格,不会乘以表格中的行。

通过recursion地乘以每个我们可以到达的表,我们可以得到提供每种“种类”所需的行数,我们只需要testing每个可能的关系就可以了。 而且我们距离不远。