`
deepfuture
  • 浏览: 4321232 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79303
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68103
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101192
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:280262
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14535
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65153
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31187
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45069
社区版块
存档分类
最新评论

oracle数据库中sql基础

阅读更多

oracle数据库中sql基础

作者:佚名转贴自:本站原创浏览次数:21文章录入:admin

一、关系数据库的一些概念
  
  1、主键的值一般不可以改变
  
  2、外键:指向另一个表或本表的主键或唯一键的字段。外键的值一定要和某一主键相同,或者为空。
  
  3、数据库对像:表,视图,序列,索引,同义词,程序(进程,函数,sql和pl/sql数据)4、sqlcommand 类别
  
  data retrieval数据检索:select
  data manipulationlanguage(DML)数据操作语言:insert,update,delete
  data definition language(DDL)数据定义语言:create,alter,drop,rename,truncate
  transaction control事务控制:commit,rollback,savepoint
  data control language(DCL)数据控制语言:grant,revoke
  DCL和DDL命令的执行会导致一次隐式提交,之前未提交的操作(包括DML命令)都会提交写入日志文件,并在适当地时候写入数据文件。
  
  二、SQL的语法
  
  1) 连接号:||
  
  2) 把两个字符连接起来
  eg:select game_card_type_id||name from game_card_type;
  
  3) select distinct dept_id,title from emp:对多个字段的唯一
  
  4) order by desc(降序)
  order by asc(升序)
  
  5) where column is (not) null
  
  6) like ‘_a%’  _表示一个字符。%表示多少字符
  like ‘%x\_y%’ escape ‘\’:显示包括x_y的字符
  
  7) where table1.column(+)=table2.column
  place the operator on the side of the join where there is no&#118alue to join to.
  
  8) 联接类型:
  equijoin:等式查询
  non_equijoin:不等式查询
  self:自己和自己建立关联
  out join:where a.column=b.column(+)
  可以用的操作符是:’=’,’and’,不可以用’or’,’in’
  
  9) COUNT 函数所用的列包含空值时,空值行被忽略。
  
  10) where 后的in any all 的区别
  in :等于子查询的任何一个数
  any :与子查询的每一个值相比
  只要比其中一个大(小)就可以了
  all:与子查询的所有值相比要比所有的的都大(小)
  !=ALL作用跟NOT IN 一样
  
  三、SQL*PLUS的环境(可以在glogin.sql中定义初始参数)
  
  1) START 命令用以执行一个已储存的文件,等同于@
  
  2) SAVE命令用以创建一个文件
  
  3) EDIT命令用以调用编辑器编辑已存文件的内容
  
  4) CHANGE是SQL*Plus的编辑命令,用于在当前一行把旧文段转换为新文段
  
  5) DEL 命令用以删除文本中一行或多行文字
  
  6)SPOOL命令用以把查询结果储存在一个已有文件中,注意与SAVE区别
  
  7) GET命令用以一个文件的内容写进一个SQL块中
  
  8) SPOOL OUT命令用以把文件的结果发送到系统打印机。
  
  9) set pause off/on:设置页面的滚动。按enter看下一页。
  
  10) PAGESIZE:指定每页显示的行的数值,
  
  11) LONG:设置LONG类型数据显示的最大宽度
  
  12) FEEDBACK:设置查询返回记录的最大值
  
  13) DESCRIBE:用于显示表和视图的结构,同义词,或指定函数和过程的详述。
  
  14) Timing:可以看到语句执行的时间
  
  15)Autotrace:可以看到sql的执行计划,sysdba执行/home/oracle/product/9.2.0/sqlplus/admin/plustrce.sql脚本,而且必须把plustrace角色赋给执行用户。执行用户必须运行/home/oracle/product/9.2.0/rdbms/admin/utlxplan.sql
  
  16)在各种数据类型中,只有NUMBER数据类型的默认显示是靠右对齐的,而CHAR,DATE和VARCHAR2是靠左对齐的
  
  17) QUIT 是SQL*PLUS命令,用以结束一个SQL*PLUS的对话。
  
  18) ttitle:
  ttitle ‘selina’ 设select 的结果的抬头为selina
  tti :显示ttitle的状态
  tti off/on
  btitle ‘end’ 设结果的尾部
  
  19) Column:
  
  a) column name heading ‘名字’format a15
  
  b) column id justify left format 999999
  
  c) column start_date format a9 null ‘nothired’//当字段为空的时候则显示成not hired
  
  d) column :显示所有的column设置
  
  e) column columnname:显示某一个字段的设置
  
  f) clear column :清除所有column设置
  
  g) column columnname clear:清除某一字段的设置
  
  h) 以上的column可用col代替.clear可以用cle代替
  
  13)定义变量
  
  用&:由用户输入变量值,此变量可以存在于where后,做为整个查询语句的变量。也可以在orderby 后。做为字段的变量。也可以放在select后,做为字段或表达式的变量。
  
  用&&:如果多个地方引用此变量。。只用输入一次
  
  SQL> SELECT empno, ename, job, &&column_name
  FROM emp
  ORDER BY &column_name;
  
  accept:由用户输入变量值
  accept 变量名 datatype prompt ‘告诉用户需要输入的信息:’hide
  引用的时候:&变名
  define(undefined):一开始就定义变量值
  
  四、函数:
  
  1、字符函数
  
  lower:把字符转成小写
  upper:把字符转成大写
  initcap:把单词的第一个字母变成大写
  concat:连接字符 concat(‘good’,’morning’)=goodmoring
  SUBSTR (column\expression, m[,n])用于对字符串进行截取操作,从第m个位置开始,把其后的连续n个字符的部分截取下来,如果m位负值,则从末尾开始计算。
  eg:substr(‘string’,1,3) =str
  substr(‘string’-3,3)=ing
  INSTR('String', 'r')=3
  LPAD(sal,10,'*') =*******sal
  length: 用于返回表达式中的字符数,注意返回的是NUMBER。
  NVL(expression1, expression2)
  NVL 函数用以把一个空值转换为一个实值,如:
  NVL(100/quantity, 0),要是quantity为空值,该函数返回一个0。
  如果两个字段类型不同必须进行转换。
  Min():返回最小值。。如果是字符。。A<a
  
  2、数学函数
  
  round:四舍五入
  round(2.566,2)=2.27
  round(45,-1)=50
  trunc: 截断
  trunc(2.566,2)=2.56
  trunc(45,-1)=40
  mod:
  mod(m,n):m-n*flood(m/n)   file&#58//flood是取整数
  
  3、日期函数:
  
  a)months_between(date1,date2):算date1和date2之间的月的数量,可以是小数可以是负数
  months_between(’01-sep-95’,’11-jan-94’)=1.9774194
  
  b) add_months(date,n):为date加上N个月,N只可以是整数
  
  c) next_date(date,’char’):查找date的下一个星期N
  next_date(’01-sep-95’,’FRIDAY’)=08-SEP-95
  
  d) last_day(date):查找date月的最后一天。
  
  e) rount(date):把日期四舍五入
  
  f) rount(25-MAY-95’,’MONTH’)=01-JUN-95
  
  g) rount(25-MAY-95’,’YEAR’)=01-JAN-95
  
  h) trunc(date):把日期截断
  
  i) trunc (25-MAY-95’,’MONTH’)=01-MAY-95
  
  j) trunc (25-MAY-95’,’YEAR’)=01-JAN-95
  
  k)日期中RR与YY的区别,RR格式对日期作类似于舍入的操作,YY格式对日期作类似于截取的操作
  RR  YY
  1995 27-oct-95 1995 1995
  1995 27-oct-17 2017 1917
  2001 27-oct-17 2017 2017
  2001 27-oct-95 1995 2095
  用法:select to_char(sysdate, 'YY') from dual;
  select to_char(to_date('95-11-27', 'RR-MM-DD'), 'YYYY-MM-DD')from dual;
  select to_char(to_date('95-11-27', 'YY-MM-DD'), 'YYYY-MM-DD')from dual;
  
  4、转换函数
  TO_CHAR:
  TO_CHAR(date,’fmt’):fm前缀用来去除首尾的空字符或0
  TO_CHAR(total,’fm$999999’)
  
  如果想转成$0.25,那就要写成fm$9999990.99
  
  可以把日期转换成字符
  TO_CHAR(log_time,’MM/YY’)
  TO_CHAR(lot_time,’fmdd’’of;’’mm yyyy’)
  
  具体格式如下
  HH24:MI:SS AM-----------15:24:32 pm
  DD’’of’’MONTH-----------12 of MAY
  Ddspth------------------------fourteenth
  Ddsp--------------------------fourteen
  ddth---------------------------4th
  YYYY-----------------------1978
  MM-----------------------------12
  MONTH-------------------------MAY
  
  5、group 函数avg,count,max,min,stddev,sum,variance
  
  五、数据字典
  
  用户表:由用户创建,包含用户的内容
  
  数据字典:由系统建立,包含数据库的信息
  
  前缀:
  USER_ :由用户创建,显示用户拥有的所有对象。
  
  ALL_ :由受权的用户访问, 用户可以访问的对象名。
  
  DBA_ :由受了DBA权限的人访问,显示数据库的所有对象。
  
  V$:由受了DBA权限的人访问,显示数据字典数据库服务器性能信息。通常是DBA用于显示系统的统计表和动态性能表。
  
  数据字典
  
  DICTIONARY数据字典提供用户可以访问的数据字典表和视图的描述。
  USER_OBJECTS显示用户拥有的对象。
  USER_VIEWS显示用户拥有的视图。
  USER_TABLES显示用户拥有的表。
  ALL_TABLES显示用户可以访问的表。
  ALL_VIEWS显示用户可以访问的视图。
  USER_CATALOG显示用户拥有的所有表,视图,同义词和序列。
  USER_CONS_COLUMNS显示带约束的列。
  DBA_CONS_COLUMNS显示数据库里的所有表,视图和同义词。
  USER_TAB_PRIVS_MADE:本用户赋给别的用户赋予权限的表
  USER_TAB_PRIVS_RECD:其他用户给本用户赋予权限的表
  USER_COL_PRIVS_MADE:本用户赋给别的用户赋予权限的字段
  USER_COL_PRIVS_RECD:其他用户给本用户赋予权限的字段
  ROLE_SYS_PRIVS:有什么系统权限赋给role
  ROLE_TAB_PRIVS:有什么关于表的权限赋给role
  USER_ROLE_PRIVS:role和用户的对应表
  
  常用的表
  
  user_objects:用户对象表(存储用户的所有对象)存储以下的类型的数据
  Selina Sql>select distinct object_type fromuser_objects;
  INDEX
  LOB
  PACKAGE
  PACKAGE BODY
  PROCEDURE
  SEQUENCE
  SYNONYM
  TABLE
  TRIGGER
  VIEW
  User_catalog:用户类表,存储以下的类型的数据
  Selina Sql>select distinct table_type fromuser_catalog;
  SEQUENCE
  SYNONYM
  TABLE
  VIEW

ORACLE常用的SQL语法和数据对象

作者:佚名转贴自:http://edu.chinaz.com浏览次数:39文章录入:admin

一.数据控制语句(DML)部分

1.INSERT(往数据表里插入记录的语句)

INSERTINTO表名(字段名1,字段名2,……)&#118alueS(值1,值2,……);
INSERTINTO表名(字段名1,字段名2,……)SELECT(字段名1,字段名2,……)FROM另外的表名;

字符串类型的字段值必须用单引号括起来,例如:’GOODDAY’
如果字段值里包含单引号’需要进行字符串转换,我们把它替换成两个单引号’’.
字符串类型的字段值超过定义的长度会出错,最好在插入前进行长度校验.

日期字段的字段值可以用当前数据库的系统时间SYSDATE,精确到秒
或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()还有很多种日期格式,可以参看ORACLEDOC.
年-月-日小时:分钟:秒的格式YYYY-MM-DDHH24:MI:SS

INSERT时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,
方法借用ORACLE里自带的DBMS_LOB程序包.

INSERT时如果要用到从1开始自动增长的序列号,应该先建立一个序列号
CREATESEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENTBY1STARTWITH1
MAX&#118alue99999CYCLENOCACHE;
其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999
INSERT语句插入这个字段值为:序列号的名称.NEXTVAL

2.DELETE(删除数据表里记录的语句)

DELETEFROM表名WHERE条件;

注意:删除记录并不能释放ORACLE里被占用的数据块表空间.它只把那些被删除的数据块标成unused.

如果确实要删除一个大表里的全部记录,可以用TRUNCATE命令,它可以释放占用的数据块表空间
TRUNCATETABLE表名;
此操作不可回退.

3.UPDATE(修改数据表里记录的语句)

UPDATE表名SET字段名1=值1,字段名2=值2,……WHERE条件;

如果修改的值N没有赋值或定义时,将把原来的记录内容清为NULL,最好在修改前进行非空校验;
值N超过定义的长度会出错,最好在插入前进行长度校验..

注意事项:
A.以上SQL语句对表都加上了行级锁,
确认完成后,必须加上事物处理结束的命令COMMIT才能正式生效,
否则改变不一定写入数据库里.
如果想撤回这些操作,可以用命令ROLLBACK复原.

B.在运行INSERT,DELETE和UPDATE语句前最好估算一下可能操作的记录范围,
应该把它限定在较小(一万条记录)范围内,.否则ORACLE处理这个事物用到很大的回退段.
程序响应慢甚至失去响应.如果记录数上十万以上这些操作,可以把这些SQL语句分段分次完成,
其间加上COMMIT确认事物处理.

二.数据定义(DDL)部分

1.CREATE(创建表,索引,视图,同义词,过程,函数,数据库链接等)

ORACLE常用的字段类型有
CHAR固定长度的字符串
VARCHAR2可变长度的字符串
NUMBER(M,N)数字型M是位数总长度,N是小数的长度
DATE日期类型

创建表时要把较小的不为空的字段放在前面,可能为空的字段放在后面

创建表时可以用中文的字段名,但最好还是用英文的字段名

创建表时可以给字段加上默认值,例如DEFAULTSYSDATE
这样每次插入和修改时,不用程序操作这个字段都能得到动作的时间

创建表时可以给字段加上约束条件
例如不允许重复UNIQUE,关键字PRIMARYKEY

2.ALTER(改变表,索引,视图等)

改变表的名称
ALTERTABLE表名1TO表名2;

在表的后面增加一个字段
ALTERTABLE表名ADD字段名字段名描述;

修改表里字段的定义描述
ALTERTABLE表名MODIFY字段名字段名描述;

给表里的字段加上约束条件
ALTERTABLE表名ADDCONSTRAINT约束名PRIMARYKEY(字段名);
ALTERTABLE表名ADDCONSTRAINT约束名UNIQUE(字段名);

把表放在或取出数据库的内存区
ALTERTABLE表名CACHE;
ALTERTABLE表名NOCACHE;

3.DROP(删除表,索引,视图,同义词,过程,函数,数据库链接等)

删除表和它所有的约束条件
DROPTABLE表名CASCADECONSTRAINTS;

4.TRUNCATE(清空表里的所有记录,保留表的结构)

TRUNCATE表名;

三.查询语句(SELECT)部分

SELECT字段名1,字段名2,……FROM表名1,[表名2,……]WHERE条件;

字段名可以带入函数
例如:COUNT(*),MIN(字段名),MAX(字段名),AVG(字段名),DISTINCT(字段名),
TO_CHAR(DATE字段名,’YYYY-MM-DDHH24:MI:SS’)

NVL(EXPR1,EXPR2)函数
解释:
IFEXPR1=NULL
RETURNEXPR2
ELSE
RETURNEXPR1

DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数
解释:
IFAA=V1THENRETURNR1
IFAA=V2THENRETURNR2
..…
ELSE
RETURNNULL

LPAD(char1,n,char2)函数
解释:
字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位

字段名之间可以进行算术运算
例如:(字段名1*字段名1)/3

查询语句可以嵌套
例如:SELECT……FROM
(SELECT……FROM表名1,[表名2,……]WHERE条件)WHERE条件2;

两个查询语句的结果可以做集合操作
例如:并集UNION(去掉重复记录),并集UNIONALL(不去掉重复记录),差集MINUS,交集INTERSECT

分组查询
SELECT字段名1,字段名2,……FROM表名1,[表名2,……]GROUPBY字段名1
[HAVING条件];

两个以上表之间的连接查询

SELECT字段名1,字段名2,……FROM表名1,[表名2,……]WHERE
表名1.字段名=表名2.字段名[AND……];

SELECT字段名1,字段名2,……FROM表名1,[表名2,……]WHERE
表名1.字段名=表名2.字段名(+)[AND……];

有(+)号的字段位置自动补空值

查询结果集的排序操作,默认的排序是升序ASC,降序是DESC

SELECT字段名1,字段名2,……FROM表名1,[表名2,……]
ORDERBY字段名1,字段名2DESC;

字符串模糊比较的方法

INSTR(字段名,‘字符串’)>0
字段名LIKE‘字符串%’[‘%字符串%’]

每个表都有一个隐含的字段ROWID,它标记着记录的唯一性.

四.ORACLE里常用的数据对象(SCHEMA)

1.索引(INDEX)

CREATEINDEX索引名ON表名(字段1,[字段2,……]);
ALTERINDEX索引名REBUILD;

一个表的索引最好不要超过三个(特殊的大表除外),最好用单字段索引,结合SQL语句的分析执行情况,
也可以建立多字段的组合索引和基于函数的索引

ORACLE8.1.7字符串可以索引的最大长度为1578单字节
ORACLE8.0.6字符串可以索引的最大长度为758单字节

ORACLEDOC上说字符串最大可以建索引的长度约是:数据块的大小(db_block_size)*40%

2.视图(VIEW)

CREATEVIEW视图名ASSELECT….FROM…..;
ALTERVIEW视图名COMPILE;

视图仅是一个SQL查询语句,它可以把表之间复杂的关系简洁化.

3.同义词(SYNONMY)
CREATESYNONYM同义词名FOR表名;
CREATESYNONYM同义词名FOR表名@数据库链接名;

4.数据库链接(DATABASELINK)
CREATEDATABASELINK数据库链接名CONNECTTO用户名IDENTIFIEDBY密码USING‘数据库连接字符串’;

数据库连接字符串可以用NET8EASYCONFIG或者直接修改TNSNAMES.ORA里定义.

数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样

数据库全局名称可以用以下命令查出
SELECT*FROMGLOBAL_NAME;

查询远端数据库里的表
SELECT……FROM表名@数据库链接名;

五.权限管理(DCL)语句

1.GRANT赋于权限
常用的系统权限集合有以下三个:
CONNECT(基本的连接),RESOURCE(程序开发),DBA(数据库管理)
常用的数据对象权限有以下五个:
ALLON数据对象名,SELECTON数据对象名,UPDATEON数据对象名,
DELETEON数据对象名,INSERTON数据对象名,ALTERON数据对象名

GRANTCONNECT,RESOURCETO用户名;
GRANTSELECTON表名TO用户名;
GRANTSELECT,INSERT,DELETEON表名TO用户名1,用户名2;

2.REVOKE回收权限

REVOKECONNECT,RESOURCEFROM用户名;
REVOKESELECTON表名FROM用户名;
REVOKESELECT,INSERT,DELETEON表名FROM用户名1,用户名2;

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics