ORACLE基础知识
一:oracle数据库的链接与退出:
#sqlplus /nolog 连接数据库,但没有使用账号登录 >conn oracleuser/123456 使用oracleuser用户登录 #sqlplus / as sysdba 以数据库管理员的身份登录 >disconnect 退出当前用户 >exit 退出数据库
二:创建用户、赋权、创建表空间:
SQL> create tablespace TBspace datafile '/root/TBspace.dbf' size 30m;
创建表空间TBspace,大小30m,位置/root/TBspace.dbf。
SQL> create temporary tablespace TMPTBspace tempfile '/root/TBspace.dbf' size 30m;
创建临时表间。临时表空间的主要用途是在数据库进行排序运算、管理索引、访问试图等操作时提供临时的运算空间,当运算完成之后系统会自动清理临时表空间。
>create user USER identified by 123456 default tablespace TBspace|temporary tablespace TMPTBspace;
创建用户USER,密码123456,表空间为TBspace(或临时表空间为TMPTBspace)
SQL>drop user USER; 删除用户USER SQL>grant connect dba to USER; 向USER用户赋予连接和管理员角色 SQL>select * from all_user; 查看所有用户 SQL>select * from all_sys_privs; 查看所有系统权限 SQL>select * from all_tab_privs; 查看所有对象权限 SQL>select * from dba_roles; 查看所有角色 SQL>select * from user_role_privs; 查看用户所拥有的角色
三:oracle常用语句
SELECT |
数据检索 |
INSERT UPDATE DELETE MERGE |
数据操纵语言(DML) |
CREATE ALTER DROP RENAME TRUNCATE |
数据定义语言(DDL) |
COMMIT ROLLABCK SAVEPOINT |
事物处理控制 |
GRANT REVOKE |
数据控制语言(DCL) |
oracle中SQL语句规范:
1:SQL语句不区分大小写。
2:SQL语句可以是一行,也可以是多行。
3:关键字不能缩写或在中间另起一行。
4:子句通常放在单独的行中。
5:缩进只是为了增强可读性,没有具体实际意义。
SQL>create table tb1(name varchar2(10),job varchar2(20),gongzi varchar2(20))tablespace TBspace; 创建表tb1 SQL>alter table tb1 add id varchar(10); 添加字段 SQL> alter table tb1 drop column id; 删除字段 SQL> insert into tb1(NAME,JOB,GONGZI,ID)values('jim','baidu','5600','3'); 插入数据 SQL>truncate table tb1; 清空表tb1中的数据 SQL>drop table tb1; 删除表
基本SELECT语句
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;
SELECT确认处理哪些列,FROM确认处理哪些表。
使用算术运算符,可以创建数字和日期数据表达式。如运算符+,-,*,/等。
例如:select name,gongzi,12*gognzi from tb1;
定义空值:空值是指不可用、未分配、未知或不适用的值;空值不同于零或空格。
例如:select name,gongzi,commission_pct from tb1; 在查询结果中会创建一个名为commission_pct的空列。
定义列别名
列别名具有以下特点和功能:
1:重命名列标题。
2:有助于计算。
3: 紧跟在列名的后面,在列名和别名之间有可选的关键字AS。
4:如果列别名包含空格或特殊字符或者区分大小写,则需要使用双引号。
例如:select name as"Name",gongzi*12"NIANgongzi"from tb1;
连接运算符
连接运算符具有以下特点和功能:
1:将列或字符串连接到其它列。
2:有两条竖线(||)表示。
3:创建一个合成列,它是字符表达式。
例如:selectname||jobas "GongZuo" from tb1; 就会将name和job两列连接起来作为一个单独列“GongZuo”。
文字字符串
1:文字是指包含select列表中的字符、数字或日期。
2:日期和字符文字必须包含在单引号中。
3:在结果输出中,每个返回的行都回将每个字符串显示一次。
例如:select name ||'de gognzi shi'||gognzi as "GongZi" from tb1; 就会显示一个名为GongZi的列,列中的信息是“XX de gongzi shi XXX”`。
重复行
查询时默认会显示重复行,想消除重复行需要使用关键字"DISTINCT"。
例如:select DISTINCT gongzi from tb1;
显示表结构:
DESC tb1;
限制和排序数据:
使用where子句限制返回的行:‘
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table[where condition(s)];
例如:select * from tb1 where gongzi > 5600;
where中的字符串和日期:
1:字符串和日期值包含在单引号中。
2:字符值是区分大小写的,而日期值是区分格式的。
3:默认日期格式为 DD-MON-YY
比较条件:=,>,>=,<,<=,<> 其中<>为不等于。
逻辑条件:AND,OR,NOT
例如:select name job from tb1 where gognzi NOT IN (5300,5600,5900);
其它条件:
运算符 | 含义 |
BETWEEN...AND... | 介于两值之间(包含这两个值) |
IN(SET) | 与值列表中的任一值匹配 |
LIKE | 与某个字符模式匹配 |
IS NULL | 为空值 |
例如:select name job from tb1 where gognziIN (5300,5600,5900);
使用LIKE条件可以对有效字符串执行通配符搜索,其中"%"匹配零个或人一个字符,"_"匹配一个字符。 例如:select * from tb1 where jobLIKE 't%';
ORDER BY子句
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table [where condition(s)]ORDER BY {column,expr,alias} [ASC|DESC];
1:使用ORDER BY子句可以对行进行排序。
ASC 升序,也是默认设置
DESC 降序
2:ORDER BY子句在SELECT语句的最后。
例如:SELECT * FROM TB1 order by gognzi desc; 就会按gongzi降序排列。
四:oracle常用函数
oracle中有许多内置的SQL函数,可以方便的实现某些功能。通过向SQL函数传递参数,函数执行后会为每行后返回结果;接受的参数可以是列也可以是表达式,函数可以嵌套。
function_name [(arg1,arg2,...)]
一些常用SQL函数:
1:大小写处理函数
这些函数主要用于转换字符串的大小写:
函数 | 处理结果 |
LOWER('SQL Function') | sql function |
UPPER('SQL Function') | SQL FUNCTION |
INITCAP('SQL Function') | Sql Function |
例如:select * from tb1 where LOWER(name)='landy orten';
字符串处理函数:
函数 | 结果 |
CONCAT('Hello','World') | HelloWorld |
SUBSTR('HelloWorld',1,5) | Hello |
LENGTH('HelloWorld') | 10 |
INSTR('HelloWorld',W) | 6 |
LPAD(aaaaa,10,'*') | *****aaaaa |
RPAD(aaaaa,10,'*') | aaaaa***** |
TRIM('H' FROM 'HelloWorld') | elloWorld |
SUBSTR取得字符串中指定起始位置和长度的字符串 ,substr ( string, start_position, [ length ] ),当start_position为负数时,表示从字符串末尾向前算起。
RPAD(String a,int length,String addString),将addString添加到a的右边,length 是返回值的长度。
2:数字函数
ROUND:将值舍入到制定的小数位
ROUND(33.363,2)――>33.36
TRUNC:将数值截取到指定的小数位(不舍入)
TRUNC(33.363,2)――>33.36
MOD:返回除法运算的余数
MOD(16,3)――>1
例如:select ROUND(33.336,2),MOD(16,3) from DUAL; //DUAL是用于查看函数或计算结果的空表。
3:日期处理
oracle数据库以内部数字格式存储日期:世纪、年、月、日、小时、分钟和秒。
默认日期格式为:DD-MON-YY 例如:07-MAY-13
SYDATE函数是一个日期函数,它会返回数据库服务器的当前日期时间。
例如:select SYSDATE from DUAL;
与日期有关的运算:
1:对日期进行加减运算,以获得新的日期值。
2:将两个日期相减,以得到他们之间的天数。
3:将小时除以24,以将小时添加到日期中。
例如:select name,(SYSDATE-hire_date)/7 AS weeks from tb1 ;
日期函数:
MONTHS_BETWEEN 两个日期之间的月数
ADD_MONTHS 将日历月份添加到日期中
NEXT_DAY 指定日期的下一天
LAST_DAY 月份的最后一天
ROUND 舍入日期
RUNC 截断日期
例如:MONTHS_BETWEEN('01-MAY-13','01-SEP-12') ――> 8