Oracle数据库基础教程_第1页
Oracle数据库基础教程_第2页
Oracle数据库基础教程_第3页
Oracle数据库基础教程_第4页
Oracle数据库基础教程_第5页
已阅读5页,还剩423页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章Oracle简介

请将手机调整到震动或静音状态Oracle发展历史I1977–在‘软件开发实验室’基础上创建Ampex软件公司为中情局设计一套名叫Oracle的数据库,Ellison是程序员之一。1978-更名为关系软件公司(RSI)1979–1983甲骨文第2版是在1979年发布的世界上第一个商用关系数据库成长与挣扎-作为创业企业的生命在1982年更名为甲骨文公司甲骨文第2版用C语言重写1984–1986在荷兰,英国,德国,瑞典,瑞士,法国,挪威,西班牙,…等设立办公室甲骨文在1986年公开上市收入5500万美元1987–成为世界上最大的数据库管理系统公司收入1.31亿美元开始应用业务,开始咨询和技术支持服务1989–总部搬迁到到硅谷红木海岸重点放在销售业绩上,收入5.71亿美元LarryEllison(拉里.埃里森)位于红木海岸的总部Oracle发展历史II1997–Oracle81999–Oracle8i正式进入互联网时代2001–Oracle9iRAC10亿美元减省计划

收入108.60亿美元边际利润由19.6%,升上31.4%,成为哈佛学院的商业个案。2002–

CreationofAdvancedProductServices(APS)甲骨文推出外包服务收入96.73亿美元2003–Oracle10gEnterpriseGridComputing2004–2006收购PeopleSoft(仁科),Oblix,Retek,TimesTen,ProfitLogic,G-Log,Siebel,360Commerce,SleepyCat,Portalandmore2007–Oracle11g2008–85亿美元收购BEA,商用中间件Tuxdeo、Weblogic供应商。2009–Oracle11g

R2(第二版),74亿美元收购Sun,拥有了自己的硬件存储和服务器。甲骨文收购最佳的一流企业EnterpriseContentManagementPerformanceManagementIdentity&AccessManagementMiddlewarePlatformandManagementBusinessIntelligenceDataIntegrationOperatingSystemsSystemsManagementVirtualMachines(pending)(pending)Oracle(ORCL)股票历史Source:甲骨文公司

规模242亿收入50多类产品和行业NO.1遍及145个国家的37万客户3万个合作伙伴2005年以来,花费400亿美元收购超过60家公司10.6万雇员Oracle在线社区里有1000万开发者创新与投资2万9千名开发人员和工程师1.55万名客户支持专家,支持27种语言2万明实施顾问100万名学生支持870个独立的Oracle用户组,包含35万5千名用户OracleDatabase11gRelease2

降低IT成本降低服务器成本5倍提高性能至少10倍降低存储成本10倍消除停机时间和未利用冗余DBA的生产力提高至少2倍世界第一的数据库DatabaseMarketDatabaseforUnixOracleIBMMicrosoftOtherSybaseOracleIBMOthersSource:Gartner2009RDBMSVendorShares,April2010&IDCDataWarehouse2008VendorShares,August2009

DataWarehouseMarketOracleIBMM/softTeradataOthersDatabaseforLinuxOracleIBMTeradataOthersOracleDatabase11gRelease2Availablesince1stSeptember2009AsofJune16,2008:OracleDatabase11gStandardEditionOneonDellPowerEdge2900(WorldrecordTPC-Cprice/performanceresult).97,083tpmC,.68/tpmC,available6/16/08.MicrosoftSQLServeronHPProLiantML350G5,82,774,$0.84/tpmC,available03/27/07(MicrosoftBestTPC-Cprice/performanceresult)..

IBMDB/2onHPProLiantML350,18,661tpmC,$1.61tpmC,available12/15/05.BestTPC-CPricePerformanceonLinux:OracleDatabase10gStandardEditionOnew/OELonHPProLiantML350G5,100,926tpmC,.74/tpmC,available6/8/07.Source:TransactionProcessingPerformanceCouncil()

OracleDatabase-最佳价值BestPricePerformanceonBOTHLinuxandWindowsSingleIntelProcessorWorldRecordTPC-CPricePerformanceOracle数据库版本4+CPUs>500GBDBsizeSingleorclusteredupto4CPUs<500GBDBsize2CPU<500GBDBsizeUses1CPU<4GBDBsize

1instanceperCPUUseupto1GBRAMFee-basedSupport

availableFull-featureddatabaseforSMBswithoptionalclusteringsupport(upto4CPUs)Fee-basedSupport

availableLarge-scaleEnterprises

thatdemand

high-performanceBI(ETL,DW,OLTP),security,scalability,availability,etc.FreeOTN

CommunityForumNon-Oracledevelopers,opensourcedevelopers,newDBAs,students,non-OracleISVs,hardwarevendorsFee-basedSupport

