Sql的分类


DDL (Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等; CREATE、 ALTER、DROP

DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据); INSERT、 UPDATE、 DELETE

DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;

DQL(Data Query Language):数据查询语言,用来查询记录(数据)。

SELECT

*注意:sql语句以 ; 结尾

这些都是数据库的SQL的基础知识(也是常识),一定要记住。

DDL:操作数据库、表、列等


使用的关键字:CREATEALTERDROP

表基本的操作

  • **创建新表 **

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表:

**select * into table_new from table_old (使用旧表创建新表) **

create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle>

  • 删除表

**drop table tablename **

  • 修改表

rename 旧表名 to 新表名 修改表名

alert table tabname rename column oldColumn to newColumn 修改列名

alter table tabname add column col type 添加一列

alter table tabname drop column colname 删除一列

alter table tabname modify( ) 修改表中列的值

主键

添加主键:

**Alter table tabname add primary key(col) **

删除主键:

Alter table tabname drop primary key(col)

索引

创建索引:

**create [unique] index idxname on tabname(col….) **

删除索引:

drop index idxname

注:索引是不可更改的,想更改必须删除重新建。

视图

创建视图:

create view viewname as select statement

删除视图:

drop view viewname

常用数据类型

字符串类型

CHAR类型 CHAR(size [BYTE | CHAR])

  CHAR类型,定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。

VARCHAR类型

  不要使用VARCHAR数据类型。使用VARCHAR2数据类型。虽然VARCHAR数据类型目前是VARCHAR2的同义词,VARCHAR数据类型将计划被重新定义为一个单独的数据类型用于可变长度的字符串相比,具有不同的比较语义。

** VARCHAR2类型**

  变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。

NVARCHAR2类型

  这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。


函数:


  • 连接符||及CONCAT函数

可以连接两个列名或者常量。

注:如果姓名为中文还好,但是如果是英文的,这样连接会导致读起来比较困难,所以可以在中间加上常量“空格”;CONCAT函数符合ANSI SQL标准,所以适合更多不同的数据库,||是Oracle专有的,使用起来更简洁。

  • 格式统一:RPAD和LPAD

RPAD允许在列的右边填充一组字符,填充的字符可以为任何字符。LPAD从左边添加。

使用方式:

RPAD(string,length[,'set'])

LPAD(string,length[,'set'])

这里的string是数据库中的字符串列或常量,length是填充后的长度,set是用来填充的字符串。如果方括号中的内容省略了,会默认使用空格填充。

  • 修剪:LTRIM,RTRIM,TRIM

LTRIM和RTRIM从串的左边或右边删除不需要的字符。

使用方式:

RTRIM(string[,'set'])

LTRIM(string[,'set'])

如果没有设置要删除的值,默认删除空格。

  • 大小写转换:LOWER、UPPER和INITCAP

LOWER把串或列种的任意字母转换为小写。

UPPER与LOWER相反。

INITCAP将串或列中每个单词的首字母转换成大写。

它们经常一起使用。

使用格式:

LOWER(string)

UPPER(string)

INITCAP(string)

  • 子串:SUBSTR

使用SUBSTR函数可以提取出串的一部分。

使用格式:

SUBSTR(string,start[,count])

这个函数告诉Oracle提取string的一个子串,从start位置开始,长度为count个字符。如果不指定count,将从start开始一直到这个串结束。

  • 索引位置:INSTR

INSTR可以告诉你要搜索的字符(串)在串种的位置。

使用格式:

INSTR(string,set[,start[,occurrence]])

string为要寻找的列或常量;set为要指定的要寻找的值;start可选,默认为从串的第一个位置开始搜索;occurrence可选,为指定字符串出现的第occurrence次的位置。

  • like

查询含下划线的名字

SELECT * FROM emp
where ename LIKE '%/_%' escape '/';

数字类型

NUMBER类型

  NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10130~10126(不包含此值),需要1~22字节(BYTE)不等的存储空间。

  P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字

  S是Scale的英文缩写,可以使用的范围为-84~127。Scale为正数时,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数

INTEGER类型

  INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。

浮点数

BINARY_FLOAT

  BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节。

BINARY_DOUBLE

  BINARY_DOUBLE 是为 64 位,双精度浮点数字数据类型。每个 BINARY_DOUBLE 的值需要 9 个字节,包括长度字节。

  在数字的列中,浮点数有小数精度。在 BINARY_FLOAT 或 BINARY_DOUBLE 的列中,浮点数有二进制的精度。二进制浮点数支持的特殊值无穷大和 NaN (不是数字)。

FLOAT类型

  FLOAT类型也是NUMBER的子类型。

  Float(n),数 n 指示位的精度,可以存储的值的数目。N 值的范围可以从 1 到 126。若要从二进制转换为十进制的精度,请将 n 乘以 0.30103。要从十进制转换为二进制的精度,请用 3.32193 乘小数精度。126 位二进制精度的最大值是大约相当于 38 位小数精度。


