Oracle学习第二天

oracle数据库的常见数据类型
oracle全部数据类型 有26种

char
定长字符串类型 长度是固定不变的 例如:no char(10) 如果存入的值不足十个字符,其它位也被占用
默认长度是1 最大长度是2000个字节 GBK编码 1000个汉子
占用的空间较多,但是查询效率较高

varchar2
边长字符串类型 长度可变 例如:定义的长度是100个字节,存入的值是80个字节,那么实际占用的就是80个字节
varchar在oracle中不推荐使用,强烈推荐你使用varchar2
必须要为其指定长度 1-4000个字节 多以就需要考虑编码问题
oracle使用GBK编码 一个中文占两个字节,英文、数字占一个字节
占用的空间较少,但是查询的效率较低

number
数字类型 number(all_len,point_len)
第一个参数:整个数字的位数
第二个参数:以小数点为参照,右边为正数,左边为负数,0就是没有小数位
123.89 number 123.89
123.89 number(3) 124
123.89 number(6,2) 123.89
123.89 number(6,1) 123.9
123.89 number(4,2) exceeds precusion(有效位数为5,5>4) 超出范围
123.89 number(6,-2) 100
.01234 number(4,5) .01234(有效位为4)
.00012 number(4,5) .00012
.000127 number(4,5) .00013
.0000012 number(2,7) .0000012
.00000123 number(2,7) .0000012

date
将数据存入数据库中,需要进行格式化存储的函数(方法)
默认格式:DD-MM-YY
select sysdate from dual;
查询结果:30-9月 -15
to_date(‘存入的值‘,‘存入的格式‘);
2015-12-12 12:12:12 YYYY-MM-DD HH24:MI:SS
to_date(‘2015-12-12 12:12:12‘,‘YYYY-MM-DD HH24:MI:SS‘);

create table test_date(name char(3),test_time date default sysdate);

to_char();
select to_char(test_time,‘YYYY-MM-DD HH24:MI:SS‘) tochar_time from test_date where name=‘123‘;

timestamp

clob 用来存储单字节字符型数据,适用于存储超长文本 例如:小说、博客

blob 用来存储二进制数据 存储视频、图像、音频

-------------------------------------------------------------------------------------------------------

约束
创建表时使用约束
是强加在表上的跪着条件,确保数据库满足业务规则。可以保证数据的完整性
当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则时,数据库系统就会拒绝执行这个操作

定义约束时如果没有给定一个明确的约束名称,系统就会自动为该约束生成一个名字
oracle强烈建议创建约束时要给约束起名称

约束的分类:

非空约束(NOT NULL)
约束字段(列)不能为NULL值

唯一约束(UNIQUE)
在表中每一行中定义的这列或这些列的值都不能相同 即唯一性

主键约束(PRIMARY KEY)
唯一的标识表中的每一条数据(每一行记录) 不能为NULL 不能重复

外键约束(FOREIGN KEY)
用来维护从表和主表之间引用的完整性 (不推荐使用外键约束)

条件、检查约束(CHECK)
表中该列每一行都要满足该约束条件

命名规则:
约束名称简称_表明_列名
非空约束 NN_tablename_col1
唯一约束 UK_tablename_col1
主键约束 PK_tablename_col1
外键约束 FK_tablename_col1
条件、检查约束 CK_tablename_col1

create table c_test(
id number(6),
name varchar2(30),
gender char,
age number(3),
birthday date,
constraint PK_C_TEST_ID primary key(id)
);
查询某用户下某表的约束名称(在dba角色下查询)
select constraint_name from dba_constraints where owner=‘SCOOT‘ and table_name=‘EMP‘;

查询当前用户下的表约束
select constraint_name,constraint_type,search_condition,r_constraint_name
from user_constraints where table_name=upper(‘emp‘);

删除外键约束
alter table tablename
drop constraint FK_tablename_col1;
--------------------------------------------------------------------------------------
表结构操作:
修改表名:
rename tt to ttt;
添加表字段:
alter table ttt add gender char default ‘M‘;
表字段重命名:
alter table ttt rename column name to username;
修改表字段:
alter table ttt modify (name varchar2(50) default ‘Owen‘);

