SQL语言;
select
DML:insert update delete
事务控制:commit rollback savepoint
DDL:create alter drop (truncate)
DCL:grant revoke
SELECT
1.1 简单查询:
1、确定表结构 DESC DEPT
2、检索所有列
select * from emp
3、检索特定列
select ename,sal,job from emp
4、检索日期列
日期默认的格式: DD-MM-YY
select to_char(hiredate,'YYYY-MM-DD') from emp;
5、取消重复行 (取消重复行后,会按照字段的特性,升序排序)
select distinct deptno,job from emp
6、使用表达式
select sal*12 from emp
7、使用列别名(列别名有大小写之分或者包含特殊字符或者空格,应用"",AS可以省略)
select sal 工资 from emp
select sal as 工资 from emp
select sal as "工资" from emp
8、处理NULL
NULL表示未知值,既不是空格也不是0。当插入数据时,没有给某列提供数据,也没有默认值的时候,数据为NULL。NULL值出现在表达式中会导致整个表
达式的值为NULL,NVL(exp1,exp2)当exp1为null时,为表达式exp2的值
NVL2(exp1,exp2,exp3) 当exp1为null时,为表达式exp3值,不为null时,为exp2值
select ename,sal,comm,sal+nvl(comm,0) from emp
9、连接字符串 ||
select ename || ' is a ' || job as introduce from emp
1.2 WHERE子句
比较运算符:
=
<> !=
>= <= > <
BETWEEN ... AND ...
IN( ... )
LIKE
IS NULL
文本字符串:
可以代表字符、日期或者数字
当代表字符或者日期的时候用单引号括起来,数字不需要
数字和日期都可以用数学运算符建立表达式:
+ - * / <>
日期可以加数字,数字默认为天
日期不可以加日期,但可以互减
字符不能互相加减
逻辑操作符:
NOT AND OR (按照优先级排序)
1.3 ORDER BY 子句
当select同时包含where、group by、having、order by等时,order by必须是最后一条子句
null值被当做无穷大处理
1、单例排序
select ename,sal from emp where deptno = 10 order by sal(默认按照升序ASC)
select ename,sal from emp where deptno = 10 order by sal desc
2、多列排序
select ename from emp order by sal asc,comm desc
select sal*12 as total from emp order by total desc (按照列别名排序)
select sal*12 from emp order by 1 desc (按照列位置序号排序)
DML:
2.1 INSERT:
1、使用列表插入单行数据
insert into emp values( ... )
2、使用列的列表插入单行数据
insert into emp ( ename,sal,comm,...) values ( ... )
3、使用default
insert into emp values(DEFAULT,.....)
4、用子查询插入多行数据
insert into emp (column....)
select column... from emp
5、用子查询直接装载
insert /*+append*/ into emp( column ...)
select column ... from emp
2.2 UPDATE
当更新的数据违法约束条件时,提示错误
1、更新单列数据
update emp set sal = 1200 where ename='SCOTT'
2、更新多列数据
update emp set sal = sal*1.2,comm = com*2 where deptno=20
3、使用默认值更新
update emp set job = default where ename = 'scott'
4、子查询更新
update emp set (job,sal,comm) =
(select job,sal,comm from emp where ename='SCOTT')
where ename = 'SMITH'
update employee set deptno=(select deptno from emp where empno=7788)
where job = (select job from emp where empno=7788)
2.3 DELETE
1、删除满足条件的数据
delete from emp where ename ='SCOTT'
2、删除所有数据
delete from emp
3、使用delete不会释放表占用的空间,使用truncate table更快,并且能删除表占用空间
truncate table emp
4、使用子查询删除数据
delete from emp where deptno = (select deptno from dept where dname='Sales')
DCL:
当进行DML语句时,会在被作用的表上加表锁,以防止其他用户改变表结构;同时会在被作用行上加行锁,以防止其他事务在相应行上执行DML操作。
执行commit后,会结束事务,删除保存点,释放锁。
以下会自动提交事务:
1、执行DDL语句
2、执行DCL语句
3、退出sqlplus
设置保存点:
savepoint a
取消部分事务
rollback to a
取消全部事务:
rollback
数据分组:
数据分组通过使用group by子句,分组函数以及having子句共同实现的。
注意事项:
1)除了使用count(*)外,分组函数都会忽略NULL行
2)执行select语句时,如果选择列表里包含列,表达式,这些列和表达式必须出现在
group by子句中
3)使用分组函数时,可以指定all或者distinct,all是默认的选项
1、select count(*),avg(sal),sum(comm) from emp;
注意count(*) 和 count(comm)的区别
2、取消重复行
select count(distinct deptno) from emp;
3、使用group by 进行单例分组
select deptno,avg(sal),max(sal) from emp group by deptno
4、使用group by 进行多列分组
select deptno,job,avg(sal),max(sal) from emp group by deptno,job
5、使用having子句进行分组过滤
select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000
含有order by,group by,having 及where子句注意事项;
1)分组函数只能出现在选择列表、having子句和order by子句中
2)order by子句放在最后
select deptno,avg(sal) from emp where sal>200 group by deptno having avg(sal)<2000
order by deptno
连接查询:
连接查询不同的表如果列名不同不需要加表名前缀,如果同列,需要加前缀
1、不适用表别名
select dept.dname,emp.ename from dept,emp where dept.deptno=emp.deptno
select dept.dname,emp.ename from dept join emp on dept.deptno = emp.deptno
2、使用表别名
select d.dname,e.ename from dept d,emp e where dept.deptno=emp.deptno
select d.dname,e.ename from dept d join emp e on d.deptno = e.deptno
3、自连接
select w.ename, m.ename from emp m,emp w where m.empno = w.mgr
select w.ename, m.ename from emp m join emp w on m.empno = w.mgr
4、内连接、外连接
内连接用于返回满足连接条件的记录,外连接是内连接的扩展,还能返回不满足条件的记录。
(inner) Join 内连接,left (outer) join 左外连接 right(outer) join右外链接 full(outer) join表示完全外连接;on用于指定连接条件;如果使用from 子句指定内外连接,
必须使用on指定连接条件,如果使用(+)必须使用where指定连接条件。
使用(+)时,放在较少行一段,及完全满足条件的一端。
子查询:
作用:
1)通过在insert或者create table使用子查询,可以将源表数据插入到目标表中。
2)通过在create view使用子查询,可以定义视图对应的select语句
3)通过在update使用子查询可以修改一列或者多列数据。
4)通过在where,having,start with子句中使用子查询,可以提供条件值。
根据查询返回结果不同:分为单行子查询,多行子查询,多列子查询。
1、单行子查询
select ename,sal,deptno from emp where deptno=(select deptno from emp where ename='SCOTT')
2、多行子查询
select ename,sal,deptno from emp where job in
(select distinct job from emp where deptno=10)
3、多列子查询
select ename,sal,deptno from emp where (deptno,job) =
(select deptno,job from emp where ename = 'SMITH')
4、DDL语句中使用子查询
create table new_emp(id,name,sal,job) as
select empno,ename,sal,job from emp;
create or replace view dept_10 as
select empno,ename,job,sal,deptno from emp
where deptno=10;
5、合并查询
UNION (会取消重复值)
select ename,sal from emp where sal>2000 union
select ename,sal frm emp where job = 'MANAGER'
UNION ALL 与union的区别在于不会取消重复值
INTERSECT 交集
minus 差集
CASE语句
1、使用单一选择符进行等值比较
case sal
when 1000 then 1
when 2000 then 2
else 3
end case;
2、case使用多种条件进行比较
case
when sal<1000 then 1
when sal<2000 then 2
else 3
end case
sql
最新推荐文章于 2024-10-23 17:19:43 发布