彩世界平台-彩世界时时app-彩世界开奖app苹果下载

热门关键词: 彩世界平台,彩世界时时app,彩世界开奖app苹果下载

您的位置:彩世界平台 > 工作委员会 > SQL查询入门_MsSql_脚本之家

SQL查询入门_MsSql_脚本之家

发布时间:2019-11-23 04:48编辑:工作委员会浏览(195)

    引言 在前篇文章中,我对数据库查询的基本概念以及单表查询做了详细的解释,本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路。 多表连接简介 在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个表,而如果大多查询只涉及到一个表的,那么那个表也往往低于第三范式,存在大量冗余和异常。 因此,连接就是一种把多个表连接成一个表的重要手段. 比如简单两个表连接学生表表,如图:

    SQL语言是一门简单易学却又功能强大的语言,它能让你快速上手并写出比较复杂的查询语句。但对于大多数开发者来说,使用SQL查询数据库并没有一个抽象的过程和一个合理的步骤,这很可能会使在写一些特定的SQL查询语句来解决特定问题时被”卡”住,本系列文章主要讲述SQL查询时一些基本的理论,以及写查询语句的抽象思路。 SQL查询简介 SQL语言起源于1970年E.J.Codd发表的关系数据库理论,所以SQL是为关系数据库服务的。而对于SQL查询,是指从数据库中取得数据的子集,这句话貌似听着有些晦涩是吧,下面通过几张图片简单说明一下: 假如一个数据库中只有一个表,再假如所有数据如下图:

    进行连接后如图:

    而对于子集的概念,look下图:

    笛卡尔积 笛卡尔积在SQL中的实现方式既是交叉连接。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,上图中两个表连接即为笛卡尔积

    最后,子集如下:

    在实际应用中,笛卡尔积本身大多没有什么实际用处,只有在两个表连接时加上限制条件,才会有实际意义,下面看内连接

    其实,SQL中无论多复杂的查询,都可以抽象成如上面的过程.

    内连接 如果分步骤理解的话,内连接可以看做先对两个表进行了交叉连接后,再通过加上限制条件剔除不符合条件的行的子集,得到的结果就是内连接了.上面的图中,如果我加上限制条件

    精确查询的前置条件 对于正确取得所需要的数据子集.除了需要思路正确并将思路正确转变为对应SQL查询语句之外。还有很重要的一点是需要数据库有着良好的设计.这里的良好设计我所指的是数据库的设计符合业务逻辑并至少实现第三范式,对于实现第三范式,这只是我个人观点,对于范式的简单介绍,请看我的博客:数据库范式那些事.如果数据库设计很糟糕,存在很多冗余,数据库中信息存在大量异常,则即使SQL写的正确,也无法取得精确的结果。 两种方式,同一种结果 在SQL中,取得相同的数据子集可以用不同的思路或不同的SQL语句,因为SQL源于关系数据库理论,而关系数据库理论又源于数学,思考如何构建查询语句时,都可以抽象为两种方法: 1.关系代数法 关系代数法的思路是对数据库进行分步操作,最后取得想要的结果. 比如如下语句: 复制代码 代码如下: Select Name,Department,Age From Employee where Age>20 关系代数的思路描述上面语句为:对表Employee表进行投影操作,然后对结果进行筛选,只取得年龄大于20的结果. 2.关系演算法 相比较关系代数法而言,关系演算法更多关注的是取得数据所满足的条件.上面SQL可以用关系演算法被描述为:我想得到所有年龄大于20的员工的姓名,部门和年龄。 为什么需要两种方法 对于简单的查询语句来说,上面两种方法都不需要.用脚就可以想出来了。问题在于很多查询语句都会非常复杂。对于关系演算法来说更多的是关注的是所取出信息所满足的条件,而对于关系代数法来说,更多关注的是如何取出特定的信息.简单的说,关系演算法表示的是”what”,而关系代数法表达的是”how”.SQL语句中所透漏的思路,有些时候是关系代数法,有些时候是关系演算法,还有些是两种思路的混合. 对于某些查询情况,关系代数法可能会更简单,而对于另外一些情况,关系演算法则会显得更直接.还有一些情况.我们需要混合两种思路。所以这两种思维方式在写SQL查询时都是必须的. 单表查询 单表查询是所有查询的中间状态,既是多个表的复杂查询在最终进行这种连接后都能够被抽象成单表查询。所以先从单表查询开始。 选择列的子集 根据上面数据子集的说法,选择列是通过在select语句后面添加所要选择的列名实现的: 比如下面数据库中通过在select后面选择相应的列名实现选择列的子集.

    对于开篇中的两个表,假使查询语句如下:复制代码 代码如下:SELECT * FROM [Class] c inner join [Student] s on c.ClassID=s.StudentClassID 可以将上面查询语句进行分部理解,首先先将Class表和Student表进行交叉连接,生成如下表:

    相应sql语句如下:复制代码 代码如下: SELECT [Name] ,[GroupName] FROM [AdventureWorks].[HumanResources].[Department] 选择行的子集 选择行的子集是在Sql语句的where子句后面加上相应的限制条件,当where子句后面的表达式为“真”时,也就是满足所谓的“条件”时,相应的行的子集被返回。 where子句后面的运算符分为两类,分别是比较运算符和逻辑运算符. 比较运算符是将两个相同类型的数据进行比较,进而返回布尔类型的运算符,在SQL中,比较运算符一共有六种,分别为等于,小于或等于以及不等于,其中小于或等于和大于或等于可以看成是比较运算符和逻辑运算符的结合体。 而逻辑运算符是将两个布尔类型进行连接,并返回一个新的布尔类型的运算符,在SQL中,逻辑运算符通常是将比较运算符返回的布尔类型相连接以最终确定where子句后面满足条件的真假。逻辑运算符一种有三种,与.

    本文由彩世界平台发布于工作委员会,转载请注明出处:SQL查询入门_MsSql_脚本之家

    关键词:

上一篇:SQLServer 镜像功能完全实现_MsSql_脚本之家

下一篇:没有了