位置: 编程技术 - 正文

SQL查询入门(上篇) 推荐收藏(sql查询从入门到实践)

编辑:rootadmin

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

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

最后,子集如下:

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

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

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

比如上面,我想选择第二条和第六条,为了说明比较运算符和逻辑运算符,可以使用如下Sql语句:由此我们可以看出,这几种运算符是有优先级的,优先级由大到小排列是比较运算符>于(And)>非(Or)

当然,运算符也可以通过小括号来改变优先级,对于上面那个表

对于不加括号时:加了括号改变运算顺序后: 很特别的NULL 假如在一个用户注册的表中,一些选填信息并不需要用户必须填写,则在数据库中保存为null,这些null值在利用上面where子句后的运算符时,有可能造成数据丢失,比如一个选填信息是性别(Gender),假设下面两条条件子句: 由于null值的存在,这两条语句返回的数据行加起来并不是整个表中的所有数据。所以,当将null值考虑在内时,where后面的条件子句拥有可能的值从真和假,增加为真,假,以及未知(null)。这些是我们在现实世界中想一些问题的时候可能的答案--真的,假的,我不知道。 所以我们如何在这种情况下不丢失数据呢,对于上面的例子来说,如何才能让整个表的数据不被丢失呢,这里必须将除了“真”,“假”以外的“未知”这个选项包含在内,SQL提供了IS NULL来表明未知这个选项: where Gender IS NULL 将上面语句加入进去,则不会再丢失数据。 排序结果 上面的那些方法都是关于取出数据,而下面是关于将取出的子集进行排序。SQL通过Order by子句来进行排序,Order by子句是Sql查询语句的最后一个子句,也就是说Order by子句之后不能再加任何的子句了。 Order By子句分为升序(ASC)和降序(DESC),如果不指定升序或者降序,则默认为升序(由小到大),而Order by是根据排序依据的数据类型决定,分别为3种数据类型可以进行排序: 字符 数字 时间日期 字符按照字母表进行排序,数字根据数字大小排序,时间日期根据时间的先后进行排序。 其它一些有关的 视图 视图可以看作是一个保存的虚拟表,也可以简单看做是保存的一个查询语句。视图的好处是视图可以根据视图所查询表的内容的改变而改变,打个比方来理解这句话是:

使用视图的优点是可以对查询进行加密以及便于管理,据说还可以优化性能(我不认可这点).

防止重复 有时候我们对于取出的数据子集不想重复,比如你想知道一些特定的员工一共属于几个部门

这样的结果是没有意义的,SQL提供了Distinct关键字来实现这点: 聚合函数 所谓聚合函数,是为了一些特定目的,将同一列多个值聚合为一个,比如我想知道一群人中最大年龄是多少可以利用MAX(Age),比如我想知道一个班级平均测验成绩是多少可以用AVG(Result)…… 总结 文章简单概述了SQL查询的原理以及简单的单表查询,这些都是数据库查询的基础概念,对于进行复杂查询来说,弄明白这些概念是必不可少的。

推荐整理分享SQL查询入门(上篇) 推荐收藏(sql查询从入门到实践),希望有所帮助,仅作参考,欢迎阅读内容。

SQL查询入门(上篇) 推荐收藏(sql查询从入门到实践)

文章相关热门搜索词:sql%查询,sql查询讲解,sql查询教程,sql查询操作步骤,sql查询的三种查询方法,sql查询操作步骤,sql%查询,sql查询从入门到实践,内容如对您有帮助,希望把文章链接给更多的朋友!

