sql

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










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值