分类: Oracle
2006-02-21 10:14:12
oracle基本概念管理员手册--sql篇 | |||||
| |||||
作者: |
蒋兴洪 |
来源: |
自考天地信息网 |
更新日期:2005/12/8 |
阅读次数:28 |
【双击 自动滚屏】 【字体: 】 | |||||
数据库对象: 函数:用作复杂运算的。用于计算。 包:
1、用户 2、方案或模式(Schema):是用户所对应的对象的集合。用户名等于方案名 3、权限 4、角色:权限组,一组权限。
-ORACLE_BASE基本目录 -ORACLE_NAME 当前的主目录 -ORACLE_NLS33
基本的SQL SELECT 语句 口令中的第一个字符不能为数字。 语句: (一)查询:SELECT (二)合并:把一个表中的数据合并到另一个表中去,如果数据在原表中存在做UPDATE,否则INSERT(9I独有)。 (三)事务控制语句:COMMIT 提交、ROLLBACK 回滚、 SAVEPOINT 存储点(与 ROLLBACK 搭配使用)在回滚的时候可以回滚到某个存储点上。否则回滚到最初起点上。 (四)数据定义语句:对对象操作。TRUNCATE 清除表中所有数据 /CREATE 创建 /DROP 删除 /ALTER 修改 (五)权限控制语句(DCL):GRANT 授予权限 /REVOKE 移除权限
SELECT 查询列表 FROM 数据源; *&* SQL命令必须加分号。 ALTER USER HR IDENTIFIED BY HR ACCOUNT UNLOCK; CONNECT(conn) HR/HR(密码) 用HR用户连接数据库。
DESCRIBE(desc) DEPARTMENTS 描述表命令(SQLPLUS 命令)
(1)语句文本的书写不区分大小写。(但字符串在作为值的时候要注意大小写)
数字和日期都可以使用数学运算符建立表达式。 日期可以加减数字,数字默认为天。 日期不能加日期,但日期可以减日期。 字符不能加减。
定义空(NULL)值 空值出现在表达式中会导致整个表达式的值为空。 NVL(字段名,将要赋予的值)函数 annual_salary年薪
可以加中文的字段别名。 如果想强制地改变列名的大小写,可以在别名的定义时加上双引号,列名有空格时也要在列名上加双引号。 spool +路径;
连接操作符: select lastname || 'work in' || department_id from tablename; select last_name || '''s salary is ' || salary 员工月薪 from employees;
*可以代表字符、数字或是日期。
在查询时默认显示所有的行,包括有重复值的行。 DISTINCT 消除重复行关键字,放在整查询列表的最前面。 作用范围:整个查询列表的组合。 消除重复行后会按字段的特性,做升序排列。(执行过程:先排序,再消除重复) select distinct department_id,job_id from employees;
SQLPLUS 与 SQL 的关系 SQL *是一种语言 *描述表的结构 查询 SQLPLUS 命令 help + 命令 SQLPLUSW 在 WINDOWS 下运行的分析器。 登陆ISQLPLUS (1)先到服务中启动OracleOraHome92HTTPServer (2)在浏览器中输入:
与文件相关的命令: save run 或 / clear buffer(cl buff) start @ get
编辑命令: list change input
n
edit l,c,i,a,n,d,e
查看当前用户 SHOW USER 默认的日期格式 日期可以进行比较; 字符可以进行比较(以字母的ASCLL码比较); IN(set)或NOT IN 匹配任何列表中的值; LIKE 模糊匹配字符串值; IS NULL 是否空值; BETWEEN 可以做数字、日期和字符的比较。
通配符 % WHERE first_name like 's/_%'escape'/'; '_'只能通配一个字符
逻辑操作符(用在WHERE子句中) AND OR NOT 先执行 NOT ,再执行 AND 最后执行 OR。
ORDER BY ORDER BY子句在 SELECT 语句的最后。 ASC:升序 空值作为无穷大来处理。 rownum 显示行数量约束的关键字(在结果中可以做代理键使用); 可以按照查询列表中序号进行排序。 系统在用户写出查询列表的同时就赋予每个列名一个序号,升序赋予。
*修改数据项 character字符类型函数: LOWER()强制小写 UPPER()强制大写 INITCAP()每个单词首字母大写 可以用在WHERE子句中。 CONCAT(‘’,‘’)连接函数 SUBSTRB(string,a[,b])返回string的一部分,a和b是以字节为单位。 SUBSTRC(string,a[,b])返回string的一部分,a和b是以UNICODE完全字符为单位。 SUBSTR2(string,a[,b])返回string的一部分,a和b是以UCS2代码点为单位。 SUBSTR4(string,a[,b])返回string的一部分,a和b是以UCS4代码点为单位。 以上函数都是返回string的一部分,从字符位置A开始,长为B个字符。如果A是0,那它就被认为是1(字符串的开始位置)。如果A是正数,那么字符从左边开始数。如果是负数,则从STRING的末尾开始,从右边数。如果B不存在,那么缺省是整个字符串。如果B小于1,将返回NULL。如果A或B使用了浮点数,那么该数值首先被节取成一个整数,返回类型与STRING相同。
{
{ INSTRC(string1,string2[,a][,b])返回string1中包含string2的位置。a和b是以UNICODE完全字符为单位。 INSTR2(string1,string2[,a][,b]) 返回string1中包含string2的位置。a和b是以UCS2代码点为单位 INSTR4(string1,string2[,a][,b]) 返回string1中包含string2的位置a和b是以UCS4代码点为单位。
RPAD(列名,数字,‘要补上的字符’)右补位 TRIM(‘child_str’ FROM ‘parents_str’)将连续子串(只能有一个字符)从主串的两边截取出来,区分大小写。 LTRIM()左截取 RTRIM()右截取 ascii(x)函数,返回'X'字符的十进制数,即X的ASCII码值。 chr(x)函数,返回ASCII码为X的字符。 length(x)函数,求串X的长度,与之相似的是lengthb(x)函数,用在多字节字符中。 replace(x,y[,z])函数,返回值为将串X中的Y串用Z串替换后的结果字符串。若省略Z参数,则将串X中为Y串的地方删除。 soundex(x)函数,返回串X的语音描述,这个描述由4个字符组成,说明串X的声音表示形式发音,有时在只知道一个名字的发音而不知道拼写情况下或许能用到。
CONVERT(string,dest_charset[,source_charset]) 将输入string转换为指定字符集dest_charset。source_charset是输入值的字符集——如果它没有被指定,则缺省为数据库字符集。输入值可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB和NCLOB类型。返回值为 NCHR(X) 返回数据库国家字符集中值为X的字符。NCHR(X) 等价于CHR(x USING NCHAR_CS). NLS_CHARSET_DECL_LEN(byte_width,charset) 返回一个NCHAR值的声明宽度(以字符为单位).byte_width是该值以字节为单位的长度charset是该值的字符集ID。 NLS_CHARSET_ID(charset_name) 返回指定字符集charset_name的数字ID。为charset_name指定“CHAR_CS”将返回数据库字符集的ID,为charset_name指定“NCHAR_CS”将返回数据库国家字符集的ID。如果charset_name是一个无效字符集名,将返回 NLS_CHARSET_NAME([charset_id]) 返回指定字符集ID charset_id 的名字。如果 charset_id 是一个无效字符集ID,将返回NULL; NLS_INITCAP(string[,nlsparams]) 以字符串中每个单词第一个字符大写而单词中其余字母小写的形式返回string.nlsparams指定了一个与该会话缺省的不同的排序次序。如果没有指定该参数,NLS_INITCAP与INITCAP相同。nlsparams应该采取下面的形式: NLS_UPPER(string[,nlsparams]) 以大写形式返回string,不是字母的字符不受影响。如果没有指定nlsparams,NLS_UPPER与UPPER相同。 NLS_LOWER 以小写形式返回string,不是字母的字符不受影响,如果没有指定nlsparams,NLS_LOWER与LOWER相同。 NLSSORT(string[,nlsparams]) 返回用于排序string的字符串字节。所有值都被转换为字节字符串,这样在不同数据库之间就保持了一致性。 TRANSLATE(string USING {CHAR_CSINCHAR_CS}) TRANSLATE...USING 将输入string参数转换为数据库字符集(指定CHAR_CS)或数据库国家字符集(指定NCHAR_CS).string可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2类型。如果指定CHAR_CS,返回类型为VARCHAR2,如果指定NCHAR_CS,返回类型为NVARCHAR2。TRANSLATE...USING是CONVERT功能的子集。 例: TRANSL SQL> select translate('asd' using CHAR_CS) from dual;--数据库字符集 TRA UNSTR(s) 返回转换为数据库UNICODE字符集的字符串。s可包含escaped UCS2 代码点字符。它由一个反斜线符号加上十六进制代码点数字组成。因此,要在字符串中包含一个反斜线符号就必须使用双反斜线符号(\\).UNISTR与
多行函数:对多行数据(一组数据)进行计算并返回一个值的函数。
ABS(x) 函数,此函数用来返回一个数的绝对值。 ACOS(x)函数,返回X的反余弦值。X范围从1到-1,输入值从0到派,以弧度为单位。 ASIN(x)函数,返回X的反正弦值。X范围从1到-1,输入值从-PI/2到PI/2,以弧度为单位。 ATAN(x)函数,返回X的反正切值。输入值从-PI/2到PI/2,以弧度为单位。 BITAND(x,y)函数,返回X和Y的与结果。X和Y必须为非负整数。注意没有BITOR函数,但是在UTL_RAW包中有用 于RAW值的位操作符。 CEIL(x)函数,用来返回大于或等于X的最小整数。 COS(x)函数,返回x的余弦值。x是以弧度表示的角度。 COSH(x)函数,返回X的双曲余弦。 EXP(x)函数,与power(x,y)函数类似,不过不用指明基数,返回E的X次幂。E=2.71828183... FLOOR(x)函数,用来返回小于或等于X的最大整数。 LN(x)函数,返回x的自然对数。x必须大于0。 LOG(x,y)函数,返回以X为底Y的对数。底必须是不为0和1的正数,Y是任意正数。 MOD(被除数,除数)求余函数,如果除数为0,则返回被除数。 POWER(x,y)函数,返回X的Y次幂。底X和指数Y都不必是正整数,但如果X是负数的话,Y必须是整数。 ROUND(x[,y])函数,返回舍入到小数点右边Y位的X值。Y缺省为0,这将X舍入为最接近的整数。如果Y是负数, 那么舍入到小数点左边相应的位上,Y必须为整数。 SIGN(x)函数,此函数用来返回一个数的正负值,若为一个正数则返回1,若为一个负数则返回-1, SIN(x)函数,返回X的正弦。x是以弧度表示的角度。 SINH(x)函数,返回x的双曲正弦。 SQRT(x)函数,返回x的平方根,x不能是负数。 TAN(x)函数,返回x的正切。x是以弧度表示的角度。 TANH(x)函数,返回x的双曲正切。 TRUNC(x[,y])截取值函数,Y缺省为0,这样X被截取成一个整数。如果Y为负数,那么截取到小数点左边相应位置 WIDTH_BUCKET(x,min,max,num_buckets) 只能在SQL语句中使用。 使用WIDTH_BUCKET可以根据输入参数创建等长的段。范围MIN到MAX被分为num_buckets节,每节有相同的大小。返回X所在的那一节。如果X小于MIN,将返回0,如果X大于或等于MAX,将返回num_buckets+1.MIN和MAX
内部存储格式: 默认格式是:DD-MON-RR。
SELECT SYSDATE FROM DUAL;
SELECT (SYSDATE-HIRE_DATE)/7 FROM TABLENAME WHERE ROWNUM; ADD_MONTHS(date,x)函数,返回加上X月后的日期DATE的值。X可以是任意整数。如果结果的月份中所包含的 日分量少于DATE的月份的日分量,则返回结果月份的最后一天。如果不小于,则 结果与DATE的日分量相同。时间分量也相同。 CURRENT_DATE 以DATE类型返回会话时区当前的日期。这个函数同SYSDATE相似,除了SYSDATE不管当 会话时区。 CURRENT_TIMESTAMP[(precision)] 以TIMESTAMP WITH TIMEZONE 类型返回会话时区当前的日期。如果 指定precision,它指返回秒数的精度,缺省为6。 DBTIMEZONE 返回数据库的时区。 LOCALTIMESTAMP[(precision)] 以TIMESTAMP类型返回会话时区的当前日期。如果指定precision,它指 返回秒数的精度,缺省为6 。 MONTHS_BETWEEN(离当前比较近的日期date1,以前的日期) 两个日期之间相差的月数(以日作为最小单位来计算的)。返回是相差的月数。如果date1和date2的日分量相同,或者这两个日期都分别是所在月的最后一天,那么返回结果是个整数。否则,返回结果包含一个分数,以一个月31天计算。 NEW_TIME(d,zone1,zone2)函数,当时区zone1中的日期和时间是D的时候,返回时区zone2中的日期和时间。 NEXT_DAY (日期,星期几) 指定日期后将要遇到的后七天的某一天的日期。 ROUND(日期,‘MONTH/YEAR’) 四舍五入得到新的日期。 保留位置是月和年 SESSIONTIMEZONE 返回当前会话的时区。返回类型是一个时区偏移或时区片名的字符字符串。如果指 定格式,则与 ALTER SESSION 语句中的格式相同。 SYS_EXTRACT_UTC(datetime) 从提供的DATETIME中以UTC(Coordinated Universal Time)返回时间。 SYSTIMESTAMP 以TIMESTAMP WITH TIMEZONE 返回当前的日期和时间。当在分布式SQL语句中使用的时 候,返回本地数据库的日期和时间。 TRUNC(日期,‘MONTH/YEAR’) 截取 TZ_OFFSET(timezone) 以字符字符串返回提供的timezone和UTC之间的偏移量。timezone可以被指定为时 区名或'+/-HH:HI'格式表示的偏移量。也可使用SESSIONTIMEZONE和 DBTIMEZONE函数,返回格式为'+/-HH:HI'。 字符字符串 时区
运算 返回类型 d1-d2 NUMBER dt1-dt2 INTERVAL i1-i2 INTERVAL d1+d2 N/A dt1+dt2 N/A i1+i2 INTERVAL d1+n DATE d1-n DATE dt1+i1 DATETIME dt1-i1 DATETIME i1*n INTERVAL i1/n INTERVAL 表中注:
TO_NUMBER(char[,'format_model']) 字符转换到数字类型 TO_DATE(char[,'format_model']) 字符转换到日期类型
TO_CHAR(date[,'format_model'[,nlsparams]]) DDSPTH TO_CHAR(NUM[,'format_model'[,nlsparams]])转换数字 将NUMBER类型参数NUM转换成VARCHAR2类型。如果指定FORMAT,它会控制整个转换。
数字和日期是不能相互转换的。 ASCIISTR(string) 返回只包含有效的SQL字符和斜线的字符串。string中的任何无效的字符将被转换为一个相当的数字,在之前加上斜线。 将一位矢量转换位相当的数字。它的参数是一系列逗号隔开的NUMS,每一个都必须是0或1。 将字符串转换成一个ROWID类型的值,注意格式必须采用ROWID数据类型格式,即“数据块号:行序号:数据文件号”。 以相同字符集中完全规格化Unicode形式返回string.string可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB或NCLOB类型。 DECOMPOSE(string) 返回一个Unicode字符串。它是string的规范分解。string可以是CHAR、VARCHAR2、 NCHAR、NVARCHAR2、CLOB或NCLOB类型。 FROM_TZ(timestamp,timezone) 返回一个TIMESTAMP WITH TIMEZONE 类型值。它将TIMESTAMP(没有时区信息)和提供的TIMEZONE组合在一起。 HEXTORAW(string) 将由STRING表示的二进制数值转换为一个RAW数值。STRING应该包含十六进制值。STRING中的每两个字符表示结果RAW中的一个字节。HEXTORAW和RAWTOHEX互为反函数。 NUMTODSINTERVAL(x,unit) 将X转换为INTERVAL DAY TO SECOND 值,X应该是一个数字。UNIT是一个字符字符串(可以是CHAR、VARCHAR2、NCHAR或NVARCHAR2),且是'DAY'、'HOUR'、'MINUTE'、'SECOND'之一。unit是不区分大小写的,返回值的缺省精度为9。 NUMTOYMINTERVAL(x,unit) 将X转换成INTERVAL YEAR TO MONTH 值,X应该是一个数字。UNIT是一个字符字符串(可以是CHAR、VARCHAR2、NCHAR或NVARCHAR2),且是'YEAR'或'MONTH'之一。unit是不区分大小写的,返回值的缺省精度为9。 REFTOHEX(refvalue) 返回一REF refvalue的十六进制表示。 RAWTOHEX(rawvalue) 将RAW类型值rawvalue转换为一个十六进制表示的字符串。rawvalue中的每个字节转换为一个双字符的字符串。 RAWTONHEX(rawvalue) ROWIDTOCHAR(rowid)函数,将ROWID类型值转换成字符串。与CHARTOROWID互为反函数。 ROWIDYONCHAR(rowid) 与ROWIDTOCHAR类似,返回类型是NCHAR,而不是CHAR。 TO_CLOB(string) 将string转换为CLOB。string可以是文字或另一个LOB列。如果参数包含NCHAR数据,它被转换为数据库字符集 TO_DSINTERVAL(string[,nlsparams]) 将string(可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2)转换为 INTERVAL DAY TO SECOND 类型。如果 TO_LOB(long_column) 将long_column转换成LOB。这个函数用于将LONG和LONG RAW分别转换为CLOB和LOB。 TO_MULTI_BYTE(string) 返回将所有单字节字符替换为等价的多字节字符的STRING。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用。否则,STRING不会进行任何处理而被返回,与TO_SINGLE_BYTE 互为反函数。 和TO_CHAR相似,结果是属于国家字符集而不是数据库字符集。 TO_NCLOB(string) 将STRING转换为NCLOB。STRING可以是文字或另一LOB列。 TO_SINGLE_BYTE(string) 返回将所有双字节字符替换为等价的单字节字符的STRING。。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用。否则,STRING不会进行任何处理而被返回,与TO_MULTI_BYTE 互为反函数。 TO_TIMESTAMP(string[,format[,nlsparams]]) 将其参数CHAR或VARCHAR2类型string转换成TIMESTAMP类型。 TO_TIMESTAMP_TZ(string[,format[,nlsparams]]) 将其参数CHAR或VARCHAR2类型string转换成 TIMESTAMP WITH TIMEZONE 类型。 TO_YMINTERVAL(string) 将string(可以是CHAR、VARCHAR2、NCHAR、NVARCHAR2)转换为INTERVAL YEAR TO MONTH 类型。 to_label(x[,y])函数,按照格式Y将字符串X转换成MLSLABEL类型的一个值,若默认格式为Y,则按照默认格式进 行转换。 dump(w,[x[,y[,z]]])函数,用来返回字符串EXPR的数据类型,内部的存储位置和字符长度。 例: greatest(x,y,...)函数,返回参数列表中的最大值。其参数的类型是由第一个参数决定的,可以为数值型、日期型 、和字符型等,后面的参数被强制转换成此种数据类型。 least(x,y,......)函数,返回列表参数中的最小值。 与上两个函数类似的有: user 函数,返回当前用户的数据库用户名。 userenv(x)函数,返回当前会话的一些信息,由X指定返回何种信息。在写一个指定应用的审计测试表或决定为当 前会话指定哪种语言时会用到,但完整性约束时不能用。
嵌套函数: 单行函数可以嵌套任意层;
BFILENAME(directory,file_name) COALESCE(,,,,可以多个参数)返回从左到右的第一个非空的表达式。如果所有表达式都为NULL,则返回NULL。 EMPTY_BLOB/EMPTY_CLOB EXISTSNODE(XMLType_instrance,Xpath_string) EXTRACT(XMLType_instrance,Xpath_string) GREATEST(expr1[,expr2]...) LEAST(expr1[,expr2]...) NVL(EXPR1,EXPR2) NVL2(EXPR1,EXPR2,EXPR3) SYS_CONNECT_BY_PATH 返回列值的从根到结点的路径,它仅在层次查询中有效。 SYS_CONTEXT(namespace,parameter[,length]) SYS_DBURIGEN SYS_GUID SYS_TYPEID(object_type) SYS_XMLAGG SYS_XMLGEN TREAT(expr AS [REF] [schema.]type) UID VSIZE(x)返回X内部表示的字节数。 NULLIF(a,b)如果A等于B返回NULL,如果不等于返回B。 DUMP(expr[,number_format[,start_position][,length]]) NUMBER_FORMAT 格式 返回结果
函数的行为 选项值 USERENV(option)的行为 'OSDBA' 如果当前会话将OSDBA角色的设置打开了,则返回'TRUE',否则返回'FALSE',注意返 回值是VARCHAR2类型,而不是BOOLEAN类型。 'LABEL' 仅对TRUSTED ORACLE 中有效,返回当前会话标志。 'LANGUAGE' 返回当前会话所使用的语言和地域,以及数据库字符集,这是NLS参数,返回形式是 'TERMINAL' 返回当前会话所使用终端的操作系统标识符。对于分布式的SQL语句,返回的是本地 会话的标识符。 'SESSIONID' 如果初始化参数AUDIT_TRAIL被设置为TRUE,那么将返回审计会话标识符。在分布 式SQL语句中,USERENV('SESSIONID')是无效的。 'ENTRYID' 如果初始化参数AUDIT_TRAIL被设置为TRUE,那么将返回可用的审计项标识符。在 分布式SQL语句中USERENV('ENTRYID')是无效的。 'LANG' 返回语言名称的ISO缩写符号。它的格式比USERENV('LANGUAGE')要短。
例: USERENV('TERMINA USERENV('LANGUAGE') 条件表达式: CASE表达式(简单CASE)
CASE 表达式 WHEN 条件1 THEN 返回值1 DECODE函数 语法: DECODE( select last_name,salary,
从多表中显示数据: SQL(老版本的) 等值查询 使用表的别名来简化查询。 SELECT E.ID,D.ID FROM EMPL E,DEP D WHERE E.NAME=D.NAME;
使用 BETWEEN AND 查询近似值作为连接条件的多表结果。
SELECT T1.COL,T2.COL FROM WHERE T1.COL(+)=T2.COL;左外连接
自连接 通过表的别名来创建虚拟逻辑表,进行自连接查询。
select t1.col,t2.col natural join t2//自然连接:把两表中所有等值的字段都作为连接条件(但这些连接条件不用写)。 join t2 using (column_name);基于自然连接,只有在USING中出现的,才作为连接条件(在USING中列名前一定不能加前缀)。 left|right|full outer join t2 on(t1.col=t2.col); select e.last_name,d.department_name,l.city
用字函数产生的总计 对多行的计算产生单行的结果。 组函数用语对每个组的行集进行运算,每个组产生一个结果。 AVG([DISTINCT/ALL]col)只能用与数字。只能对多行的数据进行运算,不能在这个函数中做单行的数学运算。 CORR(x1,x2) 返回表达式X1和X2组成的集合的相关系数。在保证所有行中的X1和X2都不为NULL之后结果通过 COUNT([DISTINCT/ALL]col)所有非空字段的行数。 COVAR_POP(x1,x2)返回表达式x1和x2组成的集合的人口协方差结果通过(SUM(x1*x2)-SUM(x2)*SUM(x1)/n)/n得到,n是没有 NULL项的集合的数目。 COVAR_SAMP(x1,x2)返回表达式X1和X2组成的集合的相同协方差。 CUME_DIST 返回一组值中一个值的累积分布。 DENSE_RANK返回有序分组的行中一行的秩,秩是从1开始的连续的整数。 GROUP_ID()返回一个唯一数字值用于在GROUP BY 字句中辨别组。 GROUPING_ID返回一个数字对应于一行的GROUPING位矢量。 MAX([DISTINCT/ALL]col)可以用于任何类型,当用于日期类型时代表最晚。忽略空值。字符类型时候,比较字符串首字母的 ASCLL值。 MIN([DISTINCT/ALL]col)可以用于任何类型,当用于日期类型时代表最早。忽略空值。字符类型时候,比较字符串首字母的 ASCLL值。 PERCENTILE_CONT这个函数是一个反分布函数,它假设了一个连续分布模式。 PERCENTILE_DISC一个反分布函数,它假设了一个离散分布模式。 RANK 返回给定行的秩。秩不必是连续的,因为相同的行有相同的秩。 REGR这些函数(REGR_SLOPE,REGR_INTERCEPT,REGR_COUNT,REGR_R2,REGR_AVGX,REGR_AVGY,REGR_SXX SUM([DISTINCT/ALL]col)返回选择列表项目的总和,只能用于数字。 STDDEV([DISTINCT/ALL]col) 标准方差 STDDEV_POP(col)计算人口标准差并返回人口方差的平方根。 STDDEV_SAMP(col)计算累计标准差并返回例子方差的平方根。 VAR_POP(x)返回提系列数字在去除了NULL值之后的人口不同。由(SUM(x*x)-SUM(x)*SUM(X)/COUNT(x))/COUNT(x)得到。 VAR_SAMP(x)返回一系列数字在去NULL值之后的范例不同。由(SUM(x*x)-SUM(x)*SUM(X)/COUNT(x))/(COUNT(x)-1)得到。 VARIANCE([DISTINCT/ALL]col)偏移方差,返回COL的方差。
语法: WHERE 子句中不能使用 group function。 限制组必须使用 HAVING 子句。 语法:
子查询: 语法: 子查询在主查询执行前执行一次。 使用规则: 在WHERE 和 HAVING 子句中都可以使用子查询。 *、子查询必须用括号扩起。 可以在子查询中使用组函数。 子查询的分类:
多行操作符: ALL(小于是小于最小的,大于是大于最大的)
from employees e, (select department_id,min(salary) m from employees group by department_id )d where e.department_id=d.department_id and e.salary=d.m;
临时存储值: & (生命周期):单次引用中,不需要声明。如果替换字符或日期类型,最好用单引号扩起。 使用范围:
&& (生命周期):整个会话(session连接),不需要声明。
define(生命周期):整个会话,预先声明,使用时用&引用声明的变量。 define column_name(变量名) 查看变量命令。
例:accept a char prompt '请输入员工的雇佣时间(yyyy-mm-dd):' hide set verify(环境变量) off;关闭调试命令(关掉替换过程)
环境变量: ECHO 显示回显 HEADING {OFF/ON}是否显示列标题; ARRAYSIZE{20/n}每一次从查询得到的返回量的大小。 FEEDBACK{OFF/ON}回馈,反馈信息。 LONG{80/n}on/text} LONG类型 LINESIZE 行的宽度。 PAGESIZE :设置页的大小。SET PAGESIZE N
COLUMN[column option]可以设置字段或字段别名的格式。
CLE[AR]:清除列的格式 HEA[DING] TEXT:设置列标题 FOR[MAT] FORMAT:格式化显示列的值,对字符和数字有效,对日期无效。
TTITLE[text/off/on]设置报表的表头 BREAK ON [REPORT_ELEMENT] break on department_id
www.itpub.net入门与认证版 ora-600
变量定义accept 数据操作语句: 插入:INSERT INTO TABLE(字段1,字段2....)VALUES(值1,值2....) 注:(1)值的个数不能少于列名的个数。 可以创建一个脚本用 &变量名 的形式来用一个插入语句实现多行的插入(在值列表里用 &变量名)。 插入中的子查询:将另一个表中的内容都插入被插入的表中。
DELERT FROM TABLE WHERE 条件; 基于子查询的删除。 注意及联删除。
利用子查询更新另外表中的数据,在 SET 后和 WHERE 后都可以利用子查询语句。 更新的时候要注意参照完整性约束。
提供了对表根据条件进行插入或者更新的能力。 避免了单独的修改。 语法:别名AL create table newtable_name(新表) as select * from oldtable_name(原表) where 1=0;
事务(transaction):由被逻辑组织在一起的多个DML语句的构成。 事务的组成:
事务的开始: 结束的时候是在: 语句级回滚: ORACLE 服务器执行隐式的存储点。 创建和管理表 对象: 表(TABLE)基本的存储单位,由行和列组成。 表名和列名(使用规则): 创建需求 当前用户所有的表 当前用户所有的对象: 当前用户对象的别名: 字段类型: INTERVAL YEAR TO MONTH 按年和月的间隔存储的类型 方案:一个用户所有对象的命名集合。 如果想访问其他用户或方案的表要加上用户或方案作为前缀。 必须指明: CTAS(子查询建表): CREATE TABLE table_name 创建的表的列的数目匹配子查询的列的数目。 使用ALTER TABLE 语句可以: *、在表中增加一个新列 语法:ALTER TABLE table add (col datatype [default],...,....); *、修改表字段的类型和长度 ALTER TABLE table modify (col datatype [default],...,....); *、删除表字段 ALTER TABLE table DROP COLUMN (COLUMN_NAME_LIST); 9I2版可以修改列名 *、SET UNUSED 设置字段为不可用。 原理:清楚掉字典信息(撤消存储空间),不可恢复。 语法: 删除表: 删除关联:drop table table_name cascade; 改对象名:
截取: DELETE 也可以删除所有行,但:
表级别约束定义: 约束在表上强制了规则。 如果在字段列表中定义外键就可以不写 FOREIGN KEY 关键字。
ON DELETE SET NULL 当主表的行被删除的时候,转换子表中的参照值为空。 CHECK 定义一个每行都必须满足的条件。 约束的使用: 约束的命名:给约束命名或者ORACLE服务器将使用SYS_Cn的格式为约束命名。 创建时期: 在创建表的同时或者在建表之后。 定义级别: 可以在表级定义或列级定义。 在数据字典中可以查看约束。
*、添加或者删除约束条件,但是不能修改约束条件。 查看约束条件: select constraint_name, constraint_type,search_condition,status
视图也可以用DESC描述。 CREATE [or replace(修改视图)] [force/noforce] VIEW view_name(col coltype ,.......) USER_VIEWS 关于视图的字典 修改视图: CREATE OR REPLACE 原视图名 (字段列表)
包含: 包含: 使用视图的原因; 为了限制对数据的访问;
使用WITH CHECK OPTION 子句创建视图 创建视图时通过 WITH CHECK OPTION 子句确保执行的DML语句不会引起数据不出现在视图上。
WITH READ ONLY 删除视图: DROP VIEW view_name;
TOP-N: 序列(SEPUENCE)产生的顺序数字,单向递增或单向递减,且步长相同。 索引(INDEX)用于提高查询性能。 同义词(SYNONYM)对象的别名。 user_synonyms; 创建同义词要有权限,访问的时候也需要权限。 序列: 自动产生的唯一值; CREATE SEQUENCE sequence_name 查询序列: select sequence_name,min_value,max_value,increment_by last_number from user_sequences; 伪列:NEXTVAL 引用下一个可用的序列值,不同的用户每次引用都会获得一个唯一的值。 序列名.NEXTVAL/CURRVAL
start with 不能修改。 删除序列: drop SEQUENCE sequence_name;
一个方案中的对象; 一定是 WHERE 条件的才有可能使用索引。
考虑创建索引的情况:
user_ind_columns 得到索引的名称,表名和列名。 删除索引:
控制用户的访问 数据库的安全性 系统安全性: 数据安全性: GRANT object_priv_list [(col_list)] 移除权限:
修改口令:
UNION select employee_id,job_id from employees 两个表的并集,但不显示重复行。 union all 也是两个表的并集,而且显示重复行。 intersect select employee_id,job_id from employees
select employee_id,job_id from employees e-j=e-e与j的交集; 注: 匹配 SELECT 语句 括号可以用拉修改序列的执行顺序。 ORDER BY 子句:
CUBE 操作符的 GROUP BY 在 GROUP BY 子句中使用 ROLLUP 或者 CUBE 来产生分组小计;
abc CUBE 分组产生包括 ROLLUP 产生的结果和交叉分组小计。 a ab abc a ab abc GROUPING 函数 通过1或0来判断结果集中的空值是由于本身列的值是空的,还是由于使用CUBE或ROLLUP产生的空值。 GROUPING SETS 可以使用 GROUPING SETS 在同一个语句中定义多个组集。 只需要访问一次基表。 group by GROUPING SETS((abc),(ab),(bc),(a),(b))
是一个列的组合,在分组计算时被作为一个单元处理。
成对子查询: 相关子查询:
EXISTS操作符 EXISTS 操作符测试子查询的结果是否存在;
在内部子查询中不在继续执行 如果一个子查询没有找到结果: select col_list from table_name tab_alias where exists (select 'x' from table_name where col=tab_alias.col); NO EXISTS操作符 和NOT IN 相对应,速度要快,性能好。 UPDATE 中的相关子查询 update emp e delete 中的相关子查询 层次查询 select [level],column,expr from table [where condition] 自顶向下 左边放主键,右边放外键 select employee_id,last_name,salary,job_id,manager_id 自底向上 右边放主键,左边放外键 level(伪列) 使用 level 和 LPAD 层次化格式的显示 修剪分支
多表插入的 INSERT 语句 insert .... select 语句可以被用来在单个DML语句中向多个表插入数据。 多表插入语句: 无条件INSERT 条件 ALL INSERT 条件 FIRST INSERT 轮巡 INSERT |