availableLow-priceoptionforSMB/LOBDeployments,ISVswhoneedasupportedOracledatabase支持平台AvailableformultipleoperatingsystemsWindows(2000,2003,2008,XP,Vista)Linux(OracleEnterprise,RedHatEnterprise,SuseEnterprise)SolarisHP-UXAIXMacOS/Xz/OSOnmultiplehardwareplatformsIntelx86(32/64bit)ItaniumSparcPowerPCDevelopOnce,DeployAnywhereClusterSingleUserSMPDesktopServerUniprocessorAIXLinuxSolarisHP-UXHPTru64HPVMSWindowsOS/390GridCoreFeaturesProgrammableServersidelogic,applications,triggers,…PL/SQL,Java,.Net,C,C++,PHP,PerlEasyDevelopmentApplicationExpress,SQLDeveloper,JDeveloperNetworkedLDAP,HTTP,WebDAV,FTP,WebServices,MessageQueuingContentAwareXML,Bio-Informatic,Text,Spatial,ImagesSelfManagingAutomaticStorageManagement,MemoryAllocation,PartitionManagement,…应用开发ApplicationExpress

FASTNativeTransparentJITCompilerEasyJDK-likeenvironment

FASTNativeCompilerFineGrainedDependencyTracking

MigrationWorkbenchThirdpartydatabasesupportSQLDeveloperPL/SQLJavaPHP

ScalabilitywithDatabaseResidentConnectionPoolAccessmigrationFlashCharting,PDFoutput.NET

IntegrationwithVisualStudio2005MicrosoftADO.NET2.0supportSQLDeveloper

DatabaseDevelopmentProductivityToolTargetedattheDBA-DeveloperRichClientSQLplusfunctionalityRequiresnoOraclehome;simpletoinstall甲骨文部分全球知名客户第2章Oracle的安装

课程考核(分数为期末最终成绩)1.平时考勤16次课,16分。2.作业5次作业,50分。

包括数据库的安装、配置、SQL语言应用,PL/SQL的应用、数据库的备份、数据库的管理、闪回技术等等。

作业形式:实作检查、使用报告等。3.期末在线考试90分钟,34分。

OCP考试相关试题原题

43/moodle考试前开通安装前的准备Linux光盘包含以下内容:1.VmwareWorkstation7.1.2虚拟机2.OracleEnterpriseLinux5.5五个iso文件3.安装Oracle数据库前的rpm补丁包,包括二进制包和源代码包两种格式。Database光盘包含以下内容:1.32位Linux系统的Oracle11gR2安装文件两个。2.64位Linux系统的Oracle11gR2安装文件两个。安装的步骤

1.安装虚拟机VmwareWorkstation2.安装操作系统OracleEnterpriseLinux3.安装RPM补丁4.安装Oracle数据库Vmware中安装OELVmware中安装OEL安装成功后的OEL登录界面进行实际安装操作……Vmware中安装OEL打系统补丁两种不同类型的rpm包,安装方法也不一样:libaio-0.3.106-3.2.srcsysstat-7.0.2-11.el5.i386unixODBC-2.2.11-7.1.i386unixODBC-devel-2.2.11-7.1.i386pdksh-5.2.14-36.el5.src1.二进制包的安装rpm–ivh包名称2.源代码包的安装解压rpmbuild–bb包名称.specrpm–ivh包名称进行实际安装操作……OEL中安装OracleSQL*Plus工具主要用于数据查询和数据处理。利用SQL*Plus可以将SQL与Oracle专有的PL/SQL结合起来进行数据查询和处理。SQL*Plus工具具备以下功能:对数据表可以执行插入、修改、删除、查询操作,以及执行SQL、PL/SQL块。查询结果的格式化、运算处理、保存、打印以及输出Web格式。显示任何一个表的字段定义,并与终端用户交互。连接数据库,定义变量。完成数据库管理。运行存储在数据库中的子程序或包。启动/停止数据库实例。启动SQL*Plus1.显式启动Sqlplus用户名/密码@连接标示符[AS{SYSOPER|SYSDBA|SYSASM}]]2.隐式启动Sqlplus3.nolog启动Sqlplus/nolog退出SQL*Plus1.exit2.quit获取帮助HELPHELPINDEXHELP具体命令查看版本Sqlplus–V|vSQL*Plus中使用SQL语言Sqlplus/nologConnectscott/tigerSelectempno,ename,job,salfromempwheresal<2200;SQL*Plus命令SQL*Plus编辑命令显示缓冲区的内容:LIST显示SQL缓冲区的所有行LISTn显示SQL缓冲区中的一行到n行LISTmnSQL缓冲区中的从第m行显示到第n行编辑当前行CHANGE/旧字符串/新字符串CHANGE/字符串/删除当前字符串SQL*Plus编辑命令SQL*Plus编辑命令增加一行 INPUT在一行后追加文本APPEND删除一行DELSQL*Plus调用系统编辑程序EDITLinux环境下先设置默认的exportEDITOR=/usr/bin/vimWindows环境下,会打开记事本进行编辑处理SQL*Plus文件操作保存文件

