Oracle SQL 实用基础教程.ppt
《Oracle SQL 实用基础教程.ppt》由会员分享,可在线阅读,更多相关《Oracle SQL 实用基础教程.ppt(144页珍藏版)》请在三一办公上搜索。
1、王忠海2023/11/8,Oracle SQL 实用基础教程,SQL概述,历史SQL:Struceured Query Language1974年,由Boyce和Chamber提出1975-1979年,在System R上实现,由IBM的San Jose研究室研制,称为Sequel,SQL概述,标准化有关组织ANSI(American Natural Standard Institute)ISO(International Organization for Standardization)有关标准SQL-86“数据库语言SQL”SQL-89“具有完整性增强的数据库语言SQL”,增加了对完整性约
2、束的支持SQL-92“数据库语言SQL”,是SQL-89的超集,增加了许多新特性,如新的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。SQL-99正在讨论中的新的标准,将增加对面向对象模型的支持,SQL概述,特点一体化集DDL,DML,DCL于一体单一的结构-关系,带来了数据操作符的统一面向集合的操作方式一次一集合高度非过程化用户只需提出“做什么”,无须告诉“怎么做”,不必了解存取路径两种使用方式,统一的语法结构SQL既是自含式语言(用户使用),又是嵌入式语言(程序员使用)语言简洁,易学易用,SQL概述,1 SQL命令基础,准备工作,用SQLPLUS来学习SQL连接到SQLPLUS,
3、创建学习用的用户和数据SCOTT用户在ORACLE805中默认已经创建,在8i和9i中需要手动运行rdbmsadminscott.sql。是ORACLE安装的主目录,在SQLPLUS中可以用?来代替。例如:SQL connect/as sysdbaConnected.SQL?rdbmsadminscott.sqlSQLconnect scott/tigerConnected.,基本的SELECT命令,SELECT命令用于从数据库中获得想要的信息。语法:SELECT*,column alias,FROM table;一个最简单的查询语句至少要包括SELECT子句和FROM子句:SELECT后面指
4、定要选择的列FROM后面指定从哪些表或视图中获取数据,SQL语句基本规则,SQL命令是大小写不敏感 SQL命令可写成一行或多行一个关键字不能跨多行或缩写子句通常位于独立行,以便编辑,并易读空格和缩进使程序易读关键字大写,其他小写,使用SELECT*可显示所有的列,SQL SELECT*FROM dept;DEPTNO DNAME LOC-10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON,选择指定的列,我们可以在SELECT后面指定要选择的列。,SQL SELECT deptno,loc
5、 FROM dept;DEPTNO LOC-10 NEW YORK 20 DALLAS 30 CHICAGO 40 BOSTON,在SQL*PLUS中查看表具有哪些列,在SQLPLUS中,用DESC TABLENAME命令可以查看表具有的列以及类型等,SQL desc dept 名称 是否为空?类型-DEPTNO NUMBER(2)DNAME VARCHAR2(14)LOC VARCHAR2(13),从数据字典中获取表的列信息,SQL SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH,NULLABLE FROM USER_TAB_COLUM
6、NS WHERE TABLE_NAME=DEPT;TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH NULLABLE-DEPT DEPTNO NUMBER 22 YDEPT DNAME VARCHAR2 14 YDEPT LOC VARCHAR2 13 Y,使用算术运算,可以对数字类型的字段进行算术运算。运算的先后顺序是先乘除,后加减,括号优先。上面例子中,计算的是一年的报酬,月工资乘以12个月,再加上100,SQL SELECT ename,sal,12*sal+100 FROM emp;ENAME SAL 12*SAL+100-KING 5000 6
7、0100BLAKE 2850 34300CLERK 2450 29500JONES 2975 3580014 rows selected。,关于空值(NULL),空值是指不可用,不知道,不适用的值空值不等于零也不等于空格 对空值进行的任何运算仍然为空值,SQL SELECTename NAME,12*salcomm FROM emp WHERE ename KING;NAME 12*SAL+COMM-KING,定义列的别名,当显示查询结果时,SQL*PLUS通常使列名作为列头。在很多情况下,列名并非是此列的清晰描述。因此我们就可使用列的别名作为列头,。缺省情况下,列的别名是大写的。如果区别大小
8、写,可加双引号,如有特殊字符如$、#也必须使用双引号将其括起来。上面的例子中的AS可以省略,SQL SELECT ename AS name,sal salary FROM emp;NAME SALARY-,SQL SELECT ename Name,sal*12 Annual Salary FROM emp;NAME Annual Salary-,列连接操作,使用双竖条”|”操作符,可将列和运算表达式常量连起来显示,形成一个输出显示,SQL SELECT ENAME|s salary is|sal Employees Salary from emp;Employees Salary-SMIT
9、Hs salary is 800ALLENs salary is 1600WARDs salary is 1250JONESs salary is 2975.已选择14行。,去除重复记录,默认情况下,显示所有行,包括重复记录。如果想去掉重复记录,可以在DISTINCT关键字。如果在DISTINCT后面指定了多个列,则DISTINCT将对所有被选择的列有效,其结果是不同的列的组合。,SQL SELECT deptno FROM emp;DEPTNO-10 30 1014 rows selected。,SQL SELECT DISTINCT deptno FROM emp;DEPTNO-10 20
10、 30,SQL*PLUS程序介绍,SQL*PLUS是是Oracle自带的与Oracle交互的一个工具。你可在SQL*PLUS中做以下操作:执行SQL命令来修改、查询、增加、删除数据库中的数据格式化、计算、存储、数据于一定格式的报告中产生用于存储SQL命令的脚本,以便以后执行SQL*PLUS专用命令可被分为如下类别:环境:影响通常的SQL命令格式化:格式化查询结果文件处理:存储、调用、运行脚本文件编辑:修改SQL缓存中的SQL命令显示列的定义,登陆到SQL*PLUS,在命令行提示符下输入SQLPLUS/NOLOG然后在SQL提示符下输入CONNECT USERNAME/PASSWORDDATAB
11、ASE,C:Documents and SettingsAdministratorSQLPLUS/NOLOGSQL*Plus:Release 9.2.0.4.0-Production on 星期四 5月 24 09:51:42 2007Copyright(c)1982,2002,Oracle Corporation.All rights reserved.SQL connect system/managertlgaxz已连接。,SQL*PLUS的编辑命令,SQL*PLUS的命令每次只能键入一行,且不能存于SQL缓存中APPEND text 将text加到当前行的后面CHANGE/old/new
12、 将当前行的old改为newCHANGE/text/从当前行中删除textCLEAR BUFFER 从缓存中删除所有的行DEL 删除当前行 LIST:列 出 SQL 缓 存 中 的 所 有 行LIST n:列 出 一 行(由 n 指 出 列 出 的 行)RUN:显 示 并 运 行 SQL 缓 存 中 的 SQL 语 句,SQL*PLUS的编辑命令(续),GET filename.ext:把文件的内容写到SQL缓存 filename.ext:运行文件 EDIT:调用编辑器编辑当前缓存中的内容 EDIT filename.ext:调用编辑器编辑存的文件 SPOOL filename.ext:将查询
13、结果存于文件中 SPOOL OFF 结束结果内容输出 EXIT:退出SQL*PLUS,2限定和排序数据,目的,限制某一查询所取记录排序查询结果,使用选择限定记录,在上面的例子中,假定你想要显示部门10的所有员工,这种方式是基于WHERE子句的SQL命令。,使用where子句限定返回的记录,WHERE子句在FROM子句后面Condition:由列名表达式,常量和比较操作符组成。,SELECT DISTINCT*,column alias,FROM tableWHERE condition(s);,使用WHERE语句,上面例子中返回job=CLERK的所有员工的name,job和deptno注意:
14、字符的大小写是敏感的。,SQL SELECT ename,job,deptno FROM emp WHERE job=CLERK;ENAME JOB DEPTNO-KING CLERK 30BLAKE CLERK 20TURNER CLERK 1014 rows selected。,字符串和日期,在WHERE子句中的字符串和日期必须用单引号括起来,所有的字符是大小写敏感的。Oracle存储日期是以内定的格式存放,它们代表世纪、年、月、日、小时、分钟和秒,缺省显示的日期格式是DD-MON-YY,也可能是其他格式。为了避免日期字段查询条件不同格式下可能造成的错误,通常用TO_DATE函数来进行转换
15、。,日期类型查询条件举例,上面第二个例子使用了TO_DATE函数,就不再受日期格式的影响了。否则同样的查询,同样的表数据,不同的系统日期格式会导致结果不正确。,SQL SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE=03-DEC-81;ENAME HIREDATE-JAMES 03-DEC-81FORD 03-DEC-81SQL SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE=TO_DATE(19811203,YYYYMMDD);ENAME HIREDATE-JAMES 03-DEC-81FORD 03-D
16、EC-81,常用比较运算符,使用BETWEEN,SQL SELECT ename,sal FROM emp WHERE sal BETWEEN 1000 AND 1500;ENAME SAL-KING 1250BLAKE 1500 CLERK 1250JONES 1300,注意:BETWEEN后面要先写低值,后写高值,使用IN运算符,SQL SELECT empno,ename,sal,mgr FROM emp WHERE mgr IN(7902,7566,7788);EMPNO ENAME SAL MGR-7902 KING 1250 7566 7369 BLAKE 1500 7902 77
17、88 CLARK 1250 7566 7876 JONES 1300 7788,使用LIKE运算符,使用LIKE运算符执行通配查询查询条件可包含文字字符或数字%可表示零或多个字符_可表示一个字符,SQL SELECT ename FROM emp WHERE ename LIKE S%;ENAME-SMITHSCOTT,用LIKE和ESCAPE来查找包含特殊字符的数据,例如如果想查找表EMP中ENAME包含下划线_的数据,就需要用到ESCAPE选项,否则查询结果不准确。ESCAPE后面单引号内只能有一个字符,表示前面的LIKE条件中这个字符后面的第一个字符当作普通字符处理,SQL SELECT
18、 EMPNO,ENAME FROM EMP WHERE ENAME LIKE%_%ESCAPE;EMPNO ENAME-9999 FOR_TEST,使用IS NULL,查询包含空值的记录,SQL SELECT ename,mgr FROM emp WHERE mgr IS NULL;ENAME MGR KING,逻辑运算符,优先级次序:1 所有的比较运算2 NOT3 AND4 OR括号将跨越所有优先级,使用AND运算符,AND需要条件都满足,SQL SELECT empno,ename,job,sal FROM emp WHERE sal=1100 AND job=CLERK;EMPNO EN
19、AME JOB SAL-7369 BLAKE CLERK 1300 7788 CLARK CLERK 1250,使用OR运算符,OR需要满足条件之一即可,SQL SELECT empno,ename,job,sal FROM emp WHERE sal=1100 OR job=CLERK;EMPNO ENAME JOB SAL-7369 BLAKE CLERK 1300 7788 CLARK CLERK 1250 7839 KING PERSIDENT 5000 7645 MARTIN MANAGER 1050,使用NOT运算符,SQL SELECT ename,job FROM emp WH
20、ERE job NOT IN(CLERK,MANAGER,ANALYST);ENAME JOB-KING PERSIDENTMARTIN SALESMANWARD SALESMAN,ORDER BY 语句,在缺省情况下,查询返回的结果是没被排序的。使用ORDER BY子可将记录排序。ORDER BY 子句放在最后。ASC表示升序排序,DESC表示降序排序,缺省为ASC,SELECT expr FROM table WHERE condition ORDER BY column,expr ASC|DESC,降序排列,SQL select ename,hiredate from emp order
21、 by hiredate desc;ENAME HIREDATE-FOR_TESTADAMS 12-JAN-83SCOTT 09-DEC-82MILLER 23-JAN-82JAMES 03-DEC-81SMITH 17-DEC-8015 rows selected.,使用列别名排序,SQL select empno,ename,sal*12 annual from emp order by annual;EMPNO ENAME ANNUAL-7369 SMITH 9600 7900 JAMES 11400 7876 ADAMS 13200 7521 WARD 15000 7654 MARTI
22、N 15000 7934 MILLER 15600 7844 TURNER 18000 15 rows selected.,按照多个列排序,SQL SELECT ename,sal,deptno FROM EMP ORDER BY deptno,sal DESC;ENAME SAL DEPTNO-KING 5000 10CLARK 2450 10MILLER 1300 10SCOTT 3000 20FORD 3000 20JONES 2975 20ADAMS 1100 20.15 rows selected.,3 单行函数,SQL函数,SQL函数有两种不同的SQL函数单行函数多行函数单行函数
23、这些函数仅作用于单行记录,并对每行记录返回一个值,有许多不同类型的单行函数,常用的类型有:字符函数 数字函数 日期函数 转换函数多行函数 这些函数作用于记录组,每组记录返回一个结果。,单行函数,单行函数单行函数操作数据项,它们接收一个或多个参数,并对查询出的每一条记录返回一个值。参数可以是:用户提供的常量一个列名一个表达式单行函数的特性它们作用于查询的每一条记录每条记录返回一个结果它们可返回一个不同于它所参照的数据类型它们可嵌入到SELECT,WHERE 和ORDER BY子句。,字符串函数,字符函数被分为:大小写转换函数 字符处理函数LOWER(column|expression):将字符转
24、换为小写UPPER(column|expression):将字符转换不大写INITCAP(column|expression):将每一个单词的第一个字母大写其它小写CONCAT(column expression):返回第一个串接上第二个串,它的作用和|运算是相同的SUBSTR(column expression,):返回从字母m开始,有n个字符长的字符串。LENGTH(column expression):返回字符串长度INSTR(column 1 expression.mn):返回字符串中字符的位置LPAD(column 1 cxpression,n,string):在字符串前填补字符,使
25、其长度达到n。RPAD(column 1 cxpression,n,string):在字符串后填补字符,使其长度达到n。,字符串函数举例,上面的例子将ename列的首字母大写,其余字母小写,SQL SELECT INITCAP(ename)FROM emp;INITCAP(EN-SmithAllenWard,字符串处理函数举例,SQLSELECT ENAME,SUBSTR(ENAME,1,3)SUBSTR,RPAD(ENAME,10,*)RPAD,LENGTH(ENAME)LENGTH FROM EMP;ENAME SUBSTR RPAD LENGTH-SMITH SMI SMITH*5ALL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle SQL 实用基础教程 实用 基础教程
链接地址:https://www.31ppt.com/p-6513333.html