# 基本概念
方案=用户
实体:Java中的类
记录:Java中的对象,行
字段:java中的属性,列
表:同一个实体中,所有的记录、字段组合起来就是表。
# varchar2和char的区别:
varchar2:是可变字符串,在声明长度时,如果存储不满,可自动缩小长度
char:定长字符串,在声明长度时,如果存储不满,用空格填补满。
# varchar和varchar2区别:
varchar:汉字占2个字节,英文占1个字节;varchar2:都占2个字节
varchar是标准的sql;varchar2是oracle独有的
varchar不对空字符串处理;varchar2对空字符串记作null
varchar存放固定长字符串,最大长度为2000个字节;varchar2存放可变字符串,最大长度为4000字节。
# 大文本BLOB,CLOB不能进行alter修改 -->先删除该列,再重新追加。
# 基本命令
show user; ---查看当前用户 ======================================================= select * from tab; ---查看当前用户下的所有表 ======================================================== Dos查看设置: set linesize 300 set pagesize 300 ========================================================= host cls 清屏
# 数据查询
--列别名,注意:年薪不要分开写,最好加上" "
select ename 姓名,salary*15 年薪 from s_emp;
# null值的计算
--nvl(参数1,参数2):若参数1为空,返回参数2;若参数2为空,返回参数1 类似"三目运算"
select ename,salary*16+nvl(commission_pct,0) from s_emp;
--排重 distinct
select distinct salary,manager_id from s_emp; --多字段排重,会以组合的形式出现
--where关键字
--特殊条件(极限条件)
select * from emp where 1=1;--永真 select * from emp where 1!=1; --永假
# 模糊查询
1.like... '李%'、'%丽%'、'_博%'、'%e_'、'%\_%' escape '\'
select * from emp where ename like '%\_%' escape '\'; --模糊查询出带有下划线的名字
2.between...and... 在特定范围内 "从小到大"
3.in... 查询出某一列内容与所列的匹配内容 ---注意:not in...不能出现null,若出现null,结果为null
select * from emp where eno not in (10,20,30,null); ---结果为空
select * from emp where mgr not in(select mgr from emp);
--null、not null select ename from s_emp where commission is null;
# 排序:order by... desc/(asc) 排序永远在语句的最后
select * from s_emp order by salary desc; --(大――>小) select empno,ename,sal from emp order by 3 desc; select * from s_emp order by dept_id desc,salary desc,id asc;
--order by 字段名|表达式|序号 select * from s_emp order by salary desc; select empno,ename,sal from emp order by 3 desc; select * from emp order by sal+1000 desc; --null值在排序的时候默认是最大的 select empno,ename,sal from emp order by sal desc nulls last; --将null扔到后面
# 追加排序(command)
SQL> select empno,ename,sal from emp; SQL> a order by sal desc; 1* select empno,ename,sal from emporder by sal desc SQL> / --修改写错单词 SQL> select * fron emp; SQL> c /fron/from 1* select * from emp SQL> /
# 运算符
算术运算符:+、-、*、/、mod(a,b)
逻辑运算符:and or not
比较运算符:>、<、=、>=、<=、<>、!=(非SQL92标准)
注意:现在用的是SQL99标准,若接触到MyCat中间件的时候,在增添数据的时候要遵守SQL92标准。
# DDL数据定义语言
1.建表
create table 表名( 字段名1 数据类型(长度), 字段名2 数据类型(长度), 字段名3 数据类型(长度), ... )
2.修改表结构/表名
alter table 表名 add 列名 数据类型; alter table 表名 drop column 列名; alter table 表名 rename 原列名 to 新列名; alter table 表名 rename to 新表名;
3.删除表
delete from emp;--可以回退,支持闪回,不会释放空间(换了个地方存储数据) truncate table emp; --不可回退,不支持闪回,清空空间 delete 会产生碎片,truncate不会 如果碎片太多,需要整理碎片: a. alter table 表名 move; b. 导入导出 set time on/off --显示时间
# DML数据操纵语言
1.增、删、改
insert into 表名 values(列值名1,列值名2...); delete [from] 表名 [where<删除条件>]; update 表名 set 列名1=列值1,列名2=列值2...[where<更新条件>]; ---若修改错了,记得rollback; # (CRUD)增、删、改、查(DQL非官方)