01--概述关系数据库概念SQL语句概述例子数据库概述02--基本查询7最简单的select语句错误的sql语句选择特定列选择算术表达式连接运算符重复行基本select语句总结03--限制和排序8where子句between条件in条件like条件null条件逻辑条件优先顺序orderby结果排序04--关联查询7等值关联更多关联条件自联结joinon联结三向联结joinon附加条件左右连接和全连接05--单行函数12函数的概念字符函数数字函数日期格式时间函数-当前时间时间函数-分解时间函数-计算时间函数-转换to_char函数常规函数case函数decode函数06--分组函数9分组函数概念分组函数语法分组函数-COUNT分组函数与空值创建数据分组分组函数常见错误排除分组结果HAVING嵌套分组函数分组函数进阶练习07--子查询3子查询单行子查询多行子查询08--集合4集合概念UNION(并集)INTERSECT(交集)MINUS(补集)09--数据操纵8数据操纵DML概念DML-INSERT单行DML-INSERT多行DML-UPDATEDML-DELETEDML-MERGE(合并)数据库事务处理控制事务处理10--创建表4创建表子查询创建表ALTERTABLE删除表11--约束3表约束创建约束添加约束12--视图4视图-概念视图-创建删除视图执行排序Top-N分析13--索引4索引概念索引创建什么情况下要创建索引删除索引14--序列5序列概念创建序列使用序列修改序列删除序列1-1关系数据库概念1、E.F.Codd博士在1970年提出了数据库系统的关系模型,这是所有关系数据库管理系统(RDBMS)的基础。2、关系模型由以下要素构成:--对象或关系集合--处理关系的运算符集--确保精确和一致的数据完整性3、关系数据库使用二维表存储信息,列表示实体模型的所有属性,比如员工编码、姓名、性别、工资、所在部门编码等,行表示一个实体的所有属性的信息,比如01、张三、男、1500等。4、多个表之间通过外键来表达关联,比如部门表存储部门的详细信息,而员工表只需要存储部门表的主键(部门编码),通过这个外键字段就建立了员工表和部门表之间的关联。1-2SQL语句概述1、SQL(结构查询语言)是美国国家标准协会制订的一种标准语言,用于操作关系数据库,使用者不需要知道数据是如何存储的,通过SQL语句就可以操作数据库。2、所有关系数据库都支持标准SQL语言进行管理。有些数据库厂商针对各自数据库的特点还做了扩展,比如SqlServer、Oracle等都有各自的扩展,学习掌握标准Sql以后,在使用某一个厂商的数据库时,可以继续学习扩展语法。3、SQL语句分类:SELECT数据检索INSERT数据操纵语言(DML)UPDATEDELETEMERGECREATE数据定义语言(DDL)ALTERDROPRENAMETRUNCATECOMMIT事务处理控制语言(DTL)ROLLBACKSAVEPOINTGRANT数据控制语言(DCL)REVOKE1-3例子数据库概述1、在本课程中使用的例子数据库是一个人力资源数据库,简称hr库,每个学员都会自动拥有一个例子数据库,假如数据库被破坏导致不能使用,在命令行输入initdb;即可以重新初始化自己的例子数据库。2、例子数据库拥有员工表(employees)、部门表(departments)、岗位表(jobs)、工作历史表(job_history)、国家表(countories)、地区表(regions)、办公场所表(locations)。3、查询hr中有几个表:showtablesfromhr;注意:每个语句都要以;作为结束4、查询某个表的结构(如employees):showcolumnsfromhr.employees;初始化例子数据库如果例子数据库不正常,可以用以下命令重新初始化:initdb;注意:这条命令不是标准sql语言,是我们系统用于支持教学的专用脚本。hr里的表查询hr里的表:showtablesfromhr;练习-了解表结构(10分钟)分别执行以下语句,查看hr中各表的结构:showcolumnsfromhr.countries;showcolumnsfromhr.regions;showcolumnsfromhr.locations;showcolumnsfromhr.jobs;showcolumnsfromhr.job_history;showcolumnsfromhr.departments;showcolumnsfromhr.employees;2-1最简单的select语句查询所有部门表的数据:select*fromhr.departments;1、理解:以上语句包含一个select字句和一个from字句,select子句确定查询哪些列的数据,from子句确定从哪个表查询。最简单的select语句也必须包含select子句和一个from子句。2、select和from都是关键字。3、*表示查询所有列。4、hr.department指查询hrschema(人力资源方案)中的departments(部门)表。5、查询出来的结果是一个二维表,表头是字段名,每一行数据即代表一个部门对象的所有信息。部门表所有数据查询出部门表的所有数据。select*fromhr.departments;练习-所有表的数据(15分钟)1、用select语句依次查询所有表的数据。select*fromhr.countries;select*fromhr.regions;select*fromhr.locations;select*fromhr.jobs;select*fromhr.job_history;select*fromhr.employees;select*fromhr.departments;2、将每个表的查询结果与之前用showcolumns语句查询出的表结构进行对照。showcolumnsfromhr.countries;2-2错误的sql语句sql语句在输入的过程中经常会出错,常见的错误比如说:1、关键字写错,如select写成了selct,from写成了form2、from对象写错了,如departments写成了department,或忘记加hr.3、字段名写错了....当sql语句写错的时候,执行sql语句会报错,给出错误信息并且会附带一个错误码,错误信息试图描述错误出现在语句的什么位置,而错误码用来指明错误的类型。练习-select改错(5分钟)找出以下语句的错误,修改使之能正确运行:selcet*formhr.employes;2-3选择特定列1、除了用*查询所有列之外,我们也可以在select子句中指定列名,按顺序列出所有想要查询的列名,用逗号分隔,例如:selectlocation_id,department_idfromhr.departments;2、在查询的每个列名后面,可以设置列别名,在列名和列别名之间可选用关键字as,例如:selectlocation_idlid,department_idasdep_idfromhr.departments;如果列别名包含空格或特殊字符,或者想大小写区分,可用双引号括起来。练习-指定列和别名(5分钟)在员工表中查询员工编码、姓氏、岗位编码、聘用日期,将标题分别改为:员工#、姓名、岗位、HireDate。查询员工表指定字段查询员工表,显示每位员工的员工编号、姓氏(last_name)、职务代码、聘用日期。如果忘记了字段名,记得用showcolumnsfromhr.employees;列别名将以下sql语句的列名修改为中文别名selectlocation_id,department_idfromhr.departments;2-4选择算术表达式1、在select子句中,可以使用算术表达式,可将已有列参与表达式计算输出一个新的显示列(只是显示,没有真的存储新列),例如:selectlast_name,salary,salary+300fromhr.employees;2、算术表达式可用运算符+-*/,其优先级为*/+-,可用小括号强制优先计算。例如:selectlast_name,salary,12*(salary+100)fromhr.employees;以上最后一列表示年薪,月薪加每月奖金然后乘以12个月。3、空值:如果某一列没有存入数据,就认为该值为空,空不同于零或空格,就是指没有,我们的例子数据库中,将空值的查询返回null,例如:selectlast_name,job_id,salary,commission_pctfromhr.employees;提成比率字段,只有销售岗位才有,普通员工的提成比率为空值。4、如果算术表达式中的字段为空值,则结果也为空值,不会报错。例如:selectlast_name,12*salary*commission_pctfromhr.employees;演示-工资加300查询员工表的姓氏、工资、工资+300。selectlast_name,salary,salary+300fromhr.employees;演示-年薪表达式查询员工表中每个员工的年薪,年薪为每个月月薪+100,然后乘以12月。selectlast_name,salary,12*(salary+100)fromhr.employees;演示-空值查询员工表的提成比率selectlast_name,job_id,salary,commission_pctfromhr.employees;演示-表达式中的空值查询员工的年度提成金额selectlast_name,12*salary*commission_pctfromhr.employees;练习-找错(5分钟)以下语句有四个错误,请找出错误所在:selectemployee_id,last_namesalx12ANNUALSALARYfromhr.employees;2-5连接运算符1、连接运算符||:将列链接到其它列、字符串、算术表达式或常数值,从而形成一个单一的输出列。例如:selectlast_name||first_nameasnamefromhr.employees;2、文字字符串:用单引号包含,可用在select子句中,作为文字字符串,查询结果中每个行都会显示。select'abc'fromhr.employees;3、文字字符串可用于连接运算,用以分割及描述合成的内容,例如:select'姓:'||last_name||',名:'||first_nameasnamefromhr.employees;演示-连接姓名将员工表的姓氏和姓名连接起来,形成一个输出列“name”。selectlast_name||first_nameasnamefromhr.employees;演示-文字字符串演示文字字符串select'hello'fromhr.employees;演示-文字连接将姓氏和名字连接起来,中间增加文字字符串说明。select'姓:'||last_name||',名:'||first_nameasnamefromhr.employees;练习-员工头衔(5分钟)将员工姓氏与岗位连接起来,中间用逗号及空格分割,然后设置别名为Employeeandtitle。2-6重复行1、在select查询语句中,默认结果会显示所有的行,即使这些行是重复的,例如selectdepartment_idfromhr.employees;查询结果会看到许多部门编码是重复的。2、可以通过distinct关键字消除重复行,