因公司业务需求,需要使用Oracle数据库,因为之前都是用MySQL做简单的处理,现在特意找了个教程系统学习下Oracle数据库。这里记录下学习过程:一,方便今后自己查阅;二,激励自己学下去;三,也方便后来者有个参考。
关于版本:感觉不重要,Oracle的核心功能肯定不会怎么变的。这里还是说明下,本日志使用的Oracle版本是10g(11g也可以),至于更新的版本12c等,问题应该都不大。
一、基本查询
1.查看当前用户:
show user
2.查看当前用户下的表
select * from tab;
-->tab是管理员提供的表
3.查询所有的员工信息
select * from emp;
补:sqlplus提供的命令(不用加分号结束,当然加了也没事,一般长词还有缩写)
--1.设置行宽
set linesize 150
--2.设置页面大小(展示多少条记录)
set pagesize 30
--3.设置列宽
col ename for a8
col sal for 9999
--4.c命令:change,修改命令行敲错的代码
--5.ed命令:edit,会打开系统默认的记事本,并将上一段sql命令放进去
修改完成后ctrl+s保存,关闭记事本。使用“/”执行刚才的命令
--6.spool:输出在sqlplus里的命令和结果
SQL>spool c:\test.txt
SQL>命令1
SQL>结果1
……
SQL>命令n
SQL>结果n
SQL>spool off
则这中间的所有信息都会被保存在c:\test.txt文件中
--7.save:保存上一条sql命令到本地
SQL>命令1
SQL>save c:\a.sql
则命令1就被保存在a.sql里了
SQL>@c:\a.sql
可以执行刚刚保存的命令
--8.清屏命令
host cls:清除页面上的显示
--9.查看表结构
desc 表名/describe 表名
4.通过列名查询
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;
补:sql优化
1. 尽量使用列名取代*: 9i之前,可以列名号
9i之后: 可以认为是一样的
5.别名
select empno as "员工号",ename "姓名",sal 月薪, sal*12 年薪 from emp
注意:别名加双引号和不加双引号的区别:
1)不加双引号的别名中间不能有空格
对的: select empno as "员工号",ename "姓名",sal "月 薪", sal*12 年薪 from emp;
错的: select empno as "员工号",ename "姓名",sal 月 薪, sal*12 年薪 from emp;
2)不加双引号的别名不能以数字开头
对的: select empno as "1员工号" from emp;
错的: select empno as 1员工号 from emp;
补:关于SQL中null值:
1. 包含null的表达式都为null,如果需要可以考虑滤空函数nvl或者nvl2
2. 在SQL中,null永远不等于null
错的:where comm=null
对的:where comm is null / where comm is not null
6.DISTINCT 去掉重复记录
select DISTINCT deptno from emp
注意:DISTINCT作用于多列
select DISTINCT deptno,job from emp
这条命令只会去除deptno和job都相同的行
7.连接符||
select concat('hello',' world') from dual;
等价于
select 'hello'||' world' from dual;
注意:oracle的select必须跟from,但像select sysdate查询日期怎么办?
oracle提供了dual伪表,可以写作select sysdate from dual
--查询员工信息: ***的职位是***
select ename||'的职位是'||job from emp;