函数:


函数 说明
ROUND(date, fmt) 四舍五入
TRUNC(date, fmt) 截断
MOD(n1, n2) 求余
CEIL(n) 向上取整
FLOOR(n) 向下取整
GREATEST(expr1, ... exprn) 返回参数中最大的数
LEAST(expr1, ... exprn) 返回参数中最小的数

随机数

SELECT TRUNC(dbms_random.value(a,b)) FROM dual

产生 [a,b)之间的数

日期类型

  日期类型用于存储日期数据,但是并不是使用一般的格式(2012-08-08)直接存储到数据库的。

DATE类型

  DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。

TIMESTAMP类型

  这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位

TIMESTAMP WITH TIME ZONE类型

  这是TIMESTAMP类型的变种,它包含了时区偏移量的值


函数:


函数 说明
MONTHS_BETWEEN(date1, date2) 两个日期相差的月数
ADD_MONTHS(date, int) 向指定日期中加上若干月数
NEXT_DAY(date, ch) 指定日期的下一个日期(从星期日和1开始计算)
LAST_DAY(date) 本月的最后一天
ROUND(date, fmt) 日期四舍五入 fmt的值('YEAR','MONTH')
TRUNC(date, fmt) 日期截断 fmt的值('YEAR','MONTH')
EXTRACT(time_unit FROM date) 从date中提取time_unit指定格式的日期数据

日期格式

格式 说明 举例
YYYY 年份的数字格式全称 2017
YEAR 年的英文全称 twenty seventeen
MM 月份(数字格式) 10
MONTH 月得全称 10月
DY 星期几 星期四
DAY 星期几 星期四
DD 一个月的第几天 05
HH12 小时(12) 1
HH24 小时(24) 13
MI 分钟 12
SS 12
  • 当前时间
SELECT SYSDATE
FROM
dual;
SELECT
SYSTIMESTAMP
FROM
dual;-- 精确到毫秒
SELECT
TO_CHAR( SYSDATE, 'yyyy-mm-dd hh24:mi:ss' )
FROM
dual;
-- 昨天 今天 明天
SELECT
( SYSDATE - 1 ) 昨天,
SYSDATE 今天,
( SYSDATE + 1 ) 明天
FROM
dual;

修改日期格式

(默认格式为'DD-MON-RR')

SELECT * FROM v$nls_parameters;

ALTER SESSION SET nls_date_format='yyyy-mm-dd';

-- 改回默认

ALTER SESSION SET nls_date_format='DD-MON-RR';

LOB类型

  内置的LOB数据类型包括BLOB、CLOB、NCLOB、BFILE(外部存储)的大型化和非结构化数据,如文本、图像、视屏、空间数据存储。BLOB、CLOB、NCLOB类型

CLOB 数据类型

它存储单字节和多字节字符数据。支持固定宽度和可变宽度的字符集。CLOB对象可以存储最多 (4 gigabytes-1) * (database block size) 大小的字符

NCLOB 数据类型

它存储UNICODE类型的数据,支持固定宽度和可变宽度的字符集,NCLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的文本数据。

BLOB 数据类型

它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。BLOB对象最多存储(4 gigabytes-1) * (database block size)的二进制数据。

BFILE 数据类型

二进制文件,存储在数据库外的系统文件,只读的,数据库会将该文件当二进制文件处理

LONG类型

  它存储变长字符串,最多达2G的字符数据(2GB是指2千兆字节, 而不是2千兆字符),与VARCHAR2 或CHAR 类型一样,存储在LONG 类型中的文本要进行字符集转换。ORACLE建议开发中使用CLOB替代LONG类型。支持LONG 列只是为了保证向后兼容性。CLOB类型比LONG类型的限制要少得多。 LONG类型的限制如下:

  • 一个表中只有一列可以为LONG型。

  • LONG列不能定义为主键或唯一约束,

  • 不能建立索引.

  • LONG数据不能指定正则表达式。

  • 函数或存储过程不能接受LONG数据类型的参数。

  • LONG列不能出现在WHERE子句或完整性约束(除了可能会出现NULL和NOT NULL约束)

数据转换

数据转换分为

  • 隐式转换 varchar《==》number oracle数据库自动转换

  • 显示转换 number《》character《》date

character 《==》 date

  • TO_CHAR(date[,fmt])

  • TO_DATE(ch[, fmt])

例:

SELECT
TO_CHAR( SYSDATE, 'dy' )
FROM
dual;

number《==》character

  • TO_CHAR(NUMBER[,fmt])

  • TO_NUMBER(expr[, fmt])

数字转换格式

格式 说明
9 数字
0
$ 美元符号
. 小数点
, 千位符

例子:

-- 查询员工的薪水:两位小数,千位符,本地货币
SELECT
TO_CHAR( sal, 'L9,999.99' )
FROM
emp;
-- ¥7,000.00