SAVE文件名读取文件GET文件名SQL*Plus调用操作系统命令Host命令参数SQL*Plus运行命令START文件名@文件名SQL*Plus清除命令清除缓冲区 Clearbuffer清除屏幕 clearscreenSQL*Plus列出表定义DESCRIBE表名称SQL*Plus连接数据库CONNECT用户名/密码@连接标示符[AS{SYSOPER|SYSDBA|SYSASM}]]SQL*PlusSPOOL命令SPOOL命令可以实现将屏幕所出现的一切信息记录到操作系统的文件中直到SPOOLOFF为止。文件后缀为LST。SQL*PlusSETSET命令用于设置SQL*Plus系统的环境变量,包含许多子命令,这里介绍几个常用的命令。1.设置服务器输出缓冲区SQL>SETSERVEROUTPUTON;

在编写存储过程时,我们有时会用dbms_output.put_line将必要的信息输出,以便对存储过程进行调试,只有将serveroutput变量设为on后,信息才能显示在屏幕上。serveroutput默认值为off。SQL*PlusSET2.设置一行可以容纳的字符数SQL>SETLINESIZE200;系统默认每行显示80个字符,当SQL*Plus输出LINESIZE指定数量的字符后,随后的数据就会折叠到下一行显示。3.设置一页可以容纳的行数SQL>SETPAGESIZE40;系统默认每页显示14行,当SQL*Plus输出PAGESIZE指定数量的字符后,随后的数据就会到下页显示。SQL*PlusSET4.设置显示查询耗时SQL>SETTIMINGON;SQL>selecttable_namefromtabs; . . .SQL*PlusSET设置提示符SQL>SETSQLPROMPT"提示符";SQL*Plus默认的提示符就是“SQL>”,我们也可以通过setsqlprompt命令进行修改。SQL>setsqlprompt“Oracle11gR2>”Oracle11gR2>setsqlprompt"_user于_date登录在_connect_identifier上>"SQL*PlusSHOW1.显示当前连接用户 SQL>SHOWUSER2.显示错误 SQL>SHOWERRORS3.显示所有 SQL>SHOWALLSQL*Plus运行PL/SQL块创建存储过程createorreplaceprocedurewithpara(empnumberinvarchar2,retoutvarchar2)asBeginselectENAMEintoretfromEMPwhereEMP.EMPNO=empnumber;DBMS_OUTPUT.PUT_LINE(ret);EXCEPTIONWHENNO_DATA_FOUNDTHENret:=‘没找到这个员工!’;DBMS_OUTPUT.PUT_LINE(ret);end;SQL*Plus运行PL/SQL块执行存储过程 SQL>setserveroutputon; SQL>varoutput_varvarchar2(20); SQL>executewithpara(7369,:output_var); SQL>executewithpara(0000,:output_var);第4章SQLDeveloper内容安排简介为什么要使用SQLDeveloper?特点连接建立和浏览数据库对象查询和更新数据执行查询创建和调试PL/SQL运行数据库报告集成开发环境扩展性Dr.DBAonSQLDeveloper"DatabasedeveloperswillloveProjectRaptor,Oracle'snewgraphicaltoolforcreatingandbrowsingdatabaseobjects.Withafewclicksyoucaneasilycreateanddebugstoredprocedures,andtestSQLstatementsandviewoptimizerplans.Raptorissmall,fast,andfun,andperhapsbestofall,it'sFREE!"-KenJacobs,VPProductStrategy,ServerTechnologiesDivision,OracleAskTomonSQLDeveloper"Thistoolhasthepowerofthecommandline,withallofthebenefitsofagraphicalinterface.

Nocompromises."TomKyte注:Asktom是Oracle的付费技术支持网站

SQLDeveloper提供了一个免费的数据库客户端开发工具全面的核心功能极高得用户体验提高工作效率简化数据库开发任务刚开始需要关注的对象浏览,对象创建SQL工作表(commandandscripts)PL/SQL编辑,调试开发者中心,用户扩展报告SQLDeveloperDevelopedintheJDeveloperIDELeveragingarobustextensibleIDEFrameworkFirstindependentlybrandedproductonJDeveloperIDE在Oracle及以上版本使用

使用JDBCThin驱动

