【网学网提醒】:网学会员为大家收集整理了Oracle入门学习讲义1提供大家参考,希望对大家有所帮助!
oracleSQLSQLstruncturedquerylanguage(结构化查询语言)
文件FILEDATABASE(数据库)SQLDDL(datadefinitionlanguage数据定义语言画表头):createtable创建表(column列数据类型datatype,width)(constraint约束)altertable(修改表结构)droptable(删除表)DML(datamanipulationlanguage数据操作语言数据):
insert插入数据update修改数据delete删除数据TCL(transactioncontrollanguage事物控制语言):commit(提交)rollback(回滚)DQL(dataquerylanguage数据查询语言):select(查询)DCL(datacontrollanguage数据控制语言):grant(授权)revoke(回收权限)databaseobject数据库对象table(表)index(索引)view(视图)sequence(顺序号系列号)
RDBMS(relationshipdatabasemanagementsystem数据库管理系统)
oracle10gsoftwaremysql
IBMdb2
MSSQLServer
度宽
-------DBA(databaseadministrator)
installorcale10g(安装orcale10g软件)
createdatabase(创建数据库)
startup(open打开状态)
-----------SD(softwaredeveloper)
---->登录数据库(建立数据库连接)
---->SQL语句
telnet192.168.2.205
openlab/open123%$shell提示符
sqlplus
dbopemlab/open123SQL>select
echo$ORACLE_SID(环境变量--oracledbservere(oracle数据库服务器)的名字)open状态
sqlplus
setenvORACLE_SIDhiloo
ERROR
ORA-01234:ORACLEnotavailable
没有hiloo这个oracle数据库服务
cmd(windows)shell(unix)都是命令解释器
C/Sclient/server(客户端/服务器)
客户端程序和服务器端程序在同一台机器上sqlplus
客户端程序和服务器端程序不在同一台机器上jdbc(tcp/ip)
客户端程序和服务器端程序在同一台机器上
D:/ORACLE_SID=hiloo
D:/setORACLE_ID
ORACLE_SID=hiloo
%setenvORACLE_SIDhiloo
%echo$ORACLE_SID
C/Sclient/server(客户端/服务器)
sqlplus/oracleserver
createtabledept_sunw(
deptnonumber(2),dnamechar(20),locationchar(20));insertintodept_sunwvalues(10,'developer','beijing');insertintodept_sunwvalues(20,'account','shanghai');insertintodept_sunwvalues(30,'sales','guangzhou');insertintodept_sunwvalues(40,'operations','tianjin');commit;select*fromdept_sunw;createtableemp_sunchw(empnonumber(4),enamevarchar2(20),jobvarchar2(15),salarynumber(7,2),bonusnumber(7,2),hiredatedate,mgrnumber(4),deptnonumber(10));insertintoemp_sunchwvalues(1001,'张无忌','Manager',10000,2000,to_date('2009-12-03','yyyy-mm-dd'),1005,10);insertintoemp_sunchwvalues(1002,'刘苍','Anayst',8000,1000,to_date('2009-12-03','yyyy-mm-dd'),1001,10);insertintoemp_sunchwvalues(1003,'李','Anayst',9000,1000,to_date('2009-12-03','yyyy-mm-dd'),1001,10);松
翔
insertintoemp_sunchwvalues(1004,'郭芙蓉','Programmer',5000,null,to_date('2009-12-03','yyyy-mm-dd'),1001,10);insertintoemp_sunchwvalues(1005,'张三丰','Prisdent',15000,null,to_date('2009-12-03','yyyy-mm-dd'),null,20);insertintoemp_sunchwvalues(1006,'杨小','Manager',5000,400,to_date('2009-12-03','yyyy-mm-dd'),1005,20);insertintoemp_sunchwvalues(1007,'陆无六
双
','clerk',3000,500,to_date('2009-12-03','yyyy-mm-dd'),1006,20);insertintoemp_sunchwvalues(1008,'黄','Manager',5000,500,to_date('2009-12-03','yyyy-mm-dd'),1005,30);容
insertintoemp_sunchwvalues(1009,'韦小宝','salesman',4000,null,to_date('2009-12-03','yyyy-mm-dd'),1008,30);insertintoemp_sunchwvalues(1010,'郭','salesman',4500,500,to_date('2009-12-03','yyyy-mm-dd'),1008,30);靖
setLinesize150colempnofor9999colmgrfor9999coldeptnofor99colsalaryfor99999.99commit;
select*fromemp_sunchw;
源表from后面的表名结果集select语句的查询结果
select语句select子句from子句select投影操作(select子句)选择操作,连接操作selext子句列表表达式函数
算术表达式,字符表达式(字符串的拼接)语法检查,语义检查,生成执行计划,执行该计划,产生结果集
select表达式列表名fromtabname
字符窜串用单引号
字符查找时大小写敏感
列表名用双引号空格或者大小写敏感
insert包含null没值,算术表达式中包含null值结果一定为null.null可以按无穷大理解
nvl(p1,p2)返回值nvl(bonus,0)空值转换函数p1,p2distinct不同区别:去重distinctbonusbonus包含多个null值结果集包含一个null值
distinctdeptno,jobfromemp_sunchw;distinct之后,from之前的所有列合去重
联
selectfromwherewhere子句实现选择操作where条件表达式列名比较运算符值where子句可执行在select子句之前所有列表名不能用于where子句,表达式,比较运算符值(尽量不用)upper()将字符串转化为大写lower()将字符串转换为小写betweenand闭区间范围>=和<=
in(集合)<=>=any(跟集合里的任意一个值都相等)<=>=or=like像字符
通配符%0或多个字符's'like's%'
_任意一个字符
_%一个代表通配符,一个代表它本身判断一个列的取值是否为空用isnull否定形式isnullnotnull=的否定形式<>!=betweenandnotbetweenand比小的小,比大的大like的否定形式notlikein的否定形式notinnotin<=><>all(跟集合里的所有值都不相等)<=>and<>对于in来说,集合里面是否包含null值,对结果集没影响
对于notin来说,集合里面包含null值,结果集里一定是norows
selectec.(没有任何记录)
建立连接
DDLDMLTCL
selectdistinctfromwhere
fromwhereselectdistinct
where数据类型比较运算符
课堂练习
1:列出员工名称以及工资
selectename,salaryfromemp_sunchw;
2:列出员工名称以及年薪
selectename,salary*12fromemp_sunchw;
3:列出员工名称以及一年的总收入
selectename||'''stotalsalaryis'||(salary+nvl(bonus,0)*12)empfrom
emp_sunchw;
4:公司里有哪些不同职位
selectdistinctjobfromemp_sunchw;
5:公司里每个部门有哪些不同职位
selectdistinctdeptno,jobfromemp_sunchw;
6:工资大于5000的员工的名称和工资
selectename,salaryfromemp_sunchwwheresalary>5000;
7:工资大于5000的员工的名称和年薪
selectename,(salary+nvl(bonus,0))*12fromemp_sunchwwheresalary>5000;
8:年薪大于60000的员工的名称和年薪
selectename,(salary+nvl(bonus,0))*12fromemp_sunchwwhere
(salary+nvl(bonus,0))*12>60000;
9:哪些员工的职位是clerk
selectename,jobfromemp_sunchwwherejob='Clerk';
10:哪些员工的职位是manager
selectename,jobfromemp_sunchwwherejob='Manage';
11:哪些员工的职位是clerk,不知道clerk的大小写
selectename,jobfromemp_sunchwwhereupper(job)='CLERK';
selectename,jobfromemp_sunchwwherelower(job)='clerk';
12:找出工资在5000到10000之间的员工的名称和年薪
selectename,(salary+nvl(bonus,0)*12)fromemp_sunchwwheresalary
between5000and10000;
13:哪些员工的职位是clerk或Manager或salesman
selectename,jobfromemp_sunchwwherejob
in('Clerk','Manager','Salesman');
14:哪些员工的名字的第二个字符是a
15:哪些员工的职位的前两个字符是j_(j_salesman符合条件)
转义
selectename,jobfromemp_sunchwwherejoblike'j_%'escape'\';
16:哪些员工没有奖金
selectename,bonusfromemp_sunchwwherebonusisnull;
17:哪些员工有奖金
关于null的讨论
insert包含null,没值,算术表达式中包含null值,结果一定为null.null
可以按无穷大理解。
distinctbonus,bouns包含多个null值,结果集包含一个null值
判断一个列的取值是否为空,用isnull
null=null不成立,1<>null不成立null<>null不成立
对于notin