通用函数

函数 说明
NVL(expr1, expr2) 把列expr1的null值修改为expr2
NVL2(expr1, expr2, expr3) 把列expr1的null值修改为expr2,不为null修改为expr3
NULLIF(expr1, expr2) 判断expr1和expr2是否相等,相等返回null,反之返回expr2
COALESCE(expr1, ... exprn) 从左到右找到第一个不为null的值

条件表达式

通用的

CAST expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr1 THEN return_expr1
ELSE else_expr]
END

例子

SELECT
ename,
job,
sal 涨前,
CASE
job
WHEN '学生' THEN
sal + 100
WHEN '教师' THEN
sal + 800 ELSE sal + 50
END 张后
FROM
emp;

oracle自己的

DECODE(COLUMN,search, result [[,search, result]*, default]) oracle自己的

例子:

SELECT
ename,
job,
sal 涨前,
DECODE( JOB, '学生', sal + 100, '教师', sal + 800, sal + 50 ) 张后
FROM
emp;

Oracle常用sql语句(一)的更多相关文章

  1. oracle常用SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  2. oracle 常用sql语句

    oracle 常用sql语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom d ...

  3. Oracle常用SQL语句大全

    常用Oracle数据库SQL语句汇总. 1.常用操作 --清空回收站purge recyclebin;--查询回收站select * from recyclebin--查询Oracle版本信息sele ...

  4. Oracle 常用Sql 语句

    Oracle数据库常常被用作项目开发的数据库之一:有时隔段时间没使用就会忘记一些常用的sql语法,所以我们有必要记录下常用的sql 语句,当我们需要时可以快速找到并运用. 1 创建表空间.创建用户及授 ...

  5. Oracle常用sql语句。

    最近工作中遇到了一些与oracle相关的问题,稍微整理一些工作中用到的SQL语句 时间相关 --查询距当前时间十分钟内的数据 select sysdate -interval '10' minute ...

  6. Oracle常用SQL语句

    --2.查看表结构 desc wx_monitor_excption; --3.从表中查询数据 select * from wx_monitor_excption; --7.双引号保持原来的格式 se ...

  7. Oracle常用sql语句(二)之组函数、多表查询

    DML(数据操纵语言) INSERT .UPDATE. DELETE 插入操作:INSERT: 语法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...); 注 ...

  8. oracle常用sql语句和函数

    --查询表的字段数 select count(*) from user_tab_columns where table_name = '表名'; --查询数据库用户密码的profile(一般为defa ...

  9. Oracle常用sql语句(三)之子查询

    子查询 子查询要解决的问题,不能一步求解 分为: 单行子查询 多行子查询 语法: SELECT select_list FROM table WHERE expr operator (SELECT s ...

随机推荐

  1. table默认的box-sizing在不同浏览器不同

    转载自:https://blog.csdn.net/csm0912/article/details/88290672

  2. Selenium基于Python 进行 web 自动化测试

    配置使用环境 下载相应的浏览器驱动, Firefox 是默认的 本文以 chrome 为主 ,放在scripts目录下ChromeDriver 官方下载地址 : 所有版本的 ChromeDriver ...

  3. GO语言的进阶之路-初探GO语言

    GO语言的进阶之路-初探GO语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么我们需要一门新语言 Go语言官方自称,之所以开发Go 语言,是因为“近10年来开发程序之难 ...

  4. 在 golang 中使用 Json

    序列化 序列化对象将使用 encoding/json 中的 Marshal 函数. 函数原型为:func Marshal(v interface{}) ([]byte, error) 以下是官网给出的 ...

  5. javascript 常用的正则表达式验证表单

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. JAVA记录-POST与GET方式区别

    1.get是从服务器上获取数据的一种请求,post是向服务器提交数据的一种请求. 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到 ...

  7. 【JUC】CountDownLatch

    因为在调用端的异步中,需要调用其他多个服务获取数据再汇总结果返回,所以用到了CountDownLatch CountDownLatch的概念 CountDownLatch是一个同步工具类,用来协调多个 ...

  8. Linux - 网络检测

    linux 利用bmon/nload/iftop/vnstat/iptraf实时查看网络带宽状况 .添加yum源方便安装bmon # rpm -Uhv http://apt.sw.be/redhat/ ...

  9. JavaScript之不规则Table转化为可定点索引td节点的网格矩阵【插件】

    由于解析课程表的缘故,有如下需求: 1. 将任意表格解析成独立的单元格矩阵[本次博文的缘由] 2. 根据矩阵坐标,确定任意一格的节点   /* 表格-->网格化 标记表格的位置及其对应的节点 * ...

  10. luogu P3924 康娜的线段树

    题面传送门 我们可以画图找规律 这里没图,要看图可以去看M_sea dalao的题解(逃 可以发现单个节点\(i\)对答案的贡献为该节点的点权\(*\frac{1}{2^{dep_i}}\)(\(de ...