sql嵌套查询例子,mysql将查询结果存到另一个表
- 开发语言
- 2023-10-06
- 128
大家好,今天给各位分享sql嵌套查询例子的一些知识,其中也会对mysql将查询结果存到另一个表进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站...
大家好,今天给各位分享sql嵌套查询例子的一些知识,其中也会对mysql将查询结果存到另一个表进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
在mybatis中集合嵌套查询和集合嵌套结果的区别是什么
嵌套查询是多条sql语句分开写并配置,嵌套结果是一条sql语句关联查询并配置,实质效果是一样的。
如何用sql实现链表查询
1.可以使用SQL实现链表查询。2.SQL中可以使用JOIN语句来实现链表查询,通过指定连接条件将多个表连接起来,从而实现链表查询。具体实现方式可以根据具体情况选择不同的JOIN类型,如INNERJOIN、LEFTJOIN、RIGHTJOIN等。3.此外,还可以使用子查询来实现链表查询,即在查询语句中嵌套查询语句,通过查询结果中的某些字段来连接其他表,从而实现链表查询。需要注意的是,使用子查询可能会影响查询效率,需要谨慎使用。
sql查询语句详解
SQL查询语句是用于从数据库中检索数据的命令。它们允许你指定要检索的表和字段,并定义筛选条件和排序规则。下面是SQL查询语句的基本结构和一些常见的关键词:
SELECT:用于指定要检索的字段(列),可以使用通配符*表示所有字段。
FROM:用于指定要检索的表。
WHERE:用于指定筛选条件,只返回满足条件的行。
ORDERBY:用于指定按照哪个字段排序返回的结果。
GROUPBY:用于将结果按照某个字段进行分组。
HAVING:用于指定筛选分组后的结果。
以下是一个简单的SQL查询语句示例:
```sql
SELECT*FROMemployeesWHEREage>25ORDERBYnameASC;
```
这个查询语句将从名为employees的表中选择所有的字段,并且只返回年龄大于25的行。结果将按照姓名升序排序。
除了基本的SELECT语句,SQL还提供了许多其他功能,如使用聚合函数(SUM、AVG等)、连接多个表、使用子查询等。这些功能可以帮助你更复杂地查询和分析数据。具体的语法和用法可能会因SQL的方言(如MySQL、Oracle、SQLServer等)而有所不同。
为了更深入地了解SQL查询语句的详细用法和常见操作,请参考相应的SQL文档、教程或参考书籍。这些资源可以帮助你学习更高级的查询技巧和优化方法。
sql语句怎么套sql语句
嵌套查询select*from(select*fromtablename1)astablename2
MyBatis一对多关联表查询是使用嵌套结果好还是嵌套查询好
嵌套查询是多条sql语句分开写并配置,嵌套结果是一条sql语句关联查询并配置,实质效果是一样的。
纯SQL查询语句可以实现神经网络吗
我们熟知的SQL是一种数据库查询语句,它方便了开发者在大型数据中执行高效的操作。但本文从另一角度嵌套SQL查询语句而构建了一个简单的三层全连接网络,虽然由于语句的嵌套过深而不能高效计算,但仍然是一个非常有意思的实验。
在这篇文章中,我们将纯粹用SQL实现含有一个隐藏层(以及带ReLU和softmax激活函数)的神经网络。这些神经网络训练的步骤包含前向传播和反向传播,将在BigQuery的单个SQL查询语句中实现。当它在BigQuery中运行时,实际上我们正在成百上千台服务器上进行分布式神经网络训练。听上去很赞,对吧?
也就是说,这个有趣的项目用于测试SQL和BigQuery的限制,同时从声明性数据的角度看待神经网络训练。这个项目没有考虑任何的实际应用,不过最后我将讨论一些实际的研究意义。
我们先从一个基于神经网络的简单分类器开始。它的输入尺寸为2,输出为二分类。我们将有一个维度为2的单隐层和ReLU激活函数。输出层的二分类将使用softmax函数。我们在实现网络时遵循的步骤将是在Karpathy’sCS231n指南(https://cs231n.github.io/neural-networks-case-study/)中展示的基于SQL版本的Python示例。
模型
该模型含有以下参数:
输入到隐藏层
W:2×2的权重矩阵(元素:w_00,w_01,w_10,w_11)
B:2×1的偏置向量(元素:b_0,b_1)
隐藏到输出层
W2:2×2的权重矩阵(元素:w2_00,w2_01,w2_10,w2_11)
B2:2×1的偏置向量(元素:b2_0,b2_1)
训练数据存储在BigQuery表格当中,列x1和x2的输入和输出如下所示(表格名称:example_project.example_dataset.example_table)
如前所述,我们将整个训练作为单个SQL查询语句来实现。在训练完成后,通过SQL查询语句将会返回参数的值。正如你可能猜到的,这将是一个层层嵌套的查询,我们将逐步构建以准备这个查询语句。我们将会从最内层的子查询开始,然后逐个增加嵌套的外层。
前向传播
首先,我们将权重参数W和W2设为服从正态分布的随机值,将权重参数B和B2设置为0。W和W2的随机值可以通过SQL本身产生。为了简单起见,我们将从外部生成这些值并在SQL查询中使用。用于初始化参数的内部子查询如下:
请注意,表格example_project.example_dataset.example_table已经包含了列x1、x2和y。模型参数将会被作为上述查询结果的附加列添加。
接下来,我们将计算隐藏层的激活值。我们将使用含有元素d0和d1的向量D表示隐藏层。我们需要执行矩阵操作D=np.maximum(0,np.dot(X,W)+B),其中X表示输入向量(元素x1和x2)。这个矩阵运算包括将权重W和输入X相乘,再加上偏置向量B。然后,结果将被传递给非线性ReLU激活函数,该函数将会把负值设置为0。SQL中的等效查询为:
上面的查询将两个新列d0和d1添加到之前内部子查询的结果当中。上述查询的输出如下所示。
这完成了从输入层到隐藏层的一次转换。现在,我们可以执行从隐藏层到输出层的转换了。
首先,我们将计算输出层的值。公式是:scores=np.dot(D,W2)+B2。然后,我们将对计算出来的值用softmax函数来获得每个类的预测概率。SQL内部的等价子查询如下:
首先,我们将使用交叉熵损失函数来计算当前预测的总损失。首先,计算每个样本中正确类预测概率对数的负值。交叉熵损失只是这些X和Y实例中数值的平均值。自然对数是一个递增函数,因此,将损失函数定义为负的正确类预测概率对数很直观。如果正确类的预测概率很高,损失函数将会很低。相反,如果正确类的预测概率很低,则损失函数值将很高。
为了减少过拟合的风险,我们也将同样增加L2正则化。在整体损失函数中,我们将包含0.5*reg*np.sum(W*W)+0.5*reg*np.sum(W2*W2),其中reg是超参数。在损失函数中包括这一函数将会惩罚那些权重向量中较大的值。在查询当中,我们同样会计算训练样本的数量(num_examples)。这对于后续我们计算平均值来说很有用。SQL查询中计算整体损失函数的语句如下:
反向传播
接下来,对于反向传播,我们将计算每个参数对于损失函数的偏导数。我们使用链式法则从最后一层开始逐层计算。首先,我们将通过使用交叉熵和softmax函数的导数来计算score的梯度。与此相对的查询是:
在上文中,我们用scores=np.dot(D,W2)+B2算出了分数。因此,基于分数的偏导数,我们可以计算隐藏层D和参数W2,B2的梯度。对应的查询语句是:
同理,我们知道D=np.maximum(0,np.dot(X,W)+B)。因此,通过D的偏导,我们可以计算出W和B的导数。我们无须计算X的偏导,因为它不是模型的参数,且也不必通过其它模型参数进行计算。计算W和B的偏导的查询语句如下:
最后,我们使用W、B、W2及B2各自的导数进行更新操作。计算公式是param=learning_rate*d_param,其中learning_rate是参数。为了体现L2正则化,我们会在计算dW和dW2时加入一个正则项reg*weight。我们也去掉如dw_00,correct_logprobs等缓存的列,它们曾在子查询时被创建,用于保存训练数据(x1,x2及y列)和模型参数(权重和偏置项)。对应的查询语句如下:
这包含了正向和反向传播的一整个迭代过程。以上查询语句将返回更新后的权重和偏置项。部分结果如下所示:
为了进行多次训练迭代,我们将反复执行上述过程。用一个简单Python函数足以搞定,代码链接如下:https://github.com/harisankarh/nn-sql-bq/blob/master/training.py。因为迭代次数太多,查询语句嵌套严重。执行10次训练迭代的查询语句地址如下:https://github.com/harisankarh/nn-sql-bq/blob/master/out.txt
因为查询语句的多重嵌套和复杂度,在BigQuery中执行查询时多项系统资源告急。BigQuery的标准SQL扩展的缩放性比传统SQL语言要好。即使是标准SQL查询,对于有100k个实例的数据集,也很难执行超过10个迭代。因为资源的限制,我们将会使用一个简单的决策边界来评估模型,如此一来,我们就可以在少量迭代后得到较好的准确率。
我们将使用一个简单的数据集,其输入X1、X2服从标准正态分布。二进制输出y简单判断x1+x2是否大于0。为了更快的训练完10个迭代,我们使用一个较大的学习率2.0(注意:这么大的学习率并不推荐实际使用,可能会导致发散)。将上述语句执行10个迭代得出的模型参数如下:
我们将使用Bigquery的函数savetotable把结果保存到一个新表。我们现在可以在训练集上执行一次推理来比较预测值和预期值的差距。查询语句片段在以下链接中:https://github.com/harisankarh/nn-sql-bq/blob/master/query_for_prediction.sql。仅通过十个迭代,我们的准确率就可达93%(测试集上也差不多)。
如果我们把迭代次数加到100次,准确率高达99%。
优化
下面是对本项目的总结。我们由此获得了哪些启发?如你所见,资源瓶颈决定了数据集的大小以及迭代执行的次数。除了祈求谷歌开放资源上限,我们还有如下优化手段来解决这个问题。
创建中间表和多个SQL语句有助于增加迭代数。例如,前10次迭代的结果可以存储在一个中间表中。同一查询语句在执行下10次迭代时可以基于这个中间表。如此,我们就执行了20个迭代。这个方法可以反复使用,以应对更大的查询迭代。
相比于在每一步增加外查询,我们应该尽可能的使用函数的嵌套。例如,在一个子查询中,我们可以同时计算scores和probs,而不应使用2层嵌套查询。
在上例中,所有的中间项都被保留直到最后一个外查询执行。其中有些项如可以早些删除(尽管SQL引擎可能会自动的执行这类优化)。
多尝试应用用户自定义的函数。如果感兴趣,你可以看看这个BigQuery的用户自定义函数的服务模型的项目(但是,无法使用SQL或者UDFs进行训练)。
意义
现在,让我们来看看基于深度学习的分布式SQL引擎的深层含义。BigQuery、Presto这类SQL仓库引擎的一个局限性在于,查询操作是在CPU而不是GPU上执行的。研究blazingdb和mapd等基于GPU加速的数据库查询结果想必十分有趣。一个简单的研究方法就是使用分布式SQL引擎执行查询和数据分布,并用GPU加速数据库执行本地计算。
退一步来看,我们已经知道执行分布式深度学习很难。分布式SQL引擎在数十年内已经有了大量的研究工作,并产出如今的查询规划、数据分区、操作归置、检查点设置、多查询调度等技术。其中有些可以与分布式深度学习相结合。如果你对这些感兴趣,请看看这篇论文(https://sigmodrecord.org/publications/sigmodRecord/1606/pdfs/04_vision_Wang.pdf),该论文对分布式数据库和分布式深度学习展开了广泛的研究讨论。
希望你如我一般享受其中!请在下方分享你的高见。我很乐意回复。
好了,关于sql嵌套查询例子和mysql将查询结果存到另一个表的问题到这里结束啦,希望可以解决您的问题哈!
本文链接:http://xinin56.com/kaifa/53803.html