字符串操作:
1:连接concat(char1,char2)
2:长度length(char1)
3:去除空格trim(char1)、ltrim(char1)、rtrim(char1)
4:补位LPAD(char1,n,char2)、RPAD(char1,n,char2)
5:索引instr(char1,char2,m,n)
6:截取substr(char1,m,n)
7:大小写Upper(char1)、Lower(chaer1)、initcap(char)//首字母大写
数字操作 (数字操作很重要,金融全是数字)
1.四舍五入round(m,n)
2.截取trunc(m,n) //m被截取的数字,n截取几位小数
3.取余mod(m,n) //mod(salary,1000)
4.floor(m) //比m小的最大正整数
5.ceil(m) //比m大的最小正整数
日期操作:
1.to_date()
2.to_char()
3.last_day(Date)
4.add_months(birth,4)
5.months_between(date1,date2)
6.next_day(date,char)//下一周周几char
7.east,greatest //最大最小
8.extract(year from hiredate) //查询年份
exteact(day from systimestamp-hiredate)//查询天数
空值操作
1.显式insert into table_name values (x,x,x,null);
隐式insert into table_name (x,x,x) values (x,x,x);
2.update table_name set name=null where exp;
3.select * from table_name where name is null;
4.select * from table_name where name is not null;
create table table_name(id number(10) not null);
5.空值函数NVL(expr1,expr2)
若expr1不为null,则结果仍是expr1,否则为expr2,expr2必不为null;
6.NVL2(expr1,expr2,expr3)
expr1为空,结果为expr3
expr1不为空,结果为expr2
解锁
alter user scott account unlock;
修改密码:
alter user scott identified by 123456;
基本查询语句
1.from子句
select * from table_name
2.使用别名
select xxx as a,xxx a
3.过滤 where子句
select * from table_name where exp1
//查询2002年1月1号以后入职的员工
select * from hiredate > to_date('2002-1-1','yyyy-mm-dd')
4.关键字and 、or
5.模糊查询 like
%:表示0到多个字符
_:标识单个字符
注意:like后跟的是数字类型,类型会自动转换
6.in和not in
in():查询符合列表范围内的数据
not in():查询不符合列表范围内的数据
7.between ... and ...
where sal between 10 and 100
等价与where sal>=10 and sal<=100
8.is null 和 is not null
9.使用ANY和ALL
>ANY():大于最小
<ANY():
>All():大于最大
<ALL():
10.ASC升序 DESC降序
order by 字段名1 DESC,字段名2 ASC;
11.过滤重复distinct
聚合函数
group by 分组
having限制分组结果
HAVING 会在检索出所有记录之后才对结果集进行过滤,需要排序等
操作。
having后跟的也是聚合函数
或者
having后跟的是group by后的条件
注意:对分组加条件只能是having,不能是where,用where是不对的;
select * from emp group by deptno having count(*)>5 order by
deptno;
难点:
select distinct d.dname,d.loc,count(e.deptno),avg(e.sal)
from emp e left outer join dept d on e.deptno=d.deptno group
by e.deptno,d.dname,d.loc;
关联查询
连接查询:
select * from table1,table2 where
table1.column=table2.column;
或者
select * from table1 join table2 on
table1.column=table2.column;
select table1.*,table2.* from table1,table2 where
table1.column=table2.column;
内链接:
内连接返回两个关联表中所有满足连接条件的记录。
where table1.column=table2.column;
或者
from table1 join table2 on table1.column=table2.column;
外连接:
返回那些不满足连接条件的记录,需要使用外连接,即不仅返回满足
连接条件的记录,还将返回不满足连接条件的记录
SELECT table1.column,table2.column FROM table1 [ LEFT |
RIGHT ] JOIN table2 ON table1.column1 = table2.column2;
左连接:
结果为两个表都有的值且包含左表有值而右表没有的值
left outer join
右连接
结果为两个表都有的值且包含右表有值而左表没有的值
right outer join
全连接
全外连接是指除了返回两个表中满足连接条件的记录,还会返回不满
足连接条件的所有其它行。即是左外连接和右外连接查询结果的总和
。
full outer join ...on...
自连接 有点难
自连接是一种特殊的连接查询,数据的来源是一个表,即关联关系来
自于单表中的多个列。表中的列参照同一个表中的其它列的情况称作
自参照表。
自连接是通过将表用别名虚拟成两个表的方式实现,可以是等值或不
等值连接
select worker.empno w_empno, worker.ename w_ename,
manager.empno m_empno, manager.ename m_ename FROM emp
worker join emp manager ON worker.mgr = manager.empno;
select * from table1 t1 join table1 t2 on
t1.column1=t2.column2;
连接操作符
where 1=1;