DB2数据库学习篇之最全面的sql语法知识总结
DB2数据库学习篇之最全面的sql语法知识总结
- 简介
- 数据定义语法
- 数据类型语法
- 数据操作语法
- 常用重要语法例子
简介
DB2是IBM公司开发的关系数据库管理系统,它有多种不同的版本,如:DB2工作组版(DB2Workgroup Edition)、DB2企业版(DB2 Enterprise Edition)、DB2个人版(DB2 Personal Edition)和DB2企业扩展版(DB2 Enterprise-Exended Edition)等,这些产品基本的数据管理功能是一样的,区别在于支持远程客户能力和分布式处理能力。
个人版适用于单机使用,即服务器只能由本地应用程序访问。工作组版和企业版提供了本地和远程客户访问DB2的功能(当然远程客户要安装相应客户应用程序开发部件),企业版包括工作组版中的所有部件外再增加对主机连接的支持。企业扩展版允许将一个大的数据库分布到同一类型的多个不同计算机上,这种分布式功能尤其适用于大型数据库的处理。
DB2可运行在OS/2、Windows NT、UNIX操作系统上,通常将运行在这些平台上的DB2产品统称为DB2通用数据库,这主要是强调这些产品运行环境类似,并共享相同的源代码。DB2通用数据库主要组件包括数据库引擎(Dalabase Engine )应用程序接口和一组工具。数据库引擎提供了关系数据库管理系统的基本功能,如管理数据、控制数据的访问(包括并发控制)、保证数据完整性及数据安全。所有数据访问都通过SQL接口进行。
DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操作,包含了数据的定义(DDL)以及数据的处理(DML)。SQL原来拼成SEQUEL,这语言的原型以"系统 R"的名字在 IBM 圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统R 的技术基础发展出来 IBM 的产品。而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在1987遵循一个几乎是以 IBM SQL 为基础的标准关连式资料语言定义。
数据定义语法
数据定义语法是指对数据的格式和形态下定义的语法,他是每个数据库要建立时候时首先要面对的,例如:数据定义哪些表格关系、表格内的有什么栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。
1.建表格
CREATE TABLE table_name(
column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
column2 DATATYPE [NOT NULL],
...)
说明:
DATATYPE是数据的格式。
NUT NULL可不可以允许数据有空的。
PRIMARY KEY是本表的主键。
2.更改表格
ALTER TABLE table_name
ADD COLUMN column_name DATATYPE
说明:增加一个栏位(没有删除某个栏位的语法。
ALTER TABLE table_name
ADD PRIMARY KEY (column_name)
说明:更改表得的定义把某个栏位设为主键。
ALTER TABLE table_name
DROP PRIMARY KEY (column_name)
说明:把主键的定义删除。
3.建立索引
CREATE INDEX index_name ON table_name (column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。
4.删除
DROP table_name
DROP index_name
数据类型语法
smallint
16 位元的整数。
interger
32 位元的整数。
decimal(p,s)
表示p 精确值和 s 大小值的十进位整数,精确值p是指全部有几个数(digits),大小值s是指小数点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
float
32位元的实数。
double
64位元的实数。
char(n)
n 长度的字串,n不能超过 254。
varchar(n)
长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n)
和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。
vargraphic(n)
可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。
date 包含了 年份、月份、日期。time包含了 小时、分钟、秒。
timestamp包含了 年、月、日、时、分、秒、千分之一秒。
数据操作语法
数据定义好之後接下来的就是数据的操作。数据的操作不外乎增加(insert)、查询(query)、更改(update) 、删除(delete)四种模式,以下分别介绍他们的语法:
1.增加:
INSERT INTO table_name (column1,column2,...)
values ( value1,value2, ...)
说明:
(1)若没有指定column 系统则会按表格内的栏位顺序填入。
(2)栏位的数据形态和所填入的数据必须吻合。
(3)table_name 也可以是视图 view_name。
INSERT INTO table_name (column1,column2,...)
SELECT columnx,columny,... FROM another_table
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。
2.查询:
基本查询
SELECT column1,columns2,...
FROM table_name
说明:把table_name 的特定栏位数据全部列出来
SELECT *FROM table_name WHERE column1 = *** [AND column2 > yyy] [OR column3 <> zzz]
说明:
(1)’*'表示全部的栏位都列出来。
(2)WHERE 之後是接条件式,把符合条件的数据列出来。
SELECT column1,column2 FROM table_name ORDER BY column2 [DESC]
说明:ORDER BY 是指定以某个栏位做排序,[DESC]是指从大到小排列,若没有指明,则是从小到大,排列组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。
SELECT * FROM table1,table2 WHERE table1.colum1=table2.column1
说明:
(1)查询两个表格中其中 column1 值相同的数据。
(2)当然两个表格相互比较的栏位,其数据形态必须相同。
(3)一个复杂的查询其动用到的表格可能会很多个。
整合性的查询:
SELECT COUNT (*) FROM table_name WHERE column_name = xxx
说明:查询符合条件的资料共有几笔。
SELECT SUM(column1) FROM table_name
说明:
(1)计算出总和,所选的栏位必须是可数的数字形态。
(2)除此以外还有 AVG() 是计算平均、MAX()、MIN()计算最大最小值的整合性查询。
SELECT column1,AVG(column2)FROM table_name GROUP BY column1 HAVING AVG(column2) > xxx
说明:
(1)GROUP BY: 以column1 为一组计算 column2 的平均值必须和 AVG、SUM等整合性查询的关键字一起使用。
(2)HAVING : 必须和 GROUP BY 一起使用作为整合性的限制。
复合性的查询
SELECT * FROM table_name1 WHERE EXISTS (SELECT * FROM table_name2 WHERE conditions )
说明:
(1)WHERE 的 conditions 可以是另外一个的 query。
(2)EXISTS 在此是指存在与否。
SELECT * FROM table_name1 WHERE column1 IN (SELECT column1 FROM table_name2 WHERE conditions )
说明:
(1)IN 後面接的是一个集合,表示column1 存在集合里面。
(2)SELECT 出来的数据形态必须符合 column1。
其他查询
SELECT *FROM table_name1WHERE column1 LIKE 'x%'
说明:LIKE 必须和後面的’x%’ 相呼应表示以 x为开头的字串。
SELECT * FROM table_name1 WHERE column1 IN ('xxx','yyy',..)
说明:IN 後面接的是一个集合,表示column1 存在集合里面。
SELECT *FROM table_name1 WHERE column1 BETWEEN xx AND yy
说明:BETWEEN 表示 column1 的值介於 xx 和 yy 之间。
3.更改数据:
UPDATE table_name SET column1='xxx' WHERE conditoins
说明:
(1)更改某个栏位设定其值为’xxx’。
(2)conditions 是所要符合的条件、若没有 WHERE 则整个 table 的那个栏位都会全部被更改。
4.删除数据:
DELETE FROM table_name WHERE conditions
说明:删除符合条件的资料。
说明:关于WHERE条件后面如果包含有日期的比较,不同数据库有不同的表达式。
常用重要语法例子
sql中小于某个日期,大于某个日期,或者大于等于某个年月,小于等于当前年月之间的所有年月的语句如何写呢?
sql日期查询写法示例如下:
1.查询大于等于一个开始日期,小于等于一个结束日期的正确写法示例1
第一种正确写法:
select * from tables1 where log_date between %s and %s
第二种正确写法:
select * from tables1 where log_date >= '2020-06-25' and log_date <= '2020-07-01'
对比,以下是错误方法:
select * from tables1 where log_date >= '2020-06-25' and log_date =< '2020-07-01'
2.正确示例2
select date from table where date between '2013-05' and '2014-5'
返回的包含2013年5月和2014年5月,以及2014年5月到2014年5月之间的数据
3.查询大于一个开始日期,小于一个结束日期的写法:
正确写法
select * from tables1 where log_date>%s and log_date<%s
错误写法
select * from tables1 where log_date>=%s and log_date=<%s
DB2数据库学习篇之最全面的sql语法知识总结相关推荐
- DB2数据库学习随笔
一.DB2数据库安装教程 DB2安装教程:https://jingyan.baidu.com/article/e75057f2f59ef9ebc91a8905.html 二.DB2常用命令 1. 打开 ...
- 拼装sql_2020最新最全面的SQL优化干货总结
作者:_陈哈哈原文:https://sohu.gg/FGG98i BATJTMD 等大厂的面试难度越来越高,但无论从大厂还是到小公司,一直不变的重点就是对 SQL 优化经验的考察.一提到数据库,面试官 ...
- MySQL学习宝典之最全的常用语法语句
MySQL学习宝典 MySQL引言 1.登录MySQL数据库 一.数据库操作相关 二.表相关 三.数据相关 四.约束 五.主键约束+自增 六.注释 七.事务 八.数据库数据类型 九.数据库导入导出 十 ...
- 数据库学习篇之数据库大字段的理解
前言 Oracle数据库大字段问题 问题描述:字段内容长度超4000 项目中存在用某些字段存预处理sql语句,最初,项目此类型字段用varchar2(4000),但随着项目跟进到二期,牵连的表越来越多 ...
- DB2数据库学习之数据库备份还原
一.数据库离线(脱机)备份 1.cd /db2_backup 切换到存放备份文件的目录,如果没有要新建 2.db2 list applications for db dbName(数据库名) 确保没人 ...
- 你见过的最全面的Python重点知识总结
这是一份来自 五年Python工程师的推荐.由于总结了太多的东西,所以篇幅有点长,这也是作者"缝缝补补"总结了好久的东西,强烈建议收藏再慢慢看~ Py2 VS Py3 Py2 和 ...
- 【总结】最全面的Python面试知识!
点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 这是一份来自于 SegmentFault 上的开发者 @二十一 总结的 Python 重点.由于总结了太多的东西,所以篇幅有点长,这 ...
- 这或许是你见过的最全面的 Python 重点知识总结
这是一份总结 Python 重点知识点点文章. 由于有太多的东西,本篇点篇幅有点长,这也是我"缝缝补补"总结了好久的东西,强烈建议收藏.关注.点赞,再慢慢看~ [注]完整版代码.数 ...
- 最全面的Python重点知识汇总,建议收藏!
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨网络,由法纳斯特整理 这是一份来自于 SegmentFault ...
最新文章
- 为什么机器学习模型在生产中会退化?
- MySQL-MHA搭建
- Paper:《First Order Motion Model for Image Animation》翻译与解读
- DL之simpleNet:利用自定义的simpleNet(设好权重)对新样本进行预测、评估、输出梯度值
- javascript事件机制与jQuery.bind的补充说明
- Ubuntu 放弃支持 32 位应用程序实属乌龙
- HDU 3315 My Brute
- navicat远程连接mysql,2003 can't connect to mysql server on 10038
- 成为JavaGC专家Part I — 深入浅出Java垃圾回收机制
- MyBatis学习总结——调用存储过程
- 探码科技Baklib荣登36氪“2020影响未来的产品Great100”未来企服榜单
- 杜教筛 以及积性函数的前世今生 --算法竞赛专题解析(4)
- c# 两行代码合并pdf文件
- python绘制笛卡尔心形线方程_canvas绘制爱心的几种方法
- b、B、KB、MB、GB 的关系?
- 热备用冷备用_个性化您的备用帐户的10种方法
- 辅助神器——Kaggle
- linux查看sriov端口,sriov查看pf-vf对应关系
- 2020上海全国计算机一级考试时间,2020全国等级计算机考试时间(全国计算机一级报名时间)...
- HTTP请求的过程与TCP连接的过程
热门文章
- Thread之线程通信(wait和notify)
- 2018寒假作业_1(时光荏苒 师情难忘)
- Java 设计模式最佳实践:1~5
- Uncaught TypeError: Bootstrap dropdown require Popper.js (https://popper.js.org)(下拉菜单)
- 初步了解MATLAB金融工具箱
- SAP生产订单归类总结(很重要)
- [Python]中反斜杠的用法+详解,以及r前缀标识符的用法
- LS-DYNA用于复合材料抗冲击分析方面的应用总结--Part 1 建模篇
- 仓库盘点机好用的功能
- Java知识回顾 (6)正则表达式、方法、文件与异常