–结构化查询语言(Structured Query Language)(发音ˈeskjuːˈ)
–SQL是最重要的关系数据库操作语言,是所有关系数据库管理系统的标准语言
–许多数据库厂商在使用SQL的同时,都对SQL进行了扩展,比如ORACLE的PL/SQL语言,MS SQL-Server的T-SQL语言
–SQL语言是一种非过程化语言,只需要提出”做什么”,而不需要指明“怎么做”
–结构化查询语言(Structured Query Language)(发音ˈeskjuːˈ)
–SQL是最重要的关系数据库操作语言,是所有关系数据库管理系统的标准语言
–许多数据库厂商在使用SQL的同时,都对SQL进行了扩展,比如ORACLE的PL/SQL语言,MS SQL-Server的T-SQL语言
–SQL语言是一种非过程化语言,只需要提出”做什么”,而不需要指明“怎么做”
–结构化查询语言(Structured Query Language)(发音ˈeskjuːˈ)
–SQL是最重要的关系数据库操作语言,是所有关系数据库管理系统的标准语言
–许多数据库厂商在使用SQL的同时,都对SQL进行了扩展,比如ORACLE的PL/SQL语言,MS SQL-Server的T-SQL语言
–SQL语言是一种非过程化语言,只需要提出”做什么”,而不需要指明“怎么做”
–结构化查询语言(Structured Query Language)(发音ˈeskjuːˈ)
–SQL是最重要的关系数据库操作语言,是所有关系数据库管理系统的标准语言
–许多数据库厂商在使用SQL的同时,都对SQL进行了扩展,比如ORACLE的PL/SQL语言,MS SQL-Server的T-SQL语言
–SQL语言是一种非过程化语言,只需要提出”做什么”,而不需要指明“怎么做”
--员工表 select * from emp; --部门表 select * from dept; --工资表 select * from salgrade; --奖金表 select * from bonus; --员工表 select * from emp; --查询员工姓名编号工资 select empno, ename, sal from emp; --查询员工的工资和年薪 select sal,sal*12 from emp; --强制给名字加上数字 select ename, ename|| '12'from emp; --as用法 select ename as 员工名字,empno as 员工编号 from emp; --as可以省略 select empno 员工编号, ename 员工名字, sal 月薪 ,sal *12 +5000年薪 from emp; --||拼接符(要用单引号),相当于java中的+号 select ename ||'月薪是 '||sal 员工月薪 from emp; select ename ||' 员工编号'|| empno from emp; --去除重复行 distinct select distinct sal from emp; select distinct ename ,sal from emp; select sal from emp; --升序asc(可以省略不写) 降序desc select * from emp order by sal asc ; select * from emp order by sal desc; select * from emp order by sal ,empno desc; select * from emp order by sal ,empno ; select empno , ename, sal, from emp order by sal; --where用法 --查询ALLEN员工的信息 select * from emp where ename ='ALLEN'; select * from emp where ename ='MARTIN'; --查询1250工资的员工 select * from emp where sal =1250; --查询入职为1981-2-22的员工 select *from emp where hiredate ='22-2月-81'; --查询1250工资以下的员工 select *from emp where sal <1250; --查询1250工资以上的员工 select *from emp where sal >1250; --查询不等于1250工资的员工 select * from emp where sal !=1250; select * from emp where sal <>1250; --between A and B查询在A和B之间的数 select *from emp where sal between 800 and 1000; select *from emp where sal >= 800 <= 1000; --in() 集合查询在集合中的数 select * from emp where sal in(800,900,1250,1000); select *from emp where sal = 800 or sal =900 or sal = 1250 or sal =1000 ; --查询奖金为空的员工 select * from emp where comm is null; select * from emp where comm =''; --查询奖金不为空的员工 select * from emp where comm is not null; select * from emp where comm !=''; --like模糊查询 %表示所有 _表示一个字符 --查询以S 开头的员工名字 select * from emp where ename like 'S%'; --查询以S开头后面至少有一个 select * from emp where ename like 'S_%'; --查询以S开头的的并有五个字符 select * from emp where ename like 'S____'; select * from emp where ename like '%/%' escape '/'; --and or not --查询 工资大于900并接名字以S开头 select * from emp where sal>900 and ename like 'S%'; --查询 工资大于900或者名字以S开头 select * from emp where sal >900 or ename like 'S%'; --查询 工资不是900,1000,1250的员工信息 select * from emp where sal not in(900,1000,1250); --查询名字不是以S开头的 select * from emp where ename not like 'S%'; -- 常用 --首字母大写initcap select initcap(ename) from emp; select initcap ('abc')from dual; --转换为小写lower select lower (ename) from emp; ----转换为大写upper select upper(ename) from emp; --左剪裁ltrim select ltrim('123asdsa','123')from dual; --右剪裁rtrim select rtrim('123asaf','asaf')from dual; -- 左右移除空格 select ltrim(rtrim( ' 123ags '))from dual; -- 翻译 translate select translate('jags','ag','24') from dual; --替换 replace select replace('jaagsd','a','12') from dual; --查找出现的位置instr 第一次出现的位置 select instr('string','i')from dual; -- substr(eg,n,m) 截取字符串 n开始包含n 截取m个 select substr ('stringags',3,2)from dual; --concat 字符串连接 select concat('ags','ker')from dual; select 'ags'||'ker' from dual; --数值函数 -- 绝对值 select abs(-21)from dual; --x的y次幂 select power(2,2)from dual; --ceil 向上取整 select ceil(12.5)from dual; -- floor 向下取整 select floor(12.5)from dual; --trunc 截断 select trunc(12.25,1)from dual; --round 四舍五入 select round(12.5)from dual; select round(12.4)from dual; --sqrt 开平方 select sqrt(9)from dual; select power(8,1/3)from dual; --mod 取余数 select mod(15,2)from dual; -- sign 取符号 select sign(-12)from dual; select sign(12)from dual; --日期函数 -- months_between 两个日期间隔的月份 select months_between(sysdate,'09-9月-1997')from dual; --add_months 修改月份 select add_months(sysdate,-1)from dual; select add_months(sysdate,1)from dual; --next_day 返回指定日期后的一个星期几的日期 select next_day('12-2月-12','星期日')from dual; select next_day(sysdate,'星期日')from dual; --last_day 返回指定日期的这个月的最后一天 select last_day('12-2月-12')from dual; --日期做四舍五入 round --年 select round(sysdate,'year')from dual;--一年超过六月返回下一年的第一天 --月 select round(sysdate,'month')from dual;--超过这给月的一半返回下个月的第一天 --日 select round(sysdate,'day')from dual;--超过这个星期的星期三返回下个星期的的一天 --日期做截断 trunc select trunc(sysdate,'year')from dual;--返回这一年的第一天 select trunc(sysdate,'month')from dual;--返回这个月的第一天 select trunc(sysdate,'day')from dual;--返回这星期的第一天 --to_char 日期转字符串 select to_char(sysdate,'yyyy-mm-dd hh:mi:ss')from dual; --to_date 字符串转日期 select to_date('2013年05月12号 16点15分22秒','yyyy"年"mm"月"dd"号" hh24"点"mi"分"ss"秒"')from dual; --to_number 字符串转数值类型 $99,999,999.99 ¥L999,999,999.99 select to_number('$12,992,959.99','$99,999,999.99')from dual; select to_number('¥209,889.59','L999,999,999.99')from dual; --to_char 数值转字符串 select to_char(125304.54,'L999,999,999.99')from dual; --时间比较问题 select * from emp where hiredate >'18-2月-81'; select *from emp where hiredate >to_date('1981-1-1','yy-mm-dd'); select * from emp where to_char( hiredate ,'yyyy-mm-dd')>'1981-1-1-'; -- nvl 空转数 select ename ,nvl(comm,0) from emp; -- nvl2(e,n,m) e为空转m 不为空转n select ename, nvl2(comm,0,1)from emp; -- decode select decode(sal,3000,'有',5000,'有钱','5')from emp; --case when then else end (if else) select (case when sal >=5000 then '有钱' when sal >=3000 then '2' else'-1'end)from emp; --switch case select (case sex when 0 then '男' when 1 then '女'end ) from dual; --sum 求和 max 最大 min 最小 avg 平均 count 统计 --查询最大工资 select max(sal)from emp; --查询平均工资 select avg(sal)from emp; --查询最小工资 select min(sal)from emp; --查询所有工资的和 select sum(sal)from emp; --查询一共有几个员工 select count (sal)from emp; --聚合函数可以写在一行上 select max(sal),avg(sal),min(sal),sum(sal),count(sal)from emp; --聚合函数不可以和单行数据同时展示 select ename, max(sal),avg(sal),min(sal),sum(sal),count(sal)from emp; -- count(*) 统计所有 select count(*)from emp; --count(exp)统计非空的exp的个数 select count (comm)from emp; --count(distinct exp)统计非空不重复的exp的个数 select count(sal),count (distinct sal)from emp; --查询部门编号为10的员工信息 select *from emp where deptno=10 ; --查询年薪大于3万的人员的姓名与部门编号 select sal*12 from emp where sal<=30000; --查询佣金为null的人员姓名与工资 select *from emp where comm is null; --查询工资大于1500 且 and 含有佣金的人员姓名 select *from emp where sal>=1500 and comm is not null; --查询工资大于1500 或 or含有佣金的人员姓名 select *from emp where sal>=1500 or comm is not null; --查询姓名里面含有 S 员工信息 工资、名称 select *from emp where ename like 'S%'; --求姓名以J 开头第二个字符O的员工姓名的与工资 select *from emp where ename like 'SO%'; --求包含%的雇员姓名 select *from emp where ename like '%%%' escape '%';
--where用法--查询ALLEN员工的信息select * from emp where ename ='ALLEN';select * from emp where ename ='MARTIN';--查询1250工资的员工select * from emp where sal =1250;--查询入职为1981-2-22的员工select *from emp where hiredate ='22-2月-81';--查询1250工资以下的员工select *from emp where sal <1250;--查询1250工资以上的员工select *from emp where sal >1250;--查询不等于1250工资的员工select * from emp where sal !=1250;select * from emp where sal <>1250;--between A and B查询在A和B之间的数select *from emp where sal between 800 and 1000; select *from emp where sal >= 800 <= 1000; --in() 集合查询在集合中的数select * from emp where sal in(800,900,1250,1000);select *from emp where sal = 800 or sal =900 or sal = 1250 or sal =1000 ;--查询奖金为空的员工select * from emp where comm is null;select * from emp where comm ='';--查询奖金不为空的员工select * from emp where comm is not null;select * from emp where comm !='';