Oracle 一 sqlplus环境与基本查询

1.sqlplus命令(工具命令,非sql语句)

1.1 登陆

sqlplus scott/tiger

如果建立过除orcl以外的数据库(如用dbca建立了YGGL),然后又删了改数据库,默认连接的会是新数据库,此时必须显式指定连接哪个数据库  @数据库名即可   (本质上似乎是连接串名,和数据名相同罢了)

sqlplus scott/[email protected]

 

切换用户:

conn 用户名/密码 [as sysdba]

conn sys/orcl as sysdba;

Oracle 一 sqlplus环境与基本查询

同理有时要显式指定连接的数据库:

conn sys/[email protected] as sysdba;

 

1.2录屏

spool G:\基本查询.txt
。。。。。
spool off

将spool G:\基本查询下一句至spool off的所有cmd窗口内容写到文件“G:\基本查询.txt”里,相当于录屏

1.3清屏

host cls

其实host 后面接该操作系统的各种命令都行,host就是执行主机命令    如:host dir    host date

1.4当前用户

oracle下一个数据库有多个用户,用户下才有表

show user

当前用户下的表:

select * from tab;

比较麻烦的方法

select table_name from user_tables;

-- user_tables是一张特殊的表 可以查询该表结构
desc user_tables;

1.5 显示表结构

desc 表名;

desc emp;

1.6设置行宽

shwo linesize; --显示行宽
set linesize 150; --设置行宽为150

未设置行宽前:

Oracle 一 sqlplus环境与基本查询

设置行宽后:

Oracle 一 sqlplus环境与基本查询

  / 表示执行上一条sql语句

1.7 设置列宽

--设置ename(字符型)列占8个字符
col ename format a8

--设置sal(数字型)占4位  1个9代表一个数字
col sal format 9999

类似的可以设置页大小:

show pagesize;
set pagesize 30;
--省得每次分页多输出一行----------------------------------------------------和列名

 

1.8修改写错的sql语句

--edit  会将上一条语句写入记事本供你修改 改完后直接×掉1
ed

Oracle 一 sqlplus环境与基本查询

 

2.sql基本查询语句 和mysql基本一样 不再赘述

--查询所有的员工信息
select * from emp;

--通过列名查询
select empno,ename,job,mgr,hiredate,sal,comm,deptno
from emp;

/*
 SQL优化的原则:
 1.尽量使用列名
*/
--查询员工信息:员工号 姓名 月薪
select empno,ename,sal
from emp;

--查询员工信息:员工号 姓名 月薪 年薪
select empno,ename,sal,sal*12
from emp;

--查询员工信息:员工号 姓名 月薪 年薪 奖金 年收入
select empno,ename,sal,sal*12,comm,sal*12+comm
from emp;
--上面写法有问题 comm为null的年收入也算为null了


/*
 SQL中的null值:
 1. 包含null的表达式都为null
 2. null永远!=null
 */
select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0)
from emp;
-- nvl(comm,0)  若comm奖金为null返回0,否则返回comm

--2. null永远!=null
--查询奖金为null的员工
-- 错误写法
select *
from emp
where comm=null; 

-- 正确写法
select *
from emp
where comm is null;

--distinct 去掉重复记录
select deptno from emp;
select distinct deptno from emp;
select job from emp;
select distinct job from emp;
--distinct 作用于后面所有的列
select distinct deptno,job from emp;

--连接符 ||
-- concat
select concat('Hello','  World') from emp;

--虚表 dual
select concat('Hello','  World') from dual;
select 3+2 from dual;


--dual表:伪表
--伪列
select 'Hello'||'  World'  字符串 from dual;
输出:
字符串                                                                                                                                                
------------                                                                                                                                          
Hello  World   

--查询员工信息:***的薪水是****
select ename||'的薪水是'||sal 信息 from emp;
运行结果:
信息                                                                                                                                                  
----------------------------------------------------------                                                                                            
SMITH的薪水是800                                                                                                                                      
ALLEN的薪水是1600                                                                                                                                     
WARD的薪水是1250                                                                                                                                      
JONES的薪水是2975                                                                                                                                     
MARTIN的薪水是1250                                                                                                                                    
BLAKE的薪水是2850   

--字符串

spool off