--单表查询
select * from emp;
--查询表中指定字段的值
select empno,ename from emp;
--给查询结果中的字段使用别名
select empno 员工编号,ename "员工姓名",job as 工作 from emp;
--连接符
--||为sql语句的字符连接符,使用在select和from之间
--字符链接格式为字段名||'字符'||字段名
--一个拼接好的链接在结果中集中是作为一个新的字段显示,可以使用别名
select empno||'的姓名是'||ename as 信息 from emp;
--去除重复 去除两行数据完全相同的其一
select distinct job from emp;
--排序 asc 升序 desc 降序 asc可以省略不写。
select * from emp order by empno asc;
select * from emp order by empno desc;
select * from emp order by empno,ename;--先按字段1排序,如果字段1相同,按照字段2排序
--字段的逻辑运算
select empno,ename||'多点钱',job,sal+1000 from emp;
-------------------------------------
--条件筛选(where字句关键字:and,or,like,in,is null,is not null,between and)
--模糊查询
select * from emp where comm is null and comm>0;
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 '_A%'--第二个字符为A
--
select * from emp where job='SALESMAN' or job='ANALYST'--or关键字可以筛选出多个内容
select * from emp where job in('SALESMAN','ANALYST');--in关键字也可以进行筛选,但是in的内用只能显示其中一个字段的值
select * from emp where sal>2000 and sal<3000 --and关键字多条件同时成立
select * from emp where sal between 2000 and 3000
select * from emp where sal <>2000
select * from emp where hiredate<'01-1月-1982'--日期的格式
-----------------------------------------------------------------
-----------------------------------------------------------------
--Oracle 函数学习(单行函数,多行函数,转换函数,其他函数)
--单行函数
--字符函数select 函数名(字段名)
--不改变真实数据,只是对数据进行进一步修饰
--查询所有员工信息,员工姓名小写显示
select lower(ename),ename,sal from emp
select initcap(ename) from emp
--数值函数
--伪表:真实存在的表,是为了方便进行数据验证而临时存在的表,表名为dual
select 1+3 from dual
select abs(-1),power(2,3),round(3.3),mod(5,2),trunc(100.234,2) from dual
--日期函数
select months_between('15-3月-2018','15-3月-1996') from dual
select add_months(to_date('1982-1-1','yyyy-mm-dd'),4) from dual
select next_day('28-11日-2018','星期一')from dual
select round(to_date('28-11日-2018'),'MONTH') from dual
--多行函数(max,min,avg,sum,count)--对查询的数据进行统计
--多行函数不能和字段直接混用,除非分组
select ename from emp where sal=(select max(sal)from emp)--查询最高工资的员工。
select avg(sal) from emp--查询员工平均工资
select sum(sal) from emp--查询员工工资总和
select count(*) from emp--查询所有员工的总数 查询表的记录数
select count(comm) from emp--查询有津贴的员工总数 查询字段的值的数量,null会自动过滤
select count(distinct job) from emp --查询公司有多少种工作种类
--转换函数
-- to_number(数值类型的字符)
--to_char(数值或日期)
--t0_date(日期格式的字符)
--字符转数字
select to_number('123') from dual
--数字转字符 可以指定显示格式:
--9表示位置占位
--L表示人民币 $美元
select to_char(123456789,'L999,999,999') from dual
-------------日期字符的互转----------------------------
--字符转化为日期
--oracle 默认的日期格式为 15-3月-1996
select * from emp where hiredate>to_date('2011-1-1','yyyy-mm-dd')
select * from emp where hiredate>to_date('2011/1/1','yyyy/mm/dd')
--日期转字符 可以使用指定格式
select to_char(hiredate) from emp
select to_char(hiredate,'yyyy-mm-dd') from emp
select to_char(hiredate,'yyyy"年"mm"月"dd"日"') from emp
----------------------------------------
--其他函数
--nvl(字段名,值)如果字段不为null返回自己的值,为null则返回赋予的值
--nvl2(字段名,处理1,处理2),如果字段值不为null执行处理1,为null执行处理2
--decode() decode(字段名,值1,处理1,值2,处理2,....公共处理)
-----进行匹配,如果字段中的值等于值1,2 获得相应处理,没匹配到的执行公共处理。
select ename,job,sal+nvl(comm,0) from emp
select ename,job,nvl2(comm,sal+comm,sal) from emp
select ename,job,decode(job,'MANAGER','经理','PRESIDENT','董事长','普通员工')from emp
---------------------------------------------------------------------
--分组查询学习
--关键字:group by 分组字段名,分组字段名,......
--select 只允许多行函数和分组字段名
--如果是多字段分组,则先按照第一字段分组,然后每个小组继续按照第二字段分组......
--在where字句中不允许出现多行函数。
--分组筛选
--关键字:having 针对分组后的数据进行数据筛选
--having 关键字必须和分组结合使用
--where字句和having的比较:
--where 子句不允许出现多行函数,having语句允许多行函数
--where子句和having都可以使用普通字段进行筛选,但是where的效率高于having
--where语句的执行顺序:from-where-group by--select--order by
--having语句的执行顺序:from-group by--select--having--order by
select deptno,max(sal),count(*) from emp group by deptno
select job,count(*) from emp group by job--查询不同工作岗位的员工数
select deptno,job,count(*) from emp group by deptno,job--查询不同部门的不同岗位的人数
--查询不同部门的不同工作岗位的并且人数大于1的信息
select deptno,job,count(*) from emp group by deptno,job having count(*)>1 order by deptno
--查询部门号大于10的不同工作岗位的人数
select deptno,job,count(*) from emp group by job,deptno having deptno>10 order by deptno
--查询不同部门的不同工作岗位的并且人数大于1的信息
仅供学习,所用的库来自oracle自带的scott账户。