读《程序员的SQL金典》
【程序员与DBA】
DBA需要花很多时间在数据库的备份、授权、调优、修复、监控等内容上,而程序员则应该去掌握SQL语句的使用,而且为了简化系统开发难度,应该学会使用数据库函数、子查询、表联接、开窗函数等高级的SQL特性。
【数据库的引入】
在数据库出现以前,处理数据,开发人员需要熟悉操作磁盘文件的函数、编写复杂的搜寻算法才能快速的把数据从文件中检索出来,当数据格式发生变化的时候要编写复杂的文件格式升级程序、很难控制并发修改。
数据库可以将我们从复杂的数据处理事务中解脱出来,从而专注于业务。
【数据库】
数据库:存储数据的仓库。
数据库能够帮助我们存储、组织和检索数据。
【数据库管理系统】
数据库管理系统DBMS,是一种操纵和管理数据库的系统软件,用于建立、使用和维护数据库。用户通过DBMS访问数据库中的数据,DBA也通过DBMS进行数据库的维护工作。
主流数据库管理系统有:DB2、Oracle、Microsoft SQL Server、Sybase SQL Server、Informix、MySQL等。
1、 DB2
应用程序可以通过使用微软的ODBC接口、Java的JDBC接口或者CORBA接口代理来访问DB2数据库。另外,DB2被称为“最难用的数据库系统”。
2、 Oracle
Oracle在功能、性能、可用性都非常好。
3、 Microsoft SQL Server
Microsoft SQL Server的可用性做的非常好,提供了很多外围工具来帮助用户对数据库进行管理,用户甚至无需直接执行任何SQL语句就可以完成数据库的创建、数据表的创建、数据的备份/恢复等工作。但它只能运行于Windows操作系统之上,而且在大数据量和大交易量的环境中的表现都是不尽人意的,当企业的业务量达到一个水平后就要考虑升级到Oracle或者DB2了。
4、 MySQL
一个小型关系型数据库管理系统。目前Internet上流行的网站架构方式时LAMP(linux+Apach+MySQL+PHP)。MySQL在国内没有足够的技术支持力量。
【基础概念】
1、 Catalog(Database)
数据库既然是一个数据的仓库,就要对不同类别的数据分类存储,如HR数据库、核心业务数据库BIZ。不同的数据就叫做Catalog或Database。
2、 表Table
区别了不同的类别,还要区别不同的类型。如核心业务中的客户资料、商品资料、销售员资料等。不同类型的资料应放到不同的区域中,称为“表”Table。
3、 列Column
也叫“字段”Field,每个列描述了数据的一个特性。
4、 数据类型DataType
规定了一个列中能填写什么类型的数据。
5、 记录Record
又称为行Row,它是数据表中的一行数据。表是由行和列组成的一张二维表,这就是关系数据库中最基本的数据模型。
6、 主键PrimaryKey
如员工表中的每一行代表一个员工,而名字可能是重复的,这时需要为每个员工分配一个唯一的工号,来唯一的标示员工,大多数DBMS中并没有强制规定一个表必须有主键,但是为一个数据表指定一个主键是一个非常好的习惯。
7、 表关联
为了避免表中的重复信息,将两张表通过字段关联起来的方式称为“表关联”,关联到其他表主键的字段被称为“外键”。
8、 索引
可以把索引想象成汉语字典的按笔画查找,如将笔画为5的汉字列出来,将笔画为18的汉字列出来等。索引可以提高数据查询的速度,但它占据了一定的磁盘空间,减慢了数据插入和删除的速度,因为每次插入和删除的时候都需要更新索引,一个表拥有的索引越多,则写操作的平均性能下降就越大。
【数据库语言SQL】
SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。使用SQL,只要发出“做什么”的命令,“怎么做”是不用使用者考虑的。
SQL全称是Structured QueryLanguage,SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作,SQL语句可以嵌套使用。
SQL语句具有4个主要功能:
1、 创建数据库并定义表的结构;
2、 查询需要的数据;
3、 更新或者删除指定的数据;
4、 控制数据库的安全。
我们可以通过三种方式执行SQL:
1、 在工具中执行
如:各个DBMS几乎都提供了工具用于执行SQL语句,比如MicrosoftSQL Server的Management Studio、DB2的命令中心、Oracle的SqlPlus或者MySQL的QueryBrowser。
2、 以编译的方式嵌入到语言中
把SQL直接写到代码中,在编译的时候由编译器来决定和数据库的交互方式。
3、 以字符串的形式嵌入到语言中。
写到代码中,由代码将其提交到DBMS,并且分析返回的结果。
【增删改查】
插入
Insert into Table () values ();
删除
Delete from Table where parameter=xx;
更新
Update Table set parameter=xx;
查询
Select * from Table;
为列指定别名
select FName AS Name, FAge AS Age,FSalary AS Salary from [master].[dbo].[T_Employee]
【数据汇总】
SQL中提供了聚合函数来完成计算统计结果集条数、某个字段的最大值、某个字段的最小值、某个字段的平均值以及某个字段的合计值等数据统计的功能。SQL标准中规定了下面几种聚合函数:
函数名 |
说明 |
MAX |
计算字段最大值 |
MIN |
计算字段最小值 |
AVG |
计算字段平均值 |
SUM |
计算字段合计值 |
COUNT |
统计数据条数 |
【高级数据过滤】
1、 通配符过滤:SQL中的通配符过滤使用LIKE关键字
1.1 单通配符过滤:使用半角下划线“_”
1.2 多字符匹配:使用半角百分号“%”
1.3 集合匹配:使用“[]”,还可以使用否定符“^”来对集合取反。如“[^bt]%”代表,匹配第一个字符不为b或者t、长度不限的字符串。
集合匹配只在MSSQLServer上提供支持,不过在其他数据库中我们可以通过变通手段来实现相同的效果。
通配符过滤是一个非常强大的功能,不过在使用通配符过滤进行检索的时候,数据库系统会对全表进行扫描,所以执行速度非常慢。
2、 多值检测
使用方法为“IN (值1,值2,值3)”
3、 数据分组
数据分组用啦将数据分为多个逻辑组,从而可以对每个组进行聚合运算。SQL语句中使用GROUP BY子句进行分组。
4、 HAVING语句
有的时候需要对部分分组进行过滤,HAVING语句能够使用的语法和where几乎是一样的。
【限制结果集行数】
如:MSSQLServer 2000中提供了TOP关键字用来返回结果集中的前N条记录。
【数据库分页】
在进行信息检索的时候,检索结果的数量通常会非常多,达到成百上千条。甚至更多,这么多的检索结果同时显示在同一个界面中,不仅查看起来非常麻烦,而且过多的数据显示在界面上也会造成占用过多的系统资源。解决这个问题的最常用方案就是数据库分页。
【抑制数据重复】
DISTINCT关键字是用来进行重复数据抑制的最简单的功能,而且所有的数据库系统都支持DISTINCT,DISTINCT的使用也非常简单,只要在SELECT之后增加DISTINCT即可。
待续。
读《程序员的SQL金典》相关推荐
- 读《Android 安全架构深究》
Android 安全架构深究 安全是一个非常立体而丰富得概念.在不同的场景下,安全有着不同的含义. 比如对于网络传输,安全指的是传输的数据不会被其他人看到.篡改.伪造及仿冒,传输的数据不会遭到破坏,数 ...
- 《最强Android书 架构大剖析》读书笔记
文章目录 第一章 Android 体系结构的变革之路 1.2 Android系统源码目录 与Linux的异同 Android的框架 原生二进制可执行文件 Android 的原生库 核心(core)库 ...
- Android Jetpack架构组件之 Room(使用、源码篇)
2019独角兽企业重金招聘Python工程师标准>>> 1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发 ...
- 抖音、美团等大厂千万级用户的Android客户端架构演进之路—
在移动开发中,对开发者来说不同的人具有不同的能力.就像读一本书一样,一千个读者,有一千个哈姆雷特.但不管怎样,只要你是个软件开发者你就必须学习windows或Linux等操作系统的运行原理.Andro ...
- Android 图形架构之一 ——概述
前言 本系列的文章,可以让你明白,一个View最终是如何显示到屏幕上的,从应用层到硬件抽象层.对分析app的卡顿,掉帧等 有很大帮助. 由于图形架构的涉及到的代码量很大,所以本篇先来个总体的概述,有个 ...
- Android display架构分析-SW架构分析(1-8)
参考: Android display架构分析二-SW架构分析 Android display架构分析三-Kernel Space Display架构介绍 Android display架构分析四-m ...
- 高通Android display架构分析
目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...
- [Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...
- Android系统架构-[Android取经之路]
摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...
- Android系统架构图及简单的系统架构介绍
2019独角兽企业重金招聘Python工程师标准>>> ndroid的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层. ...
最新文章
- 人工智能在医疗行业应用面临的五大挑战
- Spring boot优点
- 算法:图(Graph)的遍历、最小生成树和拓扑排序
- ZOJ 1295——Reverse Text
- 博客园的神回复,程序猿的奇葩神回复[连载][二]
- FPGA实验2:ADDA测试
- 软件项目管理 实验二
- java setproperty 未生效_Java System类setProperty()方法及示例
- 坑向总结 | 树莓派调用打印机打印
- 作者:Scott Hanselman首席工程师
- docker 镜像制作
- 停车还能360全方位影像_360°全景倒车影像、自适应巡航买的时候觉得没用,现在发现错了...
- tar -d 选项 比较归档文件与文件系统中的内容
- OSChina 周二乱弹 ——程序员吹完牛逼 都自己加班去了
- 联想Y400win10基础上在安装win7
- cygwin git mysql_msysgit和Cygwin git之间的区别?
- Java实现飞机大战(有图片素材)
- C语言 读入中文文本文件txt乱码问题-应该设置为ANSI编码
- java夏普_多媒体与JAVA、拍照_夏普 SH6010C_手机其它OS-中关村在线
- 物联网小白入门式教学,如何快速接入一个云平台① YeeLink(重点讲解小白学习思路,高手忽略)