• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > SQL查询入门(中篇)

SQL查询入门(中篇)

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了SQL查询入门等相关知识,希望本文的分享对您有所帮助

SQL查询入门(中篇)

引言
在前篇文章中(SQL查询入门(上篇),我对数据库查询的基本概念以及单表查询做了详细的解释,本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路。

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

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

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

进行连接后如图:

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

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

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

对于开篇中的两个表,假使查询语句如下:
代码如下:
SELECT *
FROM [Class] c
inner join
[Student] s
on c.ClassID=s.StudentClassID

可以将上面查询语句进行分部理解,首先先将Class表和Student表进行交叉连接,生成如下表:

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

当然,内连接on后面的限制条件不仅仅是等号,还可以使用比较运算符,包括了>(大于)、>=(大于或等于)、<=(小于或等于)、<(小于)、!>(不大于)、!<(不小于)和<>(不等于)。当然,限制条件所涉及的两个列的数据类型必须匹配.

对于上面的查询语句,如果将on后面限制条件由等于改为大于:
代码如下:
SELECT *
FROM [Class] c
inner join
[Student] s
on c.ClassID>s.StudentClassID

则结果从第一步的笛卡尔积中筛选出那些ClassID大于StudentClassID的子集:

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

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

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

用关系演算法的SQL查询语句如下:
代码如下:
SELECT *
FROM [Class] c
,
[Student] s
where c.ClassID=s.StudentClassID

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


外连接
假设还是上面两个表,学生和班级.我在学生中添加一个名为Eric的学生,但出于某种原因忘了填写它的班级ID:


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

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-11找到MySQL的优点
  • 2018-12-05重新编译PLSQL中的无效对象或者指定的对象 的方法
  • 2017-05-11mysql DBA:mysqladmin常用命令总结
  • 2018-12-05MySQL5.7.18在Windows如何下安装的教程
  • 2018-12-05MySQL分布式集群之MyCAT(一)简单介绍
  • 2018-12-05使用mysql_connect()函数连接数据库(PHP操作MySQL数据库的方法一)
  • 2018-12-05xp_cmdshell开启与关闭
  • 2018-12-05Mysql高级之触发器
  • 2017-05-118种MySQL分页方法总结
  • 2018-12-05CPU资源和可用内存大小对数据库性能有何影响?

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL常用语句讲解汇总
    • 详解mysql使用 row 格式 binlog 撤销操作
    • 分析MySQL中优化distinct的技巧
    • MySQL降权运行之MySQL以Guests帐户启动设置方法
    • winXP系统安装SQLServer2005开发版具体过程与注意问题
    • mysql 索引的基础操作汇总(四)_MySQL
    • Linux利用mysqld_multi单机启动多个MySQL实例
    • SQLServer 附加数据库后出现只读或失败的解决方法
    • 【MySQL数据库】第四章解读:Schema与数据类型优化(下)
    • mysql-Microsoft SQL Server和mysq,刚入门的小白应该选哪个

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有