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
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