首页 > 数据库 > SQL Server > 正文

SQL查询入门(中篇)

2024-08-31 00:58:18
字体:
来源:转载
供稿:网友
引言
在前篇文章中(SQL查询入门(上篇),我对数据库查询的基本概念以及单表查询做了详细的解释,本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路。

多表连接简介
在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个表,而如果大多查询只涉及到一个表的,那么那个表也往往低于第三范式,存在大量冗余和异常。

因此,连接(Join)就是一种把多个表连接成一个表的重要手段.

比如简单两个表连接学生表(Student)和班级(Class)表,如图: 
  

SQL查询入门(中篇)

     进行连接后如图:

    

SQL查询入门(中篇)

     然后通过on后面的限制条件,只选择那些StudentClassID和ClassID相等的列(上图中划了绿色的部分),最终,得到选择后的表的子集

    

SQL查询入门(中篇)

虽然上面连接后的表并没有什么实际意义,但这里仅仅作为DEMO使用:-)

关系演算
上面笛卡尔积的概念是关系代数中的概念,而我在前一篇文章中提到还有关系演算的查询方法.上面的关系代数是分布理解的,上面的语句推导过程是这样的:“对表Student和Class进行内连接,匹配所有ClassID和StudentClassID相等行,选择所有的列”

而关系演算法,更多关注的是我想要什么,比如说上面同样查询,用关系演算法思考的方式是“给我找到所有学生的信息,包括他们的班级信息,班级ID,学生ID,学生姓名”

用关系演算法的SQL查询语句如下:

复制代码 代码如下:


SELECT *
FROM [Class] c
,
[Student] s
where c.ClassID=s.StudentClassID


当然,查询后返回的结果是不会变的:

SQL查询入门(中篇)

SQL查询入门(中篇)



当我想执行这样一条查询:给我取得所有学生的姓名和他们所属的班级:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表