oracle函数
运算符:
算数运算符 + - * /
select 1+1 a from dual;
连接运算符 ||
select ‘jack‘||‘love‘||‘rose‘ from dual;
比较运算符 > = >= < <= != like between is null in
select * from tt where username like ‘j%‘;
任何值与null进行运算,都是null

ascii(‘a‘); 根据字符返回对应的编码值
chr(编码值); 返回对应的字符
concat(字段名1,字段名2) 连接两个字符串
initcap(字段名) 返回字符串并将字符串的第一个字母变大写
length(字段名) 返回字段值的长度
lower(字段名) 返回字符串的全部小写
upper(字段名) 返回字段值全部大写
select lower(initcap(username)) low,upper(username) up from tt;

ltrim(字段名) 清除字段值左边的空字符串

rtrim(字段名) 清除字段值右边的空字符串

substr(原字符串,从第几个字符开始,截取多少个)
select substr(‘abcdefghijklmn‘,1,3) from dual;

replace(原字符串,被替换的字符串,要替换的字符串)
select replace(‘He love rose!‘,‘He‘,‘I‘) from dual;

trim(‘要去掉的字符‘ from ‘目标字符串‘)
select trim(‘s‘ from ‘strings‘) from dual; 减掉两边的所有需要去掉的字符
select trim(leading ‘s‘ from ‘strings‘) from dual; 减去前面的所有需要去掉的字符
select trim(trailing ‘s‘ from ‘strings‘) from dual; 减去后面的所有需要去掉的字符

abs(字段名) 返回数字的绝对值
select abs(123) abs1,abs(-1234) abs2 from dual;

floor(字段名) 将小数位去掉,返回整数(不四舍五入)
select floor(1234.567) from dual;

ceil(字段名) 将小数转成整数(有小数就+1)

mod(被除数,除数)
select mod(10,3) m1,mod(3,3) m2,mod(1,3) m3 from dual;

power(原数字,幂)
select power(2,3) from dual;

round(字段名) 对小数四舍五入
select round(55.5) from dual;

trunc(字段名) 直接截取整数部分(不四舍五入)
select trunc(55.5) from dual;

to_number()

show autocommit; 显示自动提交的状态
set autocommit on/off; 打开/关闭自动提交
commit; 手动提交

rollback; 回滚(autocommit off),撤销之前一部的操作(未提交状态)

----------------------------------------------------------------------------------------
日期常用函数
last_day(date) 返回日期date所在月的最后一天
select last_day(sysdate) from dual;

add_months(date,i) 返回日期date加上i个月后的日期值
i:取正值整数 小数:截取整数后再计算 负数:减去i个月的日期值
select add_months(sysdate,1) from dual;

months_between(date,date_) 返回两个日期间隔多少月
结果可能是负数或小数(可以用ceil函数直接进位)

next_day(date,周几) 返回date日期数据的下一个周几的日期,例如4即下一个周四的日期
Sunday、Monday、Tuesday、Wednesday、Thursday、Friday、Saturday
select next_day(sysdate,1) from dual;

least(); 取最小值
least(1,100,2,31);
greatest(); 取最大值
greatest(1,100,2,31);

extract(year/month/day from date) 从参数date中提取参数指定的数据类型
select extract(year from sysdate) from dual;

null和任何值进行运算返回的都是null
select * tablename where column1=null; //对于null不能这样进行比较
select * tablename where column1 is null;
select * tablename where column1 is not null;
空值函数
nvl(col_null,col_not_null)将null值转变成非null值处理,请保持两个参数的类型一致
例如:select sal,comm,sal+nvl(comm,0) as salary from emp;

nvl2(col_null,col_is_null,col_is_not_null)将null值转变成实际值,作用有点像三目表达式
如果是null,转成col_is_null,如果不是null,转成col_is_not_null
例如:select sal,comm,sal+nvl2(comm,0,1000) as salary from emp;

时间: 2024-08-05 11:46:03

Oracle学习第二天的相关文章

oracle学习 第二章 限制性查询和数据的排序 ——03