不需要OracleHomeJDBCType2driveralsosupported绑定JRE1.5解压下载文件后就安装完成支持Windows和Linux平台1.0产品支持MacOSX数据库开发工具UserinterfaceButtons,Forms,FieldsApplicationLogicBusinessLogic,BPEL,WebServicesDataLogicProcedures,Packages,TriggersApplicationDataTables,Rows,ColumnsDatabaseBackup,Recovery,Configuration应用开发者数据库开发者数据库管理员AppExpress.NETJDeveloperSQLDeveloperEclipseEnterpriseManager数据层应用框架DBDevToolDTPPHP对数据库开发者承诺EclipsePlanningOraclesupportforDTP1.0forEclipse3.2JDeveloperDatabasesupportinOracleJDeveloper(10.1.3)SubsequentreleasestoincorporateSQLDeveloperPHPDevelopmentZendCoreforOracleApplicationExpressIncludesbasicSQLWorkshopfunctionality.NetDevelopmentOracleDeveloperToolsforVisualStudio.NetSQLDeveloperOracle'spremiertoolfordatabasedevelopmentWhyDoIneedSQLDeveloper?对Oracledatabase容易的,图形化界面整洁,直观的界面多平台支持,包括Windows,Linux,andMacOSX。强大的功能集免费的AProductIntroductionCreatingConnectionsCreatingandBrowsingObjectsQueryingandUpdatingDataExecutingQueriesCreatingandDebuggingPL/SQLRunningandDefiningDatabaseReportsReviewingIDEfeaturesTakingadvantageofExtensibilityDatabaseConnectionsCreateandtestconnectionsFormultipledatabasesFormultipleschemasStoreoften-usedconnectionsImportandexportconnectionsReuseconnectionsDatabasebrowsingPL/SQLDevelopmentRunningreportsImportconnectiondetailsfromtnsnames.oraObjectBrowsingTreeBasedObjectBrowserCreateandEditDatabaseObjectsCreateandBrowseUsersSupportforcommonobjectsTables,Views,IndexesPackages,Procedures,Functions,TriggersTypesSequencesMaterializedViewsandLogsSynonyms(publicandprivate)DatabaseLinksRecycleBinOtherUsersQueryingandUpdatingDataBrowsetablegriddataFilterOrderRunscriptsformassupdatesUsegridforsinglevalueupdatesTrackupdates

throughmessagelogFilterandsortdata

forviewsSQLWorksheetSyntaxHighlightingCodeInsightSingleStatement

ExecutionScriptExecutionCodeFormattingCommandHistoryExplainPlanHTPandOWAoutputBindVariableSupportPL/SQLEditingFullFunctionEditorCodeSnippetViewerCodeFormatterSyntaxHighlightingCodeInsight(autocomplete)CodeFoldingInlineErrorReportingCodeBookmarkingCustomizableQuickKeysCustomizableCodeSnippet

ViewerRunandDebugPL/SQLRunProcedures,Functions,andPackagesDBMS_OUTPUTFunctionreturnvaluesOUTparametersRunPL/SQLdialogSpecifyruntargetShowsparameterinformationGenerateseditablePL/SQL

blockforpopulatingparametersFullfunctioningdebuggerControlprogramexecution

(Stepinto,over…)InspectandmodifyvariablesConfigurebreakpointconditionsReportingSuiteofReportsDataDictionaryDBAMonitoringTableObjectPL/SQLObjectUserDefinedReviewingtheIDEConnectionsNavigatorReportsNavigatorFreezeviewSplitscreendetailsDockablewindowsDouble-clicktabmaximiseDraganddropsnippetsContextmenus…Checkforupdates…ExtensibilitySQLDeveloperleveragestheJDeveloperIDE,thusgivingdeveloperstheoptiontoextendthefunctionalityUserextensionsUsersalreadywritingtheirownextensionsCustompluginse.g.OracleMigrationWorkbenchwillbeanextensionTimelineEarlyAdopterreleaseonOTN–December28th2005SubsequentEarlyAdopterreleasesearly2006HugepositiveresponsefromtheOracleusercommunity48103downloadsfromOTN(1Janto9Feb‘06)Productionreleasescheduledforearly2006DirectionSupportedbyOracleSupportforanycustomerswithcurrentOracleDatabasesupportcontractsSQLDevelopertobeincludedinJDeveloper(post10.1.3)ProducttranslationsBasicdeveloperDBAsupportPerformanceandTuningModelingFile-OrientedPL/SQLDevelopmentIntegrationofMigrationToolsKnowledgebase(integrated,indexed,andscrubbedversionof)SupporttheEclipseDTPprojectbyincorporatingfeaturesfromSQLDeveloper实际演示SQLDeveloper更多信息请访问FreeSoftwareDownloadGettingStartedInstallationGuideOnlineHelpReleaseNotesFeatureMatrixOtherInformationDiscussionForumTechnicalInformation/technetwork/developer-tools/sql-developer/overview/index.html相关技术OracleDatabase10gOracleDatabase10gExpressEditionOracleApplicationExpress(akaHTMLDB)OracleJDeveloperPL/SQLSQL*PlusOracleDatabase11g总结轻便易于安装初始版本有良好的功能覆盖Browseschemas,usersanddataCreateandupdateobjectsCreate,executeanddebugPLSQLRunandcreateuserdefinedreports未来版本

