




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL语言基础1SQL基础培训SQL语言基础1SQL基础培训主要内容基本的SELECT语句约束和排序数据单行函数多表显示数据、组函数合计数据创建和管理表子查询&操纵数据内置约束创建视图其他数据库对象2SQL基础培训主要内容基本的SELECT语句2SQL基础培训基本的select语句3SQL基础培训基本的select语句3SQL基础培训目标完成本课后,您应当能够:•列出SQLSELECT语句的功能•执行基本的SELECT语句4SQL基础培训目标完成本课后,您应当能够:4SQL基础培训SQLSELECT语句的功能列选择:你能够使用SELECT语句的列选择功能选择表中的列,这些列是你想要用查询返回的。当你查询时,你能够选择你查询的表中指定的列。行选择:你能够使用SELECT语句的行选择功能选择表中的行,这些行是你想要用查询返回的。你能够使用不同的标准限制你看见的行。连接:你能够使用SELECT语句的连接功能来集合数据,这些数据被存储在不同的表中,在它们之间可以创建连接。在后面的课程中你将学到更多关于连接的内容。
5SQL基础培训SQLSELECT语句的功能列选择:你能够使用SELECT基本SELECT语句SELECT*|{[DISTINCT]
column|expression[alias],...}FROMtable;
•SELECT确定哪些列•FROM确定哪张表6SQL基础培训基本SELECT语句SELECT*|{[DISTINC选择所有列与指定列SELECT*FROMdepartments;
用跟在SELECT关键字后面的星号(*),你能够显示表中数据的所有列。
SELECTdepartment_id,location_idFROMdepartments;
你能够用SELECT语句来显示表的指定列,指定列名之间用逗号分隔。7SQL基础培训选择所有列与指定列SELECT*FROMdep写SQL语句•SQL语句对大小写不敏感•SQL语句可以写成一行或多行•关键字不能简写或分开折行•子句通常放在不同的行•缩进用于增强可读性8SQL基础培训写SQL语句•SQL语句对大小写不敏感8SQL基础培训算术表达式
用算术运算符创建数字和日期数据的表达式操作说明
+加
-减
*乘
/除
9SQL基础培训算术表达式
用算术运算符创建数字和日期数据的表达式9SQL基使用算术运算符SELECTlast_name,salary,salary+300FROMemployees;
优先级:•乘法和除法比加法和减法的优先级高
•相同优先级的运算符从左到右计算
•圆括号用于强制优先计算,并且使语句更清晰
SELECTlast_name,salary,12*salary+100FROMemployees;10SQL基础培训使用算术运算符SELECTlast_name,s空值
•null是一个未分配的、未知的,或不适用的值
•null不是0,也不是空格
•包含空值的算术表达式计算结果为空
SELECTlast_name,job_id,salary,commission_pctFROMemployees;11SQL基础培训空值
•null是一个未分配的、未知的,或不适用的值定义列别名
列别名:
•改变列标题的名字
•可用于计算结果
•紧跟在列名后面–在列名和别名之间可以有选项AS关键字
•如果别名中包含有空格、或者特殊字符、或者大小写敏感,要求用双引号
SELECTlast_nameASname,commission_pctcommFROMemployees;
12SQL基础培训定义列别名
列别名:12SQL基础培训连字运算符连字运算符:
•连接列或者字符串到其它的列
•用两个竖线表示(||)•构造一个字符表达式的合成列
SELECTfirst_name||last_nameASEmployeesFROMemployees;13SQL基础培训连字运算符连字运算符:13SQL基础培训文字字符串•文字字符串是包含在SELECT列表中的一个字符串,一个数字或者一个日期
•日期和字符的文字字符串值必须用单引号括起来
•每个文字字符串在每行输出一次
SELECTlast_name||'isa'||job_idAS"EmployeeDetails”FROMemployees;14SQL基础培训文字字符串•文字字符串是包含在SELECT列表中的一个约束和排序数据15SQL基础培训约束和排序数据15SQL基础培训目标完成本课后,您应当能够执行下列操作:•用一个查询限制返回的行•用一个查询分类返回的行16SQL基础培训目标16SQL基础培训限制选择的行
用WHERE子句限制返回的行
SELECT*|{[DISTINCT]
column|expression[alias],...}FROMtable[WHEREcondition(s)];
WHERE子句跟着FROM子句
WHERE限制查询满足条件的行
condition由列名、表达式、常数和比较操作组成
WHERE子句能够比较列值、文字值、算术表达式或者函数,WHERE子句由三个元素组成:列名,比较条件,列名、常量或值列表。17SQL基础培训限制选择的行用WHERE子句限制返回的行17SQL基础使用WHERE子句
SELECTemployee_id,last_name,job_id,department_id]FROMemployeesWHEREdepartment_id=90;18SQL基础培训使用WHERE子句SELECTemployee_id字符串和日期•字符串和日期的值放在单引号中•字符值区分大小写,日期值是格式敏感的•日期的默认格式是DD-MON-RR.SELECTlast_name,job_id,department_idFROMemployeesWHERElast_name='Whalen';
19SQL基础培训字符串和日期•字符串和日期的值放在单引号中19SQL基础培训比较条件
运算含义
=等于
>大于
>=大于等于
<小于
<=小于等于
<>不等于比较条件被用于一个表达式与一个值或与另一个表达式的比较。...WHEREhire_date='01-JAN-95'...WHEREsalary>=6000...WHERElast_name='Smith'20SQL基础培训比较条件运算其它比较条件操作含义
BETWEEN...AND...在两个值之间(包含)IN(set)匹配一个任意值列表
LIKE匹配一个字符模板
ISNULL是一个空值使用BETWEEN条件:
SELECTlast_name,salaryFROMemployeesWHEREsalaryBETWEEN2500AND3500;使用IN条件
SELECTemployee_id,last_name,salary,manager_idFROMemployeesWHEREmanager_idIN(100,101,201);21SQL基础培训其它比较条件操作其它比较条件使用LIKE条件•使用LIKE条件执行有效搜索串值的通配符搜索•搜索条件既可以包含文字也可以包含数字:
–%表示任意顺序的零个或多个字符
–_表示一个字符
SELECTfirst_nameFROMemployeesWHEREfirst_nameLIKE'S%';
使用NULL条件•用ISNULL操作来测试空值
SELECTlast_name,manager_idFROMemployeesWHEREmanager_idISNULL;
NULL条件,包括ISNULL条件和ISNOTNULL条件。
22SQL基础培训其它比较条件使用LIKE条件22SQL基础培训逻辑条件
运算含义
AND如果两个组成部分的条件都为真,返回TRUEOR如果两个组成部分中的任一个条件为真,返回TRUENOT如果跟随的条件为假,返回TRUE可以在WHERE子句中用AND和OR运算符使用多个条件。使用AND操作:AND要求两个条件同时为真
SELECTemployee_id,last_name,job_id,salaryFROMemployeesWHEREsalary>=10000ANDjob_idLIKE'%MAN%';
23SQL基础培训逻辑条件运算逻辑条件使用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。24SQL基础培训逻辑条件使用OR操作:OR操作要求两者之一为真即可24SQL优先规则
求值顺序
1算术运算
2连字操作
3比较操作
4IS[NOT]NULL,LIKE,[NOT]IN5[NOT]BETWEEN6NOT逻辑条件
7AND逻辑条件
8OR逻辑条件使用圆括号改变优先规则
25SQL基础培训优先规则
求值顺序25SQL基础培训ORDERBY子句•用ORDERBY子句排序行
–ASC:升序排序,默认
–DESC:降序排序•ORDERBY子句在SELECT语句的最后
SELECTlast_name,job_dateFROMemployeesORDERBYhire_date;语法:SELECTexprFROMtable[WHEREcondition(s)][ORDERBY{column,expr}[ASC|DESC]];26SQL基础培训ORDERBY子句•用ORDERBY子句排序行26SQL单行函数27SQL基础培训单行函数27SQL基础培训目标完成本课后,您应当能够执行下列操作:•描述在SQL中可用的函数的变量类型•在SELECT语句中使用字符,数字和日期函数•描述转换函数的使用28SQL基础培训目标完成本课后,您应当能够执行下列操作:28SQL基础培训SQL函数函数是SQL的一个非常强有力的特性,函数能够用于下面的目的:执行数据计算修改单个数据项操纵输出进行行分组格式化显示的日期和数字转换列数据类型SQL函数有输入参数,并且总有一个返回值。注:在本课中讲述的大多数函数是针对SQL的Oracle版的。29SQL基础培训SQL函数29SQL基础培训SQL函数(续)有两种截然不同的函数:单行函数多行函数单行函数这些函数仅对单个行进行运算,并且每行返回一个结果。有不同类型的单行函数,本课下面的函数类型:字符数字日期转换多行函数这些函数能够操纵成组的行,每个行组给出一个结果,这些函数也被称为组函数。多行函数在后面的课程中介绍。30SQL基础培训SQL函数(续)有两种截然不同的函数:30SQL基础单行函数单行函数:•操纵数据项•接受多个参数并返回一个值•作用于每一个返回行•每行返回一个结果•可以修改数据类型•可以嵌套•接受多个参数,参数可以是一个列或者一个表达式31SQL基础培训单行函数单行函数:31SQL基础培训单行函数(续)单行函数的特性包括:作用于查询中返回的每一行每行返回一个结果可能返回一个与参数不同类型的数据值可能需要一个或多个参数能够用在SELECT、WHERE和ORDERBY子句中,可以嵌套。function_name[(arg1,arg2,...)]function_name是函数的名字。arg1,arg2是由函数使用的任意参数,可以由一个列名或者一个表达式提供。
32SQL基础培训单行函数(续)单行函数的特性包括:32SQL基础培训单行函数(续)本课包括下面的单行函数:字符函数:接受字符输入,可以返回字符或者数字值数字函数:接受数字输入,返回数字值日期函数:对DATE数据类型的值进行运算(除了MONTHS_BETWEEN函数返回一个数字,所有日期函数都返回一个DATE数据类型的值。)转换函数:从一个数据类型到另一个数据类型转换一个值通用函数:
NVL、NVL2、NULLIF、COALSECE、CASE、DECODE33SQL基础培训单行函数(续)本课包括下面的单行函数:33SQL基础培训字符函数单行字符函数接受字符数据作为输入,既可以返回字符值也可以返回数字值。字符函数可以被分为下面两种:
大小写处理函数字符处理函数大小写处理函数如下:LOWER(column|expression) 转换字符值为小写 UPPER(column|expression) 转换字符值为大写 INITCAP(column|expression)转换每个单词的首字母值为大写,所有其它值为小写字符处理函数如下:
CONCAT(column1|expression1,column2|expression2)
连接第一个字符值到第二个字符值;等价于连接运算符(||) SUBSTR(column|expression,m[,n])
从字符值中返回指定的字符,开始位置在m,n字符长度(如果m是负数,计数从字符值末尾开始;如果n被忽略,返回到串结束的所有字符)。34SQL基础培训字符函数单行字符函数接受字符数据作为输入,既可以返回字符值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)
从字符串查找一个文本表达式,如果找到,用指定的值串代替它字符函数(续)35SQL基础培训字符函数(续)35SQL基础培训大小写处理函数这些函数转换字符串的大小写函数结果LOWER('SQLCourse')sqlcourseUPPER('SQLCourse')SQLCOURSEINITCAP('SQLCourse')SqlCourseLOWER:转换大小写混合的字符串为小写字符串UPPER:转换大小写混合的字符串为大写字符串INITCAP:将每个单词的首字母转换为大写,其他字母为小写
SELECT‘Thejobidfor’||UPPER(last_name)||‘is’||LOWER(job_id)AS"EMPLOYEEDETAILS"FROMemployees;36SQL基础培训大小写处理函数这些函数转换字符串的大小写36SQL基础培训字符处理函数
函数结果CONCAT('Hello','World')HelloWorldSUBSTR('HelloWorld',1,5)HelloLENGTH('HelloWorld')10INSTR('HelloWorld','W')6LPAD(salary,10,'*')*****24000RPAD(salary,10,'*')24000*****TRIM('H'FROM'HelloWorld')elloWorld37SQL基础培训字符处理函数函数数字函数ROUND:四舍五入指定小数的值ROUND(45.926,2)45.93TRUNC(45.926,2)45.92MOD(1600,300)100
ROUND(column|expression,n)
四舍五入列、表达式或值为n位小数位,或者,如果n被忽略,无小数位。(如果n是负值,小数点左边的数被四舍五入) TRUNC(column|expression,n)
截断列、表达式或值到n位小数,或者,如果n被忽略,那么n默认为0 MOD(m,n) 返回m除以n的余数 38SQL基础培训数字函数ROUND:四舍五入指定小数的值38SQL基础培训使用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函数经常用于确定一个值是奇数还是偶数
39SQL基础培训使用ROUND函数39SQL基础培训日期的使用•Oracle数据库用内部数字格式存储日期:世纪,年,月,日,小时,分钟和秒
•默认日期显示格式是DD-MON-RR.SELECTlast_name,hire_dateFROMemployeesWHERElast_namelike''G%';';SYSDATE函数返回:
•Date•TimeSYSDATE是一个日期函数,它返回当前数据库服务器的日期和时间。
SELECTSYSDATEFROMDUAL;40SQL基础培训日期的使用•Oracle数据库用内部数字格式存储日用日期计算•从日期加或者减一个数,结果是一个日期值•两个日期相减,得到两个日期之间的天数•用小时数除以24,可以加小时到日期上既然数据库以数字方式存储日期,你就可以用算术运算符进行计算,例如,加或减。你可以加或减数字常数以及日期。你可以进行下面的运算:运算 结果 说明 date+number 日期加一个天数到一个日期上date-number 日期从一个日期上减一个天数date-date 天数用一个日期减另一个日期date+number/24日期加一个小时数到一个日期上41SQL基础培训用日期计算•从日期加或者减一个数,结果是一个日期值41SQL日期函数
函数说明MONTHS_BETWEEN两个日期之间的月数ADD_MONTHS加日历月到日期NEXT_DAY下个星期几是几号LAST_DAY指定月的最后一天ROUND四舍五入日期TRUNC截断日期42SQL基础培训日期函数函数日期函数(续)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被截断到最近的天。43SQL基础培训日期函数(续)MONTHS_BETWEEN(date1,使用日期函数•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'44SQL基础培训使用日期函数•MONTHS_BETWEEN(‘01-SEP使用日期函数(续)假定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-9545SQL基础培训使用日期函数(续)假定SYSDATE='25-JUL-9转换函数数据类型转换•隐式数据类型转换•显式数据类型转换对于直接赋值,Oracle服务器能够自动地进行下面的转换:从到VARCHAR2orCHARNUMBERVARCHAR2orCHARDATENUMBERVARCHAR2DATEVARCHAR2对于表达式赋值,Oracle服务器能自动地进行下面的转换:从VARCHAR2orCHAR到DATE从VARCHAR2orCHAR到NUMBER46SQL基础培训转换函数数据类型转换46SQL基础培训转换函数(续)显式数据类型转换SQL提供三种函数来从一种数据类型转换值到另一种:TO_CHAR(number|date,[fmt],[nlsparams]) 转换一个数字或日期值为一个VARCHAR2字符串,带格式化样式fmt。数字转换:nlsparams参数指定下面的字符,它由数字格式化元素返回:小数字符99999.99前导009999本地货币符号L9999国际货币符号$9999如果忽略nlsparams或其它参数,该函数在会话中使用默认参数值。47SQL基础培训转换函数(续)显式数据类型转换47SQL基础培训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函数用于日期转换时的目的相同。48SQL基础培训TO_CHAR(number|date,[fmt],[n对日期使用TO_CHAR函数TO_CHAR(date,'format_model')格式模板•必须加单引号,并且区分大小写•能够包含任一有效的日期格式元素•有一个fm元素用来删除填补的空,或者前导零•用一个逗号与日期值分开
SELECTemployee_id,TO_CHAR(hire_date,'MM/YY')Month_HiredFROMemployeesWHERElast_name='Higgins';
49SQL基础培训对日期使用TO_CHAR函数TO_CHAR(date,'f日期格式模板的元素YYYY数字全写年YEAR年的拼写MM月的两数字值MONTH月的全名DY周中天的三字母缩写DAY周中天的全名MON月的三字母缩写DD月的数字天50SQL基础培训日期格式模板的元素50SQL基础培训使用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;51SQL基础培训使用TO_NUMBER和TO_DATE函数•转换字符串到数字通用函数这些函数可用于任意数据类型,并且适用于空值•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返回表达式列表中的第一个非空表达式52SQL基础培训通用函数这些函数可用于任意数据类型,并且适用于空值52SQLNVL函数转换一个空值到一个实际的值•可用的数据类型可以是日期、字符和数字•数据类型必须匹配:–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的值53SQL基础培训NVL函数转换一个空值到一个实际的值53SQL基础培训使用NVL2函数NVL2函数检查第一个表达式,如果第一个表达式不为空,那么NVL2函数返回第二个表达式;如果第一个表达式为空,那么第三个表达式被返回。expr2expr1非空时的返回值语法NVL2(expr1,expr2,expr3)在语法中:expr1是可能包含空的源值或表达式expr3expr1为空时的返回值SelectNVL2(‘1’,’notnull’,’null’)fromdual;SelectNVL2(‘1’,’notnull’,’null’)fromdual;54SQL基础培训使用NVL2函数NVL2函数检查第一个表达式,如果第一个表使用NULLIF函数NULLIF函数比较两个表达式,如果相等,函数返回空,如果不相等,函数返回第一个表达式。第一个表达式不能为NULL。语法NULLIF(expr1,expr2)在语法中:expr1是对于expr2的被比较原值expr2是对于expr1的被比较原值。(如果它不等于expr1,
expr1被返回)。
Selectnullif(‘abc’,’abcd’)fromdual;55SQL基础培训使用NULLIF函数NULLIF函数比较两个表达式,如果相使用COALESCE函数•COALESCE函数超过NVL函数的优点是COALESCE函数能够接受多个交替的值。•如果第一个表达式非空,它返回该表达式;否则,它做一个保留表达式的结合。COALESCE函数返回列表中的第一个非空表达式。
语法COALESCE(expr1,expr2,...exprn)在语法中:expr1如果它非空,返回该表达式expr2如果第一个表达式为空并且该表达式非空,返回该表达式exprn如果前面的表达式都为空,返回该表达式Selectcoalesce(‘',‘','bca')fromdual;56SQL基础培训使用COALESCE函数•COALESCE函数超过NVL函条件表达式在SQL语句中提供IF-THEN-ELSE逻辑的使用。两种用法:
–CASE表达式
–DECODE函数
CASE表达式
CASEexprWHENcomparison_expr1THENreturn_expr1
WHENcomparison_expr2THENreturn_expr2
WHENcomparison_exprnTHENreturn_exprn
ELSEelse_expr]END57SQL基础培训条件表达式在SQL语句中提供IF-THEN-ELSE逻辑DECODE函数DECODE(col|expression,search1,result1
[,search2,result2,...,][,default])DECODE函数在比较表达式(expression)和每个查找(search)值后解码表达式,如果表达式与查找相同,返回结果。如果省略默认值,当没有查找值与表达式相匹配时返回一个空值。58SQL基础培训DECODE函数DECODE(col|expression,多表显示数据&组函数合计数据59SQL基础培训多表显示数据&组函数合计数据59SQL基础培训目标完成本课后,您应当能够执行下列操作:•写SELECT语句使用等值和非等值连接从多个表中访问数据•使用外连接查看不满足连接条件的数据•识别可用的组函数•描述组函数的使用•用GROUPBY子句分组数据•用HAVING子句包含或排除分组的行
60SQL基础培训目标完成本课后,您应当能够执行下列操作:60SQL基础培训笛卡尔乘积•笛卡尔乘积的形成,当:
–一个连接条件被遗漏时
–一个连接条件不正确时
–在第一个表中的所有行被连接到第二个表的所有行时•为了避免笛卡尔乘积的形成,在WHERE子句中应当总是包含正确的连接条件。61SQL基础培训笛卡尔乘积•笛卡尔乘积的形成,当:61SQL基础培训用Oracle语法连接表使用一个连接从多个表中查询数据
SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column1=table2.column2;•在WHERE子句中写连接条件•当多个表中有相同的列名时,将表名作为列名的前缀定义连接•当数据从多表中查询时,要使用连接(join)条件。一个表中的行按照存在于相应列中的公值被连接到另一个表中的行,即,通常所说的主键和外键列。62SQL基础培训用Oracle语法连接表使用一个连接从多个表中查询数据62什么是等值连接?EMPLOYEESDEPARTMENTS63SQL基础培训什么是等值连接?EMPLOYEES用等值连接返回记录SELECTemployees.employee_id,employees.last_name,employees.department_id,departments.department_id,departments.location_idFROMemployees,departmentsWHEREemployees.department_id=departments.department_id;64SQL基础培训用等值连接返回记录SELECTemployees.empl使用表别名•使用表别名简化查询•使用表别名改善性能
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语句有效。65SQL基础培训使用表别名•使用表别名简化查询65SQL基础培训多于两个表的连接EMPLOYEESDEPARTMENTSLOCATIONS66SQL基础培训多于两个表的连接EMPLOYEESDEP非等值连接EMPLOYEESJOB_GRADES67SQL基础培训非等值连接EMPLOYEES用非等值连接返回记录SELECTe.last_name,e.salary,j.grade_levelFROMemployeese,job_gradesjWHEREe.salaryBETWEENj.lowest_salANDj.highest_sal;68SQL基础培训用非等值连接返回记录SELECTe.last_na外连接DEPARTMENTSEMPLOYEES69SQL基础培训外连接DEPARTMENTS外连接语法•你可以用一个外连接查看那些不满足连接条件的行•外连接运算符是加号(+)SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column(+)=table2.column;SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column=table2.column(+);•用外连接返回不直接匹配的记录•如果在连接条件中使用外连接操作,缺少的行就可以被返回。操作符是一个在圆括号中的加号(+),它被放置在连接的缺少信息的一侧。为了使来自不完善表的一行或多行能够被连接,该操作符有产生一个或多个空行的作用。70SQL基础培训外连接语法•你可以用一个外连接查看那些不满足连接条件的行70使用外连接SELECTe.last_name,e.department_id,d.department_nameFROMemployeese,departmentsdWHEREe.department_id(+)=d.department_id;71SQL基础培训使用外连接SELECTe.last_name,e.dep什么是组函数?组函数操作行集,给出每组的结果
EMPLOYEES在EMPLOYEES表中的最高薪水72SQL基础培训什么是组函数?组函数操作行集,给出每组的结果在EMPLOYE组函数的类型•AVG平均值•COUNT计数•MAX最大值•MIN最小值•STDDEV标准差•SUM合计•VARIANCE方差73SQL基础培训组函数的类型•AVG平均值73SQL基础培训组函数(续)每个函数接收一个参数,下面的表确定你可以在语法中使用的选项:函数 说明 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的方差,忽略空值
74SQL基础培训组函数(续)每个函数接收一个参数,下面的表确定你可以在语组函数的语法SELECT[column,]group_function(column),...FROMtable[WHEREcondition][GROUPBYcolumn][ORDERBYcolumn];使用组函数的原则DISTINCT使得函数只考虑不重复的值;ALL使得函数考虑每个值,包括重复值。默认值是ALL,因此不需要指定。用于函数的参数的数据类型可以是CHAR、VARCHAR2、NUMBER或DATE。所有组函数忽略空值。为了用一个值代替空值,用NVL、NVL2或COALESCE函数。当使用GROUPBY子句时,Oracle服务器隐式以升序排序结果集。为了覆盖该默认顺序,DESC可以被用于ORDERBY子句。75SQL基础培训组函数的语法SELECT[column,]group_f使用AVG、SUM、MIN、MAX函数你可以使用AVG和SUM用于数字数据SELECTAVG(salary),MAX(salary),MIN(salary),SUM(salary)FROMemployeesWHEREjob_idLIKE'%REP%';76SQL基础培训使用AVG、SUM、MIN、MAX函数你可以使用AVG使用COUNT函数COUNT(*)返回一个表中的行数COUNT函数有三中格式:COUNT(*)COUNT(expr)COUNT(DISTINCTexpr)COUNT(*)返回表中满足SELECT语句标准的行数,包括重复行,包括有空值列的行。如果WHERE子句包括在SELECT语句中,COUNT(*)返回满足WHERE子句条件的行数。COUNT(expr)返回在列中的由expr指定的非空值的数。COUNT(DISTINCTexpr)返回在列中的由expr指定的唯一的非空值的数。注:expr为列名77SQL基础培训使用COUNT函数COUNT(*)返回一个表中的行数7组函数和Null值所有组函数忽略列中的空值。在幻灯片的例子中,平均值只基于表中的那些COMMISSION_PCT列的值有效的行的计算。平均值计算是用付给所有雇员的总佣金除以接受佣金的雇员数(4)。SELECTAVG(commission_pct)FROMemployees;78SQL基础培训组函数和Null值所有组函数忽略列中的空值。在幻灯片的例子在组函数中使用NVL函数NVL函数强制组函数包括空值。在幻灯片的例子中,平均值被基于所有表中的行来计算,不管COMMISSION_PCT列是否为空。平均值的计算是用付给所有雇员的总佣金除以公司的雇员总数(20)。SELECTAVG(NVL(commission_pct,0))FROMemployees;79SQL基础培训在组函数中使用NVL函数NVL函数强制组函数包括空值。在创建数据组:GROUPBY子句语法用GROUPBY子句划分表中的行到较小的组中SELECTcolumn,group_function(column)FROMtable[WHEREcondition][GROUPBYgroup_by_expression][ORDERBYcolumn];在语法中,group_by_expression指定那些用于将行分组的列,这些列的值作为行分组的依据。使用WHERE子句,你可以在划分行成组以前过滤行。在GROUPBY子句中必须包含列。在GROUPBY子句中你不能用列别名。默认情况下,行以包含在GROUPBY列表中的字段的升序排序。你可以用ORDERBY子句覆盖这个默认值。如果在SELECT子句中包含了组函数,就不能选择单独的结果,除非单独的列出现在GROUPBY子句中。如果你未能在GROUPBY子句中包含一个字段列表,你会收到一个错误信息。80SQL基础培训创建数据组:GROUPBY子句语法用GROUPBY子约束分组结果:HAVING子句用HAVING子句约束分组:1.行被分组2.应用组函数3.匹配HAVING子句的组被显示SELECTcolumn,group_functionFROMtable[WHEREcondition][GROUPBYgroup_by_expression][HAVINGgroup_condition][ORDERBYcolumn];81SQL基础培训约束分组结果:HAVING子句用HAVING子句约束分使用HAVING子句SELECTdepartment_id,MAX(salary)FROMemployeesGROUPBYdepartment_idHAVINGMAX(salary)>10000;82SQL基础培训使用HAVING子句SELECTdepartment_i嵌套组函数显示最大平均薪水SELECTMAX(AVG(salary))FROMemployeesGROUPBYdepartment_id;83SQL基础培训嵌套组函数显示最大平均薪水83SQL基础培训创建和管理表84SQL基础培训创建和管理表84SQL基础培训目标完成本课后,您应当能够执行下列操作:•描述主要数据库对象•创建表•描述列定义时可用的数据类型•改变表的定义•删除、改名和截断表85SQL基础培训目标完成本课后,您应当能够执行下列操作:85SQL基础培训数据库对象表基本存储单元,由行和列组成视图逻辑地从一个或多个表中表示数据子集序列数字值发生器索引改善一些查询的性能同义词给对象可选择的名字86SQL基础培训数据库对象表基本存储单元,由行命名规则表命名和列命名:•必须以字母开始•必须是1–30个字符长度•只能包含A–Z,a–z,0–9,_,$,和#•同一个用户所拥有的对象之间不能重名•不能用Oracle服务器的保留字注:名字是大小写不敏感的,例如,EMPLOYEES与eMPloyees或eMpLOYEES作为同一个名字来处理。
87SQL基础培训命名规则表命名和列命名:87SQL基础培训CREATETABLE语句•用户必须有:
–CREATETABLE权限
–一个存储区域CREATETABLE[schema.]table(columndatatype[DEFAULTexpr][,...]);•必须指定:–表名–列名、列数据类型和列的大小schema与所有者的名字一样table表的名字DEFAULTexpr指定默认值column列的名字datatype列的数据类型和长度88SQL基础培训CREATETABLE语句•用户必须有:88SQL基础培训引用另一个用户的表•表属于另一个用户,不在该用户的方案中•在那些表名字的前面使用所有者的名字作为前缀如果一个表不属于本用户,那么,其所有者的名字必须放在表名的前面SELECT*FROMuser_b.employees;89SQL基础培训引用另一个用户的表•表属于另一个用户,不在该用户的方案中89创建表•创建表CREATETABLEdept(deptnoNUMBER(2),dnameVARCHAR2(14),locVARCHAR2(13));•确认表的创建DESCRIBEdept90SQL基础培训创建表•创建表90SQL基础培训Oracle数据库中的表•用户表:
–由用户创建和维护的表的集合
–包含用户信息•数据字典:
–由Oracle服务器创建和维护的表的集合
–包含数据库信息有四种数据字典视图,每一种有一个特定的前缀来反映其不同的目的。USER_这些视图包含关于用户所拥有的对象的信息。 ALL_这些视图包含所有用户可访问的表(对象表和相关的表)的信息。DBA_这些视图是受限制的视图,它们只能被分配有DBA角色的用户所访问。 V$ 这些视图是动态执行的视图,包含数据库服务器的性能、存储器和锁的信息。
91SQL基础培训Oracle数据库中的表•用户表:91SQL基础培训查询数据字典•查看本用户所拥有的表的名称SELECTtable_nameFROMuser_tables;•查看本用户所拥有的不同的对象类型SELECTDISTINCTobject_typeFROMuser_objects;•查看本用户所拥有的表、视图、同义词和序列SELECT*FROMuser_catalog;92SQL基础培训查询数据字典•查看本用户所拥有的表的名称92SQL基础培训数据类型
数据类型说明VARCHAR2(size)可变长度的字符数据CHAR(size)固定长度的字符数据NUMBER(p,s)可变长度的数字数据DATE日期和时间值LONG最大2G的可变长度字符数据CLOB最大4G的字符数据RAWandLONGRAW原始二进制数据BLOB最大4G的二进制数据BFILE最大4G的,存储在外部文件中的二进制数据ROWID一个64进制的数制系统,表示表中一行的唯一地址
93SQL基础培训数据类型数据类型用子查询创建表该方法既可以创建表还可以将从子查询返回的行插入新创建的表中。CREATETABLEdept80ASSELECTemployee_id,last_name,salary*12ANNSAL,hire_dateFROMemployeesWHEREdepartment_id=80;原则被创建的表要带指定的列名,并且由SELECT语句返回的行被插入到新表中。字段的定义只能包括列名和默认值。如果给出了指定的列,列的数目必须等于子查询的SELECT列表的列数目。如果没有给出了指定的列,表的列名应和子查询中的列名是相同的。完整性规则不会被传递到新表中,仅列的数据类型被定义。94SQL基础培训用子查询创建表该方法既可以创建表还可以将从子查询返回的行插入ALTERTABLE语句用ALTERTABLE语句来:•添加一个新列•修改一个已存在的列•为新列定义一个默认值•删除一个列添加列ALTERTABLEtableADD(columndatatype[DEFAULTexpr][,columndatatype]...);修改列ALTERTABLEtableMODIFY(columndatatype[DEFAULTexpr][,columndatatype]...);删除列ALTERTABLEtableDROP(column);95SQL基础培训ALTERTABLE语句用ALTERTABLE语句来:95添加新列•用ADD字句添加列ALTERTABLEdept80ADD(job_idVARCHAR2(9));添加新列的原则你可以添加或修改列。你不能指定新添加的列的位置,新列将成为最后一列。96SQL基础培训添加新列•用ADD字句添加列96SQL基础培训修改列•可以改变列的数据类型、大小和默认值ALTERTABLEdept80MODIFY(last_nameVARCHAR2(30));•对默认值的改变只影响后来插入表中的数据原则你可以增加宽度或一个数字列的精度。你可以增加数字列或字符列的宽度。你可以减少一个列的宽度,但仅在列中只包含空值或表中没有行时。你可以改变数据类型,但仅在列中只包含空值时。你可以转换一个CHAR列到VARCHAR2数据类型或转换一个VARCHAR2列到CHAR数据类型仅当列中只包含空值时,或者你不改变列的大小时。对默认值的改变仅影响以后插入的列。97SQL基础培训修改列•可以改变列的数据类型、大小和默认值97SQL基础培训删除列用DROPCOLUMN子句从表中删除列ALTERTABLEdept80DROPCOLUMNjob_id;原则列可以有也可以没有数据。用ALTERTABLE语句,一次只能有一列被删除。表被修改后必须至少保留一列。一旦一列被删除,它不能再恢复。98SQL基础培训删除列用DROPCOLUMN子句从表中删除列98SQL基础删除表•在表中的所有数据和结构都被删除•任何未决的事务都被提交•所有的索引被删除•你不能回退DROPTABLE语句DROPTABLEdept80;DROPTABLE语句删除Oracle表定义,当你删除一个表时,数据库丢失表中所有的数据,并且所有与其相关的索引也被删除。
99SQL基础培训删除表•在表中的所有数据和结构都被删除99SQL基础培训改变一个对象的名字•执行RENAME语句,改变一个表、视图、序列或同义词RENAMEdeptTOdetail_dept;注:你必须是对象的所有者100SQL基础培训改变一个对象的名字•执行RENAME语句,改变一个表、视图、截断表•TRUNCATETABLE语句:
–删除表中所有的行
–释放该表所使用的存储空间TRUNCATETABLEdetail_dept;•不能回退用TRUNCATE删除的行•作为选择,可以用DELETE语句删除行101SQL基础培训截断表•TRUNCATETABLE语句:101SQL基础培子查询&操纵数据102SQL基础培训子查询&操纵数据102SQL基础培训目标完成本课后,您应当能够执行下列操作:•描述子查询能够解决的问题类型•定义子查询•列出子查询的类型•写单行和多行子查询•描述每个DML语句•插入行到表中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年自然科学硕士生入学考试试题及答案
- 上海工艺美术职业学院《基础医学概要》2023-2024学年第二学期期末试卷
- 2025年医学检验师考试试卷及答案对比
- 应用统计入门2025年考试试题及答案
- 山西省朔州市怀仁市第一中学2025年高三年级英语试题二模试题含解析
- 2025年职业技能鉴定考试试卷及答案
- 辽宁省丹东市凤城市白旗中学2025年初三期末调研测试物理试题含解析
- 山西省怀仁一中2025届高三.十三校联考.第一次考试英语试题试卷含解析
- 工业废水处理药剂租赁及环保监管服务合同
- 工业级材料扭转试验机租赁与设备定期检修合同
- 2025四川资源集团招聘134人查看职位笔试参考题库附带答案详解
- 2024-2025学年人教版(2024)七年级英语下册Unit 6 rain or shine Section A 2a-2e 教案
- PCBA外观检验标准
- (正式版)SH∕T 3541-2024 石油化工泵组施工及验收规范
- 国家开放大学《合同法》章节测试参考答案
- 地下室长螺旋引孔施工方案完整
- GB/T 20019-2005热喷涂热喷涂设备的验收检查
- 不良资产尽职调查清单
- 国开电大应用写作形考任务6答案
- 《欧洲西部》课件2
- 中小学文言文阅读详解基础篇 56:《齐人攫金》
评论
0/150
提交评论