Oracle语句-基本查询
Oracle的数据类型
1、字符类型CHAR:一个定长字符串,当位数不足自动用空格填充来达到其最大长度。如非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。VARCHAR2:目前这也是VARCHAR的同义词。这是一个变长字符串,与CHAR类型不同,它不会用空格填充至最大长度。VARCHAR2(12)可能包含0~
12字节的信息。VARCHAR2最多可以存储4,000字节的信息。
CHAR和VARCHAR2的比较CHAR(4) “A“ 实际在数据库中存储为"A ““ABCDE”超长报错VARCHAR2(4) “A” 存储的还是“A”“ABCDE”超长报错汉字:每个汉字占多少字节,要看具体的编码方式,如UTF-8(1-3字节)、GB2312(2字节)、GBK(2字节)、GB18030(1、2、4字节)
2、数字类型
NUMBER:该数据类型能存储精度最多达38位的数字。每个数存储在一个变长字段中,其长度在0~22字节之间。Oracle的NUMBER类型精度很高, 远远高于许多编程语言中常规的FLOAT和DOUBLE类型。
NUMBER( p,s ) p表示精度(总长度)s表示小数位置且四舍五入
NUMBER(10,3) 10是总长度,3是小数位数的长度123.456123.4567 :将存储为123.45712345679.899 :精度超长了,10是总长度,3是小数位, 整数位为10-3=7位NUMBER(10)==NUMBER(10,0)Java.lang.IntegerNUMBER(19)==NUMBER(19,0) java.lang.Long
3、日期类型
DATE:一个7字节的定宽日期/时间数据类型。其中总包含7个属性,包括:世纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒。
注意不要写成datetime
TIMESTAMP:一个7字节或12.字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒(fractional second);带小数秒的TIMESTAMP在小数点右边最多可以保留9位。
4、二进制及大文本数据
BLOB:(binary large object)在Oracle9i及以前的版本中, 这种数据类型允许存储最多4GB的数据, 在oracle10g及以后的版本中允许存储最多(4GB)×(数据库块大小)字节的数据。BLOB包含不需要进行字符集转换的“二进制“数据,如果要存储电子表格、字处理文档、图像文件等就很适合采用
CLOB:(Character Large Object)在Oracle9i及以前的版本中, 这种数据类型允许存储最多4GB的数据, 在Oracle 10g及以后的版本中允许存储最多(4GB)×(数据库块大小)字节的数据。CLOB包含要进行字符集转换的信息。这种数据类型很适合存储纯文本信息。
跟text一样
建立自己表空间:create tablespace xy
datafile 'd:/app/209/xy.dbf'
size 50M
autoextend on
next 10M
create user itxy
identified by itxy
default tablespace xy
grant dba to itxy;
登录:
使用oracle客户端工具,连接远程服务器:
system/orc123@10.0.19.252/orcl
用户名/密码 @ 远程服务器的IP/远程网络服务名(SID)
system / sys / scott oracle系统用户
role privilege :
角色是身份的象征,本质是一群权限的集合
--当前用户
SQL> show user
USER 为"SCOTT"
--当前用户的表
SQL> select * from tab;
--员工表的结构
SQL> desc emp
--查询所有的员工信息
SQL> select * from emp;
--设置行宽
SQL> show linesize
linesize 80
SQL> set linesize 150
--设置列宽
SQL> col ename format a8
SQL> col sal for 9999
SQL> /
--通过列名查询
SQL> select empno,ename,job,mgr,hiredate,sal,comm,deptno
2 from emp;
--SQL优化的原则:
SQL> 1.尽量使用列名
SQL> host cls
--查询员工信息:
员工号 姓名 月薪 年薪
SQL> select empno,ename,sal,sal*12
2 from emp;
SQL> --查询员工信息:员工号 姓名 月薪 年薪 奖金 年收入
SQL> select empno,ename,sal,sal*12,comm,sal*12+comm
2 from emp;
--SQL中的null值:
1. 包含null的表达式都为null
SQL> 2. null永远!=null
SQL> select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0)
2 from emp;
--2. null永远!=null
SQL> --查询奖金为null的员工
SQL> select *
2 from emp
3 where comm=null;
未选定行
SQL> select *
2 from emp
3 where comm is null;
--修改sql:
--c
员工号 姓名 月薪
SQL> select empno,ename,sal
2 form emp;
form emp
*
第 2 行出现错误:
ORA-00923: 未找到要求的FROM关键字
SQL> --c命令change
SQL> 2
2* form emp
SQL> c /form/from
2* from emp
SQL> /
--ed
已写入 file afiedt.buf
1 select empno as "员工号",ename "姓名",sal薪 水,sal*12,comm,sal*12+nvl(comm,0)
2* from emp
SQL> /
select empno as "员工号",ename "姓名",sal薪 水,sal*12,comm,sal*12+nvl(comm,0)
*
第 1 行出现错误:
ORA-00923: 未找到要求的FROM关键字
SQL> ed
已写入 file afiedt.buf
1 select empno as "员工号",ename "姓名",sal "薪 水",sal*12,comm,sal*12+nvl(comm,0)
2* from emp
SQL> /
--distinct 去掉重复记录
SQL> select deptno from emp;
SQL> select distinct deptno from emp;
SQL> select job from emp;
SQL> select distinct job from emp;
SQL> select distinct deptno,job from emp;
--distinct 作用于后面所有的列
--连接符||
SQL> -- concat
SQL> select concat('Hello',' World');
select concat('Hello',' World')
第 1 行出现错误:
ORA-00923: 未找到要求的FROM关键字
SQL> select concat('Hello',' World') from emp;
--dual
SQL> select concat('Hello',' World') from dual;
CONCAT('HELL
SQL> select 3+2 from dual;
SQL> select * from tab;
SQL> --dual表:伪表
SQL> --伪列
SQL> select 'Hello'||' World' 字符串from dual;
--字符串
SQL> --查询员工信息:***的薪水是****
SQL> select ename||'的薪水是'||sal信息from emp;
SQL> --字符串
SQL> select * from emp;