这里,我们接着上一小节2.6留下的问题:如果要查询的字符串中含有"_"或"%",又该怎样处理呢? 开始今天的学习. 2.7  如何使用转义(escape)操作符 可以是用个转义(escape)关键字来完成此任务.为了进行练习,我们必须先创建一个临时的表,之后再往该表中插入1行记录,其包含通配符.可能您现在还可能十分不理解例2-13和例2-14的SQL语句.没有问题,您只要照着输入就可以了. 例 2-13 SQL> CREATE TABLE dept_temp

Oracle学习第二天---Profile的使用

环境:Oracle 11g 一.权限的传递 1.如果传递的是对象权限,就在后面加入with grant option: eg:system用户有张temp的表,只想usertest用户拥有查询的权限,则: grant select on temp to usertest with grant option; 2.如果传递的是系统权限,则加入with admin option; eg:system用户将connect角色传递给usertest用户: grant connect to usertes

Oracle学习第二篇—单行函数

1字符函数 length  字符长度 lengthb 字节长度 lower 变为小写 upper 变为大写 initcap 首字母大写 select Lower('xun Ying') 小写,Upper('xun Ying') 大写,  initcap('xun Ying') 首字母大写 from dual lpad 左填充  rpad 右填充 trim 去掉前后指定的字符 replace instr 在母串中查找子串,找到返回下标(从1开始),否则返回0 1 select lpad('abcd

Oracle学习系列3

Oracle学习系列3 ************************************************************************************ 多表查询: 1,SQL1999语法对多表查询的支持 2,分组统计及统计函数的使用 3,子查询,并结合多表查询,分组统计做复杂查询 4,数据库的更新操作 5,事务处理和数据库死锁 ****************************************************************

Oracle学习(三):单行函数

1.知识点:可以对照下面的录屏进行阅读 SQL> --字符函数 SQL> --字符串的转换 SQL> select lower('hellO WORld') 转小写,upper('hellO WORld') 转大写,initcap('hello world') 首字母大写 2 from dual; SQL> --substr(a,b) 从a中,第b位开始取,取右边所有的字符 SQL> select substr('Hello World',4) from dual; SQL&

oracle学习 第三章 常用的SQL*PLUS命令 ——02

今天接着昨天的RUN命令继续讲. 3.5 n(设置当前行)命令和A(PPEND)(附加)命令 设想,你输入了例3-10的查询语句 例 3-10 SQL> SELECT ename 2 FROM emp; 例 3-10 结果 看到以上输出时,您发现在SELECT子句中忘了job,sal.这时您又如何修改您的SELECT子句呢?首先您应该使用SQL*PLUS的L(LIST)命令来显示SQL缓冲中的内容. 例 3-11 SQL> L 例 3-11 结果 在例3-11显示的结果中,2后面的"

oracle学习笔记 存储及raid技术概述

oracle学习笔记 存储及raid技术概述 本课以oracle数据库所运行的环境,讲一下存储和raid技术. 一)oralce生产环境里的结构 先说一下oracle所在的环境. 有一种结构: 两个服务器.两个光纤存储交换机.两个存储, 它们通过网线相互连接在一起. 每个服务器接两个交换机, 每个交换机连两个服务器同时连两个存储, 每个存储和两个交换机有连接. 这是oracle数据库相对比较典型的正规的运行环境. 每个服务器上都装Linux和oracle数据库软件, oracle数据库建在存储上

【我的Oracle学习笔记(二)】----- select语句补充

一.多表查询 多表查询是指从多个有关联的表中查询数据,其语法与单表查询类似.一般来说,多表查询的表要用连接联系起来,如果没连接,则查询结果是这多个查询表的笛卡尔积(注释1). 模拟查询雇员姓名和所在部门名称: select [雇员姓名],[部门名称] from [雇员表] a,scott,[部门表] b where a.[部门编号]=b.[部门编号]; 上例中,为每一个查询表指定了别名,便于SQL语句的书写. 模拟查询在”sales“部门工作的雇员其雇员姓名 select [雇员姓名] from

Oracle学习系列1-7

Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 300    ; set pagesize 30     ; 编辑sql命令: ed a.sql 执行 @a 切换用户: conn User/passwd   [as sysdba|sysoper ] conn system/manager conn sys/change_on_install  as