StatementofdirectionyettobepublishedFocusedoncustomersatisfactionIncludingfeaturessuchastuning,sourcecodecontrol,fileorientedPL/SQLdevelopment…免费第5章SQL概述SQL的发展1970年IBM的E.F.Codd提出关系模型。1974年Boyce和Chamberlin提出了StructuredEnglishQueryLanguage(SEQUEL),简称SQL。1975-1979年IBM的SanJose在IBM370计算机上研制了SystemR关系型数据库系统,支持SQL。1979年ORACLE第一个推出基于SQL的关系型数据库系统。SQL的标准第一个SQL标准是1986年10月由ANSI(美国国家标准局)颁布的,它是一个美国标准,即SQL86。1989年ANSI颁布第二个SQL标准,即SQL89。1992年ANSI颁布了SQL92,即SQL2。1999年ISO颁布了SQL3。2003年ISO颁布了SQL4。2006年ISO颁布了SQL2006。2008年ISO颁布了SQL2008。SQL的功能DDL:用于定义,修改,删除数据库模式对象,进行权限管理等。DQL:用于查询,只有一条语句,但使用最为广泛,占实际应用SQL语句的80%左右。DML:用于生成,修改,删除数据库中的数据。TCL:用于把一组DML语句组合起来形成一个事务并进行事务控制。DCL:用于存取权限的控制。88SQL的特点1.风格统一2.高度非过程化3.面向集合的操作方式4.灵活的使用方法5.语言简洁,易学易用89SQL的动词SQL功能动词SQL功能动词数据定义CREATE、DROP、ALTERRENAME、TRUNCATE数据操纵INSERT、UPDATE、DELETE、MERGE数据控制GRANT、REVOKE事务控制COMMIT、ROLLBACKSAVEPOINT数据查询SELECTOracle11g的示例用户模式SCOTT用户和模式HR用户和模式SCOTT用户在Oracle的数据库产品中,一直有个默认用户SCOTT,这是为了纪念Oracle四个创始人中的的BruceScott。而SCOTT用户的默认密码tiger,则是当时Scott养的猫的名字。SCOTT模式运行sqlplusscott/tiger重新登录既可进入SCOTT对应模式。查看当前scott用户的所有的表:SQL>selecttable_namefromtabs;TABLE_NAMEDEPTEMPBONUSSALGRADEHR用户和HR模式Oracle中HR用户是个示例用户,是在创建数据库时选中“示例数据库”后产生的,HR模式由7个表组成,包含一个简单人力资源数据库的模拟数据。HR模式下表的关系图ORACLE数据类型当用户在数据库中创建数据表的时候,需要定义表中所有字段的类型。Oracle中的数据类型大约分为character、number、date、LOB和RAW等类型还有一些自定义的数据类型ORACLE数据类型用企业管理器查看基本的数据类型Character数据类型CHAR(<size>)数据类型 固定长度的数据类型,如果某个数据比定义长度短,那么补空格,如果长度大于定义长度将会触发错误信息。最大支持长度为2000字节如下例:

create

tableaa(achar(10))

insert

intoaavalues('12345678912');

insert

intoaavalues('1');

selectlength(a)fromaawherea='1';

selectlength(trim(a))fromaawherea='1';Character数据类型VARCHAR(<SIZE>)是VARCHAR2数据类型的快照VARCHAR2(<SIZE>)是可变长度的数据类型。最大字符长度是4000字节再看下例:

alter

tableaamodify(avarchar2(10));

insert

intoaavalues('12345678912');

insert

intoaavalues('1');

selectlength(a)fromaawherea='1';Character数据类型NCHAR(<SIZE>)和NVARCHAR2(<SIZE>)是存储unicode字符数据的NUMBER数据类型带小数位的就是浮点类型,带小数位的语法如下:

NUMBER(<P>,<S>)如:

altertableaaaddbnumber;

altertableaaaddcnumber(10,2);

insertintoaavalues('2',1,1);

select*fromaa;不带小数位的,就是整型INTEGERDATE数据类型DATE数据类型存储标准格式的日期TIMESTAMP类型是DATE数据类型的扩展,精确到秒后面六位小数,并分为上午、下午如:

altertableaaaddddate;

altertableaaaddetimestamp;

insertintoaa(a,d,e)values('3',to_date('2000.1.1','yyyy.mm.dd'),to_date('2000.1.1','yyyy.mm.dd'));

select*fromaa;TIMESTAMPWITHTIMEZONE

包含TIMESTAMP数据类型中的所有域,还包含两个额外的域:timezone_hour和timezone_minute来完成时区信息的支持。TIMESTAMPWITHLOCALTIMEZONE

除了在数据库中存储的时区采用标准化以外,所包含的其他域与TIMESTAMP数据类型中的域相同。当选择列时,将日期/时间标准为用户进程所在的时区。INTERVALYEARTOMONTH

用于记录两个DATE或者两个TIMESTAMP之间以年和月为单位的时间间隔。INTERVALDAYTOSECOND

用于记录两个DATE或者两个TIMESTAMP之间以天和秒为单位的时间间隔。LOB数据类型存储大文本,包括二进制文件、图形文件或其它外部文件。可以存储4G字节包括如下几种:

BLOB:二进制数据

CLOB:字符型数据

