Oracle数据库基础.docx
- 文档编号:10428440
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:21
- 大小:21.81KB
Oracle数据库基础.docx
《Oracle数据库基础.docx》由会员分享,可在线阅读,更多相关《Oracle数据库基础.docx(21页珍藏版)》请在冰豆网上搜索。
Oracle数据库基础
Oracle数据字段的类型和Oracle中运算符
1.oracle数据字段的主要数据类型
数据类型
说明
char(n)
存放定长字符串,最长为2000个字符
nchar(n)
最长由数据库使用的字符集决定
varchar2(n)
存放变长字符串,最长为4000个字符
nVarchar2(n)
最长由数据库使用的字符集决定
number(l,p)
存放数值类型数据。
L长度p小数位数,最长为38位.可以用来保存任何数值类型的数据
blob
二进制大对象,长度<2G
Date
存放日期时间,默认格式:
DD-MONTH-YY
long
存放可变长字符数据。
长度<2G
clob
存放可变长字符数据。
长度<2G
bFile
存放在数据库外部的大型二进制文件。
长度<4G,这种文件可以被Oracle读取,查询,但不能写入。
2.Sql语言中的运算符
基本运算符
说明
+-*/
加减乘除
+-
单目运算符,表示正负号
||
字符串拼接运算符
=!
=>>=<<=IsNULLLike
Betweenxandy
比较运算符
in
检测一个值是否在集合中,在集合中,返回true,否则,返回false
||
字符串拼接运算符
Not
逻辑非
And
逻辑与
Or
逻辑或
集合运算符
UNION[ALL]
将两个查询的结果和并在一起(默认去掉重复值),如果增加ALL,则保留重复值
INTERSECTS
找出同时在两个子查询中都有的行(去掉重复行)
MINUS
找出所有被第一个子查询查出,但没有被第二个子查询查出的那些行(去掉重复行)
几点说明:
1.比较运算符的运算结果为布尔值。
2.ANY用一个值与集合中元素逐个进行比较,只要有任何一个满足条件,其结果就
为true
ALL用一个值与集合中元素逐个进行比较,只有全部满足条件,其结果才为
true,否则为false
Select*fromempwheresalary=ANY(
Selectsalaryfromempwheredeptno=30)
Select*fromempwheresalary>ALL(
Selectsalaryfromempwheredeptno=30)
3.Exists
用来检查子查询的结果,如果至少有一行,则返回true,否则,返回false
4.双目运算符’-‘可以作用于两个日期相减,返回它们之间相差的天数,可用于计算
年龄等
例如:
select姓名,ceil((Sysdate-birthday)/365)年龄frommen
一、准备数据:
例1students表结构
CREATETABLEstudents(
student_idNUMBER(5)
CONSTRAINTstudent_pkPRIMARYKEY,
monitor_idNUMBER(5),
nameVARCHAR2(10)NOTNULL,
sexVARCHAR2(6)
CONSTRAINTsex_chkCHECK(sexIN('男','女')),
dobDATE,
specialtyVARCHAR2(10)
);
例2departments表结构
CREATETABLEdepartments(
department_idNUMBER(3)
CONSTRAINTdepartment_pkPRIMARYKEY,
department_nameVARCHAR2(8)NOTNULL,
addressVARCHAR2(40)
);
例3teachers表结构
CREATETABLEteachers(
teacher_idNUMBER(5)
CONSTRAINTteacher_pkPRIMARYKEY,
nameVARCHAR2(8)NOTNULL,
titleVARCHAR2(6),
hire_dateDATEDEFAULTSYSDATE,
bonusNUMBER(7,2),
wageNUMBER(7,2),
department_idNUMBER(3)
CONSTRAINTteachers_fk_departments
REFERENCESdepartments(department_id)
);
例4courses表结构
CREATETABLEcourses(
course_idNUMBER(5)
CONSTRAINTcourse_pkPRIMARYKEY,
course_nameVARCHAR2(30)NOTNULL,
credit_hourNUMBER
(2)
);
例5students_grade表结构
CREATETABLEstudents_grade(
student_idNUMBER(5)
CONSTRAINTstudents_grade_fk_students
REFERENCESstudents(student_id),
course_idNUMBER(5)
CONSTRAINTstudents_grade_fk_courses
REFERENCEScourses(course_id),
scoreNUMBER(4,1)
);
例6grades表结构
CREATETABLEgrades(
grade_idNUMBER
(1)
CONSTRAINTgrade_pkPRIMARYKEY,
low_scoreNUMBER(4,1),
high_scoreNUMBER(4,1),
gradeVARCHAR2(6)
);
二.查看表结构
DESCRIBE<表名>;
例1查看students表结构
DESCRIBEstudents;
例2查看teachers表结构
DESCRIBEteachers;
例3查看departments表结构
DESCRIBEdepartments;
例4查看courses表结构
DESCRIBEcourses;
例5查看students_grade表结构
DESCRIBEstudents_grade;
例6查看Grades表结构
DESCRIBEgrades;
三.删除表及其结构
DROPTABLE<表名>;
例1删除teachers表。
DROPTABLEteachers;
例2删除departments表。
DROPTABLEdepartments;
例3删除students_grade表。
DROPTABLEstudents_grade;
例4删除students表。
DROPTABLEstudents;
例5删除courses表。
DROPTABLEcourses;
例6删除grades表。
DROPTABLEgrades;
四.向表中添加数据
INSERTINTO<表名>VALUES(字段值);要求字段值必须与字段名顺序,类型相同
INSERTINTO<表名>(字段名)VALUES(字段值);
例1添加students记录
学生记录:
INSERTINTOstudents
VALUES(10101,NULL,'王晓芳','女','07-5月-1988','计算机');
INSERTINTOstudents
VALUES(10205,NULL,'李秋枫','男','25-11月-1990','自动化');
INSERTINTOstudents
VALUES(10102,10101,'刘春苹','女','12-8月-1991','计算机');
INSERTINTOstudents
VALUES(10301,NULL,'高山','男','08-10月-1990','机电工程');
INSERTINTOstudents
VALUES(10207,10205,'王刚','男','03-4月-1987','自动化');
INSERTINTOstudents
VALUES(10112,10101,'张纯玉','男','21-7月-1989','计算机');
INSERTINTOstudents
VALUES(10318,10301,'张冬云','女','26-12月-1989','机电工程');
INSERTINTOstudents
VALUES(10103,10101,'王天仪','男','26-12月-1989','计算机');
INSERTINTOstudents
VALUES(10201,10205,'赵风雨','男','25-10月-1990','自动化');
INSERTINTOstudents
VALUES(10105,10101,'韩刘','男','3-8月-1991','计算机');
INSERTINTOstudents
VALUES(10311,10301,'张杨','男','08-5月-1990','机电工程');
INSERTINTOstudents
VALUES(10213,10205,'高淼','男','11-3月-1987','自动化');
INSERTINTOstudents
VALUES(10212,10205,'欧阳春岚','女','12-3月-1989','自动化');
INSERTINTOstudents
VALUES(10314,10301,'赵迪帆','男','22-9月-1989','机电工程');
INSERTINTOstudents
VALUES(10312,10301,'白菲菲','女','07-5月-1988','机电工程');
学生记录(NULL):
INSERTINTOstudents
VALUES(10328,10301,'曾程程','男',NULL,'机电工程');
INSERTINTOstudents
VALUES(10128,10101,'白昕','男',NULL,'计算机');
INSERTINTOstudents
VALUES(10228,10205,'林紫寒','女',NULL,'自动化');
例2添加departments记录
系部记录:
INSERTINTOdepartmentsVALUES(101,'信息工程','1号教学楼');
INSERTINTOdepartmentsVALUES(102,'电气工程','2号教学楼');
INSERTINTOdepartmentsVALUES(103,'机电工程','3号教学楼');
连接查询时使用:
INSERTINTOdepartmentsVALUES(104,'工商管理','4号教学楼');
例3添加teachers记录
教师记录:
INSERTINTOteachers
VALUES(10101,'王彤','教授','01-9月-1990',1000,3000,101);
INSERTINTOteachers
VALUES(10104,'孔世杰','副教授','06-7月-1994',800,2700,101);
INSERTINTOteachers
VALUES(10103,'邹人文','讲师','21-1月-1996',600,2400,101);
INSERTINTOteachers
VALUES(10106,'韩冬梅','助教','01-8月-2002',500,1800,101);
INSERTINTOteachers
VALUES(10210,'杨文化','教授','03-10月-1989',1000,3100,102);
INSERTINTOteachers
VALUES(10206,'崔天','助教','05-9月-2000',500,1900,102);
INSERTINTOteachers
VALUES(10209,'孙晴碧','讲师','11-5月-1998',600,2500,102);
INSERTINTOteachers
VALUES(10207,'张珂','讲师','16-8月-1997',700,2700,102);
INSERTINTOteachers
VALUES(10308,'齐沈阳','高工','03-10月-1989',1000,3100,103);
INSERTINTOteachers
VALUES(10306,'车东日','助教','05-9月-2001',500,1900,103);
INSERTINTOteachers
VALUES(10309,'臧海涛','工程师','29-6月-1999',600,2400,103);
INSERTINTOteachers
VALUES(10307,'赵昆','讲师','18-2月-1996',800,2700,103);
教师记录(NULL):
INSERTINTOteachers
VALUES(10128,'王晓',NULL,'05-9月-2007',NULL,1000,101);
INSERTINTOteachers
VALUES(10328,'张笑',NULL,'29-9月-2007',NULL,1000,103);
INSERTINTOteachers
VALUES(10228,'赵天宇',NULL,'18-9月-2007',NULL,1000,102);
连接查询时使用:
INSERTINTOteachers
VALUES(11111,'林飞',NULL,'11-10月-2007',NULL,1000,NULL);
例4添加Courses记录
INSERTINTOcoursesVALUES(10101,'计算机组成原理',4);
INSERTINTOcoursesVALUES(10201,'自动控制原理',4);
INSERTINTOcoursesVALUES(10301,'工程制图',3);
INSERTINTOCoursesVALUES(10102,'C++语言程序设计',3);
INSERTINTOcoursesVALUES(10202,'模拟电子技术',4);
INSERTINTOcoursesVALUES(10302,'理论力学',3);
INSERTINTOcoursesVALUES(10103,'离散数学',3);
INSERTINTOcoursesVALUES(10203,'数字电子技术',4);
INSERTINTOcoursesVALUES(10303,'材料力学',3);
例5添加students_grade记录
INSERTINTOstudents_gradeVALUES(10101,10101,87);
INSERTINTOstudents_gradeVALUES(10101,10201,100);
INSERTINTOstudents_gradeVALUES(10101,10301,79);
例6添加grades记录
INSERTINTOgradesVALUES(1,0,59,'不及格');
INSERTINTOgradesVALUES(2,60,69,'及格');
INSERTINTOgradesVALUES(3,70,79,'中等');
INSERTINTOgradesVALUES(4,80,89,'良好');
INSERTINTOgradesVALUES(5,90,100,'优秀');
六.查看数据
例1查看students数据
SELECT*FROMstudents;
例2查看teachers数据
SELECT*FROMteachers;
例3查看departments数据
SELECT*FROMdepartments;
例4查看courses数据
SELECT*FROMcourses;
例5查看students_grade数据
SELECT*FROMstudents_grade;
例6查看grades数据
SELECT*FROMgrades;
七.删除数据
DELETEFROM<表名>只删除表记录,不删除表结构及其关系
例1删除students_grade数据
DELETEFROMstudents_grade;
例2删除teachers数据
DELETEFROMteachers;
例3删除departments数据
DELETEFROMdepartments;
例4删除courses数据
DELETEFROMcourses;
例5删除students数据
DELETEFROMstudents;
例6删除grades数据
DELETEFROMgrades;
简单查询
查询是指从数据库中找到满足条件的数据。
数据查询(select)可以从一个表或多个表、视图或快照中检索数据。
用户要对表或快照进行查询操作,该表或者快照必须在用户自己的模式中,或者用户在这些对象上具有select权限。
用户要查询视图的基表的行,在该表上也必须有select权限。
主要内容:
●使用select子句和from子句的简单查询
●使用where子句的条件查询
●使用orderby子句对记录进行排序
●使用groupby子句和having子句对记录进行分组查询
Select语句功能强大,语法也比较复杂,完整的select语句由6个子句构成,分别为:
Select子句,指定要获取表中哪些列数据
from子句,指定数据来自哪些表
where子句,指定获得哪些行数据
groupby子句,用于对表中数据排序
having子句,在组中指定条件
orderby子句,指定排序的列和排序方式
查询语句的完整语法如下:
select<*/expression[ASalias,…]fromtablewhere条件
groupby字段1,字段2,…orderby字段1[ASC/DESC],字段2[ASC/DESC]
1.查询指定列
例1教师(姓名,职称,工资,参加工作时间)
SELECTname,title,wage,hire_dateFROMteachers;
例2教师(姓名,职称,工资,参加工作时间),指定日期格式
SELECTname,title,wage,TO_CHAR(hire_date,'YYYY-MM-DD')FROMteachers;
例3学生(*)不可以改变列的顺序
SELECT*FROMstudents;
例4学生(全部写出列名)可以改变列的顺序
SELECTstudent_id,name,sex,specialty,dobFROMstudents;
例5学生(专业)无DISTINCT关键字
SELECTspecialtyFROMstudents;
例6学生(专业)带DISTINCT关键字
SELECTDISTINCTspecialtyFROMstudents;
2.使用别名改变输出
字段名AS别名
例1学生(姓名,生日)列别名的使用
SELECTnameAS"姓名",dobAS"生日"FROMstudents;
例2学生(姓名,生日)学生生日清单(字符串连接)
SELECTname||'生日是:
'||dobAS"学生生日清单"FROMstudents;
例3教师(姓名,奖金+工资)月总收入
SELECTnameAS"姓名",bonus+wageAS"月总收入"FROMteachers;
3.处理NULL值
例1:
利用函数NVL处理NULL
SELECTnameAS"姓名",NVL(bonus,0)+wageAS"月总收入"FROMteachers;
例2:
利用函数NVL2处理NULL
SELECTnameAS"姓名",NVL2(bonus,bonus+wage,wage)AS"月总收入"
FROMteachers;
例3:
利用函数COALESCE()处理NULL
SELECTnameAS"姓名",COALESCE(bonus+wage,wage)AS"月总收入"
FROMteachers;
4.条件查询
比较条件
功能描述
例子
算数比较条件
=
Name=’王珊’
>
Bounds>600
>=
Bounds>=600
<
hireDate>’1-10-1949’
<=
Bounds<=600
<>,!
=
Bounds<>300
包含测试
in
在指定集合中
Deptnoin(10,20)
Notin
不在指定集合中
Deptnonotin(10,20,30)
范围测试
Betweenand
在指定范围中
Wagebetween1000and2000
NotBetweenand
不在指定范围中
Wagenotbetween600and800
匹配测试
like
与指定模式匹配
Namelike‘王%’
‘%’表示0个或多个字符,’_’表示单个字符
Notlike
不与指定模式匹配
Namenotlike‘王%’
NULL测试
IsNull
是NULL值
Boundsisnull
IsnotNUll
不是NULL值
Boundsnotisnull
逻辑运算符
And
逻辑与
Bounds>600andnamelike‘张%’
Or
逻辑或
Bounds>600ornamelike‘张%’
Not
逻辑非
Notbounds=600
4.1单一条件查询
例1:
数值型
SELECTname,hire_date,title,wage
FROMteachersWHEREwage>=2000;
例2:
字符型
SELECTstudent_id,name,specialty,dob
FROMstudentsWHEREspecialty='计算机';
例
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 数据库 基础