SQL(Structured Query Language,结构化查询语言)
是一种特定目的编程语言,用于管理关系数据库管理系统,或在关系流数据管理系统中进行流处理。
SQL语句包括了DDL、DML、DCL和DQL。
语句 | 作用 |
---|
DDL(Data Definition Language) | 数据定义语言 用于定义或修改数据库中的对象,如:表、索引、视图、序列、用户、角色、表空间等。 |
DML (Data Manipulation Language) | 数据操纵语言 用于对数据库表中的数据进行操作,如插入,更新和删除。 |
DCL (Data Control Language)数据控制语言 | 用来设置或更改数据库事务、权限操作(用户或角色授权,权限回收)、锁表(支持共享锁和排他锁两种锁表模式)、停机等。 |
DQL (Data Query Language)数据查询语言 | 用来查询数据库内的数据,如单表查询、多表查询。 |
DDL:
定义数据库:创建数据库(create database),修改数据库属性(alter database)
定义表空间:创建表空间(create tablespace),修改表空间属性(alter tablespace),删除表空间(drop tablespace)
定义表:创建表(create table),修改表属性(alter table),删除表(drop table),删除表中所有数据(truncate table)
定义索引:创建索引(create index),修改索引属性(alter index),删除索引(drop index)
定义角色:创建角色(create role),删除角色(drop role)
定义用户:创建用户(create user),修改用户属性(alter user),删除用户(drop user)
定义视图:创建视图(create view),删除视图(drop view)
定义路由规则:创建路由规则(create distribute rule),删除路由规则(drop distribute rule)
定义节点:创建节点(create node),删除节点(drop node),修改节点(alter node)
修改系统参数:修改系统参数(alter system),结束会话(alter system kill session)
操作会话:修改会话(alter session),结束会话(alter system kill session)
DML:
数据操作:插入数据(insert),更新数据(update)和删除数据(delete)
导入导出:导入(load),导出(dump)
其他:查看执行计划(explain plan)
DCL:
事务管理:提交事务(commit),回滚事务(rollback)
授权操作:授予权限(grant),回收权限(revoke)
锁表:lock table
停机:shutdown
DQL:
查询数据(select)
合并多个select语句的结果集
数据类型
数据类型是数据的一个基本属性,主要用于建表时指定字段的数据类型,包括:
数据类型 | 举例 |
---|
常用数据类型 | 数值类型、字符类型、日期类型等 |
非常用数据类型 | 二进制类型、布尔类型、时间间隔类型等 |
常用数据类型
整型 | Integer | 4字节,取值范围:-2^31 ~ 2^31 -1,关键字:int,integer、binary_integer |
---|
| Integer unsigned | 4字节,取值范围:0 ~ 2^32 -1,关键字:uint、integer unsigned、binary_uint32 |
| Bigint | 8字节,取值范围:-2^63 ~ 2^63 -1,关键字:bigint、binary_bigint和bigint signed |
浮点型 | Float | 8字节,取值范围:[-1.79E+308, +1.79E+308],关键字:real,double,float和binary_double |
高精度数值类型 | decimal/number | 4-24字节,取值范围:(-1.0E128, 1.0E128),关键字:decimal,number和numeric |
字符型 | Char(size [byte char]) | 存储定长字节或者字符串,size byte:最大能容纳的字节数,size char:最大能容纳的字符数。关键字char |
| nchar(size) | 储存定长字符串,等同于char(size char),关键字nchar |
| Varchar(size [byte | char]) |
| nvarchar(size) | 用于储存变长字符串,1-8000字节,关键字:nvarchar |
| Clob | 储存大对象变长字符串,0-4G字节,关键字:clob、text、longtxt、long |
日期型 | Datetime/date | 8字节,保存年、月、日、时、分、秒,关键字:date、datetime |
| timestamp[(n)] | 保存年、月、日、时、分、秒、微秒,n取值为0~6,默认值为6。关键字:timestamp,n表示微妙显示的位数。 |
| timestamp(n) with time zone | 保存年、月、日、时、分、秒、微秒和时区,占12字节,关键字timestamp(n) with time zone. |
| timestamp(n) with local time zone | 不保存时区,存储时转换为数据库时区的timestamp,占8字节,关键字:timestamp(n) with local time zone。 |
非常用数据类型
二进制型 | binary(size) | 存储定长的二进制数据,1-8000字节,关键字:binary |
---|
| raw(size) | 存储变长的二进制数据,1-8000字节,关键字:raw |
| varbinary(size) | 存储变长的二进制数据,1-8000字节,关键字:varbianry |
| image | varbinary的大对象类型,用于存储大对象数据,0-4G字节,关键字:image |
| Blob | raw类型的大对象类型,存储变长大对象二进制数据,0-4G字节,关键字:blob、bytea |
布尔型 | Boolean | 存储布尔类型数据,[ture,false],4字节,关键字:bool、boolean |
时间间隔型 | interval year[(n)] to month | 存储一个若干年若干月的时间间隔,取值范围:[-9999-11,+9999-11],4字节 |
| interval day[(n1)] to second [(n2)] 存储一个若干天(包括天、时、分、秒、微秒)的时间间隔,取值范围:[-9999999 23:59:59.999999, +9999999 23:59:59.999999],8字节 | |
系统函数
系统函数是对一些业务逻辑的封装,以完成特定的功能。系统函数可以有参数,也可以没有参数。系统函数执行完成后会返回执行结果。
数值计算函数
语法 | 功能 |
---|
abs(exp) | 返回表达式exp的绝对值 |
cos(exp) | 返回表达式exp的余弦值 |
sin(exp) | 返回表达式exp的正弦值 |
acos(exp) | 返回表达式exp的反余弦值 |
asin(exp) | 返回表达式exp的反正弦值 |
bitand(exp1,exp2) | 按位对exp1和exp2执行与操作,返回结果 |
bitor(exp1,exp2) | 按位对exp1和exp2执行或操作,返回结果 |
bitxor(exp1,exp2) | 按位对exp1和exp2执行异或操作,返回结果 |
round(number[,decimals]) | 将number类数值按照decimals指定的向小数点前后截断 |
trunc(number, scale) | 按指定的格式截取输入的数值数据,number:待截取的数据,scale:截取精度,返回值:number |
ceil(exp) | 计算大于或者等于指定表达式n的最小整数,exp:可转成数值型表达式。返回值:整数 |
floor(exp) | 计算小于或等于表达式值的最近的整数。exp:是可转成数值型的表达式。返回值:number。 |
sign(exp) | 取数值类型的符号,大于0返回1,小于0返回-1,等于0返回0,返回值:数值类型 |
sqrt(n) | 计算非负实数的平方根,n:可转成非负数值型表达式,返回值:decimal |
mod(exp1, exp2) | 求模运算,exp:可转为number类型的表达式,返回值:number |
其他函数:EXP、INET_NTOA、LN、LOG、POWER等
字符处理函数
语法 | 功能 |
---|
concat(str[,…]),concat_ws(separator,str1,str2,…) | 拼接一个或多个字符串。第一个函数无分隔 符,第二个函数可以指定分隔符连接。 |
hex(str),hex2bin(str),hextoraw(str) | 第一个函数返回十六进制值的字符串表示形式,其他函数返回十六进制字符串所表示的字节串。不同点:hex2bin返回binary型,hextoraw返回raw型。 |
insert(str,pos,len,newstr),replace(str,src,dst) | 字符串插入和字符串替换函数。 |
instr(str1,str2[,pos[,n]]),instrb(str1,str2[,pos[,n]]) | 字符串查找函数。返回要查找的字符串在源字符串中的位置。不同点:instr按字符计算位置,instrb按字节计算位置。 |
left(str, length) | 返回指定字符串的左边几位字符。 |
right(str,len) | 返回指定字符串的右边几位字符。 |
lower(str) | 将字符串转换成对应字符的小写。 |
upper(str) | 将字符串转换成对应字符的大写。 |
length(str) | 获取字符串长度的函数。 |
reverse(str) | 返回字符串的倒序。仅支持string类型。 |
substr(str, start[, len]) | 字符串截取函数。 |
space(n) | 生成n个空格。n取值范围[0,4000]。 |
时间日期函数
语法 | 功能 |
---|
add_months(date,n),months_between(date1, date2) | 返回date加或减n个月后的值,计算两个日期之间的月份差。 |
extract(field from datetime),trunc(date[,fmt]) | 从指定的日期(datetime)中提取指定的时间字段(field),按指定的格式截取输入的日期数据。 |
unix_timestamp(),unix_timestamp(datetime) | 获取Unix时间戳的方法,即当前时间到1970-01-01 00:00:00 UTC所经过的秒数。 |
from_unixtime(unix_timestamp) | 根据Unix时间戳返回日期datetime。 |
current_timestamp(fractional_second_precision) | 获取当前系统时间及时区。fractional_second_precision表示秒后面小数位数的精度,取值范围为[0~6],默认为6。 |
now(fractional_second_precision) | 获取当前系统时间及时区。 |
systimestamp | 返回当前的时间戳。 |
getutcdate() | 返回当前UTC时间戳,同时带有UTC时区信息(即0时区)。 |
sleep(n_second) | 设置休眠时间。单位是秒。 |
间隔函数
语法 | 功能 |
---|
numtodsinterval(num, ‘interval_unit’) | 输入一个数值和interval域描述字段,输出interval day to second类型。 |
numtoyminterval(num, ‘interval_unit’) | 输入一个数值和interval域描述字段,输出interval day to second类型。 |
to_dsinterval(str_exp) | 输入interval字符串,输出interval day to second的值。用于表示间隔中的天(day)和时间(包括时、分、秒、微秒)。适用于表示更精确的时间。 |
to_yminterval(str_exp) | 输入interval字符串,输出interval day to month的值。用于表示间隔中的年(year)和月(month)。适用于只关注时间差的年和月。 |
类型转换函数
语法 | 功能 |
---|
if(cond,exp1,exp2) | 计算条件cond,如果条件为真,则返回exp1,否则返回exp2。 |
ifnull(exp1,exp2) | 如果expr1不为NULL,则返回expr1。如果expr1等于NULL,则返回expr2。 |
nullif(exp1,exp2) | 如果expr1等于expr2,则返回NULL。如果expr1不等于expr2, 则返回expr1。expr1和expr2应该为相同数据类型,或能隐式转换成相同数据类型,否则校验报错。 |
nvl(exp1,exp2) | 如果expr1不为NULL,则返回expr1。如果expr1等于NULL,则返回expr2。 |
nvl2(exp1,exp2,exp3) | 如果expr1值不为NULL, 则返回expr2的值。如果expr1等于NULL,则返回expr3的值。 |
to_char(exp[,fmt]) | 将指定入参转换为char类型。 |
to_clob(str) | 将指定入参转换为clob类型。 |
to_date(exp[,fmt]) | 将指定入参转换为date类型。 |
to_number(n[,fmt]) | 将指定入参转换为number类型。 |
ascii(str) | 返回字符串str首个字符对应的ASCII码。 |
char(n) chr(n) | 返回ascii码为n的字符。n支持范围为[0,127]。入参是可转成数值型表达式。 |
cast(expr as datatype) | 将列名/值转换为指定的数据类型datatype。表达式可以转换为与自身相同的类型。 |
convert(expr, data_type) | 将expr转换成data_type类型。data_type取值范围是除了clob,blob,image以外的所有数据类型。 |
unhex(expr1) | expr1为十六进制字符串,将十六进制字符串转化为byte字节表示的字符。 |
操作符
操作符可对一个或多个操作数进行处理,位置上可能处于操作数之前、之后,或两个操作数之间。
逻辑操作符
操作符 | 功能 |
---|
and | 支持在查询条件where/on/having语句中,用于条件之间的逻辑与操作。 |
or | 支持在查询条件where/on/having语句中,用于条件之间的逻辑或操作。 |
not | 支持在where/having子句后的条件表达式前加NOT关键字,对条件结果取反,常与关系运算合用,例如not in、not exists。 |
比较操作符
操作符 | 描述 |
---|
< | 小于 |
> | 大于 |
<= | 小于或等于 |
>= | 大于或等于 |
= | 等于 |
<> 或 != | 不等于 |
算术操作符
运算符 | 描述 | 运算符 | 描述 |
---|
+ | 加 | || | 字符串拼接 |
- | 减 | | | 按位或 |
* | 乘 | & | 按位与 |
/ | 除(除法操作符不会取整) | ^ | 按位异或 |
% | 模运算 | << | 左移位 |
| | >> | 右移位 |
测试操作符
运算符 | 描述 |
---|
in | 元素在指定的集合中。 |
not in | 元素不在指定的集合中。 |
exists | 存在符合条件的元素。 |
not exists | 不存在符合条件的元素。 |
between … and … | 在两者之间。 |
not between … and … | 不在两者之间。 |
is null | 等于NULL。 |
is not null | 不等于NULL。 |
any | 子查询中有一个值满足条件即可。 |
like … [escape char] | 与…相匹配。仅支持字符类型。 |
not like … [escape char] | 与…不匹配。 |
regexp | 字符串与正则表达式相匹配,仅支持string类型。 |
regexp_like | 字符串与正则表达式相匹配,支持string类型和number类型。表达式返回值是bool类型。 |
通配符
通配符 | 描述 |
---|
% | 表示任意数量的字符,包括无字符,用于like和not like语句中。 |
_ | 下划线,表示确切的一个未知字符,用于like和not like语句中。 |
其他操作符
操作符 | 描述 |
---|
单引号(’) | 表示字符串类型。如果在字符串文本里含有单引号 |
双引号(")/反引号(`) | 表示表、字段、索引等Object Name或者是别名 |