Oracle数据库培训-SQL基础篇.ppt
《Oracle数据库培训-SQL基础篇.ppt》由会员分享,可在线阅读,更多相关《Oracle数据库培训-SQL基础篇.ppt(203页珍藏版)》请在咨信网上搜索。
SQL语言基础,,主要内容,基本的SELECT语句约束和排序数据单行函数多表显示数据、组函数合计数据创建和管理表子查询•SELECT确定哪些列•FROM确定哪张表,选择所有列与指定列,SELECT*FROMdepartments;用跟在SELECT关键字后面的星号(*),你能够显示表中数据的所有列。SELECTdepartment_id,location_idFROMdepartments;你能够用SELECT语句来显示表的指定列,指定列名之间用逗号分隔。,写SQL语句,•SQL语句对大小写不敏感•SQL语句可以写成一行或多行•关键字不能简写或分开折行•子句通常放在不同的行•缩进用于增强可读性,算术表达式,用算术运算符创建数字和日期数据的表达式操作说明+加-减*乘/除,使用算术运算符,SELECTlast_name,salary,salary+300FROMemployees;优先级:•乘法和除法比加法和减法的优先级高•相同优先级的运算符从左到右计算•圆括号用于强制优先计算,并且使语句更清晰SELECTlast_name,salary,12*salary+100FROMemployees;,空值,•null是一个未分配的、未知的,或不适用的值•null不是0,也不是空格•包含空值的算术表达式计算结果为空SELECTlast_name,job_id,salary,commission_pctFROMemployees;,定义列别名,列别名:•改变列标题的名字•可用于计算结果•紧跟在列名后面–在列名和别名之间可以有选项AS关键字•如果别名中包含有空格、或者特殊字符、或者大小写敏感,要求用双引号SELECTlast_nameASname,commission_pctcommFROMemployees;,连字运算符,连字运算符:•连接列或者字符串到其它的列•用两个竖线表示(||)•构造一个字符表达式的合成列SELECTfirst_name||last_nameASEmployeesFROMemployees;,文字字符串,•文字字符串是包含在SELECT列表中的一个字符串,一个数字或者一个日期•日期和字符的文字字符串值必须用单引号括起来•每个文字字符串在每行输出一次SELECTlast_name||isa||job_idAS"EmployeeDetails”FROMemployees;,约束和排序数据,,目标,完成本课后,您应当能够执行下列操作:•用一个查询限制返回的行•用一个查询分类返回的行,限制选择的行,用WHERE子句限制返回的行SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable[WHEREcondition(s)];WHERE子句跟着FROM子句WHERE限制查询满足条件的行condition由列名、表达式、常数和比较操作组成WHERE子句能够比较列值、文字值、算术表达式或者函数,WHERE子句由三个元素组成:列名,比较条件,列名、常量或值列表。,使用WHERE子句,SELECTemployee_id,last_name,job_id,department_id]FROMemployeesWHEREdepartment_id=90;,字符串和日期,•字符串和日期的值放在单引号中•字符值区分大小写,日期值是格式敏感的•日期的默认格式是DD-MON-RR.SELECTlast_name,job_id,department_idFROMemployeesWHERElast_name=Whalen;,比较条件,运算含义=等于>大于>=大于等于不等于比较条件被用于一个表达式与一个值或与另一个表达式的比较。...WHEREhire_date=01-JAN-95...WHEREsalary>=6000...WHERElast_name=Smith,其它比较条件,操作含义BETWEEN...AND...在两个值之间(包含)IN(set)匹配一个任意值列表LIKE匹配一个字符模板ISNULL是一个空值使用BETWEEN条件:SELECTlast_name,salaryFROMemployeesWHEREsalaryBETWEEN2500AND3500;使用IN条件SELECTemployee_id,last_name,salary,manager_idFROMemployeesWHEREmanager_idIN(100,101,201);,其它比较条件,使用LIKE条件•使用LIKE条件执行有效搜索串值的通配符搜索•搜索条件既可以包含文字也可以包含数字:–%表示任意顺序的零个或多个字符–_表示一个字符SELECTfirst_nameFROMemployeesWHEREfirst_nameLIKES%;使用NULL条件•用ISNULL操作来测试空值SELECTlast_name,manager_idFROMemployeesWHEREmanager_idISNULL;NULL条件,包括ISNULL条件和ISNOTNULL条件。,逻辑条件,运算含义AND如果两个组成部分的条件都为真,返回TRUEOR如果两个组成部分中的任一个条件为真,返回TRUENOT如果跟随的条件为假,返回TRUE可以在WHERE子句中用AND和OR运算符使用多个条件。使用AND操作:AND要求两个条件同时为真SELECTemployee_id,last_name,job_id,salaryFROMemployeesWHEREsalary>=10000ANDjob_idLIKE%MAN%;,逻辑条件,使用OR操作:OR操作要求两者之一为真即可SELECTemployee_id,last_name,job_id,salaryFROMemployeesWHEREsalary>=10000ORjob_idLIKE%MAN%;使用NOT操作SELECTlast_name,job_idFROMemployeesWHEREjob_idNOTIN(IT_PROG,ST_CLERK,SA_REP);注:NOT运算符也可以用于另一个SQL运算符,例如,BETWEEN、LIKE、和NULL。,优先规则,求值顺序1算术运算2连字操作3比较操作4IS[NOT]NULL,LIKE,[NOT]IN5[NOT]BETWEEN6NOT逻辑条件7AND逻辑条件8OR逻辑条件使用圆括号改变优先规则,ORDERBY子句,•用ORDERBY子句排序行–ASC:升序排序,默认–DESC:降序排序•ORDERBY子句在SELECT语句的最后SELECTlast_name,job_dateFROMemployeesORDERBYhire_date;语法:SELECTexprFROMtable[WHEREcondition(s)][ORDERBY{column,expr}[ASC|DESC]];,单行函数,,目标,完成本课后,您应当能够执行下列操作:•描述在SQL中可用的函数的变量类型•在SELECT语句中使用字符,数字和日期函数•描述转换函数的使用,SQL函数,函数是SQL的一个非常强有力的特性,函数能够用于下面的目的:执行数据计算修改单个数据项操纵输出进行行分组格式化显示的日期和数字转换列数据类型SQL函数有输入参数,并且总有一个返回值。注:在本课中讲述的大多数函数是针对SQL的Oracle版的。,SQL函数(续),有两种截然不同的函数:单行函数多行函数单行函数这些函数仅对单个行进行运算,并且每行返回一个结果。有不同类型的单行函数,本课下面的函数类型:字符数字日期转换多行函数这些函数能够操纵成组的行,每个行组给出一个结果,这些函数也被称为组函数。多行函数在后面的课程中介绍。,单行函数,单行函数:•操纵数据项•接受多个参数并返回一个值•作用于每一个返回行•每行返回一个结果•可以修改数据类型•可以嵌套•接受多个参数,参数可以是一个列或者一个表达式,单行函数(续),单行函数的特性包括:作用于查询中返回的每一行每行返回一个结果可能返回一个与参数不同类型的数据值可能需要一个或多个参数能够用在SELECT、WHERE和ORDERBY子句中,可以嵌套。function_name[(arg1,arg2,...)]function_name是函数的名字。arg1,arg2是由函数使用的任意参数,可以由一个列名或者一个表达式提供。,单行函数(续),本课包括下面的单行函数:字符函数:接受字符输入,可以返回字符或者数字值数字函数:接受数字输入,返回数字值日期函数:对DATE数据类型的值进行运算(除了MONTHS_BETWEEN函数返回一个数字,所有日期函数都返回一个DATE数据类型的值。)转换函数:从一个数据类型到另一个数据类型转换一个值通用函数:NVL、NVL2、NULLIF、COALSECE、CASE、DECODE,字符函数,单行字符函数接受字符数据作为输入,既可以返回字符值也可以返回数字值。字符函数可以被分为下面两种:大小写处理函数字符处理函数大小写处理函数如下:LOWER(column|expression)转换字符值为小写UPPER(column|expression)转换字符值为大写INITCAP(column|expression)转换每个单词的首字母值为大写,所有其它值为小写字符处理函数如下:CONCAT(column1|expression1,column2|expression2)连接第一个字符值到第二个字符值;等价于连接运算符(||)SUBSTR(column|expression,m[,n])从字符值中返回指定的字符,开始位置在m,n字符长度(如果m是负数,计数从字符值末尾开始;如果n被忽略,返回到串结束的所有字符)。,LENGTH(column|expression)返回表达式中的字符数INSTR(column|expression,‘string’,[,m],[n])返回一个命名串的数字位置。随意地,你可以提供一个位置m作为查找的开始,在字符串中第n次发现的位置。m和n的默认值是1,意味着在起始开始查找,并且报告第一个发现的位置。LPAD(column|expression,n,string)RPAD(column|expression,n,string)填充字符值左、右调节到n字符位置的总宽度TRIM(leading|trailing|both,trim_characterFROMtrim_source)使你能够从一个字符串修整头或尾字符(或两者)。如果trim_character或trim_source是字符文字,你必须放在单引号中。REPLACE(text,search_string,replacement_string)从字符串查找一个文本表达式,如果找到,用指定的值串代替它,字符函数(续),大小写处理函数,这些函数转换字符串的大小写函数结果LOWER(SQLCourse)sqlcourseUPPER(SQLCourse)SQLCOURSEINITCAP(SQLCourse)SqlCourseLOWER:转换大小写混合的字符串为小写字符串UPPER:转换大小写混合的字符串为大写字符串INITCAP:将每个单词的首字母转换为大写,其他字母为小写SELECT‘Thejobidfor’||UPPER(last_name)||‘is’||LOWER(job_id)AS"EMPLOYEEDETAILS"FROMemployees;,字符处理函数,函数结果CONCAT(Hello,World)HelloWorldSUBSTR(HelloWorld,1,5)HelloLENGTH(HelloWorld)10INSTR(HelloWorld,W)6LPAD(salary,10,*)*****24000RPAD(salary,10,*)24000*****TRIM(HFROMHelloWorld)elloWorld,数字函数,ROUND:四舍五入指定小数的值ROUND(45.926,2)45.93TRUNC(45.926,2)45.92MOD(1600,300)100ROUND(column|expression,n)四舍五入列、表达式或值为n位小数位,或者,如果n被忽略,无小数位。(如果n是负值,小数点左边的数被四舍五入)TRUNC(column|expression,n)截断列、表达式或值到n位小数,或者,如果n被忽略,那么n默认为0MOD(m,n)返回m除以n的余数,使用ROUND函数SELECTROUND(45.923,2),ROUND(45.923,0),ROUND(45.923,-1)FROMDUAL;使用TRUNC函数SELECTTRUNC(45.923,2),TRUNC(45.923),TRUNC(45.923,-2)FROMDUAL;使用MOD函数SELECTlast_name,salary,MOD(salary,5000)FROMemployeesWHEREjob_id=SA_REP;注:MOD函数经常用于确定一个值是奇数还是偶数,日期的使用,•Oracle数据库用内部数字格式存储日期:世纪,年,月,日,小时,分钟和秒•默认日期显示格式是DD-MON-RR.SELECTlast_name,hire_dateFROMemployeesWHERElast_namelikeG%;;SYSDATE函数返回:•Date•TimeSYSDATE是一个日期函数,它返回当前数据库服务器的日期和时间。SELECTSYSDATEFROMDUAL;,用日期计算,•从日期加或者减一个数,结果是一个日期值•两个日期相减,得到两个日期之间的天数•用小时数除以24,可以加小时到日期上既然数据库以数字方式存储日期,你就可以用算术运算符进行计算,例如,加或减。你可以加或减数字常数以及日期。你可以进行下面的运算:运算结果说明date+number日期加一个天数到一个日期上date-number日期从一个日期上减一个天数date-date天数用一个日期减另一个日期date+number/24日期加一个小时数到一个日期上,日期函数,函数说明MONTHS_BETWEEN两个日期之间的月数ADD_MONTHS加日历月到日期NEXT_DAY下个星期几是几号LAST_DAY指定月的最后一天ROUND四舍五入日期TRUNC截断日期,日期函数(续),MONTHS_BETWEEN(date1,date2):计算date1和date2之间的月数,其结果可以是正的也可以是负的。如果date1大于date2,结果是正的,反之,结果是负的。结果的小数部分表示月的一部分。ADD_MONTHS(date,n):添加n个日历月到date。n的值必须是整数,但可以是负的。NEXT_DAY(date,‘char’):计算在date之后的下一个周(‘char’)指定天的日期。char的值可能是一个表示一天的数或者是一个字符串。LAST_DAY(date):计算包含date的月的最后一天的日期ROUND(date[,‘fmt’]):返回用格式化模式fmt四舍五入到指定单位的date,如果格式模式fmt被忽略,date被四舍五入到最近的天。TRUNC(date[,‘fmt’]):返回用格式化模式fmt截断到指定单位的带天的时间部分的date,如果格式模式fmt被忽略,date被截断到最近的天。,使用日期函数,•MONTHS_BETWEEN(‘01-SEP-95’,‘11-JAN-94’)19.6774194•ADD_MONTHS(‘11-JAN-94’,6)11-JUL-94•NEXT_DAY(‘01-SEP-95’,‘2’)下个星期五是几号08-SEP-95•LAST_DAY(01-FEB-95)28-FEB-95,使用日期函数(续),假定SYSDATE=25-JUL-95:•ROUND(SYSDATE,MONTH)01-AUG-95•ROUND(SYSDATE,YEAR)01-JAN-96•TRUNC(SYSDATE,MONTH)01-JUL-95•TRUNC(SYSDATE,YEAR)01-JAN-95•TRUNC(TO_DATE(25-JUL-95),YEAR)01-JAN-95,转换函数,数据类型转换•隐式数据类型转换•显式数据类型转换对于直接赋值,Oracle服务器能够自动地进行下面的转换:从到VARCHAR2orCHARNUMBERVARCHAR2orCHARDATENUMBERVARCHAR2DATEVARCHAR2对于表达式赋值,Oracle服务器能自动地进行下面的转换:从VARCHAR2orCHAR到DATE从VARCHAR2orCHAR到NUMBER,转换函数(续),显式数据类型转换SQL提供三种函数来从一种数据类型转换值到另一种:TO_CHAR(number|date,[fmt],[nlsparams])转换一个数字或日期值为一个VARCHAR2字符串,带格式化样式fmt。数字转换:nlsparams参数指定下面的字符,它由数字格式化元素返回:小数字符99999.99前导009999本地货币符号L9999国际货币符号$9999如果忽略nlsparams或其它参数,该函数在会话中使用默认参数值。,TO_CHAR(number|date,[fmt],[nlsparams])指定返回的月和日名字及其缩写的语言。如果忽略该参数,该函数在会话中使用默认日期语言。TO_NUMBER(char,[fmt],[nlsparams])用由可选格式化样式fmt指定的格式转换包含数字的字符串为一个数字。Nlsparams参数在该函数中的目的与TO_CHAR函数用于数字转换的目的相同。TO_DATE(char,[fmt],[nlsparams])按照fmt指定的格式转换表示日期的字符串为日期值。如果忽略fmt,格式是DD-MON-YY。Nlsparams参数的目的与TO_CHAR函数用于日期转换时的目的相同。,对日期使用TO_CHAR函数,TO_CHAR(date,format_model)格式模板•必须加单引号,并且区分大小写•能够包含任一有效的日期格式元素•有一个fm元素用来删除填补的空,或者前导零•用一个逗号与日期值分开SELECTemployee_id,TO_CHAR(hire_date,MM/YY)Month_HiredFROMemployeesWHERElast_name=Higgins;,日期格式模板的元素YYYY数字全写年YEAR年的拼写MM月的两数字值MONTH月的全名DY周中天的三字母缩写DAY周中天的全名MON月的三字母缩写DD月的数字天,使用TO_NUMBER和TO_DATE函数,•转换字符串到数字,用TO_NUMBER函数格式化:TO_NUMBER(char[,format_model])•转换字符串到日期,用TO_DATE函数格式化:TO_DATE(char[,format_model])Selectto_number(‘12345’)fromdual;Selectto_date(‘20000810’,’yyyy-mm-dd’fromdual;,通用函数,这些函数可用于任意数据类型,并且适用于空值•NVL(expr1,expr2)•NVL2(expr1,expr2,expr3)•NULLIF(expr1,expr2)•COALESCE(expr1,expr2,...,exprn)NVL转换空值为一个实际值NVL2如果expr1非空,NVL2返回expr2;如果expr1为空,NVL2返回expr3。参数expr1可以是任意数据类型NULLIF比较两个表达式,如果相等返回空;如果不相等,返回第一个表达式COALESCE返回表达式列表中的第一个非空表达式,NVL函数,转换一个空值到一个实际的值•可用的数据类型可以是日期、字符和数字•数据类型必须匹配:–NVL(commission_pct,0)–NVL(hire_date,01-JAN-97)–NVL(job_id,NoJobYet)语法:NVL(expr1,expr2)在语法中:expr1是包含空值的源值或者表达式expr2是用于转换空值的目的值Selectnvl(‘1’,’notnull’fromdual;注:如果expr1为空则返回expr2r的值,使用NVL2函数,NVL2函数检查第一个表达式,如果第一个表达式不为空,那么NVL2函数返回第二个表达式;如果第一个表达式为空,那么第三个表达式被返回。expr2expr1非空时的返回值语法NVL2(expr1,expr2,expr3)在语法中:expr1是可能包含空的源值或表达式expr3expr1为空时的返回值SelectNVL2(‘1’,’notnull’,’null’)fromdual;SelectNVL2(‘1’,’notnull’,’null’)fromdual;,使用NULLIF函数,NULLIF函数比较两个表达式,如果相等,函数返回空,如果不相等,函数返回第一个表达式。第一个表达式不能为NULL。语法NULLIF(expr1,expr2)在语法中:expr1是对于expr2的被比较原值expr2是对于expr1的被比较原值。(如果它不等于expr1,expr1被返回)。Selectnullif(‘abc’,’abcd’)fromdual;,使用COALESCE函数,•COALESCE函数超过NVL函数的优点是COALESCE函数能够接受多个交替的值。•如果第一个表达式非空,它返回该表达式;否则,它做一个保留表达式的结合。COALESCE函数返回列表中的第一个非空表达式。语法COALESCE(expr1,expr2,...exprn)在语法中:expr1如果它非空,返回该表达式expr2如果第一个表达式为空并且该表达式非空,返回该表达式exprn如果前面的表达式都为空,返回该表达式Selectcoalesce(‘,‘,bca)fromdual;,条件表达式,在SQL语句中提供IF-THEN-ELSE逻辑的使用。两种用法:–CASE表达式–DECODE函数CASE表达式CASEexprWHENcomparison_expr1THENreturn_expr1WHENcomparison_expr2THENreturn_expr2WHENcomparison_exprnTHENreturn_exprnELSEelse_expr]END,DECODE函数,DECODE(col|expression,search1,result1[,search2,result2,...,][,default])DECODE函数在比较表达式(expression)和每个查找(search)值后解码表达式,如果表达式与查找相同,返回结果。如果省略默认值,当没有查找值与表达式相匹配时返回一个空值。,多表显示数据•在WHERE子句中写连接条件•当多个表中有相同的列名时,将表名作为列名的前缀定义连接•当数据从多表中查询时,要使用连接(join)条件。一个表中的行按照存在于相应列中的公值被连接到另一个表中的行,即,通常所说的主键和外键列。,什么是等值连接?,EMPLOYEESDEPARTMENTS,用等值连接返回记录,SELECTemployees.employee_id,employees.last_name,employees.department_id,departments.department_id,departments.location_idFROMemployees,departmentsWHEREemployees.department_id=departments.department_id;,使用表别名,•使用表别名简化查询•使用表别名改善性能SELECTe.employee_id,e.last_name,e.department_id,d.department_id,d.location_idFROMemployeese,departmentsdWHEREe.department_id=d.department_id;原则表别名最多可以有30个字符,但短一些更好。如果在FROM子句中表别名被用于指定的表,那么在整个SELECT语句中都要使用表别名。表别名应该是有意义的。表别名只对当前的SELECT语句有效。,多于两个表的连接,EMPLOYEESDEPARTMENTSLOCATIONS,非等值连接,EMPLOYEESJOB_GRADES,用非等值连接返回记录,SELECTe.last_name,e.salary,j.grade_levelFROMemployeese,job_gradesjWHEREe.salaryBETWEENj.lowest_salANDj.highest_sal;,外连接,DEPARTMENTSEMPLOYEES,外连接语法,•你可以用一个外连接查看那些不满足连接条件的行•外连接运算符是加号(+)SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column(+)=table2.column;SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column=table2.column(+);•用外连接返回不直接匹配的记录•如果在连接条件中使用外连接操作,缺少的行就可以被返回。操作符是一个在圆括号中的加号(+),它被放置在连接的缺少信息的一侧。为了使来自不完善表的一行或多行能够被连接,该操作符有产生一个或多个空行的作用。,使用外连接,SELECTe.last_name,e.department_id,d.department_nameFROMemployeese,departmentsdWHEREe.department_id(+)=d.department_id;,什么是组函数?,组函数操作行集,给出每组的结果EMPLOYEES,在EMPLOYEES表中的最高薪水,组函数的类型,•AVG平均值•COUNT计数•MAX最大值•MIN最小值•STDDEV标准差•SUM合计•VARIANCE方差,组函数(续),每个函数接收一个参数,下面的表确定你可以在语法中使用的选项:函数说明AVG([DISTINCT|ALL]n)n的平均值,忽略空值COUNT({*|[DISTINCT|ALL]expr})用*计数所有行,包括重复和带空值的行。expr求除了空计算MAX([DISTINCT|ALL]expr)expr的最大值,忽略空值MIN([DISTINCT|ALL]expr)expr的最小值,忽略空值STDDEV([DISTINCT|ALL]x)n的标准差,忽略空值SUM([DISTINCT|ALL]n)合计n的值,忽略空值VARIANCE([DISTINCT|ALL]x)n的方差,忽略空值,组函数的语法,SELECT[column,]group_function(column),...FROMtable[WHEREcondition][GROUPBYcolumn][ORDERBYcolumn];使用组函数的原则DISTINCT使得函数只考虑不重复的值;ALL使得函数考虑每个值,包括重复值。默认值是ALL,因此不需要指定。用于函数的参数的数据类型可以是CHAR、VARCHAR2、NUMBER或DATE。所有组函数忽略空值。为了用一个值代替空值,用NVL、NVL2或COALESCE函数。当使用GROUPBY子句时,Oracle服务器隐式以升序排序结果集。为了覆盖该默认顺序,DESC可以被用于ORDERBY子句。,使用AVG、SUM、MIN、MAX函数,你可以使用AVG和SUM用于数字数据SELECTAVG(salary),MAX(salary),MIN(salary),SUM(salary)FROMemployeesWHEREjob_idLIKE%REP%;,使用COUNT函数,COUNT(*)返回一个表中的行数COUNT函数有三中格式:COUNT(*)COUNT(expr)COUNT(DISTINCTexpr)COUNT(*)返回表中满足SELECT语句标准的行数,包括重复行,包括有空值列的行。如果WHERE子句包括在SELECT语句中,COUNT(*)返回满足WHERE子句条件的行数。COUNT(expr)返回在列中的由expr指定的非空值的数。COUNT(DISTINCTexpr)返回在列中的由expr指定的唯一的非空值的数。注:expr为列名,组函数和Null值,所有组函数忽略列中的空值。在幻灯片的例子中,平均值只基于表中的那些COMMISSION_PCT列的值有效的行的计算。平均值计算是用付给所有雇员的总佣金除以接受佣金的雇员数(4)。SELECTAVG(commission_pct)FROMemployees;,在组函数中使用NVL函数,NVL函数强制组函数包括空值。在幻灯片的例子中,平均值被基于所有表中的行来计算,不管COMMISSION_PCT列是否为空。平均值的计算是用付给所有雇员的总佣金除以公司的雇员总数(20)。SELECTAVG(NVL(commission_pct,0))FROMemployees;,创建数据组:GROUPBY子句语法,用GROUPBY子句划分表中的行到较小的组中SELECTcolumn,group_function(column)FROMtable[WHEREcondition][GROUPBYgroup_by_expression][ORDERBYcolumn];在语法中,group_by_expression指定那些用于将行分组的列,这些列的值作为行分组的依据。使用WHERE子句,你可以在划分行成组以前过滤行。在GROUPBY子句中必须包含列。在GROUPBY子句中你不能用列别名。默认情况下,行以包含在GROUPBY列表中的字段的升序排序。你可以用ORDERBY子句覆盖这个默认值。如果在SELECT子句中包含了组函数,就不能选择单独的结果,除非单独的列出现在GROUPBY子句中。如果你未能在GROUPBY子句中包含一个字段列表,你会收到一个错误信息。,约束分组结果:HAVING子句,用HAVING子句约束分组:1.行被分组2.应用组函数3.匹配HAVING子句的组被显示SELECTcolumn,group_functionFROMtable[WHEREcondition][GROUPBYgroup_by_expression][HAVINGgroup_condition][ORDERBYcolumn];,使用HAVING子句,SELECTdepartment_id,MAX(salary)FROMemployeesGROUPBYdepartment_idHAVINGMAX(salary)>10000;,嵌套组函数,显示最大平均薪水SELECTMAX(AVG(salary))FROMemployeesGROUPBYdepartment_id;,创建和管理表,,目标,完成本课后,您应当能够执行下列操作:•描述主要数据库对象•创建表•描述列定义时可用的数据类型•改变表的定义•删除、改名和截断表,数据库对象,表基本存储单元,由行和列组成视图逻辑地从一个或多个表中表示数据子集序列数字值发生器索引改善一些查询的性能同义词给对象可选择的名字,命名规则,表命名和列命名:•必须以字母开始•必须是1–30个字符长度•只能包含A–Z,a–z,0–9,_,$,和#•同一个用户所拥有的对象之间不能重名•不能用Oracle服务器的保留字注:名字是大小写不敏感的,例如,EMPLOYEES与eMPloyees或eMpLOYEES作为同一个名字来处理。,CREATETABLE语句,•用户必须有:–CREATETABLE权限–一个存储区域CREATETABLE[schema.]table(columndatatype[DEFAULTexpr][,...]);•必须指定:–表名–列名、列数据类型和列的大小schema与所有者的名字一样table表的名字DEFAULTexpr指定默认值column列的名字datatype列的数据类型和长度,引用另一个用户的表,•表属于另一个用户,不在该用户的方案中•在那些表名字的前面使用所有者的名字作为前缀如果一个表不属于本用户,那么,其所有者的名字必须放在表名的前面SELECT*FROMuser_b.employees;,创建表,•创建表CREATETABLEdept(deptnoNUMBER(2),dnameVARCHAR2(14),locVARCHAR2(13));•确认表的创建DESCRIBEdept,Oracle数据库中的表,•用户表:–由用户创建和维护的表的集合–包含用户信息•数据字典:–由Oracle服务器创建和维护的表的集合–包含数据库信息有四种数据字典视图,每一种有一个特定的前缀来反映其不同的目的。USER_这些视图包含关于用户所拥有的对象的信息。ALL_这些视图包含所有用户可访问的表(对象表和相关的表)的信息。DBA_这些视图是受限制的视图,它们只能被分配有DBA角色的用户所访问。V$这些视图是动态执行的视图,包含数据库服务器的性能、存储器和锁的信息。,查询数据字典,•查看本用户所拥有的表的名称SELECTtable_nameFROMuser_tables;•查看本用户所拥有的不同的对象类型SELECTDISTINCTobject_typeFROMuser_objects;•查看本用户所拥有的表、视图、同义词和序列SELECT*FROMuser_catalog;,数据类型,数据类型说明VARCHAR2(size)可变长度的字符数据CHAR(size)固定长度的字符数据NUMBER(p,s)可变长度的数字数据DATE日期和时间值LONG最大2G的可变长度字符数据CLOB最大4G的字符数据RAWandLONGRAW原始二进制数据BLOB最大4G的二进制数据BFILE最大4G的,存储在外部文件中的二进制数据ROWID一个64进制的数制系统,表示表中一行的唯一地址,用子查询创建表,该方法既可以创建表还可以将从子查询返回的行插入新创建的表中。CREATETABLEdept80ASSELECTemployee_id,last_name,salary*12ANNSAL,hire_dateFROMemployeesWHEREdepartment_id=80;原则被创建的表要带指定的列名,并且由SELECT语句返回的行被插入到新表中。字段的定义只能包括列名和默认值。如果给出了指定的列,列的数目必须等于子查询的SELECT列表的列数目。如果没有给出了指定的列,表的列名应和子查询中的列名是相同的。完整性规则不会被传递到新表中,仅列的数据类型被定义。,ALTERTABLE语句,用ALTERTABLE语句来:•添加一个新列•修改一个已存在的列•为新列定义一个默认值•删除一个列添加列ALTERTABLEtableADD(columndatatype[DEFAULTexpr][,columndatatype]...);修改列ALTERTABLEtableMODIFY(columndatatype[DEFAULTexpr][,columndatatype]...);删除列ALTERTABLEtableDROP(column);,添加新列,•用ADD字句添加列ALTERTABLEdept80ADD(job_idVARCHAR2(9));添加新列的原则你可以添加或修改列。你不能指定新添加的列的位置,新列将成为最后一列。,修改列- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 数据库 培训 SQL 基础
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【z****6】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【z****6】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【z****6】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【z****6】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文