SQL语言基础主要内容基本的SELECT语句约束和排序数据单行函数多表显示数据、组函数合计数据创建和管理表子查询&操纵数据内置约束创建视图其他数据库对象基本的select语句目标完成本课后,您应当能够:•列出SQLSELECT语句的功能•执行基本的SELECT语句SQLSELECT语句的功能•列选择:你能够使用SELECT语句的列选择功能选择表中的列,这些列是你想要用查询返回的。当你查询时,你能够选择你查询的表中指定的列。•行选择:你能够使用SELECT语句的行选择功能选择表中的行,这些行是你想要用查询返回的。你能够使用不同的标准限制你看见的行。•连接:你能够使用SELECT语句的连接功能来集合数据,这些数据被存储在不同的表中,在它们之间可以创建连接。在后面的课程中你将学到更多关于连接的内容。基本SELECT语句SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable;•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_idASEmployeeDetails”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_nameLIKE'S%';使用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('SQ