ORACLE SQL语言基础2.docx
- 文档编号:15431000
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:78
- 大小:264.78KB
ORACLE SQL语言基础2.docx
《ORACLE SQL语言基础2.docx》由会员分享,可在线阅读,更多相关《ORACLE SQL语言基础2.docx(78页珍藏版)》请在冰点文库上搜索。
ORACLESQL语言基础2
1.ORACLESQL语言基础
三种方式访问数据库:
1)开始/运行/sqlplus
2)开始/程序/Oracle-OraDb10g_home1/SQLPlus
3)打开IE,输入本机IP:
5560/isqlplus或者localhost:
5560/isqlplus
登录界面如下:
1.1oracle常见的第三方工具
1)PL/SQLDeveloper
2)Toad
在采用第三方工具连接数据库前,必须保证数据库的监听程序配置(服务器名,IP,端口号)正确并处于于监听状态
1.2命令行方式
Sqlp是oracle提供的一个命令行执行的工具软件,安装oracle后会自动在系统中注册.
在开始/运行/sqlplus
3.3.2窗口方式sqlplusw
采用这种方式连接数据库时会提示主机的字符串,如果一台电脑上有多个数据库,则需要在此处输入数据的名称,若不填,则系统连接默认数据库
更改用户设置
1.sqlplussys/rootassysdba
2.alteruserscottaccountunlock;(解锁)
用系统管理员账号登陆数据库:
connsys/sysassysdba
connscott/tiger或者connectuser/pwd切换用户
ed或者edit//打开一个缓冲文件
操作回滚:
rollback,一旦提交(commit)则不可回滚;
最常用的就是sqlplus的运行方式完成对oracle的操作
Select*fromemp;
此语句表示向数据库发出查询命令,查询数据中emp表中的全部信息,结果如果:
使用sqlplus之前首先必须进行环境的设置
(1)设置每行显示的长度
Setlinesize300;
以上命令查询结果有一个问题,标题行重复了,这是因为oracle中的数据是一页一页地输出的.
(2)修改每页显示的记录行数
Setpagesize30;
设置每页输出30行,结果为
(3)清除屏幕的命令
在在SQL*Plus中执行一段时间后,屏幕上会存大大量的输入和输出信息,要想清除屏幕
方法一:
同时按SHIFT和DELETE键然后点OK就可以了。
方法二:
如果在window窗口下sqlplus中清屏命令:
hostcls或是clearscreen或只是4位cleascre。
方法三:
如果是在dos的窗口下进入sql/plus就要用clearSCR。
1.3动手实践
在sqlplusw中存大着大量可用的命令
在sqlplusw中因为无法修改已经输入的内容,所以一般使用本机的记事本程序进行编辑,直接在命令窗口中输入”ed文件名称”即可.
输入ed后会提示用户是否要创建此文件,如下图所示
除了可以在sqlplusw中建立这个文件之外,也可以通过@找到磁盘上的文件,
2.SQL语句
本课内容提要:
1)查询语句的基本格式
2)使用distinct关键字去掉重复的查询
3)使用限定查询
4)对查询结果进行排序
5)掌握oracle中提供的各种主要单行函数
2.1所需要用到的表
在所有后面的课程中,我们所使用到的表都是scott用户下的表,所以我们必须了解scott用户下有哪几张表,以及这些的结构和表与表之间的关系.
如果scott用户下的某个对表对象出了问题,如dept表被误删除了,或emp表的内的数据被修改了,现在要想恢复成原来的样子,应按如下步骤进行
以管理员角色连接数据库,执行
@\E:
\oracle\product\10.2.0\db_1\RDBMS\ADMIN\scott.sql
执行以上命令后所有的scott的对象将被重建,因而scott的密码被初始化为系统默认的TIGER,因此用户执行以上命令后应当重新设置用户口令
常用的关于用户的命令:
Showuser--显示当前用户名
selecttable_namefromuser_tables------查询当前用户下的所有表
查询TEST用户下的所有表,及其创建时间
SELECTOBJECT_NAME,CREATEDFROMALL_OBJECTSWHEREOBJECT_TYPE='TABLE'ANDOWNER='TEST'ORDERBYCREATEDDESC;
查询当前用户下的所有表
SELECT*FROMUSER_TABLES
查询TEST用户下的所有表
SELECT*FROMALL_TABLESWHEREOWNER='TEST'
2.1.1雇员表(emp)
记录了每个雇员的基本信息
NO字段类型描述
1empnoNumber(4)雇员编号
2enameVarchar2(10)雇员姓名
3jobVarchar2(9)工作职位
4mgrNumber(4)雇员的领导(经理)编号
5hierdatedate入职日期
6salNumber(7,2)月薪/工资
7commNumber(7,2)奖金
8deptnoNumber
(2)雇员所属部门的编号
2.1.2部门表(emp)
记录了每个部门的基本信息
NO字段类型描述
1deptnoNumber
(2)部门编号(唯一)
2dnameVarchar2(14)部门名称
3locVarchar2(13)地址
2.1.3工资等级表(salgrade)
一个公司的工资等级制,用来表示同一等级的工资下限及上限
NO字段类型描述
1Gradenumber等级名称
2Losalnumber此等级的最低工资
3hisalnumber此等级的最高工资
2.1.4奖金表(bonus)
一个公司中雇员获得奖金的情况
NO字段类型描述
1enameVarchar2(10)雇员姓名
2JobVarchar2(9)雇员工作
3SalNumber工资
4commNumber奖金
2.2SQL简介
对于各个不同的数据库来说,重点是掌握SQL语句,因为现在的数据库都是以SQL语句为操作标准,在实际应用中,各个数据库提供的函数各不同。
不同的数据库的SQL语句格式有90%相同,10%的差异
2.2.1SQL简介
SQL(structuredQueryLanguage结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
。
SQL通常用于与数据库的通信,ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言.
按代数论,SQL应当属于第4代程序设计语言
第1代
SQL
第2代
C,C++,JAVA
第3代
汇编语言
第4代
机器语言
SQL语言包含4个部分:
※数据定义语言(DDL),例如:
CREATE、DROP、ALTER等语句。
※数据操作语言(DML),例如:
INSERT、UPDATE、DELETE语句。
※数据查询语言(DQL),例如:
SELECT语句。
※数据控制语言(DCL),例如:
GRANT、REVOKE、COMMIT、ROLLBACK等语句。
平常程序员交流的时候通常不会说“我今天写了几个DDL/DML/DQL/DCL语句”,而是说“我今天写了几个CRATE语句或几个SELECT语句”诸如此类的描述
2.2.2简单查询语句格式
简单的SQL查询语句的语法格式是:
Select*|字段列表别名
From表名称;
(1)查询全部列
Select*fromemp;
(2)如果现在只要查询出雇员的编号、姓名、工作,则需要指定查询的列
Selectempno,ename,jobfromemp;
(3)可以为查询的结果列指定一个名称,这个名称被为该列的”别名”,一般地,别名最好不用中文命名
(4)查询所有的工作(去掉重复的工作)distinct
Selectjobfromemp;
结果中存在大量重复的工作--------即job存在重复值,要消除重复值,在oracle中用distinct这个短语来消除查询结果中重复的值
Select[distinct]*|具体的列名别名
From表名称
但是,在消除重复列的时候,有一点必须说明,如果同时查询多列,则必须保证所有列都重复才能被消除
例如:
查询所有职工的雇员号和工作
因为雇员号不重复,所以不存在重复的列,因页没有哪一列被消除
(5)将各列查询结果相连||
例.要求查询出雇员的编号,姓名,工作,显示格式为:
编号是7369的雇员,姓名是:
SMITH,工作是:
CLERK
要实现此功能:
则可能使用oracle中提供的字符串连接操作符”||”来表示,如果还要加入一些固定显示的内容,则用单引号’’括起来
(6)SQL中的简单计算功能+-*/
在查询中也可以使用四则混合运算(+—*/)功能。
例如:
求出每个雇员的姓名及年薪
selectename,sal*12incomefromemp
ENAMEINCOME
--------------------
SMITH9600
ALLEN19200
WARD15000
JONES35700
MARTIN15000
BLAKE34200
CLARK29400
SCOTT36000
KING60000
TURNER18000
ADAMS13200
JAMES11400
FORD36000
MILLER15600
已选择14行。
在程序中sal*12意义不明确,为了明确这个表达式计算结果的意义,一般给这一列取一个有意义的别名,别名尽量避免用中文表示
2.2.3限定查询(where子句)
之前的查询是将一张表的全部记录都查出来,更多的时候我希望可以根据指的条件来查询,这样我们就必须指定查询的限定条件,限定查询的语法
Select{distinct}*|具体的列名别名;
From表名称
{where条件语句}
(1)例:
查询出工资大于1500的所有雇员
SQL>select*fromempwheresal>1500;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-----------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7566JONESMANAGER783902-4月-81297520
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7788SCOTTANALYST756619-4月-87300020
7839KINGPRESIDENT17-11月-81500010
7902FORDANALYST756603-12月-81300020
已选择7行。
(2)例:
查询每月可以得到奖金的雇员信息
奖金是comm列
只要列中存在内容,则表示此内容不为空(null),如果列中有内容,则会显示具体的值
列的内容不为空的表示,字段ISNOTNULL
SQL>SELECT*FROMempWHEREcommISNOTNULL;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-----------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
7654MARTINSALESMAN769828-9月-811250140030
7844TURNERSALESMAN769808-9月-811500030
(3)例:
查询没有奖金的职工的信息
SQL>SELECT*FROMempWHEREcommISNULL;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-----------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7566JONESMANAGER783902-4月-81297520
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7788SCOTTANALYST756619-4月-87300020
7839KINGPRESIDENT17-11月-81500010
7876ADAMSCLERK778823-5月-87110020
7900JAMESCLERK769803-12月-8195030
7902FORDANALYST756603-12月-81300020
7934MILLERCLERK778223-1月-82130010
(4)例:
查询出基本工资大于1500,并且可以领取奖金的职工的信息
分析:
两个条件要同时满足sal>1500并且comm不为空值
表示为:
sal>1500andcommISNOTNULL
SQL>SELECT*FROMempWHEREsal>1500ANDcommISNOTNULL;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-----------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
(5)例:
查询出基本工资大于1500,或者可以领取奖金的职工的信息
如果要表示“或者”这个概念使用OR对两个条件进行连接,表示只要其中一个条件成立就出现在查询结果中
SQL>SELECT*FROMempWHEREsal>1500ORcommISNOTNULL;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-----------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
7566JONESMANAGER783902-4月-81297520
7654MARTINSALESMAN769828-9月-811250140030
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7788SCOTTANALYST756619-4月-87300020
7839KINGPRESIDENT17-11月-81500010
7844TURNERSALESMAN769808-9月-811500030
7902FORDANALYST756603-12月-81300020
(6)NOT可以对条件取反,把条件真变为假,把假变为真
例:
查询出基本工资不大于1500,同时不可以领取奖金的职工的信息
SELECT*FROMempWHEREnot(sal>1500orcommISNOTNULL)
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-----------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7876ADAMSCLERK778823-5月-87110020
7900JAMESCLERK769803-12月-8195030
7934MILLERCLERK778223-1月-82130010
通过括号可表示一组条件
(7)例:
查询基本工资大于等于1500,但是小于等于3000的职工的全部信息
分析:
条件满足sal>=1500andsal<300
在SQL语法中,提供了一个专门的指定范围的过滤语句BETWEEN…AND…
格式为:
BETWEEN最小值AND最大值
上一个例题则可写成:
SELECT*FROMempWHEREsalBETWEEN1500AND3000
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-----------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7566JONESMANAGER783902-4月-81297520
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7788SCOTTANALYST756619-4月-87300020
7844TURNERSALESMAN769808-9月-811500030
7902FORDANALYST756603-12月-81300020
注意:
BETWEEN…AND…包含边界条件
(8)例:
查询出在1981年入职的全部雇员的信息
1981年入职等价于1981年1月1日~1981年12月31日
SELECT*FROMempWHEREhiredateBETWEEN'1-1月-81'and'31-12月-81'
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-----------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
7566JONESMANAGER783902-4月-81297520
7654MARTINSALESMAN769828-9月-811250140030
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7839KINGPRESIDENT17-11月-81500010
7844TURNERSALESMAN69808-9月-811500030
7900JAMESCLERK769803-12月-8195030
7902FORDANALYST756603-12月-81300020
从个例子可以看出,BETWEEN…AND…即可支持对数据的查询,支持对日期的查询.
实际上日期可以转化为数字的形式表示出来,在后面的课程中将会详细介绍.
(9)例:
查询出姓名是SMITH的雇员信息
SELECT*FROMempWHEREename='SMITH'
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-----------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
注意:
’SMITH’是大写字母构成的名称,oracle对字母的大小写是敏感的(区分大小写)
(10)例:
查询出雇员号是7369,7499,7521的雇员的具体信息
如果用前面我们所掌握的知识可以表示为empno=’7369’orempno=’7499’orempno=’7521’
SELECT*FROMempWHEREempno='7369'orempno='7499'orempno='7521'
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
以上条件有点烦琐,实际上,此时所指定的查询范围在此SQL语句中可以用IN操
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ORACLE SQL语言基础2 SQL 语言 基础