文章目录
- 一、数据库和表
- 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"
- client:指定从远程客户端调用。
- del/ixf:指定文件格式。del文件包含表的数据;ixf文件中除了包含表的数据,还包含表结构,表索引等。
- modified by filetype-mod:指定文件类型模式,常用的有以下4个。
- CODEPAGE=x : 文件读取编码,1208为UTF-8编码格式。
- coldelx:列分隔符,默认为(,),其他常用的还有0x1f、&、$。
- timestampformat=“x” : 日期数据格式,YYYY/MM/DD HH:MM:SS.UUUUUU。
- nochardel: 列没有包裹字符,默认为(“”).
- replace into:清空原数据表,插入新数据。
- insert into:只插入数据,不改变存在的数据。
- 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
"
- del/ixf:指定文件格式。del文件包含表的数据;ixf文件中除了包含表的数据,还包含表结构,表索引等。
- modified by filetype-mod:指定文件类型模式,常用的有以下3个。
- CODEPAGE=x : 文件读取编码,1208为UTF-8编码格式。
- coldelx:列分隔符,默认为(,),其他常用的还有0x1f、&、$。
- timestampformat=“x” : 设置日期数据格式,YYYY/MM/DD HH:MM:SS.UUUUUU
- with ur:锁定当前数据库中的数据。在sql执行后更新的数据不显示。
- implicitlyhiddenmissing/implicitlyhiddeninclude:忽略隐藏行,包括隐藏行