您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > DB2重点解析课件4
CS&TInformationCourseBeyondTechnology1DB2东软信息学院计算机科学与技术系CS&TInformationCourseCS&TInformationCourse本章内容•SQL语言的分类和主要组成部分•DB2中的数据查询–普通查询–OLAP查询•DB2中的数据操纵•DB2中的事务控制•在DB2中使用XQuery语言操纵XML数据。3CS&TInformationCourse4.1SQL语言概述•数据定义语言�DataDefinitionLanguage�DDL�•数据查询语言�DataQueryLanguage�DQL�•数据操纵语言�DataManipulationLanguage�DML�•数据控制语言�DataControlLanguage�DCL�SQL语言的分类4CS&TInformationCourseSQL语言的组成部分一个SQL语句通常由以下部件组成�•数据类型•数据库对象•DB2专用寄存器�SpecialRegister�•例程�Routine�•表达式�Expression�•谓词�Predicate�5CS&TInformationCourseDB2中的标准数据类型•SMALLINT,INT,andBIGINT•FLOAT,REAL,andDOUBLE•DECIMALandNUMERIC•DECFLOAT•CHAR,VARCHAR,andLONGVARCHAR•GRAPHIC,VARGRAPHIC,andLONGVARGRAPHIC•BLOB,CLOB,andDBCLOB•DATE,TIME,andTIMESTAMP.•DATALINK•XML6CS&TInformationCourseSQL语言的执行方式•在DB2中�如果直接在DB2CMD下运行�最好将SQL语句包含在双引号中�这样可以防止操作系统错误地解释特殊字符�比如“*”或者“”�如果不加双引号�则大于号会被解释为输出或重定向�。•正确的运行方法一�C:\db2SELECTname,salaryFROMstaffWHEREsalary2000•正确的运行方法二�先进入DB2交互方式�再运行SQL语句�db2=SELECTname,salaryFROMstaffWHEREsalary2000小贴士�如果SQL语句比较长的话�最好分几行写。例如�可以把SELECT、FROM、WHERE分别写在一行上。在CLP命令模式或交互输入模式下�可以将反斜线字符�\�加上一个空格用作行连续字符。7CS&TInformationCourse4.2数据定义语言•CREATE语句•ALTER语句•DROP语句•DECLARE语句8CS&TInformationCourse•CREATE语句–CREATEDATABASEtestdb1–CREATETABLEtest1(idINTprimarykey,namecarchar(10)notnull)–CREATEUNIQUEINDEXidx1ONtest1(name)–CREATEVIEWview1ASSELECTid,nameFROMtest19CS&TInformationCourse•ALTER语句–ALTERTABLEtest1DROPPRIMARYKEY(id)–ALTERTABLEtest1ACTIVATENOTLOGGEDINITIALLYWITHEMPTYTABLE•DROP语句–DROPTABLEtest1–DROPDATABASEtestdb110CS&TInformationCourse•DECLARE语句–创建一个临时表temp_proj�在执行COMMIT操作时�保留表中的所有行�不记录日志。DECLAREGLOBALTEMPORARYTABLEtemp_proj(projnoCHAR(6),projnameVARCHAR(24),projsdateDATE,projedateDATE,)WITHREPLACEONCOMMITPRESERVEROWSNOTLOGGEDINusertablespace111CS&TInformationCourse4.3简单查询•数据查询概述•SELECT子句•FETCHFIRST子句•空值•条件�单值比较、BETWEEN、LIKE、特殊字符�•CAST表达式•VALUES子句•CASE表达式•DESCRIBE语句•ORDERBY语句•临时表•标量函数12CS&TInformationCourseSELECT子句•SELECT子句的语法如下�–SELECT项目FROM数据对象[WHERE条件]•对象别名SELECTa.empno,a.lastnameFROMemployeea,(SELECTMAX(empno)ASmaxempnoFROMemployee)ASbWHEREa.empno=b.maxempno•列别名SELECTempnoASe_num,midinitAS“mint”,phonenoAS“…”FROMemployeeWHEREempno’000030’ORDERBY113CS&TInformationCourse•单引号与双引号–字符串必须放在单引号内。如果字符串本身包含单引号�则需要用一对单引号来表示一个单引号。–双引号可以用于重命名一个非法的输出字段�要在名字中包含一个双引号�可以用一对双引号。SELECT子句14CS&TInformationCourseFETCHFIRST子句•FETCHFIRST子句限制游标只检索前n行。如果指定了FETCHFIRST子句�但没有指定n�则只查询第一行。•FETCHFIRST子句的语法格式�–FETCHFIRST1ROW|nROWSONLY•例SELECTyears,name,idFROMstaffFETCHFIRST3ROWSONLY•练习�查找工作时间最长的3名职工的工作年份、姓名和ID。15CS&TInformationCourse空值•在SQL中�值可以是true、false或null。在访问数据的时候必须考虑这三种情况。•空值的查找比较特殊�不能使用等于谓词来查找空值�因为null不等于任何其它值�也不等于null�实际上null不参与任何算术运算和逻辑运算。•可以使用ISNULL或ISNOTNULL来查找空值。16CS&TInformationCourse条件•单值比较SELECTid,job,deptFROMstaffWHEREjob=‘Mgr’ANDNOTjob‘Mgr’ANDNOTjob=‘Sales’ANDid100ANDid=0ANDid=150ANDNOTdept=50ORDERBYidSELECTid,dept,jobFROMstaffWHERE(id,dept)=(30,28)OR(id,years)=(90,7)OR(dept,job)=(38,‘Mgr’)ORDERBY117CS&TInformationCourse条件•BETWEEN谓词–BETWEEN用于比较一个值是否在某个范围内。–SELECTid,jobFROMstaffWHEREidBETWEEN10AND3018CS&TInformationCourse条件•LIKE谓词–LIKE可以进行字符串的匹配。–通配符�百分号�%�和下划线�_��百分号代表零个或多个任意字符�下划线代表任意一个字符。–SELECTid,nameFROMstaffWHEREnameLIKE‘S%n’ORnameLIKE‘_a_a%’•转义字符–要在搜索字符串中查找百分号或下划线�使用转义字符。–转义字符用ESCAPE关键字引出。–将转义字符放在查找字符串的‘%’或‘_’前面�表示它是实际的值�而不是要查找的特殊字符。–SELECTprojno,projnameFROMprojectWHEREprojnoLIKE'%\_%'ESCAPE'\'19CS&TInformationCourse条件•特殊字符–要在条件中或在SQL语句的其它地方引用某个特殊字符�可以使用“X”后跟字符的ASCII码的十六进制数。•查询职工姓名以“a;”开头的职工。–SELECTid,nameFROMstaffWHEREnameLIKE'%a'||X'3B'||'%'20CS&TInformationCourse优先级•括号前缀运算符乘除加减•ANDOR•查询处理的顺序如下��1�FROM子句�2�JOINON子句�3�WHERE子句�4�GROUPBY和聚集函数�5�HAVING子句�6�SELECT列表�7�ORDERBY子句�8�FETCHFIRST21CS&TInformationCourseCAST表达式•CAST表达式用于在数据类型之间进行转换。•语法格式为�–CAST(表达式|NULLAS数据类型)•例使用CAST表达式将SALARY列从小数类型转换为整型。–SELECTid,salary,CAST(salaryASINTEGER)ASsal2FROMstaffWHEREid3022CS&TInformationCourseVALUES子句•VALUES子句用明确的值定义一组行和列。VALUES子句通常用在临时表中�还能用在视图定义中。•在VALUES子句中定义的多列之间用逗号分隔。多行之间用括号括起来�并用逗号分隔。–VALUES61行�1列–VALUES(6)1行�1列–VALUES6,7,81行�3列–VALUES(6),(7),(8)3行�1列–VALUES(6,66)(7,77),(8,NULL)3行�2列23CS&TInformationCourseVALUES子句•WITHtemp(c1,c2)AS(VALUES(1,2),(2,3),(3,4))SELECT*FROMtempORDERBY2DESC•SELECT*FROM(VALUES(1,2),(2,3),(3,4))temp(c1,c2)ORDERBY2DESC•VALUES((SELECTCOUNT(*)FROMemployee),(SELECTAVG(salary)FROMstaff),(SELECTMAX(deptno)FROMdepartment))FORFETCHONLYWITHUR•CREATEVIEWsilly(c1,c2,c3)ASVALUES(11,'AAA',SMALLINT(22)),(12,'BBB',SMALLINT(33)),(13,'CCC',NULL)24CS&TInformationCourseCASE表达式•CASE表达式可以用来在SQL语句中进行if-then-else处理。–注意�CASE条件的顺序会影响结果�执行的是第一个满足条件的WHEN后面的操作。•CASE语法一CASE表达式WHEN值1THEN结果1|NULL[WHEN值2THEN结果2|NULL][……][WHEN值nTHEN结果n|NULL][ELSENULL|ELSE结果n+1]END25CS&TInformationCourseCASE表达式•CASE语法二CASEWHEN条件1THEN结果1|NULL[WHEN条件2THEN结果2|NULL][……][WHEN条件nTHEN结果n|NULL][ELSENULL|ELSE结果n+1]END26CS&TInformationCourseCASE表达式SELECTlastname,CASEsexWHEN‘F’THEN‘FEMALE’WHEN‘M’THEN‘MALE’ELSENULLENDASsexxFROMemployeeSELECTlastname,CASEWHENsex=‘F’THEN‘FEMALE’WHENsex=‘M’THEN‘MALE’ELSENULLENDASsexxFROMemployee27CS&TInformationCourseDESCRIBE语句•DES
本文标题:DB2重点解析课件4
链接地址:https://www.777doc.com/doc-6162927 .html