网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

sql应用培训资料

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:网学会员为您提供sql应用培训资料参考,解决您在sql应用培训资料学习中工作中的难题,参考学习。


    应用培训资料SQL应用培训资料
    目录:目录:1、Select语句基础基本语法、单表查询、分组查询)(基本语法、单表查询、分组查询)2、Select语句高级应用多表查询、子查询、嵌套查询、集合操作)(多表查询、子查询、嵌套查询、集合操作)语句(InsertUpdate、(Insert、3、DML语句(Insert、Update、Delete)语句(CreateAlter、(Create、4、DDL语句(Create、Alter、Drop)语句(Grant(Grant、5、DCL语句(Grant、Revoke)
    第1页共25页
     1
    select语句基础:
    语句的功能:SELECT语句的功能:
    1.1select语句的基本语法和基本运算符:
    SELECTcolumn1,column2.、(distinct,expression,alias,||,as)SELECTcolumn1,column2.、(distinct,expression,alias,||,as)、distinct/*指定提取的列/*指定提取的列table1,table2、/*指定指定表提取FROMtable1,table2、、/*指定表提取条件设置:/*设置条件范围/*设置条件范围WHERE条件设置:GROUPBY/*分组/*设置分组条件HAVING/*设置分组条件/*设置排序ORDERBYASC/DESC/*设置排序
    1.1.1各种运算符运算等级:运算符及1.1.1各种运算符及运算等级:算术运算符,连接运算符,关系运算符,其他运算符,逻辑表达式)(算术运算符,连接运算符,关系运算符,其他运算符,逻辑表达式)
    1、(),+,-,*,/(),+,数字和日期数据可以使用进行计算=concat)2、||(=concat)连接运算符3、=,>,>=,<,<=关系运算符4、IS[NOT]NULL,LIKE,[NOT]IN其他运算符5、[NOT]BETWEENAND其他运算符
    第2页共25页
     6、7、8、注释:注释:
    NOTANDOR
    逻辑表达式逻辑表达式逻辑表达式
    ①NULL值定义
    NULL值是未赋值的未知数未赋值的未知数NULL值是与零或空串不同的
    NULL值运算
    算术表达式中含有NULL值,表达式的计算结果为NULL(NULL值传播)查找NULL使用ISNULL字句
    ②使用别名表示表或列(AS)使用别名表示表或列AS)表或
    利用表别名可以进行自查询(多个别名)和方便程序编写,利用列别名可以简化列显示标题
    ③使用连接操作(||)使用连接操作(||)
    可以归并多列显示为一列
    ④重复行
    默认的查询结果包括重复行要去掉重复行需在SELECT语句中使用DISTINCT关键字
    ⑤字符型与日期型
    字符型与日期型的值要用单引号标识字符型值大小写敏感,日期型值格式敏感
    ⑥使用LIKE子句
    使用LIKE子句执行一个含有通配符的模糊查找。%任意长度的字符_一个字符
    1.2书写规则:
    ⑴、SQL语名对大小写不敏感⑵、SQL语句允许换行⑶、关键字不能缩写或跨行⑷、子句一般要换行书写⑸、使用缩进格式书写可以提高可读性
    1.3常用函数
    字符函数(1.3.1字符函数(11个)
    许多SQL解释器都提供了字符和字符
    串的处理功能。本部分覆盖了大部分字符串处理函数,这一部分的例子使用字符函数示范字符函数示范表。字符函数示范
    第3页共25页
     输入\输出:
    SQL>select*from字符函数示范;
    姓PURVISTAYLORADAMSCOSTALESKONG名KELLYCHUCKFESTERARMANDOMAJORMAJCMAGCODE326765877752
    ----------------------------------------
    CHRISTINELAURA
    1.3.1.1CHR该函数返回与所给数值参数等当的字符,返回的字符取决于数据库所依赖的字符集。例如,示例的数据库采用了ASCLL字符集。示例数据库的代码列的内容为数字。
    输入:
    SQL>SELECTCODE,CHRCHR(CODE)FROM字符函数示范;CHRCODECHR(CODE)------------------3267C65A87W77M524在数值32处显示为空白,因为32在ASCLL码表中是空格。CONCAT1.3.1.2CONCAT我们在以前学到过一个与这个函数所执行的功能相当的操作,||符号表示将两个字符串连接起来,CONCAT也是完成这个功能的。使用方法如下:
    输入:
    SQL>SELECTCONCAT(姓,名)"姓名"FROM字符函数示范;
    姓名-------------------PURVISKELLYTAYLORCHUCKCHRISTINELAURAADAMSFESTERCOSTALESARMANDOKONGMAJOR当用多个词来做为别名时可以它们使用引号。
    第4页共25页
     INITCAP1.3.1.3INITCAP该函数将参数的第一个字母变为大写,此外其它的字母则转换成小写。
    输入:
    SQL>SELECT姓前,INITCAP(姓)后FROM字符函数示范;前---------PURVISTAYLORCHRISTINEADAMSCOSTALESKONG后---------PurvisTaylorChristineAdamsCostalesKong
    1.3.1.4LOWER和UPPERLOWER将参数转换为全部小写字母,而UPPER则把参数全部转换成大写字母。下例是用LOWER函数和UPDATE函数来把数据库的内容转变为小写字母。
    输入:
    SQL>UPDATE字符函数示范SET名='kelly'WHERE名='KELLY';
    输出:
    1rowupdated
    输入:
    SQL>SELECT名FROM字符函数示范;
    输出:
    名---------kellyCHUCKLAURAFESTERARMANDOMAJOR输入\输出:SQL>select名,upper(名),lower(名)from字符函数示范;
    名---------kellyCHUCKLAURAFESTERARMANDOMAJOR
    UPPER(名)---------KELLYCHUCKLAURAFESTERARMANDOMAJOR
    LOWER(名)---------kellychucklaurafesterarmandomajor
    第5页共25页
     现在你明白这两个函数的作用了吧!1.3.1.5LPAD与RPAD这两个函数最少需要两个参数最多需要三个参数,每一个参数是需要处理的字符串。两三第二个参数是需要将字符串扩充的宽度,第三个参数表示加宽部分用什么字符来做填补。第三个参数的默认值为空格,但也可以是单个的字符或字符串。
    输入\输出:SQL>SELECT名,LPAD(名,20,'*')FROM字符函数示范;名LPAD(名,20,'*')-------------------------------------------------------KELLY***************KELLYCHUCK***************CHUCKLAURA***************LAURAFESTER**************FESTERARMAN
    DO*************ARMANDOMAJOR***************MAJOR输入\输出:SQL>SELECT名,RPAD(名,20,'*')FROM字符函数示范;名--------------KELLYCHUCKLAURAFESTERARMANDOMAJORRPAD(名,20,'*')----------------------------------------KELLY***************CHUCK***************LAURA***************FESTER**************ARMANDO*************MAJOR***************
    1.3.1.6LTRIM与RTRIMLTRIM和RTRIM至少需要一个参数,最多允许两个参数。第一个参数与LPAD和RPAD类似,是一个字符串;第二个参数也是一个字符或字符串,默认则是空格。如果第二个参数不是空格的话,那么该函数将会像剪除空格那样剪除所指定的字符。如下例:
    输入\输出:
    SQL>SELECT姓,RTRIM(姓)FROM字符函数示范;姓RTRIM(姓)-----------------------------PURVISPURVISTAYLORTAYLORCHRISTINECHRISTINEADAMSADAMSCOSTALESCOSTALESKONGKONG你可以用下边的语句来确认字符中的空格已经被剪除了;输出证明的确已经进行了剪除工作现在请再试一个LTRIM;
    第6页共25页
     输入\输出:
    SQL>SELECT姓,LTRIM(姓,'C')FROM字符函数示范;姓LTRIM(姓,'C')-----------------------------PURVISPURVISTAYLORTAYLORCHRISTINEHRISTINEADAMSADAMSCOSTALESOSTALESKONGKONG注意第三行和第五行的C已经没有了。1.3.1.7REPLACE该函数需要三个参数,第一个参数是需要搜索的字符串,第二个参数是搜索的内容,第三个参数则是需要替换成的字符串。如果第三个参数省略或者是NULL,那么将只执行搜索操作而不会替换任何内容。
    输入\输出:
    SQL>SELECT名,REPLACE(名,'ST','**')替换后FROM字符函数示范;名--------------KELLYCHUCKLAURAFESTERARMANDOMAJOR1.3.1.8SUBSTR这个函数有三个参数,允许你将目标字符串的一部份输出。第一个参数为目标字符串,第二个字符串是将要输出的子串的起点,第三个参数是将要输出的子串的长度。替换后-----------------------------KELLYCHUCKLAURAFE**ERARMANDOMAJOR
    输入\输出:
    SQL>SELECT名,SUBSTR(名,2,3)FROM字符函数示范;名SUBSTR(名,2,3)----------------------------KELLYELLCHUCKHUCLAURAAURFESTERESTARMANDORMAMAJORAJO如果第二个参数为负数,那么将会从源串的尾部开始向前定位至负数的绝对值的位置。
    第7页共25页
     TRANSLATE1.3.1.9TRANSLATE这一函数有三个参数,目标字符串、源字符串和目的字符串。在目标字符串与源字符串中均出现的字符,将会被替换成对应的目的字符串的字符。
    输入\输出:
    SQL>SELECT名,TRANSLATE(名,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','NNNNNNNNNNAAAAAAAAAAAAAAAAAAAAAAAAA')FROM字符函数示范;名--------------kellyCHUCKLAURAFESTERARMANDOMAJORTRANSLATE(名,'0123456789ABCDEF-----------------------------kellyAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    6rowsselected这个函数对大小写
    是敏感的。1.3.1.10INSTR如果需要知道在一个字符串中满足特定的内容的位置可以使用INSTR,它的第一个参数是目标字符串,第二个参数是匹配的内容,第三和第四个参数是数字,用以指定开始搜索的起点以及指出第几个满足条件的将会被返回。下例将从字符串的第二个字符开始搜索,并返回第一个以O开头的字符的位置。
    输入\输出:
    SQL>SELECT姓,INSTR(姓,'O',2,1)FROM字符函数示范;姓INSTR(姓,'O',2,1)-------------------------------PURVIS0TAYLOR5CHRISTINE0ADAMS0COSTALES2KONG2默认第三个与第四个参数的数值均为1,如果第三个数值为负数,那么将会从后向前搜索。1.3.1.11LENGTHLENGTH将返回指定字符串的长度。例如:
    输入\输出:
    SQL>SELECT名,LENGTH(RTRIM(名))FROM字符函数示范;名LENGTH(RTRIM(名))--------------------------------
    第8页共25页
     kellyCHUCKLAURAFESTERARMANDOMAJOR
    555675这里使用了函数RTRIM,否则LENGTH将全部返回15。
    1.3.2数字函数(6个)数字函数(
    大多数情况下,你所检索到的数据在使用时,需要用到数学函数,大多数SQL的解释器都提供了与这里相类似的一些数学函数。这里的例子使用的表名字叫数学函数示范数学函数示范内容如下:数学函数示范
    输入\输出:
    SQL>SELECT*FROM数学函数示范;AB-------------------3.14154-450.70759-57.667421555-7.25.3
    1.3.2.1ABS
    ABS函数返回给定数字的绝对值。例如:
    输入\输出:
    SQL>SELECTABS(A)FROM数学函数示范;ABS(A)---------3.141545557.667157.2
    1.3.2.2CEIL和FLOOR
    CEIL返回与给定参数相等或比给定参数在的最小整数。FLOOR则正好相反,它返回与给定参数相等或比给定参数小的最大整数。例如:
    输入\输出:
    SQL>SELECTCEIL(B)FROM数学函数示范;CEIL(B)
    第9页共25页
     ---------4194255
    输入\输出:
    SQL>SELECTFLOOR(A)FROM数学函数示范;FLOOR(A)---------3-455-5815-8
    1.3.2.3MOD
    MOD返回数A与数B相除后的余数。例如:
    输入\输出:
    SQL>SELECTA,B,MOD(A,B)FROM数学函数示范;ABMOD(A,B)-----------------------------3.141543.1415-450.707-0.459595-57.66742-15.667155515-7.25.3-1.9
    1.3.2.4SIGN
    如果参数的值为负数,那么SIGN返回-1。如果参数的值为正数,那么SIGN返回1。如果参数为零,那么SIGN也返回零。请看下例:
    输入\输出:
    SQL>SELECTA,SIGN(A)FROM数学函数示范;ASIGN(A)-------------------3.14151-45-151-57.667-1151-7.2-1
    第10页共25页
     1.3.2.5ROUND
    ROUND的作用是四舍五入至指定小数位数。例如:
    输入\输出:
    SQL>SELECTA,ROUND(A)FROM数学函数示范;AROUND(A)-------------------3.14153-45-4555-57.667-581515-7.2-7
    1.3.2.61.3.2.6TRUNC
    TRUNC的作用是截
    断指定小数位数。例如:
    输入\输出:
    SQL>SELECTA,TRUNC(A,1)FROM数学函数示范;ATRUNC(A,1)-------------------3.14153.1-45-4555-57.667-57.61515-7.2-7.2
    日期函数(1.3.3日期函数(7个)
    在学习日期函数之前,我们先要了解一下基本内容:ORACLE数据库对日期数据在内部存贮格式:世纪,年,月,日,时,分,秒默认日期显示格式为:DD-MON-RR.允许你以两位数字表示年份。SYSDATE函数返回当前系统日期时间。格式串:格式串:YYYYMMDDHH24:MI:SSAM年份用四位数字表示月份用两位数字表示日期用两位数字表示用24小时制表示时分秒,AM表示要输出上下午标志
    第11页共25页
     1.3.3.1SYSDATE
    SYSDATE函数返回当前系统日期时间。例如:
    输入\输出:
    SQL>selectsysdatefromdual;SYSDATE----------2005-08-02
    1.3.3.2MONTHS_BETWEEN
    如果你想知道在给定的两个日期中有多少个月可以像这样来使用MONTHS_BETWEEN。例如:
    输入\输出:
    SQL>selectmonths_between(to_date('2005-8-2','yyyy-mm-dd'),to_date('2004-8-2','yyyy-mm-dd'))月数fromdual;月数---------12
    1.3.3.3ADD_MONTHS
    该函数的功能是将给定的日期增加一个月。举例:
    输入\输出:
    SQL>selectto_date('2005-8-2','yyyy-mm-dd')原计划,add_months(to_date('2005-8-2','yyyy-mm-dd'),2)修改后计划fromdual;原计划修改后计划---------------------2005-08-022005-10-02
    1.3.3.4NEXT_DAY
    NEXT_DAY将返回与指定日期在同一个星期或之后一个星期内的,你所要求的星期天数的确切日期。如果你想知道你所指定的日期的星期五是几号可以这样做:
    输入\输出:
    SQL>selectSYSDATE原日期,next_day(SYSDATE,'星期五')fromdual;原日期NEXT_DAY(SYSDATE,'星期五')------------------------------------2005-08-022005-08-0518:25:52本例中的星期五,同样可以用数字5来代替。
    LAST_DAY1.3.3.5LAST_DAY
    LAST_DAY可以返回指定月份的最后一天。例如,如果你想知道在本月的最后一天是几号时
    第12页共25页
     你可以输入:
    输入\输出:
    SQL>selectlast_day(SYSDATE)月末月末----------2005-08-31fromdual;
    1.3.3.6ROUND
    ROUND可以四舍五入日期。
    输入\输出:
    selectsysdate当前时间,round(sysdate,'year')格式化后时间fromdual;当前时间格式化后时间----------------------2005-08-032006-01-01
    1.3.3.7TRUNC
    TRUNC可以截断制定日期。
    输入\输出:
    selectsysdate当前时间,trunc(sysdate,'year')格式化后时间fromdual;当前时间格式化后时间----------------------2005-08-032005-01-01请比较ROUND和TRUNC的输出结果的差异。
    1.3.4转换函数(1.3.4转换函数(3个)
    1.3.4.1TO_NUMBER
    该函数的作用是将一个字符串转换成数值。TO_NUMBER(X,Y[,Z]),例如:
    输入\输出:
    SQL>selectto_number('2005')yearfromdual;YEAR--------2005
    TO_CHAR
    1.3.4.2TO_CHAR
    该函数作用是将一个日期或数字转换成一个字符串。TO_CHAR(date,’format_model’)。例如:
    输入\输出:
    SQL>selectto_char(sysdate,'yyyy/mm/ddhh24:mi:ss')fromdual;TO_CHAR(SYSDATE,'YY------------------第13页共25页
     2005/08/0309:14:41
    TO_DATE1.3.4.2TO_DATE
    该函数作用是将字符串转化为ORACLE中的一个日期。TO_DATE(string,'format')。例如:
    输入\输出:
    SQL>selectto_date('2005-08-0309:21:00','yyyy-mm-ddhh24:mi:ss')fromdual;TO_DATE('2005-08-0309:21:00','-----------------------------2005-08-039:21:00
    聚合函数(1.3.5聚合函数(5个)
    1.3.5.1COUNT
    该函数将返回满足WHERE条件子句中记录的个数。例如:SQL>selectcount(*)fromdual;COUNT(*)---------1
    1.3.5.2SUM
    该函数将返回某一列的所有数值的和。例如:SQL>selectsum(病人id)from病人信息;SUM(病人ID)----------25
    1.3.5.3AVG
    AVG可以返回某一列的平均值。例如:SQL>selectavg(实收金额)from病人费用记录where门诊标志=1;AVG(实收金额)------------98.67
    1.3.5.4MAX
    MAX(DISTINCT|ALL)求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次。例如:SQL>selectmax(年龄)from病人信息;MAX(年龄)---------第14页共25页
     79
    1.3.5.5MIN
    MIN(DISTINCT|ALL)求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次。例如:SQL>selectmin(年龄)from病人信息;MIN(年龄)---------4
    分析函数1.3.5分析函数1.3.6其他函数(3个)其他函数(
    1.3.6.1USER
    该函数返回当前使用数据库的用户的名字。例如:SQL>selectuserfromdual;USER------------------ZLHIS
    1.3.6.2NVL
    该函数转换NVL值,数据类型必须匹配数据类型必须匹配:例如:NVL(实收金额,0)NVL(填制日期,‘2005-08-03')NVL(开单人,‘无名氏')SQL>selectdistinct(nvl(开单人,'无名氏'))开单人from病人费用记录where门诊标志=1and开单人isnull;开单人---------无名氏
    1.3.6.3DECODE
    DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数解释:IFAA=V1THENRETURNR1IFAA=V2THENRETURNR2..…ELSERETURNNULL
    第15页共25页
     例如:decode(收费细目,'西药费','药费','成药费','药费','草药费','药费',收费细目)
    常用的分组函数:1.4常用的分组函数:
    1.4.1GROUPBY子句的使用
    SQL无法把正常的列和汇总函数结合在一起,这时就需要GROUPBY子句。它可以对SELECT对的结果进行分组后在应用汇总函数总函数。例如:的结果进行分组后在应用汇总函数SQL>select,sum(实收金额)from病人费用记录whererownum<7groupby;SUM(实收金额)--------------------------------秉仁3.11杜子滕3.5李卫国70毛鸭鸭3.5王复玉2赵卫生16rowsselected
    1.4.2HAVING子句的使用
    HAVING子句允许你将汇总函数汇总函数作为条件,使用在查询语句中。HAVING子句为一组记录设置汇总函数查询的条件,通常having子句允许用户指定对一个记录组的搜索条件。而通常的where查询条件只针对单记录,不针对记录组例如:select,sum(实收金额)from病人费用记录whererownum<20groupbyhavingsum(实收金额)>2;SUM(实收金额)--------------------------------秉仁3.11杜子滕3.5李卫国70毛鸭鸭3.54rowsselected
    第16页共25页
     2、Select语句高级应用、
    (多表查询、子查询、嵌套查询、集合操作)2.1多表查询
    2.1.1、多表之间的连接的应用
    多表查询允许你在查询的FROM条件后面跟多个表,然后把表之间的关系在WHERE条件后进行连接,如果没有进行连接,所查询的记录将是所有表记录的笛卡儿乘积记录数。例如:selectA.*from收费项目别名A收费项目目录BwhereA.收费细id=B.IDselect
    2.1.2、外连接
    上面的多边查询我们是定的等值连接,而在实际应用过程中,我们可能需要列出一个表的全部记录,如我们做报表的时候需要把所有的部门都显示出来,于是我们引入外连接技术,通过在等式连接的一边加上(+)来表示外连接,(+)放在取全部记录的表的另一边。例子:selectA.名称,SUM(B.结帐金额)as结帐金额from部门表A,病人费用记录BwhereA.ID=B.病人科室ID(+)AND登记时间>sysdate-2groupbya.名称
    2.2子查询
    可以将子查询(assubquery)或in或exists当成where的一个条件的一部分,这样的查询称为子查询.where中可以包含一个select语句的子查询.where中可以包含in,exists语句.最多可以嵌套16层.层次过多会影响性能例如:select*from收费项目别名where收费细idin(selectidfrom收费项目目录)selectselect
    2.3嵌套查询
    select查询语句里可以嵌入select查询语句,称为嵌套查询。嵌套查询实际上也是子查询。例子:selectrownumas序号,药品名称,实际数量from(selectA.名称as药品名称,SUM(nvl(b.实际数量,0))AS实际数量from收费项目目录A,药品库存BWHEREA.ID=B.药品IDgroupbya.名称orderby实际数量)
    第17页共25页
     2.4集合操作
    集合查询有UNION,INTERSECT及MINUSMINUS。UNION表示求两个查询的合集,会去掉重复的记录,如果重复的记录也需要这用UNIONALL连接符,注意注意连接的两个查询必须要有相同类型查询字段。注意INTERSECT表示返回查询结果中相同的部。。MINUS表示返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。例子:SELECT库房ID,药品ID,可用数量FROM药品库存where库房ID=52AND可用数量<>0and药品
    ID=1UNIONSELECT库房ID,药品ID,可用数量FROM药品库存where库房ID=53AND可用数量<>0and药品ID=1;查询结果为:库房ID药品ID可用数量-----------------------------521-24531-3094把UNION换成INTERSECT后的结果为没有记录。把UNION换成MINUS后的结果为第一个查询的记录:库房ID药品ID可用数量-----------------------------521-24
    2.5两种优化表查询的方法:2.5两种优化表查询的方法:
    1、表的查询顺序(针对多表查询)表的查询顺序(针对多表查询)ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表drivingtable)将被最先处理。在FROM子句中包含多个表的情况下,基础表你必须选择记录条数最少的表作为基础表。当ORACLE处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。例如:表TAB116,384条记录表TAB21条记录选择TAB2作为基础表(最好的方法)selectcount(*)fromtab1,tab2执行时间0.96秒选择TAB2作为基础表(不佳的方法)selectcount(*)fromtab2,tab1执行时间26.09秒如果有3个以上的表连接查询,那就需要选择交叉表交叉表(intersectiontable)作为交叉表基础表,交叉表是指那个被其他表所引用的表。
    第18页共25页
     例如:EMP表描述了LOCATION表和CATEGORY表的交集。SELECT*FROMLOCATIONL,CATEGORYC,EMPEWHEREE.EMP_NOBETWEEN1000AND2000ANDE.CAT_NO=C.CAT_NOANDE.LOCN=L.LOCN将比下列SQL更有效率SELECT*FROMEMPE,LOCATIONL,CATEGORYCWHEREE.CAT_NO=C.CAT_NOANDE.LOCN=L.LOCNANDE.EMP_NOBETWEEN1000AND20002、不是用IN用EXISTS替代IN在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS(或NOTEXISTS)通常将提高查询的效率。低效:SELECT*FROMEMP(基础表)WHEREEMPNO>0ANDDEPTNOIN(SELECTDEPTNOFROMDEPTWHERELOC=‘MELB’)高效:SELECT*FROMEMP(基础表)WHEREEMPNO>0ANDEXISTS(SELECT‘X’FROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC=‘MELB’)用NOTEXISTS替代NOTIN在子查询中,NOTIN子句将执行一个内部的排序和合并。无论在哪种情况下,NOTIN都是最低效的(因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOTIN,我们可以把它改写成外连接(OuterJoins)或NOTEXISTS。例如:SELECT…FROMEMPWHEREDEPT_NONOTIN(SELECTDEPT_NO
    第19页共25页
     FROMDEPTWHEREDEPT_CAT=’A’);为了提高效率,改写为:(方法一:高效)SE
    LECT….FROMEMPA,DEPTBWHEREA.DEPT_NO=B.DEPT(+)ANDB.DEPT_NOISNULLANDB.DEPT_CAT(+)=‘A’(方法二:最高效)SELECT….FROMEMPEWHERENOTEXISTS(SELECT‘X’FROMDEPTDWHERED.DEPT_NO=E.DEPT_NOANDDEPT_CAT=‘A’);
    2.6行列转换
    3.DML语句
    数据操纵语言(DML)语句,用来在数据库中操纵各种对象,检索和修改数据,这些语句包括INSERT、UPDATE、DELETE等。SQLInsertDeleteUpdateSelectCommitworkRollback命令功能增加数据行到表从表中删除数据行更改表中数据从表或视图中检索数据行把当前事务所做的更改永久化(写入磁盘)作废上次提交以来的所有更改
    3.1
    Insert语句
    从字面意思久可以看出来insert是往数据表里插入记录的语句。语法:INSERTINTO表名(字段名1,字段名2,……)VALUES(值1,值2,……);表名(
    第20页共25页
     表名(INSERTINTO表名(字段名1,字段名2,……)SELECT字段名1,字段名2,……FROM另外的表名;外的表名;注意:1、字符串类型的字段值必须用单引号括起来,例如:‘GOODDAY’2、如果字段值里包含单引号’需要进行字符串转换,我们把它替换成两个单引号''.3、字符串类型的字段值超过定义的长度会出错,最好在插入前进行长度校验.4、INSERT时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。5、INSERT时如果要用到从1开始自动增长的序列号,应该先建立一个序列号CREATESEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENTBY1STARTWITH1MAXVALUE99999CYCLENOCACHE;其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999INSERT语句插入这个字段值为:序列号的名称.NEXTVAL序列号的名称.NEXTVAL例如:1、插入人员表一条记录insertinto人员表(编号,,性别,年龄)values('001','张三','男','是');2、往病案的部门表中插入标准版中的部门表信息:insertinto部门表(id,上级id,编号,名称,简码,位置,建档时间,撤档时间)(selectid,上级id,编码编号,名称,简码,位置,建档时间,撤档时间fromzlhis.部门表)
    3.2
    Update语句
    UPDATE的作用是修改数据表里记录的语句。语法:1=值2=值条件;UPDATE表名SET字段名1=值1,字段名2=值2,……WHERE条件;注意:1、如果修改的值N没有赋值或定义时,将把原来的记录内容清为NULL,最好在修改前进行非空校验;2、值N超过定义的长度会出错,最好在插入前进行长度校验。3、以上SQL语句对表都加上了行级锁,确认完成后,必须加上事物处理结束的命令COMMIT才能正式生效,否则改变不一定写入数据库。如果想撤回
    这些操作,可以用命令ROLLBACK复原.4、在运行INSERT,DELETE和UPDATE语句前最好估算一下可能操作的记录范围,应该把它限定在较小(一万条记录)范围内,.否则ORACLE处理这个事物用到很大的回退段。5、程序响应慢甚至失去响应.如果记录数上十万以上这些操作,可以把这些SQL语句分段分次完成,其间加上COMMIT确认事物处理。例如:Update人员表set年龄=28where=’张三’;
    3.3
    Delete语句
    DELETE的作用是删除数据表里记录的语句。
    第21页共25页
     语法:条件;DELETEFROM表名WHERE条件;注意:1、删除记录并不能释放ORACLE里被占用的数据块表空间.它只把那些被删除的数据块标成unused。2、如果确实要删除一个大表里的全部记录,可以用TRUNCATE命令,它可以释放占用的数据块表空间TRUNCATETABLE表名;此操作不可回退。例如:deletefrom人员表where=’张三’;
    4.DDL语句
    数据定义语言(DDL)语句,用来执行数据库的任务,创建数据库以及数据库中的各种对象,这些语句包括CREATE、ALTER、DROP等语句。
    SQLAlterprocedureAltertableAnalyzeAltertableaddconstraintCreatetableCreateindexDropindexDroptableGrantTruncateRevoke命令功能重编译存储过程增加表列、重定义表列、更改存储分配收集数据库对象的性能统计值并送入基于代价的优化器在已有的表上增加约束创建表创建索引删除索引删除表将权限或角色授予用户或其他角色删除表中所有行从用户或数据库角色回收权限
    4.1Create语句
    CREATE(创建表,索引,视图,同义词,过程,函数,数据库链接等)约定说明:ORACLE常用的字段类型有CHAR固定长度的字符串VARCHAR2可变长度的字符串NUMBER(M,N)数字型M是位数总长度,N是小数的长度DATE日期类型
    第22页共25页
     1、创建表时要把较小的不为空的字段放在前面,可能为空的字段放在后面2、创建表时可以用中文的字段名,但最好还是用英文的字段名3、创建表时可以给字段加上默认值,例如DEFAULTSYSDATE,这样每次插入和修改时,不用程序操作这个字段都能得到动作的时间4、创建表时可以给字段加上约束条件;例如不允许重复UNIQUE,关键字PRIMARYKEY
    4.1.1表
    语法:createtabletable_name(column1datatype[notnull][notnullprimarykey],createtable_name(column1column2datatype[notnull],..)datatype-资料的格式notnull-不可以允许资料有空的primarykey-是本表的主键例如:createtable人员表(varchar2(10),年龄integer);
    4.1.2索引
    语法:create[unique]indexindex_nameontable_name(column_name);create(column_name)n_name);例如:CREATEINDEX人员表_IX_on人员表(姓
    名);
    4.1.3视图
    语法:CreateOrReplaceViewview_nameAs(column)CreateOrReplaceView病人信息As(select,年龄from人员表)
    4.1.4用户
    语法:CREATEUSERuser_nameINDENTIFIEDBYpassword;CREATEpassword;例如:createuserzlhisidentifiedbyhis;
    4.2
    Alter语句
    4.2.1表
    语法:改变表的名称ALTERTABLE表名1TO表名2;在表的后面增加一个字段.(没有删除一个字段的用法)字段名描述;ALTERTABLE表名ADD字段名字段名描述;修改表里字段的定义描述字段名描述;ALTERTABLE表名MODIFY字段名字段名描述;把表放在或取出数据库的内存区ALTERTABLE表名CACHE;ALTERTABLE表名NOCACHE;例如:altertable人员表add地址varchar(100);--在实际应用中不能有column关键字
    4.2.2索引
    语法:alterindexindex_name[storage-clause][initrans整数][maxtrans整数];alter[storage整数][maxtrans整数]rebuild;alterindexindex_namerebuild;
    第23页共25页
     例如:ALTERINDEX人员表_IX_STORAGE(NEXT512KMAXEXTENTSUNLIMITED);ALTERINDEX人员表_IX_REBUILD;
    4.2.3约束
    语法:增加约束ALTERTABLEALTERTABLE失效约束ALTERTABLE启用约束ALTERTABLE修改约束:ALTERTABLE例如:altertableCONSTRAINT(字段名字段名);表名ADDCONSTRAINT约束名PRIMARYKEY(字段名);(字段名字段名);表名ADDCONSTRAINT约束名UNIQUE(字段名);表名DISABLE约束名[CASCADE]表名ENABLECONSTARAINT约束名表名MODIFYCONSTARAINTENABLE约束名[CASCADE]人员表addconstraint人员表_uq_unique();
    4.2.4用户
    语法:ALTERUSERuser_nameINDENTIFIEDBYpassword;ALTERpassword;例如:alteruserzlhisidentifiedbyhis;
    4.3Drop语句
    删除表droptable表名删除索引dropindex索引名删除用户dropuser用户名例如:droptable人员表;dropindex人员表;--删除时需要指明table或index关键字Dropuserzlhis;
    5.DCL语句
    数据控制语言(DCL)语句,用来进行安全性管理,可以确定哪些用户可以查看或者修改数据,这些语句包括GRANT、DENY、REVOKE等语句。
    5.1Grant语句
    GRANT的作用是赋于权限:常用的系统权限集合有以下三个:CONNECT(基本的连接),RESOURCERESOURCE(程序开发),DBADBA(数据库管理);CONNECT常用的数据对象权限有以下六个:ALLON数据对象名,SELECTON数据对象名,UPDATEON数据对象名,DELETEON数据对象名,INSERTON数据对象名,ALTERON数据对象名
    第24页共25页
     例如:用户名;GRANTCONNECT,RESOURCETO用户名用户名;GRANTSELECTON表名TO用户名GRANTSELECT,INSERT,DELETEON表名TO用户名1,用户名2;GRNATDBATOZLHIS;
    5.2Revoke语句
    REVOKE的作用是回收权限:例如:用户名;REVOKECONNECT,RESOURCEF
    ROM用户名用户名REVOKESELECTON表名FROM用户名;REVOKESELECT,INSERT,DELETEON表名FROM用户名1,用户名2;REVOKEDBAFROMZLHIS;
    第25页共25页
    
    
  • 下一篇资讯: sql常见语句
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师