BFILE:二进制文件RAW和ROWID数据类型RAW

用于存储可变长度的二进制数据。最多可以存储4000字节。与CHAR和VARCHAR2数据类型不同,在执行SELECT时,OracleNet不会将RAW数据从数据库的字符集转换为用户进程的字符集,或者在执行INSERT时,不会将用户进程的字符集转换为数据库的字符集。ROWID

以64为基数编码的值,是一个指向表中行的位置的指针。存放的是物理地址,ROWID是Oracle专有的数据类型,除非特别选择它,否则不可见。SQL的书写规则大写字母或小写字母语句终止符缩进排版与可读性大写字母或小写字母SQL关键字不区分大小写,既可以使用大写格式,也可以使用小写格式,或者混用大小写格式,完全取决于个人喜好。对象名和列名也不区分大小写,它们既可以使用大写格式,也可以使用小写格式,或者混用大小写格式语句终止符通常使用分号作为SQL语句的终止符。如果只是单行语句,SQLDeveloper就不需要语句终止符。但单行语句在SQL*Plus中需要语句终止符,通常也使用分号。如果多行语句,每一行以回车终止,在最后一行用正斜杠(/)作为终止符并执行语句。缩进排版与可读性如果SQL语句的文本很长,可以通过使用制表符进行缩进排版,并将语句的不同子句分离到不同的行来提高可读性。另外一个原因,如果将复杂的表达式分成单独的行,在开发时SQL解释器抛出的错误格式通常是:“ERRORatlineN”,这使得对错误的定位更精确,使得调试变简单。

2026年10月21日111/13SQL数据定义语言DDL

DDL语句构成(11g)表的创建约束的创建索引的使用视图的创建与使用其它对象的创建2026年10月21日112/20键值主键强制(NOTNULL)列每个表只能有一个主键(如empno)唯一键允许空,正确的值必须唯一可定义多个唯一键(如dname,loc)外键包含的值来自主表的主键检查正确性子表的外键的值必须在主键中存在如果外键在引用时,主键的值不能改变2026年10月21日113/20数据描述(定义)

语言DDL是数据定义语言有三种基本关键字

CREATE 在数据库中创建新对象(如Table) ALTER 改变存在对象的结构 DROP 从数据库中删除对象(包含约束等)用CREATETABLE创建新表简单如下:col1是字母数字的列名可包含‘$’,‘_’,‘#’,‘@’的最多30个字符CREATETABLE<tablename>(col1 datatype[NULL|NOTNULL],col2 datatype[NULL|NOTNULL],...);2026年10月21日114/20数据类型主要数据类型CHAR 定长,最多2000字节VARCHAR 变长字母数字类型<=4000VARCHAR2 变长字母数字类型<=4000(同VARCHAR)NUMBER(W,d) 数字数据,W宽度d小数DATE 日期类型,包括时、分、秒CLOB 字符类型大对象类型<=4GbBLOB 二进制类型大对象类型<=4Gb可选NULL或NOTNULLCREATETABLE语句越来越复杂,主要是可选项增多。2026年10月21日115/20CREATE创建表empno列指定为NOTNULL可用于primarykey当表在创建时,应该指定存储参数

如,Storage(initial10M)等如果没有指定存储参数,Oracle将采用默认值详细见Oracle原版资料CREATETABLEemp( empno NUMBER(4)NOTNULL, ename VARCHAR2(12), job VARCHAR2(12), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(4)NOTNULL);2026年10月21日116/20表名的命名规则在一个用户内不能有相同的类型和名字emp2 OK 以字母开始EMP2 OK 大小写一样,在数据字典里都变为大写2emp NO 以数据开始proj-asst NO 不能带‘-‘符号proj_asst OK 下减号是可以的projasst NO 不能带空格符号“projasst” OK 有空格建议用双引号 –不推荐update NO 与保留字相同2026年10月21日117/20复制和重命名表用CREATETABLEASSELECT创建一个表empcopy将抽取emp的结构和数据可取存在表的一个子集用RENAME可改变表的名字CREATETABLEempcopyASSELECT*FROMemp;CREATETABLEempcopy(e_num,task)ASSELECTempno,jobFROMempWHEREsal>2000;RENAMEempTOemployees;2026年10月21日118/20改变表结构可用ALTER语句修改表的结构TABLE语法:用add加一个新的列用modify修改一个存在的列ALTERTABLE<tablename>ADD(column_namedatatype);ALTERTABLEempADD(genderVARCHAR2(1));ALTERTABLE<tablename>MODIFY(column_namedatatype);ALTERTABLEempMODIFY(deptnoNUMBER(6));2026年10月21日119/20ALTER修改表结构重命名列删除一个存在的列ALTERTABLEempRENAMECOLUMNsalTOsalary;ALTERTABLE<tablename>DROPCOLUMNcolumn_name;ALTERTABLEempDROPCOLUMNcomm;ALTERTABLE<tablename>RENAMECOLUMN<old_name>TO<new_name>;2026年10月21日120/20修改列的限制如果表是全空可改变任何列的类型、长度、NULL/NOTNULL如果表有数据行,但非空列无数据该列可增加或减少其大小如果表非空列有数据只能使列加长如果列都有值,则可修改NOTNULL

