您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 数据库培训-SQL基础
Oracle数据库基础山东众阳软件有限公司张林18663736650目录Oracle数据库概述SQL基础处理数据第三方工具简单使用Oracle数据库概述Oracle(甲骨文)公司是世界上最大的企业软件公司,主要向全球用户提供数据库、工具和应用软件以及相关的咨询、培训和支持服务。Oracle数据库(OracleDatabase)是甲骨文公司推出的关系型数据库产品,是世界上使用最为广泛的数据库管理系统,到目前仍旧在数据库市场上占有主要份额。关系型数据库:介绍关系型数据库:简而言之就是关系/二维表的集合。Oracle数据库表名:EMPLOYEES表名:DEPARTMENTS关系型数据库:表的术语2.主键3.列4.外键6.空值1.行5.域空值既不是空格也不是0多表关联表中每一行数据均由主键保证唯一性。多表通过外键关联表:EMPLOYEES表:DEPARTMENTS主键主键外键…Oracle的总体框架结构Oracle实例一个oracle实例由一系列的后台进程和内存结构组成当启动实例的时候,oracle会开辟一块内存(SGA)用于存放数据库信息,并启动后台进程,SGA内的信息是被后台进程所共享的。实例和数据库的关系实例是“内存”和“后台进程”的集合,“数据库”是数据的物理存储,要特别注意,一个实例可以用于一个数据库,多个实例也可同时用于一个数据库(RAC),实例和数据库是多对一的关系。Oracle的内存结构Oracle的内存由PGA(ProgramGlobalArea)和SGA(SystemGlobalArea)组成。PGA中包括服务器进程的数据和控制信息,其中的信息是不被共享的。SGA中包括数据库实例的数据和控制信息,是可以被共享的。SGA被划分成多个区域,主要的区域如下:数据库高速缓冲区(DatabaseBufferCache),用于存放数据文件的副本,所有的用户进程都可以并发的连接到这个实例,共享数据库高速缓冲区中的数据。共享池(SharedPool)又分为库缓冲区(LibraryCache)和字典缓冲区(DictionaryCache)。库缓冲区用于存放使用过的sql,包括这些sql语句的执行计划及这些sql的语法分析树。数据库对象的信息存储在数据字典表中,包括用户账号数据、数据文件名、段名、盘区位置、表的说明和权限等,当数据库需要这些信息时就会读取数据字典并将这些信息存储在字典缓冲区中。重做日志缓冲区(RedoLogBuffer)用于存放用户对数据库的改变,这是一片循环使用的内存区域。oracle的存储结构Oracle的存储结构分为物理存储结构和逻辑存储结构。物理存储结构由数据文件、联机日志文件、控制文件构成,这些是数据库严格意义上的“物理结构组成”,除此之外,组成oracle的还有其他的一些文件。Oracle存储的逻辑结构由数据块(DataBlock)、区(Extent)、段(Segment)和表空间(Tablespace)组成,块是最基本的存储单元,它们是一个自下而上的逻辑结构。数据块数据块数据块由块头、表目录、行目录、行数据和空余空间五部分组成。我们又把块头、表目录、行目录合称为头部信息区,存放块的信息而不存放数据。数据块与操作系统块不同,但是又有关系,一个数据块的大小是操作系统块大小的整数倍。行链接:如果插入的一行数据很大以至于一个块存不下,oracle就会把一行数据分成几段存在数据块中,这个过程叫行链接。行迁移:数据块中存在一条记录,update操作使记录变长,而当前块没有足够的空间容纳这条记录,无奈之下,只能把整行数据移到一个新的数据块中,并在原数据块中留下一个指针指向新的数据块,被移动的数据的rowid保持不变,这就是行迁移。注意行链接和行迁移都会影响数据库的性能。区和段区是数据库的一个逻辑存储单元,它由连续的数据块组成,特别强调的是区是一段连续的存储空间,当段中的空间耗尽时oracle会分配一个新的区给这个段。可以通过存储参数来控制区的分配。段是存放数据的逻辑存储单元,由一系列的区组成,包括数据段、索引段、临时段、回滚段等。表空间系统默认创建的是小文件表空间,是传统的表空间类型。大文件表空间由一个单独的很大的数据文件组成,使oracle能够使用和管理超级大的文件。系统表空间(SYSTEM):存放数据字典的数据,一旦打开数据库,系统表空间必须在线。辅助表空间(SYSAUX):对系统表空间的补充,存放数据库组件的信息,必要时可分担系统表空间的负载。回滚表空间(UNDOTBS):存放回滚数据。每个数据库可以有多个回滚表空间,但只能有一个活动的。临时表空间:是临时存放数据的地方,创建用户的时候应该给用户指定一个临时表空间。USERS表空间:如果创建用户时没有使用DEFAULTTABLESPACE关键字指定默认表空间,oracle会将其指定给用户作为默认表空间。SQL基础什么是SQL?SQL:结构化查询语言(StructuredQueryLanguageSQL)•是访问Oracle数据库中数据的描述方法SQL语言主要提供下述功能:•查询表中数据行•插入、修改、删除表中的数据行•创建、修改、删除数据库对象•保证数据库的一致性和完整性•控制数据库及其访问主要的SQL语句SELECTINSERTUPDATEDELETEMERGECREATEALTERDROPRENAMETRUNCATECOMMITROLLBACKSAVEPOINTGRANTREVOKE数据获取数据处理语言(DML)数据定义语言(DDL)事务控制语言(TCL)数据控制语言(DCL)COMMENT基本SQLSELECT语句SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable[WHEREcondition(s)][ORDERBY{column,expr,alias}[ASC|DESC]];在最简单的形式中,SELECT语句必须包含下面的内容:一个SELECT子句,指定被显示的列一个FROM子句,指定表,该表包含SELECT子句中的字段列表选择所有列与指定列SELECT*FROMdepartments;用SELECT关键字后面的星号(*),能够显示表中数据的所有列。SELECTdepartment_id,location_idFROMdepartments;用SELECT语句来显示表的指定列,指定列名之间用逗号分隔。SELECT后也可以指定伪列,一个伪列的行为像表中的列一样,但不是真的存储在表中。不能插入或删除伪列的值。一些可用的伪列如下:CURRVAL、NEXTVAL、LEVEL、ROWID和ROWNUM。算数运算符用算术运算符创建数字和日期数据的表达式上表列出了SQL提供的算术运算符。除了FROM子句,你可以在任何一个SQL语句的子句中使用算术运算符,注意优先级。对于日期数据,只能对DATE和TIMESTAMP数据类型使用加和减操作。操作+-*/说明加减乘除空值null是一个未分配的、未知的值,既然是未知的,就有无数种可能性null不是0,也不是空格判断一个字段是否为NULL,应该用ISNULL或ISNOTNULL,而不能用‘=’,同样的,对NULL的!=、、、=、=等操作的结果都是未知的,也就算说,这些操作的结果仍然是NULL包含空值的算术表达式计算结果为空总结:除了ISNULL、ISNOTNULL以外,对NULL的任何操作的结果还是NULL经典的例子SQLCREATEORREPLACEPROCEDUREP1(P_ININNUMBER)AS2BEGIN3IFP_IN=0THEN4DBMS_OUTPUT.PUT_LINE('TRUE');5ELSE6DBMS_OUTPUT.PUT_LINE('FALSE');7ENDIF;8END;SQLCREATEORREPLACEPROCEDUREP2(P_ININNUMBER)AS2BEGIN3IFP_IN0THEN4DBMS_OUTPUT.PUT_LINE(‘FALSE’);5ELSE6DBMS_OUTPUT.PUT_LINE(‘TRUE’);7ENDIF;8END;如果传入的是null值,结果是什么呢?定义列的别名列别名:改变列标题的名字可用于计算结果跟在列名后面或在列名和别名之间使用AS关键字如果别名中包含有空格、或特殊字符、或大小写敏感,要求用双引号SELECTlast_nameASname,commission_pctcommFROMemployees;连字运算符连字运算符:连接列或者字符串到其它的列用两个竖线表示(||)构造一个字符表达式的合成列SELECTfirst_name||last_nameASEmployeesFROMemployees;文字字符串文字字符串是包含在SELECT列表中的一个字符串,一个数字或者一个日期日期和字符的文字字符串值必须用单引号括起来每个文字字符串在每行输出一次SELECTlast_name||'isa'||job_idAS“EmployeeDetails”FROMemployees;使用WHERE子句用WHERE子句限制返回的行SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable[WHEREcondition(s)];WHERE子句跟着FROM子句WHERE限制查询满足条件的行condition由列名、表达式、常数和比较操作组成WHERE子句能够比较列值、文字值、算术表达式或者函数,WHERE子句由三个元素组成:列名,比较条件,列名、常量或值列表。字符串和日期WHERE子句中:字符串和日期的值必须包含在单引号中,但是,数字常数不应该包含在单引号中字符串的值是大小写敏感的,日期值是格式敏感的日期的默认格式是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时要求两个条件同时为真使用
本文标题:数据库培训-SQL基础
链接地址:https://www.777doc.com/doc-978443 .html