已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL学习心得范文 SQL(Structured QueryLanguage)-结构化查询语言SQL是在关系数据库中执行数据操作,检索,维护所使用的标准语言,可以用来查询数据,操作数据,定义数据,控制数据执行SQL语句时用户只需要知道其逻辑含义,而不需要知道SQL语句的具体执行步骤。 -数据库对象通常包含表,视图,索引,序列【数据定义语言DDL】-表结构Data DefinitionLanguage,用于建立,修改,删除数据库对象,不需要事务的参与,自动提交。 不需要事务的参与,自动提交。 CREATE创建表或其他对象的结构CREATE TABLEtable_name(column_name datatypeDEFAULT expr,);CREATE TABLEtable_name(column_name datatypeDEFAULT expr,);Eg-创建表emp CREATE TABLE emp(id NUMBER(10,),name VARCHAR2(20,),gender CHAR(11,),birth DATE,salary NUMBER(66,22,),job VARCHAR2(30,),deptid NUMBER( (22););ALTER修改表或其他对象的结构修改表名RENAME old_name TOnew_name(新表名不能使数据库中已有的表)增加列ALTER TABLEtable_name ADD(column_name datatypeDEFAULT,);(column_name datatypeDEFAULT,);(新增列只能在表的最后一列追加)删除列(新增列只能在表的最后一列追加)删除列ALTER TABLEtable_name DROP(column_name);(column_name);(删除不需要的列)删除字段需要从每行中删掉该字段占据的长度和数据,并释放在数据块中占据的空间,如果表记录比较大,删除字段可能需要比较长的时间。 修改列ALTER TABLEtable_name MODIFY(column_name datatypeDEFAULT,);(column_name datatypeDEFAULT,);(修改仅对以后插入的数据有效,修改字段前的所有数据不受影响)(修改仅对以后插入的数据有效,修改字段前的所有数据不受影响)修改时一般类型不改,改长度,尽量往长里改,因为如果表中已经有数据的情况下,把长度由大改小,有可能不成功DROP:删除表或其他对象的结构DROP TABLEtable_nameTRUNCATE删除表数据,保留表结构TRUNCATE TABLEtable_name可以通过DESC table_name查看表结构【数据操作语言DML】-表结构中的数据Data ManipulationLanguage,用于改变数据表中的数据,和事务是相关,执行完DML操作后必须经过事务控制语句提交后才真正的将改变应用到数据库中和事务是相关,执行完DML操作后必须经过事务控制语句提交后才真正的将改变应用到数据库中INSRET将数据插入到数据表中INSERT INTOtable_name(column,column)VALUES(value,value);(每执行一次增加一条记录)指定向哪些列插入对应的值,没有指定的列若设有默认值(DEFAULT),那么插入的就是该默认值,否则插入null,指定向哪些列插入对应的值,没有指定的列若设有默认值(DEFAULT),那么插入的就是该默认值,否则插入null,若某列设为not null,执行INSERT语句时又没指定该列,那么插入会抛出违反不为空的约束条件,若某列设为not null,执行INSERT语句时又没指定该列,那么插入会抛出违反不为空的约束条件,若不写指定的列,默认所有列插入,每一列的值VALUE都不能少若不写指定的列,默认所有列插入,每一列的值VALUE都不能少UPDATE:更新数据表中已存在的数据UPDATE:更新数据表中已存在的数据UPDATE table_name SETcolumn=value,column=valueWHERE condition;column=value,column=valueWHERE condition;-若不写where子句,全表所有行的column都被更新DElETE删除表中的数据DELETEFROMtable_nameWHERE condition;table_nameWHERE condition;-若不写where子句,全表所有行数据都被删除另注意与DDL中的TRUNCATE的区别*二者都是删除表记录,DELETE可以有条件的删(WHERE),TRUNCATE是将表数据全部删除*DELETE是DML,可以回退(ROLLBACK),TRUNCATE是DDL,立即生效,无法回退*如果删除的是全部表记录,且数据量较大,TRUNCATE速度更快【事务控制语言TCL】【事务控制语言TCL】Transaction ControlLanguage,用来维护数据的一致性MIT提交,确认已经进行的数据改变ROLLBACK回滚,取消已经进行的数据改变SAVEPOINT保存点,使当前事务可以回退到指定的保存点,便于取消部分改变MIT提交,确认已经进行的数据改变ROLLBACK回滚,取消已经进行的数据改变SAVEPOINT保存点,使当前事务可以回退到指定的保存点,便于取消部分改变Eg DDL范畴,控制表结构不需要TCL参与,自动提交DML,范畴,控制表结构中的数据经经TCL,确认后,才会真正生效,否则是“假象”【数据控制语言DCL】Data ControlLanguage,用于执行权限的授予和收回操作GRANT授予,用于给用户或角色授予权限REVOKR用于回收用户或角色已有的权限CREATE USER创建用户用于执行权限的授予和收回操作GRANT授予,用于给用户或角色授予权限REVOKR用于回收用户或角色已有的权限CREATE USER创建用户【数据查询语言DQL】【数据查询语言DQL】Data QueryLanguage,用来查询需要的语句补充知识点补充知识点数据类型定义表中每一列可以使用的数据格式和范围,用来保证数据类型的格式和有效性数据类型定义表中每一列可以使用的数据格式和范围,用来保证数据类型的格式和有效性?字符串操作Oracle中的字符串是用单引号()括起来的,注意与Java的区别1.字符串类型CAHR,VARCHAR2表示字符串数据类型,用来在表中存放字符串信息几点说明在数据库中CHAR,VARCHAR表示的是字符串,注意与java的区别CHAR(N),VARCHAR2(N)指定的是字节数,不是字符数VARCHAR2是Oracle独有的数据类型,和其他数据库中的VARCHAR作用一样,加2是Oracle为以后新增一个字符类型,而又不改变原有VARCHAR定义的长远考虑LONGVARCHAR2的加长版,也是存储变长字符串,最多可达2GB的字符串数据,LONG有诸多限制每张表只能有一个LONG类型列;不能作为主键;不能建立索引;不能出现在查询条件中CLOBLONG的改进版,存储定长或变长字符串,最多可达4GB的字符串数据,Oracle建议用CLOB替代LONG VARCHAR2的加长版,也是存储变长字符串,最多可达2GB的字符串数据,LONG有诸多限制每张表只能有一个LONG类型列;不能作为主键;不能建立索引;不能出现在查询条件中CLOBLONG的改进版,存储定长或变长字符串,最多可达4GB的字符串数据,Oracle建议用CLOB替代LONG EgUTF-8环境下varchar2英文占1个字节,中文占3个字节,nvarchar2英文占2个字节,中文占2个字节GBK环境下varchar2英文占1个字节,中文占2个字节,nvarchar2英文占1个字节中文占3个字节2.字符串函数【补充】虚表dual的概念在数据库中,我们想要测试某个表达式的结果只能使用SELECT语句来实现DUAL,虚表,没有这么一个表,只是为了满足SELECT的语法要求我们常用虚表来测试表达式的结果当SELECT后没有一张表的字段参与时,FROM后就用虚表a:CONCAT(char1,char2):返回2.字符串函数【补充】虚表dual的概念在数据库中,我们想要测试某个表达式的结果只能使用SELECT语句来实现DUAL,虚表,没有这么一个表,只是为了满足SELECT的语法要求我们常用虚表来测试表达式的结果当SELECT后没有一张表的字段参与时,FROM后就用虚表a:CONCAT(char1,char2):返回char1和char2连接后的结果相当于Java中的“+”等价操作的结果相当于Java中的“+”等价操作连接操作符“|”CONCAT的参数只能有两个,若多个字符串CHAR连接,需嵌套使用,如果char1和char2任何一个,若多个字符串CHAR连接,需嵌套使用,如果char1和char2任何一个为NULL,相当于连接了一个接了一个空格SELECT CONCAT(I,CONCAT(LIKE,Oracle)FROM dualSELECTI|LIKE|OracleFROM dualSELECT CONCAT(I,CONCAT(LIKE,Oracle)FROM dualSELECTI|LIKE|OracleFROM dualb:LENGTH(char)获取字符串的长度(字符个数)若字符类型是VARCHAR2,返回字符的实际长度若字符类型是CHAR,长度还有包括补充的空格b:LENGTH(char)获取字符串的长度(字符个数)若字符类型是VARCHAR2,返回字符的实际长度若字符类型是CHAR,长度还有包括补充的空格SELECT ename,LENGTH(ename)FROM emp_yys SELECT ename,LENGTH(ename)FROM emp_yys c:UPPER(char)字符串转大写c:UPPER(char)字符串转大写SELECT upper(asfadg)FROM dualSELECT upper(asfadg)FROM duald:LOWER(char)字符串转小写d:LOWER(char)字符串转小写SELECT lower(asAAAS)FROM dualSELECT lower(asAAAS)FROM duale:INITCAP(char)将字符串中每个单词的首字母转大写,其他字符小写,单词之间用空格或非字母分隔e:INITCAP(char)将字符串中每个单词的首字母转大写,其他字符小写,单词之间用空格或非字母分隔SELECT initcap(as%NGSY isaT)FROM dualf:TRIM(c2FROM c1)去掉字符串c1两侧的t2g:LTRIM(c1,c2)从c1的左侧截去c2h:RTRIM(c1,c2)从c1的右侧截去c2f:TRIM(c2FROM c1)去掉字符串c1两侧的t2g:LTRIM(c1,c2)从c1的左侧截去c2h:RTRIM(c1,c2)从c1的右侧截去c2注TRIM,LTRIM,RTRIM中,如果没有c2,就截去空格TRIM的的c2只能是单一字符,LTRIM,RTRIM中的c2,可以是多字符,且多字符不管顺序,只要出现就截若若c1中不包含c2,则无法截取,原样输出c1在在LTRIM,RTRIM中,若c2不是c1的最左/右端,则无法截取,原样出输出c1SELECT TRIM(1FROM1sd1)FROM dualSELECT TRIM(1FROM1sd1)FROM dualSELECT LTRIM(eaaeeeehaha,ae)FROM dualSELECT RTRIM(aaahaha,o)FROM dualSELECT RTRIM(aaahaha,o)FROM duali:LPAD(原字符串,总长度,填充字符串)左补齐j:RPAD(原字符串,总长度,填充字符串)右补齐i:LPAD(原字符串,总长度,填充字符串)左补齐j:RPAD(原字符串,总长度,填充字符串)右补齐要求显示N个字符,若char1的值不足长度,则在L/R补充若干个char2,以达到N个字符,不够则补,刚好则原样,超了则择取到N(都是从左右读取(截取)字符,像计算器看到从右左的效果,只是在左右读取时加空格显示的效果)要求显示N个字符,若char1的值不足长度,则在L/R补充若干个char2,以达到N个字符,不够则补,刚好则原样,超了则择取到N(都是从左右读取(截取)字符,像计算器看到从右左的效果,只是在左右读取时加空格显示的效果)SELECT LPAD(haha,10,OK)FROM dualSELECT LPAD(haha,10,OK)FROM dualSELECT RPAD(yys,20,very good)FROM dualSELECT RPAD(yys,20,very good)FROM dualk:SUBSTR(char,m,n)将字符串char从第m开始,获取n个长度大小的子字符串,在oracle中k:SUBSTR(char,m,n)将字符串char从第m开始,获取n个长度大小的子字符串,在oracle中字符串的下标从1开始说明m若果说明m若果m=0,则从首字符开始,m为负数,则从尾部开始(从后往前,-3,-2,-1),倒数第m个,向后获取n个字符倒数第m个,向后获取n个字符n如果没有设置n,或者n的长度超过了char的长度,则取到,则取到字符串末尾为止SELECT SUBSTR(abcde,2,8)FROM DUALSELECT SUBSTR(abcde,2,8)FROM DUALSELECT SUBSTR(abcde,-3,2)FROM DUALSELECT SUBSTR(abcde,-3,2)FROM DUALl:INSTR(char1,char2,,n,m:返回字符串char2在源字符串char1中的位置l:INSTR(char1,char2,,n,m:返回字符串char2在源字符串char1中的位置n,从第几个字符开始找不写默认从第一个开始找n,从第几个字符开始找不写默认从第一个开始找n为负数,从后开始计数,且往前找,注意与SUBSTR的区别(SUBSTR是从后开始计数,往后截取)n为负数,从后开始计数,且往前找,注意与SUBSTR的区别(SUBSTR是从后开始计数,往后截取)m,指定第m次出现不写默认第一次出现如果在char1中没有找到子串char2,返回0m,指定第m次出现不写默认第一次出现如果在char1中没有找到子串char2,返回0n不能为负数,否则会报错,否则会报错其实找子字符串只是看字符串的第一个字符SELECT INSTR(abc abc abc,abc)FROM DUALSELECT INSTR(abc abc abc,abc)FROM DUALSELECT INSTR(abc abc abc,abc,6)FROM DUALSELECT INSTR(abc abc abc,abc,6)FROM DUALSELECT INSTR(abc abcabc,abc,1,3)FROM DUALSELECT INSTR(abcabcabc,abc,1,3)FROM DUALSELECT INSTR(abcabcabc,abc,-3,2)FROM DUALSELECT INSTR(abcabcabc,abc,-3,2)FROM DUAL充分说明了,找子字符串只是看字符串的第一个字符,往前找前提是必须是abc,abcd就不包含在源字符串中会返回0找子字符串只是看字符串的第一个字符,往前找前提是必须是abc,abcd就不包含在源字符串中会返回0m:REPLACE(char,m,*)将字符串char中的m,替换成*,注意replace不会替换原始字符串,仅影响显示结果m:REPLACE(char,m,*)将字符串char中的m,替换成*,注意replace不会替换原始字符串,仅影响显示结果SELECT REPLACE(abcabcabc,b,*)FROM DUAL?数值操作1.数值类型1.数值类型NUMBER(p,s)用来在表中存放数值类型的数据p表示数字的总位数,取值为1-38,不写(NUMBEE(*,s),p默认为38s表示小数点后面的位数,不写,s只有p表示纯整数整数部分开头有再多的0,只要除去开头的0不超过p-s就OK小数部分结尾有再多的0,只要除去结尾的0不超过s就OK NUMBER(p,s)用来在表中存放数值类型的数据p表示数字的总位数,取值为1-38,不写(NUMBEE(*,s),p默认为38s表示小数点后面的位数,不写,s只有p表示纯整数整数部分开头有再多的0,只要除去开头的0不超过p-s就OK小数部分结尾有再多的0,只要除去结尾的0不超过s就OK2.数值函数a:ROUND(要处理的数字m,小数位数n)对数字进行四舍五入*n必须是整数,为正数,四舍五入到小数点后n位为0,四舍五入到整数位,n缺省,默认为0为负数,四舍五入到小数点前n位2.数值函数a:ROUND(要处理的数字m,小数位数n)对数字进行四舍五入*n必须是整数,为正数,四舍五入到小数点后n位为0,四舍五入到整数位,n缺省,默认为0为负数,四舍五入到小数点前n位n为0,保留到个位,看小数点后一位n为-1,保留到十位,看个位n为-2,保留到百位,看十位n为0,保留到个位,看小数点后一位n为-1,保留到十位,看个位n为-2,保留到百位,看十位SELECT ROUND(45.678,2)FROM dualSELECT ROUND(45.678,2)FROM dualSELECT ROUND(45.678)FROM dualSELECT ROUND(45.678)FROM dualSELECT ROUND(43455.678,-3)FROM dualSELECT ROUND(43455.678,-3)FROM dualb:TRUNC(m,n)按位截取数字m m,n含义与ROUND的m,n一样,只不过,b:TRUNC(m,n)按位截取数字m m,n含义与ROUND的m,n一样,只不过,只舍不进位SELECT trunc(45.678,2)FROM dualSELECT trunc(45.678,2)FROM dualSELECT TRUNC(45.678,-1)FROM dualSELECT TRUNC(45.678,-1)FROM dualc:CEIL(n)上取整天花板,大于等于n的最小整数n的最小整数SELECT CEIL(3248.999)FROM DUALSELECT CEIL(3248.999)FROM DUALd:FLOOR(n)下取整地板,小于d:FLOOR(n)下取整地板,小于等于n的最大整数n的最大整数SELECT floor(34564.4343)FROM DUALSELECT floor(34564.4343)FROM DUALe:MOD(m,n)取m/n的余数,n若为0,直接返回m e:MOD(m,n)取m/n的余数,n若为0,直接返回m SELECTmod(9,0)FROM dual?日期操作Oracle中的字符串是用单引号()括起来的,注意与Java的区别1.日期类型Date年月日时分秒,占7字节1.日期类型Date年月日时分秒,占7字节保存日期和时间,能表示的日期范围公元前4712年1月1日公元9999年12月31日TIMESTAMP(timestamp)年月日时分秒.小数秒最高精度可达纳秒(ns)占7TIMESTAMP(timestamp)年月日时分秒.小数秒最高精度可达纳秒(ns)占7或者11字节11字节CREATE TABLE test_1(C1DATE,C2TIMESTAMP);CREATE TABLEtest_1(C1DATE,C2TIMESTAMP);2.日期关键字SYSDATE,其本质就是一个Oracle内部的函数,返回当前系统时间,精确到秒默认显示格式DDMONRR2.日期关键字SYSDATE,其本质就是一个Oracle内部的函数,返回当前系统时间,精确到秒默认显示格式DDMONRR CREATETABLEtest_2(registerDate DATEDEFAULT SYSDATE);CREATETABLEtest_2(registerDate DATEDEFAULT SYSDATE);column typedefuult exprSELECT SYSDATEFROM DUALSELECT SYSDATEFROM DUALSYSTIMESTAMP,返回当前系统时间,精确到毫秒SYSTIMESTAMP,返回当前系统时间,精确到毫秒SELECT systimestampFROM DUALSELECT systimestampFROM DUAL3.日期转换函数*TO_DATE(要转换的字符串,转换格式,指定的日期语言)将字符串按照指定格式转换为日期类型xxx-xx-xxxxxx/xx/xxxxxx年xx”月”装换格式是按习惯自行编写的,是字符串所以用单引号括起来,若中间非关键字或符号的其他字符时,在把这些字符双引号括起来Egyyyy“年”mm“月”dd“日”在日期格式字符串中大小写不区分,其他字符串中大小写区分转化格式的代词SELECT TO_DATE(xx年09月14,YYYY年MM月DD)FROM dualSELECT TO_DATE(xx年09月14,YYYY年MM月DD)FROM dual说明1.实际上已经按照D YYYY年MM月DD的日期格式,只不过Oracle的控制台输出格式为的日期格式,只不过Oracle的控制台输出格式为DDMONRR2.需要转换的字符串里出现的非符号字符时,不需要再加“”,只有2.需要转换的字符串里出现的非符号字符时,不需要再加“”,只有转换格式字符串中出现的非关键字或符号的其他字符时,才把这些字符用双引号括起来*TO_CHAR(data,转换格式,指定的日期语言)TO_CHAR(data,转换格式,指定的日期语言)将日期类型数据data按照装换格式输出字符串将日期类型数据data按照装换格式输出字符串SELECT TO_CHAR(sysdate,YYYY年MM月DD日HH24:MI:SS)FROM dualSELECT TO_CHAR(sysdate,YYYY年MM月DD日HH24:MI:SS)FROM dual4.日期常用函数aLAST_DAY(data):返回给定日期date所在月的最后一天4.日期常用函数aLAST_DAY(data):返回给定日期date所在月的最后一天SELECT LAST_DAY(to_date(xx年9月14日,YYYY年MM月DD日)FROM DUALSELECT LAST_DAY(to_date(xx年9月14日,YYYY年MM月DD日)FROM DUALbNEXT_DAY(date,char)给定日期离给定日期最近的下一个星期几(char决定)中文环境下,char可写成星期三英文环境下,char可写成WEDNESDAY字为避免麻烦,可直接使用数字1-7表示周日-周六SELECT NEXT_DAY(SYSDATE,星期三)FROM DUAlSELECT NEXT_DAY(SYSDATE,星期三)FROM DUAlSELECT NEXT_DAY(4-9月-14,5)FROM DUALSELECT NEXT_DAY(4-9月-14,5)FROM DUAL说明获取的是距当前时间最近的周四,若给定的时间刚好是周四,及周四以后则获取的是下周周四,周四之前,则获取本周周四注意是按外国的周算一周时间为日一二三四五六cADD_MONYHS(date,i):返回给定日期加上i个月后的日期值cADD_MONYHS(date,i):返回给定日期加上i个月后的日期值i可以是任何数字,大部分时候取正值整数i为小数,会被截取整数后再参与运算i为负数,即减去i个月后的日期值i可以是任何数字,大部分时候取正值整数i为小数,会被截取整数后再参与运算i为负数,即减去i个月后的日期值SElECT ADD_MONTHS(14-9月-14,2.6)FROM DUAlSElECT ADD_MONTHS(14-9月-14,2.6)FROM DUAldate默认格式为DDMONRR所以写14-9月-14dMONTHS_BETWEEN(date1,data2)获取date1和date2之间隔了多少个月是dMONTHS_BETWEEN(date1,data2)获取date1和date2之间隔了多少个月是date1-date2,若果date2比date1的时间晚,会得到负数除非两个日期之间隔整数月,否则结果会带小数,若果date2比date1的时间晚,会得到负数除非两个日期之间隔整数月,否则结果会带小数SELECT months_between(1-1月-14,3-3月-14)FROM DUAlSELECT months_between(1-1月-14,3-3月-14)FROM DUAleLEAST(expr1,expr2,expr3)GREATEST(expr1,expr2,expr3)比较函数,返回结果是参数列表中最大或最小的值eLEAST(expr1,expr2,expr3)GREATEST(expr1,expr2,expr3)比较函数,返回结果是参数列表中最大或最小的值参数类型必须一致,或可转(在比较之前,参数列表的第二个参数会被自动转换为第一个参数的数据类型,可以转,则继续比较,不可以转报错)(在比较之前,参数列表的第二个参数会被自动转换为第一个参数的数据类型,可以转,则继续比较,不可以转报错)SELECT LEAST(22,99.9)FROM DUALSELECT LEAST(22,99.9)FROM DUALSELECT greatest(sysdate,1-1月-14)FROM DUAlSELECT greatest(sysdate,1-1月-14)FROM DUAlfEXTRACT(date FROMdatetime):从参数datetime中提取参数date指定的数据,比如extract(year/month/day from日期变量)fEXTRACT(date FROMdatetime):从参数datetime中提取参数date指定的数据,比如extract(year/month/day from日期变量)SELECT extract(MINUTE FROMSYSTIMESTAMP)FROM DUAlSELECT extract(MINUTE FROMSYSTIMESTAMP)FROM DUAl?空值操作*数据类型或暂时不存在*是数据库中字段无论是什么类型,默认值都是NULL*了若使用了DAFAULT关键字指定了默认值,则使用指定的*在创建表的时候,可以为列添加非空约束,被约束的列在插入数据时必须给值,更新数据时,不能将该列的值设为空*DAFULT和和NOT NULL不约束同一字段*判断是否为空,不能写=null要写IS NULL值插入值INSERT,更新(UDATE)时,可以写column=null*NULL和任何数字运算结果还是NULL空值函数NVL(expr1,expr2):若若expr1为空,则取expr2的值管(不管expr2是否为空eg NVL(null,null)结果为null)若若expr1不为空,则还是expr1,expr2没用expr1和和expr2可以是任何数据类型,但这两个参数的类型必须一致SELECT NVL(1,8)FROM DUAlSELECT NVL(null,Good)FROM DUALSELECT NVL(null,Good)FROM DUALNVL2(expr1,expr2,expr3):NVL2(expr1,expr2,expr3):若expr1为NULL,返回expr3若expr1不为NULL,返回expr2若expr1为NULL,返回expr3若expr1不为NULL,返回expr2SELECT NVL2(null,Good,Better)FROM DUALSELECT NVL2(null,Good,Better)FROM DUALSELECT NVL2(YYS,Good,Better)FROM DUALSELECT NVL2(YYS,Good,Better)FROM DUAL【查询语句】SELECTALL|DISTINCT,n4FROM,1WHERE2GROUP BYHAVING3ORDER BYASC|DESC,;5SELECTALL|DISTINCT,n4FROM,1WHERE2GROUP BYHAVING3ORDER BYASC|DESC,;5说明1.其中SELECT和FROM语句为必选子句,其他子句为任选子句;2.SELECTALL|DISTINCT,n子句指明查询结果集的目标列。 说明1.其中SELECT和FROM语句为必选子句,其他子句为任选子句;2.SELECTALL|DISTINCT,n子句指明查询结果集的目标列。 是指查询结果集中包含的列名,可以是直接从基本表或视图中投影得到的字段、与字段相关的表达式或数据统计的函数表达式数据统计的函数表达式,目标列还可是常量。 DISTINCT说明要去掉重复的元组数据表中有可能存储相同数据的行,当执行查询操作时,默认情况会显示所有行,当重复数据没有意义需要去掉时,使用DISTINCT实现数据表中有可能存储相同数据的行,当执行查询操作时,默认情况会显示所有行,当重复数据没有意义需要去掉时,使用DISTINCT实现根据单列去重SELECT DISTINCT deptno FROM emp根据多列去重SELECT DISTINCTdeptno,job FROM emp只能是保证这几列的组合是没有重复的,单列值还是有可能重复只能是保证这几列的组合是没有重复的,单列值还是有可能重复SELECT(DISTINCTdeptno),job FROM emp是没有意义的DISTINCT后面要么一列单列去重要么多列几列组合去重不能加括号ALL表示所有满足条件的元组。 (一般不写)查询所有列,SELECT后的使用*代替查询特定列,SELECT后的指定列名若目标列中使用了两个基本表或与视图中相同的列名,要在列名前加表名限定,即使用“”表示。 ALL表示所有满足条件的元组。 (一般不写)查询所有列,SELECT后的使用*代替查询特定列,SELECT后的指定列名若目标列中使用了两个基本表或与视图中相同的列名,要在列名前加表名限定,即使用“”表示。 【补充】(使用表或列的别名改变标题的显示样式)当SELECT中的字段是一个表达式,那么查询出来的结果集中,当前列的列名就是该表达式,这样的可读性差,为此,引入别名来改善当SELECT中的字段是一个表达式,那么查询出来的结果集中,当前列的列名就是该表达式,这样的可读性差,为此,引入别名来改善别名跟在原表名或原列名的后面,中间用空格或或AS关键字隔开若果希望别名区分隔开若果希望别名区分大小写,或别名中包含空格or字符,则必须使用双引号将别名扩起来使用双引号将别名扩起来3.FROM,子句指明要查询的数据哪些基本表或视图。 基本表或视图名间用“,”分隔。 如果查询使用的基本表或视图不在当前DB中,还需要在表或视图前加上DB名加以说明,即使用“.”的形式表示。 如果在查询中需要指明要查询的数据哪些基本表或视图。 基本表或视图名间用“,”分隔。 如果查询使用的基本表或视图不在当前DB中,还需要在表或视图前加上DB名加以说明,即使用“.”的形式表示。 如果在查询中需要一表多用,则每种使用都需要一个表的别名标识,并在各自使用中用不同的基本表别名表示则每种使用都需要一个表的别名标识,并在各自使用中用不同的基本表别名表示。 4.WHERE子句通过条件表达式描述对基本表或视图中元组的选择条件。 【补充】查询条件【补充】查询条件、!或、NOT将它使用的逻辑运算符的意义反转。 如NOT BETWEEN、NOT IN、NOT EXISTS、NOT LIKE、NOT UNIQUE等。 将它使用的逻辑运算符的意义反转。 如NOT BETWEEN、NOT IN、NOT EXISTS、NOT LIKE、NOT UNIQUE等。 OR连接多个查询条件,表示至少有一个查询条件成立。 AND连接多个查询条件,表示所有的查询条件都成立。 AND的优先级高于ORNOTLIKEESCAPENOTLIKEESCAPE当只知道部分信息时,可用LIKE模糊查询(百分号)代表任意长度(长度可能为0)的字符串;_(下划线)代表任意单个字符。 当只知道部分信息时,可用LIKE模糊查询(百分号)代表任意长度(长度可能为0)的字符串;_(下划线)代表任意单个字符。 【注】若要查询的字符串本身就含有“%”或“_”,则需要使用由ESCAPE指定的换码字符。 【注】若要查询的字符串本身就含有“%”或“_”,则需要使用由ESCAPE指定的换码字符。 例如在WHERE子句中的LIKE谓词为例如在WHERE子句中的LIKE谓词为LIKE_ESCAPE(表示以_开始的最后一个字母任意的字符串)(表示以_开始的最后一个字母任意的字符串)NOTIN用于判断值是否(不)属于指定的集合。 用于判断值是否(不)属于指定的集合。 IN等于其中之一NOT IN不等于所有IN等于其中之一NOT IN不等于所有BETWEENAND和NOT BETWEENAND谓词BETWEEN用于判断值是否在给定的两个值之间,注意包括边值。 CJ BETWEEN90AND100等价于CJ90AND CJ100谓词BETWEEN用于判断值是否在给定的两个值之间,注意包括边值。 CJ BETWEEN90AND100等价于CJ90AND CJ100IS NULL和IS NOTNULL用于判断字符串(任何类型属性均可判断)的值是否是空值判断(比较)是否为空,必须使用IS NULL用于判断字符串(任何类型属性均可判断)的值是否是空值判断(比较)是否为空,必须使用IS NULL不能使用=能使用=BMHNULL/error BMHNULL/error BMHNULL/error ANY和ALL条件ANY和ALL条件不能单独使用,需配合比较运算符EgANY大于最小ALL大于最大ANY大于最小ALL大于最大100000000SELECT enameFROM empWHERE ename=UPPER(rose)SELECT enameFROM empWHERE sal*12100000000DBMS处理语句时,以元组为单位,逐个考察每个元组是否满足WHERE子句中给出的条件,将不满足条件的元组筛选掉,所以WHERE子句中的表达式也称为元组的过滤条件。 DBMS处理语句时,以元组为单位,逐个考察每个元组是否满足WHERE子句中给出的条件,将不满足条件的元组筛选掉,所以WHERE子句中的表达式也称为元组的过滤条件。 (比较条件是,数字可引可不引,字符和日期类型的数据,必须用单引号引起)5.GROUP BY子句的作用对象是查询的中间结果表分组方法按指定的一列或多列值分组,值相等的为一组5.GROUP BY子句的作用对象是查询的中间结果表分组方法按指定的一列或多列值分组,值相等的为一组【补充】聚合函数【补充】聚合函数多行数据参与返回一行结果,又称分组函数,集合函数,多行函数可作为列标识符出现在SELECT子句的目标列或HAVING子句的条件中。 可作为列标识符出现在SELECT子句的目标列或HAVING子句的条件中。 查询语句中,若有GROUP BY分组子句,则语句中函数为分组统计函数;若没有GROUP BY分组子句,则语句中函数为全部结果集的统计函数。 查询语句中,若有GROUP BY分组子句,则语句中函数为分组统计函数;若没有GROUP BY分组子句,则语句中函数为全部结果集的统计函数。 聚合函数忽略NULL,所以为了求值的准确性,经常用NVL(null,0)若指定DISTINCT短语,则表示在计算时要取消指定列中的重复值;若不指定DISTINCT短语和ALL短语,则取默认值ALL,表示不取消重复值。 若指定DISTINCT短语,则表示在计算时要取消指定列中的重复值;若不指定DISTINCT短语和ALL短语,则取默认值ALL,表示不取消重复值。 Eg表结构SELECT MAX(sal)max_sal,MIN(sal)sal_min FROM emp_yys SELECTMAX(sal)max_sal,MIN(sal)sal_min FROMemp_yys SELECTAVG(m)avg_sal FROMemp_yys SELECTAVG(m)avg_sal FROMemp_yys计算4个人的m(奖金)注意二者的区别,充分证明略聚合函数忽略NULL SELECTAVG(NVL(m,0)FROMemp_yys SELECTAVG(NVL(m,0)FROMemp_yys计算14个人的m SELECTcount(*)total FROMemp_yys SELECTcount(*)total FROMemp_yys SELECTcount(DISTINCT sal)total FROMemp_yys SELECTcount(DISTINCT sal)total FROMemp_yys只要在SELECT语句中使用了分组函数,那么SELECT中其他非分组函数的列若出现,那么也必须同时出现在GROUP BY子句中,反过来没有限制只要在SELECT语句中使用了分组函数,那么SELECT中其他非分组函数的列若出现,那么也必须同时出现在GROUP BY子句中,反过来没有限制若GROUP BY后出现了多列(如GROUP BY deptno,job)那么就按照这几列组合值相同的记录分为一组若GROUP BY后出现了多列(如GROUP BY deptno,job)那么就按照这几列组合值相同的记录分为一组查看每个部门中每种职位的工资情况HAVING用于在进行分组查询后,二次过滤数据的,HAVING不能独立存在,必须跟在GROUP BY之后HAVING
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七上数学真题大题及答案
- 2025标准合同协议版范本
- 2025年出版低空物流无人机配送网络可靠性研究报告
- 2025年储能系统配置技术指南报告
- 2025年储能系统电磁兼容报告
- 2025年储能电站投资收益评估分析报告
- 2025年储能电站容量扩展性研究报告
- 租用培训班安全协议书
- 营改增甲供材合同范本
- 餐饮承包提点合同范本
- 华为销售团队管理制度
- 2025年上半年甘肃张掖高台县县直机关事业单位选调13人(02号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025-2030全球及中国航空航天风洞试验服务行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- T-CSTM 00455-2021 预涂卷材用粉末涂料
- 电气用电安全知识培训
- 酒店点菜技巧培训
- 2025年心理b证笔试试题及答案
- 2024-2025学年新乡市一中八年级上册期末考试数学试卷(含部分答案)
- 高一上学期统编版(2019)必修中外历史纲要上翻书大赛课件
- 《海南历史文化》课件
- 《初级会计实务》(第五版) 第三章 流动资产
评论
0/150
提交评论