文章目录

  • 一、数据库和表
  • 1、创建表
  • 2、数据类型
  • 3、增删改查
  • 二、SQL语法
  • 1、注释
  • 2、常用函数
  • 3、查询语句
  • 4、视图
  • 三、数据导入和导出
  • 1、通过命令行导入
  • 2、通过命令行导出
  • 四、数据库运维


一、数据库和表

1、创建表

创建语句:CREATE TABLE。
命名规则:只能使用英文字母、数字、下划线(_)作为数据库、表和列的名称。

2、数据类型

1)数值类型

2)字符串类型

3)日期和时间类型

3、增删改查

增删改查分别对应四种语法:增(INSERT)、删(DROP)、改(ALTER)、查(SELECT)。

二、SQL语法

1、注释

一行注释:书写在“–”之后。
多行注释:书写在“/”和“/”之间。

2、常用函数

数学函数
进行数值计算的函数。ABS、MOD、ROUND。

字符串函数
进行字符串操作的函数。拼接、LENGTH、LOWER、UPPER、REPLACE、SUBSTRING。
listagg函数实现行转列:listagg() within group()。
instr函数:
substr函数:

日期函数
进行日期操作的函数。CURRENT DATE、CURRENT TIME、CURRENT TIMESTAMP、EXTRACT(YEAR FROM 时间)。

CASE表达式
ELSE部分可以省略,END不能省略。

CASE WHEN 〈求值表达式〉 THEN 〈表达式〉     
     WHEN 〈求值表达式〉 THEN 〈表达式〉     
     ELSE 〈表达式〉     END

聚合函数
进行数据聚合的函数。COUNT、SUM、AVG、MAX、MIN函数。
为聚合结果指定条件:HAVING子句。

关于NULL值:count之外的聚合函数会把NULL排除在外。
COUNT(*)/COUNT(1)得到包含NULL的数据行数。
COUNT(列名)得到NULL之外的数据行数。

分组聚合
GROUP BY子句。子句的书写顺序,1.SELECT 2.FROM 3.WHERE 4.GROUP BY 5.HAVING。
聚合键中包括NULL时,在结果中会以空行表现。

排序
ORDER BY子句,DESC关键字。

转换函数
转换数据类型和值的函数。CAST、COALESCE。
decode函数:条件判断时的函数。

窗口函数
窗口函数可以实现排序、生成序列号等高级操作。语法如下:
〈窗口函数〉OVER([PARTITION BY〈列清单〉] ORDER BY 〈排序用列清单〉) 1、窗口函数:聚合函数,或者专用窗口函数。
RANK:计算排序时,如果存在相同位次的记录,会跳过之后的位次。比如有3条记录排在第1位时:1位、1位、1位、4位。
DENSE_RANK:计算排序时,如果存在相同位次的记录,不会跳过之后的位次。比如有3条记录排在第1位时:1位、1位、1位、2位。
ROW_NUMBER:赋予唯一的连续位次。比如有3条记录排在第1位时:1位、2位、3位、4位。
2、PARTITION BY:设定分组方式。不是必需项。
3、ORDER BY:设定排序方式。

NULL值
1、查询语句结果去重:使用DISTINCT时,NULL也被视为一类数据。
2、拼接函数:字符串拼接,如果有NULL,得到的结果也是NULL。
3、聚合函数:COUNT(*)/COUNT(1)得到包含NULL的数据行数,COUNT(列名)得到NULL之外的数据行数。其他聚合函数会把NULL排除在外。
4、分组:聚合键中包括NULL时,在结果中会以空行表现。
5、比较运算符:不能对NULL使用比较运算符(大于、小于、等于)。
6、需要选取NULL/不是NULL的行:使用IS NULL/IS NOT NULL语句。

3、查询语句

单表查询
1)简单查询
2)等值查询
3)范围查询:BETWEEN
4)模糊匹配查询:LIKE
5)去重、排序、分组

多表查询
1)上下拼接
作为运算对象的记录的列数必须相同。作为运算对象的记录中的列的类型必须一致。
表的加法:UNION,不包括重复行;UNION ALL,包括重复行。
表的交集:INTERSECT。
表的减法:EXCEPT。

2)左右拼接
INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN。

4、视图

视图,展现效果是一张表,实际保存的是SELECT语句。语法如下:
CREATE VIEW 视图名称(<视图列名1>、<视图列名2>、……)
AS
<SELECT语句>

1.多表联结时,注意连接key是否唯一、数据类型是否一致。
2.查询等待时间超过10分钟,建议创建中间表,分步查询。

三、数据导入和导出

1、通过命令行导入

1)import和load的区别
import语句和load语句,都可以用于上传数据表。在工作中,load语句速度更快,更常用。

  • Load 工具可以更快的将数据文件导入到数据表中。Load 工具不会与DB2 数据引擎发生交互,所以当使用Load 工具时,不会触发触发器也不会使用缓冲池,而且必须单独实现数据表的约束。
  • Import 其实执行了SQL 的INSERT 操作。和INSERT 操作一样,Import 执行的时候会激活触发器,所有的约束会强制实现,而且会使用数据库的缓冲池。

2)Load 命令

db2 "load client from /目录/表名.csv of del 
modified by CODEPAGE=1208 coldel0x1f TIMESTAMPFORMAT=\\"YYYY-MM-DD HH:MM:SS\\" 
replace into 数据库表名 lock with force"
  1. client:指定从远程客户端调用。
  2. del/ixf:指定文件格式。del文件包含表的数据;ixf文件中除了包含表的数据,还包含表结构,表索引等。
  3. modified by filetype-mod:指定文件类型模式,常用的有以下4个。
  • CODEPAGE=x : 文件读取编码,1208为UTF-8编码格式。
  • coldelx:列分隔符,默认为(,),其他常用的还有0x1f、&、$。
  • timestampformat=“x” : 日期数据格式,YYYY/MM/DD HH:MM:SS.UUUUUU。
  • nochardel: 列没有包裹字符,默认为(“”).
  1. replace into:清空原数据表,插入新数据。
  2. insert into:只插入数据,不改变存在的数据。
  3. lock with force:如果某个应用程序已经锁住了目标表,那么 LOAD 实用程序就必须等到这些锁被释放。为了不必等到一个锁释放出来,可以使用 LOAD 命令中的 LOCK WITH FORCE 选项,使持有有冲突的锁的其他应用程序离开。

2、通过命令行导出

db2 "export to /目录/表名.csv of del 
modified by CODEPAGE=1208 coldel0x1f TIMESTAMPFORMAT=\“YYYY-MM-DD HH:MM:SS\”
[implicitlyhiddenmissing/implicitlyhiddeninclude]
——SQL语句
with ur
"
  1. del/ixf:指定文件格式。del文件包含表的数据;ixf文件中除了包含表的数据,还包含表结构,表索引等。
  2. modified by filetype-mod:指定文件类型模式,常用的有以下3个。
  • CODEPAGE=x : 文件读取编码,1208为UTF-8编码格式。
  • coldelx:列分隔符,默认为(,),其他常用的还有0x1f、&、$。
  • timestampformat=“x” : 设置日期数据格式,YYYY/MM/DD HH:MM:SS.UUUUUU
  1. with ur:锁定当前数据库中的数据。在sql执行后更新的数据不显示。
  2. implicitlyhiddenmissing/implicitlyhiddeninclude:忽略隐藏行,包括隐藏行