ALTERTABLEempMODIFYempnoVARCHAR2(8);ALTERTABLEempMODIFYjobVARCHAR2(4);ALTERTABLEempMODIFYdeptnoNOTNULL;ALTERTABLEempMODIFYenameVARCHAR2(2000);2026年10月21日121/20删除表用DROP

可删除不想要的表可释放出该表所占用的空间只有表的所有者或有DROPANYTABLE权限才能删除表可从数据库删除一个指定的表同时删除相关索引及存储过程等记住这个语句的严酷性在Oracle里不需要确认

DROPTABLE<tablename>;2026年10月21日122/20用DROP从数据库删除一个对象Oracle隐含地删除对象你不能回滚Backup和recovery来实现可用DROP语句删除tables,indexes,views,

synonyms,procedures,triggers等删除表的一个列用ALTERTABLE实现2026年10月21日123/20TRUNCATE对象可用TRUNCATE

清除整个表由于不能回滚,所以语句非常快不能回滚将所占的空间归给数据库表的结构保存在数据库里除初始分配的空间外,将空间释放数据库系统删除所有数据但不释放空间给系统TRUNCATETABLEemp;第7章SQL数据查询语言DQL7.1SELECT的语法7.2简单查询7.3带条件查询7.4对结果进行排序7.5单行函数7.6分组函数7.7连接查询7.8子查询与集合运算7.1SELECT的语法SELECT[ALL|DISTINCT]TOPn[PERCENT]WITHTIESselect_list[INTO[newtablename]][FROM{table_name|view_name}[(optimizer_hints)][,{table_name2|view_name2}[(optimizer_hints)][...,table_namel6|view_namel6][(optimizerhints)]]][WHEREclause][GROUPBYclause][HAVINGclause][ORDERBYclause][COMPUTEclause][FORBROWSE]7.2简单查询简单查询的SELECT语法如下所示:SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable_name;SELECT子句FROM子句7.2简单查询查询所有的列 SELECT*FROMREGIONS;查询指定的列 SelectJob_IdFromJob_History;

SelectEmployee_Id,Job_Id,Department_Id FromJob_History;7.2简单查询DISTINCT关键字SelectDISTINCTJob_IdFromJob_History;查询算术计算后的列SelectEmployee_Id,start_date,end_date,(end_date-start_date)+1FromJob_History;selectEmployee_Id,First_Name,Last_Name,Salary*(1+0.1)fromemployees;7.2简单查询列的别名SelectEmployee_Id,start_date,end_date,(end_date-start_date)+1"工作天数"FromJob_History;SelectEmployee_IdAs"雇员编号",First_NameAs"姓",Last_NameAs"名",Salary*(1+0.1)As"调薪后薪水"FromEmployees;7.2简单查询字符连接运算SelectLast_Name||‘'||First_NameFromEmployees;SelectLast_Name||''||First_Name||'从事'||Job_Id||'部门工作,年薪为'||Salary*12||';'AS"雇员基本情况"FromEmployeesorderbysalary*12;7.3带条件查询SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable_name WHEREconditions

其中,CONDITIONS为查询时返回记录应满足的判断条件。比较运算符 A=B表示若A与B的值相等,则为TRUE。

A>B表示若A的值大于B的值,则为TRUE。

A>=B表示若A的值大于等于B的值,则为TRUE。A<B表示若A的值小于B的值,则为TRUE。A<=B表示若A的值小于等于B的值,则为TRUE。

A<>B表示若A的值不等于B的值,则为TRUE。

A!=B表示若A的值不等于B的值,则为TRUE。WHEREA=BSelectEmployee_IdAs"雇员编号", Job_IdAs"工作部门", start_dateAs"开始工作时间", end_dateAs"结束工作时间", (end_date-start_date)+1"工作天数"FromJob_Historywhereemployee_Id=101;WHEREA=BSelectEmployee_IdAs"雇员编号", Job_IdAs"工作部门", start_dateAs"开始工作时间", end_dateAs"结束工作时间", (end_date-start_date)+1"工作天数"FromJob_HistorywhereJob_id='AC_ACCOUNT';WHEREA>BSelectEmployee_IdAs"雇员编号", Job_IdAs"工作部门", start_dateAs"开始工作时间", end_dateAs"结束工作时间", (end_date-start_date)+1As"工作天数"FromJob_Historywherestart_date<='01-1月-1998';WHEREA<=BSelectEmployee_IdAs"雇员编号", Last_Name||''||First_NameAs"雇员姓名", SalaryAs"薪水"FromEmployeesWhereSalary<=2200;WHREA<>BSELECTRegion_nameFROMREGIONSWhereRegion_id<>4;BETWEEN运算符SelectEmployee_IdAs"雇员编号", Last_Name||''||First_NameAs"雇员姓名", SalaryAs"薪水"FromEmployeesWhereSalaryBETWEEN11000AND12000;SelectEmployee_IdAs"雇员编号", Job_IdAs"工作部门", start_dateAs"开始工作时间"FromJob_HistoryWherestart_dateBETWEEN'01-1月-2001'AND'01-1月-2005';IN运算符SelectEmployee_IdAs"雇员编号", Last_Name||''||First_NameAs"雇员姓名", SalaryAs"薪水"FromEmployeesWhereSalaryNOTIN(4000,6000,11500);

