20161122学习笔记

《Oracle数据库讲义学习笔记》

书写SQL 语句的原则
大小写不敏感,但单引和双引内的大小写是敏感的。切记!
关键字不能缩写
可以分行书写,但关键字不能被跨行书写,单引内也不要跨行书写。
一般每个子句独立占一行
可以排版来增加可读性
字符串用单引
列的别名用双引。

101:

一般大写为关键字,小写为自己指定的名称

select语句的作用,查询指定的行,查询指定的列,多张表联合查询

查询一张表的所有行和所有列

Select * from emp;

解锁同时修改密码(权限)

alter user scott account unlock identified by scott;

连接到数据库的最高用户

conn / as sysdba

连接到本地的oracle 数据库的scott 用户

conn scott/tiger

102:

查询指定的列

select ename,sal from emp;

103:

查询的表的某系列,在列上使用表达式

select ename,sal,sal+300 from emp;

104:

sqlplus 管理数据库最好,
pl/sql developer 开发存储过程最好,

--是注释当前行
/* */是注释多行

105:

查看当前用户的所有表和视图,tab是数据字典

select * from tab;

查看表结构

desc emp;

106:

Null 值不等于0,也不等于空格。Null 和已知的数值进行运算得到是null.
Null 值是未赋值的值,不入一般的索引。(位图索引中包含null)
NULL 是双刃剑,使用好了提高性能,你对它不了解,往往是错误的根源,切记!

107:

别名的使用原则
1.区分同名列的名称
2.非法的表达式合法化
3.按照你的意愿显示列的名称
4.特殊的别名要双引
5.直接写列的后面,空格间隔
6.使用as 增加可读性

select sal as salary ,hiredate "上班日期",sal*12 as total_salary from emp;

108:

在显示的时候去掉重复的行

select distinct deptno from emp;

109:

 select deptno,ename from emp where deptno=10;

select * from emp where ename='KING';//字符串要用单引

select ename,sal from emp where sal between 1000 and 3000;

select deptno,ename,sal from emp where deptno in (10,20);//in穷举

110:

Like 运算
_ 下划线通配一个,仅匹配一个字符,
% 百分号通配没有或多个字符

select ename,deptno from emp where ename like 'J%';

select ename,deptno from emp where ename like '_A%';

当你想查询_,%特殊字符时,请用escape.
Select ename from emp where ename like ‘%s_%’ escape ‘s ’;
我们并不想查找s 后必须有一个字符以上的员工,而是要剔除s,s 出现的目的就是转义,
将_转义了,这里的_不是通配符,而是实际意义的_。
Select ename from emp where ename like ‘%/_%’ escape ‘/’;
一般我们使用/来转义,以免产生歧异。

查询null值:

select ename,comm from emp where comm is null;

select ename ,deptno,sal from emp where deptno =30 and sal>1200;

select ename ,deptno,sal from emp where deptno =30 or sal>1200;

 select ename,deptno,sal from emp where ename not like 'T%';

优先级
1.算术运算
2.连接运算
3.关系运算
4. IS [NOT] NULL, LIKE, [NOT] IN
5.Between
6.not
7.and

111:排序

不指明的都是二进制排序;

select ename,sal from emp order by sal;//默认升序

select ename,sal from emp order by sal asc;//升

select ename,sal from emp order by sal desc;//降序

select ename from emp order by sal;//隐式排序

select sal*12 salary from emp order by salary;//别名排序

select sal*12 salary from emp order by salary*12;//表达式排序

select ename,sal from emp order by 2;//位置排序

select deptno,job,ename,sal from emp order by deptno ,job;//多列排序

练习:

1.查询30 号部门的员工,显示名称和工资。

elect ename,sal from emp where deptno=30;
2.查询第三个字母为A 的员工。

select * from emp where ename like '__A%';
3.查询员工的名称和上班日期,日期反序排列。

select ename hiredate from emp order by hiredate desc;

112:字符串函数

select lower(ename),upper(ename),initcap(ename) from emp;//lower小写,upper大写,initcap首字母大写

 SQL> select lower('mf TR'),upper('mf TR'),initcap('mf TR') from dual;
LOWER('MFTR') UPPER('MFTR') INITCAP('MFTR')
------------- ------------- ---------------
mf tr         MF TR         Mf Tr

Dual 是虚表,让我们用表的形式来访问函数的值。

select ename,job,concat(ename,job) from emp;//拼接字符串

113:操作数字的函数

ROUND是四舍五入,

TRUNC是截断全部舍弃。

ceil是取整上进位

abs取绝对值

mod取余数

114:日期函数

 select sysdate from dual;//数据库当前时间

SQL> select ename,to_char(hiredate,'yyyy/mm/dd') from emp;//日期转化为字符串,请说明字符串的格式。

to_date()      to_number()

115:

116:分支函数

117:分组统计函数

avg平均

sum求和

max最大

min最小

count统计

SQL> select sum(sal),min(sal),max(sal),avg(sal),count(sal) from emp;

select deptno,sum(sal) from emp group by deptno;//按部门号码分组

SQL> select deptno,job,sum(sal) from emp group by deptno,job;//在有组函数的SELECT 中,不是组函数的列,一定要放在GROUP BY 子句中。多列分组,每列都一样的才放到一起进行统计

SQL> select job,avg(sal) from emp group by job having avg(sal)>2000;//Having 是在结果中再次筛选。Having 一定得出现在group by 子句得后面。不能独立存在。

select deptno,avg(sal) from emp where job='CLERK' group by deptno having avg(sal)>1000;
Where 和having
可以同时出现再一句话中,起作用的时间不同。

WHERE是条件,having是过滤是在结果中再次筛选

posted @ 2016-11-22 15:29  ZERO1224  阅读(152)  评论(0编辑  收藏  举报