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是过滤是在结果中再次筛选