SelectEmployee_Id

As"雇员编号", Last_Name||

''||First_NameAs"雇员姓名"FromEmployees

WhereLast_NameIN('Bell','Hall','Patel','Smith');LIKE运算符SelectCountry_IdAs"国家代码", Country_NameAs"国家名称"FromCountriesWhereCountry_NameLike'A%';SelectEmployee_Id,First_Name

FromEmployeesWhereFirst_NameLike'G_ra_d';SelectJob_Id,Job_TitleFromJobsWhereJob_IdLike'SA\_%N'Escape'\';NULL的比较ISNULLISNOTNULLSelectDepartment_NameFromDepartmentsWhereManager_IdIsNull;逻辑运算符逻辑运算符包括AND、OR、NOT。使用AND连接的运算符只有在AND左边和右边的表达式都为TRUE时,AND运算符才返回TRUE。如果使用OR运算符,则只要OR运算符左边的表达式或是OR运算符右边的表达式中有任一个为TRUE,那么OR运算符就要返回TRUE。如果使用NOT运算符,则否定原有表达式条件。原有条件如果为FALSE,则NOT运算符返回TRUE;原有条件如果为TRUE,则NOT运算符返回FALSE。SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable_name WHEREconditionsORDERBYcolumn[ASC|DESC]运算符优先顺序优先级别运算符运算1()括号2/*除法和乘法3+-加法和减法4||字符连接5=、<、>、<=、>=比较运算6[NOT]LIKE、IS[NOT]NULL、[NOT]IN匹配、空值、集合7[NOT]BETWEEN范围8!=、<>不等于9NOTNOT逻辑运算10ANDAND逻辑运算11OROR逻辑运算排序SelectEmployee_IdAs"雇员编号", Job_IdAs"工作部门", start_dateAs"开始工作时间", end_dateAs"结束工作时间", (end_date-start_date)+1"工作天数"FromJob_HistoryORDERBYemployee_idasc,(end_date-start_date)+1DESC;单行函数字符函数

可以对由字符组成的字符串进

行操作。数字函数

可以对数字进行计算。转换函数

可以将一种数据库类型转换成

另外一种数据库类型。日期函数

可以对日期和时间进行处理。正则表达式函数

在查询数据时可以使用正则表

达式。7.5.1字符函数LOWER()和UPPER()selectLOWER(first_name),UPPER(last_name)fromemployeeswhereemployee_idbetween101and105;INITCAP()selectinitcap(street_address)fromlocations;CONCAT()SELECTCONCAT(first_name,last_name)fromemployees;SUBSTR()selectSubstr('12#34#56#78#9#',6)fromdual;selectSubstr('12#34#56#78#9#',6,5)fromdual;selectSubstr('12#34#56#78#9#',-4,3)fromdual;LENGTH()selectcountry_name,length(country_name)fromcountrieswherecountry_namelike'S%';INSTR()selectinstr('12#34#56#78#9#','#')fromdual;selectinstr('12#34#56#78#9#','#',4)fromdual;selectinstr('12#34#56#78#9#','#',7,2)fromdual;LPAD()和RPAD()selectfirst_name||''||last_name||'月收入'||salaryas"没有使用LPAD和RPAD"fromemployeeswheredepartment_id=100;LPAD()和RPAD()selectrpad(first_name||''||last_name,20,'@')||'月收入'||lpad(salary,6,'#')as"使用LPAD和RPAD"fromemployeeswheredepartment_id=100;LTRIM()、RTRIM()和TRIM()SELECTLTRIM('HelloOracle!'),RTRIM('HelloOCP!cqcq','cq'),TRIM('*'FROM'**HiCQUPT!****')FROMdual;REPLACE()selectReplace('12#34#56#78#9#','#','<-')fromdual;7.5.2数字函数ROUND可用于处理数字和日期。该函数主要用于按照指定的小数位数舍入数字,但还可用于将数字舍入到小数点之前。语法为ROUND(列|表达式,小数位)。TRUNC函数可用于处理数字和日期。该函数主要用于按照指定的小数位数截断列、表达式或值。使用TRUNC函数时,若未指定小数位数,则默认为零。语法为TRUNC(列|表达式,小数位)。MOD函数用于求一个值除以另一个值后的余数。ROUND()selectRound(76.839)fromdual;selectRound(76.839,2)from

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论