sql

来源:互联网 发布:赵薇,还珠格格 知乎 编辑:程序博客网 时间:2024/06/14 10:06
SQL语言;select DML:insert update delete事务控制:commit rollback savepointDDL:create alter drop (truncate)DCL:grant revoke SELECT 1.1 简单查询:1、确定表结构DESC DEPT2、检索所有列   select * from emp3、检索特定列select ename,sal,job from emp4、检索日期列日期默认的格式: DD-MM-YYselect to_char(hiredate,'YYYY-MM-DD') from emp;5、取消重复行 (取消重复行后,会按照字段的特性,升序排序)select distinct deptno,job from emp 6、使用表达式select sal*12 from emp7、使用列别名(列别名有大小写之分或者包含特殊字符或者空格,应用"",AS可以省略)select sal 工资 from empselect sal as 工资 from emp select sal as "工资" from emp8、处理NULLNULL表示未知值,既不是空格也不是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 emp9、连接字符串 || select ename || ' is a  ' || job as introduce from emp1.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 desc2、多列排序select ename from emp order by sal asc,comm descselect 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、使用defaultinsert into emp values(DEFAULT,.....)4、用子查询插入多行数据insert into emp (column....) select column... from emp5、用子查询直接装载insert /*+append*/ into emp( column ...) select column ... from emp2.2 UPDATE当更新的数据违法约束条件时,提示错误1、更新单列数据update emp set sal = 1200 where ename='SCOTT'2、更新多列数据update emp set sal = sal*1.2,comm = com*2 where deptno=203、使用默认值更新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 DELETE1、删除满足条件的数据delete from emp where ename ='SCOTT'2、删除所有数据delete from emp3、使用delete不会释放表占用的空间,使用truncate table更快,并且能删除表占用空间truncate table emp4、使用子查询删除数据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 deptno4、使用group by 进行多列分组select deptno,job,avg(sal),max(sal) from emp group by deptno,job5、使用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)<2000order by deptno连接查询:连接查询不同的表如果列名不同不需要加表名前缀,如果同列,需要加前缀1、不适用表别名select dept.dname,emp.ename from dept,emp where dept.deptno=emp.deptnoselect dept.dname,emp.ename from dept join emp on dept.deptno = emp.deptno2、使用表别名select d.dname,e.ename from dept d,emp e where dept.deptno=emp.deptnoselect d.dname,e.ename from dept d join emp e on d.deptno = e.deptno3、自连接select w.ename, m.ename from emp m,emp w where m.empno = w.mgrselect w.ename, m.ename from emp m join emp w on m.empno = w.mgr4、内连接、外连接内连接用于返回满足连接条件的记录,外连接是内连接的扩展,还能返回不满足条件的记录。(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) asselect empno,ename,sal,job from emp;create or replace view dept_10 asselect empno,ename,job,sal,deptno from emp where deptno=10;5、合并查询UNION (会取消重复值)select ename,sal from emp where sal>2000 unionselect ename,sal frm emp where job = 'MANAGER'UNION ALL 与union的区别在于不会取消重复值INTERSECT 交集minus 差集CASE语句1、使用单一选择符进行等值比较    case sal when 1000 then 1when 2000 then 2else 3end case;2、case使用多种条件进行比较casewhen sal<1000 then 1when sal<2000 then 2else 3end case


原创粉丝点击