SQL查询入门(中篇) 引言在前篇文章中(SQL查询入门(上篇),我对数据库查询的基本概念以及单表查询做了详细的解释,本篇文章中,主要说明SQL中的各种连接以及使用范围

SQLServer 镜像功能完全实现 在域环境下我没配置成果,也许是域用户的原因,因为我在生产环境下搞的,更改域用户需要重启SQLServer,所以这个方法放弃了,只能用证书形式。环

数据库中identity字段不必是系统产生的唯一值 性能优化方法(新招) 但是,具有identity特性的字段,不需要具有唯一性,更不必须是主键。可以通过,setidentity_inserttablename(on|off),在运行时控制,是否可以在identity字段中

标签: sql查询从入门到实践

本文链接地址:https://www.jiuchutong.com/biancheng/348833.html 转载请保留说明!

上一篇:使用sp_xml_preparedocument处理XML文档的方法(使用筷子就餐会不会传染乙肝病毒)

下一篇:SQL查询入门(中篇)(sql查询方法有哪些)

  • 高新技术企业产品是什么意思
  • 法人股东分红交什么税
  • 费用怎么分析
  • 上级工会返还的经费记什么收入
  • 销售滞后是什么行为
  • 应收账款计提坏账比例
  • 企业所得税的应纳税所得额的扣除项目有哪些
  • 安全费用中的固定资产如何写会计分录?
  • 商贸企业增值税优惠政策
  • 工程公司收入成本入账
  • 生产质量问题报告怎么写
  • 已付款货物还未付款
  • 购买职工宿舍用品账务处理
  • 印花税 企业
  • 通行费机打发票查询
  • 普通发票企业有用吗
  • 2019年煤炭
  • 股息收入属于应税收入吗
  • 企业所得税申报表A类
  • 供应商已注销欠的发票怎么办?
  • 补交以前年度增值税的科目处理
  • 经费开支原则是什么
  • 土地征收补偿款多久到账
  • ajax无刷新技术
  • PHP:apache_request_headers()的用法_Apache函数
  • php splqueue
  • 二级资本债记哪个科目
  • 劳动保护费计入什么会计科目
  • 户外广告位怎么收费
  • 商业企业营业收入
  • yolov5模型中git的作用
  • 短期资金都是债务类资金
  • 企业年金如何缴纳计算方法
  • 比利牛斯山作为天然界限
  • 前端实战培训
  • 公司的一项专利多少钱
  • 广告费和业务招待费扣除标准中的全年销售收入是指
  • c语音中static
  • mysql5.7.17在win2008R2的64位系统安装与配置实例
  • 固定资产的财务业绩是什么意思啊
  • 收购企业怎么做账
  • 捐赠支出怎么抵税
  • 其他货币资金的六个内容
  • 网上纳税申报有时间限制吗
  • SQL Server 2012 FileTable 新特性详解
  • 物业公司一般纳税人简易征收
  • 小规模季度开票不超过多少
  • 存货在报表里是如何体现的
  • 个体工商户还没开业也要报税吗
  • 什么是原始凭证?简述原始凭证审核的内容
  • 定额备用金怎么做分录
  • 暂估入账的固定资产
  • 购买车辆的进项税怎么勾选
  • 临时设施属于什么科目
  • 打印银行电子流水发到别人邮箱,能看到我的账户余额吗
  • 销售公司中的服务是什么
  • 发票认证申报期是什么时候
  • 其他综合收益 综合收益
  • macos mysql
  • vmware虚拟机怎么改用户名
  • u盘装系统系统资料会被泄露吗
  • 主板bios恢复出厂默认设置方法
  • win7系统打开浏览器后突然卡住了
  • 查看 linux版本
  • 你不知道的关于现代主义的故事
  • centos6可用yum源
  • win8windows设置在哪里
  • win7专用字符编辑程序
  • cocos2dx游戏案例
  • 实用的批处理命令
  • angular中ui calendar的一些使用心得(推荐)
  • jQuery插件库
  • 增值税普通发票可以抵扣吗
  • 陕西国税电子税务局端还可以登录吗
  • 是否一般纳税人怎么查
  • 浙江电子税局
  • 租了店面
  • 报纸的增值税税率
  • 投资损失属于所得税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设