select的用法
--每个员工的所有信息
select * from emp;
--每个人的部门编号,姓名,薪水
select empno, ename, sal from emp;
--每个人的年薪
select ename, sal*12 from emp;
--计算2*3的值
select 2*3 from emp;
--计算2*3的值(dual)
select 2*3 from dual;
--得到当前时间
select sysdate from dual;
--可以给列起别名,比如求每个人的年薪
select ename, sal*12 annual_sal from emp;
--如果别名中有空格,需要用双引号
select ename, sal*12 "annual sal" from emp;
--如果没有内容,则为空
select ename, sal, comm from emp; /*null*/
--当空字段参与计算,则结果是null
--例如:计算每个人的全年的收入包括月薪和年终奖
select ename, sal * 12 + comm from emp;
--可以将多个字符串拼在一起。比如:求每个人的薪水,格式为smith-sal-123
select ename || ‘-‘ || sal || ‘-‘ || comm from emp;
--如果字符串中有单引号,需要用另外一个单引号转义,比如:这样一个字符串: he‘s friend
select ename || ‘he‘‘s friend‘ from emp;
--------------------------------------------------------
--distinct 关键词的用法
--求有哪些个部门
select deptno from emp;
select distinct deptno from emp;
--可以用来修饰多个字段
--求有哪些个部门和job的组合
select deptno , job from emp;
select distinct deptno , job from emp;
--------------------------------------------------------
where关键词的用法
--可以是数值类型的等值判断。比如:求10这个部门的所有员工
select * from emp where deptno = 10;
--可以是字符串类型的等值判断。比如:求叫KING的这个人的信息
select * from emp where ename = ‘KING‘;
--也可以是不等值判断。比如:求薪水小于2000的员工信息
select * from emp where sal > 2000;
--字符串也可以做不等值判断,比如:求所有ename大于‘CBA‘的员工信息。
select ename from emp where ename > ‘CBA‘;
--求部门不是10的部门
select * from emp where deptno <> 10;
--求薪水在800和1500之间的员工信息
select * from emp where sal between 800 and 1500;
--也可以写成
select * from emp where sal >= 800 and sal <= 1500;
/*这样写则不可以
--select * from emp where 800 <= sal <= 1500;
*/
--where...in..的用法。比如:求薪水是800或者1500或正2000的员工信息
select ename, empno, sal from emp where sal in (800, 1500, 2000);
--相当于写成这样
select ename, empno , sal from emp where sal = 800 or sal = 1500 or sal = 2000;
--再比如求姓名是KING,SMITH,AA的员工信息
select ename, empno , sal from emp where ename in (‘KING‘, ‘SMITH‘, ‘AA‘);
--求入职时间在20-2月-81之后的员工信息
select ename, hiredate from emp where hiredate > ‘20-2月-81‘;
--------------------------------------------------------
--and or not的用法
--求薪水大于1000或者部门在10这个部门的员工信息
select * from emp where sal > 1000 or deptno = 10;
--求薪水不是800或者不是1500或者不是3000的员工信息
select * from emp where sal <> 800 and sal <> 1500 and sal <> 3000;
--也可以这样来写
select * from emp where sal not in (800, 1500, 3000);
--------------------------------------------------------
--like的用法
--求名字中包含ALL这三个字符的员工信息
select ename from emp where ename like ‘%ALL%‘;
--求名字中的第二个字母是A的员工
select ename from emp where ename like ‘_A%‘;
--特殊字符需要转义。比如:求员工中包含特殊字符%的员工信息
select ename from emp where ename like ‘%%%‘ escape ‘‘;
--------------------------------------------------------
--null的用法
--求没有年终奖的员工
select ename from emp where comm is null;
--求有年终奖的员工
select ename from emp where comm is not null;
--------------------------------------------------------
--order by的用法
--员工信息按照姓名正序排列
select ename, sal from emp order by ename asc; --ascent
--员工信息按照倒叙排列
select ename, sal from emp order by ename desc; --descent
--也可以是多个字段组合排列。例如:员工信息按照部门正序排列,并且按照姓名倒叙排列
select ename, sal, deptno from emp order by deptno asc, ename desc;
--------------------------------------------------------
--function的用法
--把所有姓名变成小写
select lower(ename) from emp;
--把所有姓名变成大写
select upper(ename) from emp;
--求所有人名中包含‘a‘的员工信息不区分大小写
select ename from emp where lower(ename) like ‘%a%‘;
--截取子字符串,比如求Hello的一部分
select substr(‘Hello‘, 2) from dual;
--求Hello的一部分,并指明长度
select substr(‘Hello‘, 2, 3) from dual;
--求ascii码对应的字符
select chr(65) from dual;
--求字符对应的ascii码
select ascii(‘中‘) from dual;
--四舍五入
select round(23.652) from dual;
--四舍五入小数点后面多少位
select round(23.652, 1) from dual;
--四舍五入小数点前面多少位
select round(23.652, -1) from dual;
--------------------------------------------------------
--important!日期转换函数
--------------------------------------------------------
--将当前日期转换成1981-03-12 12:00:00这种形式的字符串
select to_char(sysdate, ‘YYYY-MM-DD HH24:MI:SS‘) from dual;
--将1981-03-12 12:00:00字符串转换成日期
select to_date(‘1981-03-12 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘) from dual;
--将每个人的薪水转换成固定格式的字符串
select to_char(sal, ‘L00,000.9999‘) from emp;
--将固定格式的字符串转换成数值
select to_number(‘$1,250.00‘, ‘$9,999.99‘) from dual;
--null当null参与计算时候,需要要nvl这个函数
select ename, sal*12+comm from emp;
select ename, sal*12+ nvl(comm, 0) from emp;
--------------------------------------------------------
--group function组函数
--求所有人的薪水的总和,平均值,最大值,最小值
select sum(sal) , avg(sal), max(sal) , min(sal) from emp;
--求总的行数
select count(*) from emp;
--求总的行树,(可以指定具体的字段)但如果字段有null值的时候需要小心使用
select count(comm) from emp;
--也可以过滤掉重复的行之后统计行数
select count(distinct deptno) from emp;
--可以指明按照哪个字段进行分组.比如;分部门统计最高薪水
select deptno, max(sal) from emp group by deptno;
--也可以按照多个字段来分组统计,比如:分部门和岗位,统计最高薪水和行数
select deptno, job , max(sal), count(*) from emp group by deptno, job;
--------------------------------------------------------
--重要:出现在select列表中的字段,如果没有在组函数中,那么必须出现在group by 子句中。
--------------------------------------------------------
--select ename, deptno, max(sal) from emp group by deptno;
--select ename, max(sal) from emp;
--求薪水最高的员工姓名
select max(sal) from emp;
select ename, sal from emp where sal = 5000;
select ename from emp where sal = (select max(sal) from emp);
--having从句的用法
--求平均薪水是2000以上的部门
select avg(sal), deptno from emp group by deptno having avg(sal) > 2000;
--------------------------------------------------------
--总结一下select语法
select
from
where
group by
having
order by
--------------------------------------------------------
-- 执行顺序very important!
-- 首先执行where语句将原有记录过滤;
-- 第二执行group by 进行分组;
-- 第三执行having过滤分组;
-- 然后将select 中的字段值选出来;
-- 最后执行order by 进行排序;
--------------------------------------------------------
/*
按照部门分组统计,求最高薪水,平均薪水
只有薪水是1200以上的才参与统计
并且分组结果中只包括平均薪水在1500以上的部门
而且按照平均薪水倒叙排列
*/
select max(sal),avg(sal), deptno
from emp
where sal > 1200
group by deptno
having avg(sal) > 1500
order by avg(sal) desc;
--------------------------------------------------------
/*
把雇员按部门分组,
求最高薪水, 部门号,
过滤掉名字中第二个字母是‘A‘的,
要求分组后的平均薪水>1500,
按照部门编号倒序排列
*/
select deptno, max(sal)
from emp
where ename not like ‘_A%‘
group by deptno
having avg(sal) > 1500
order by deptno desc;
/* very very important! */
select ename, deptno from emp;
select deptno, dname from dept;
----员工姓名以及员工所在部门的名字同时显示出来
select ename, dname from emp , dept;
select ename, dname from emp , dept where emp.deptno = dept.deptno;
--要求每位雇员的薪水等级
select ename, sal, grade from emp, salgrade where emp.sal >= salgrade.losal and emp.sal <= salgrade.hisal;
select ename, sal, grade from emp e, salgrade s where e.sal between s.losal and s.hisal;
--求工作职位是’PRESIDENT’的雇员姓名,部门名称和薪水等级时
select ename, dname, grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal
and job = ‘PRESIDENT‘;
--求每位员工的姓名,及其上级经理的姓名
select empno, ename, mgr from emp;
select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr = e2.empno;

group by用法多个字段_select的用法相关推荐

  1. MySQL中 (GROUP BY 用法)和(ORDER BY用法)

    一.GROUP BY(分组) 例子: SELECT sum(id) as aa_id, max(id) as m_id, message FROM device_shadow_log GROUP BY ...

  2. Linq中的group by多表多字段,Sum求和

    Linq中的group by多表多字段,Sum求和 //Line to Sql 写法var data = (from a in Itemsgroup a by new { a.GroupId, a.I ...

  3. mysql如何进行分组操作的_mysql group by 对多个字段进行分组操作

    在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组, 用来获取数据表中以分组字段为依据的统计数据. 比如有一个学生选课表,表结构如下: Table: Subject_Selection ...

  4. Linq中的group by多表多字段

    按我的理解,linq与sql对应,只不过,一个对应在代码里,一个对应在数据库里.之所以要使用linq,是让分工越来越精细的程序员可以基本不管数据库这一块,只须关注代码即可. 不过,linq与sql还是 ...

  5. 数据库|group by查询出其他字段

    数据库环境:MYSQL 5.7.19 解决group by只能查询特定字段而不能查询其他字段的问题. 新建一张表: CREATE TABLE LSQ_TEST_TABLE (ID VARCHAR(64 ...

  6. 为什么Hive中的group by后面不能使用字段别名?

    为什么Hive中的group by后面不能使用字段别名呢?看了这篇文章你将一目了然. 文章目录 1. 案例说明 2. 分析原因 3. 解决办法 4. 执行效率 5. 总结 1. 案例说明 我们以一个例 ...

  7. oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

  8. mysql date trunc用法_Oracle数据库-trunc函数的用法

    trunc 函数可用于截取日期时间 用法:trunc(字段名,精度) 具体实例: 在表table1中,有一个字段名为sysdate,该行id=123,日期显示:2016/10/28 15:11:58 ...

  9. java attributes用法_C#中的Attributes的用法

    今天研究了一下C#中的Attributes的用法,感觉很有用,现总结以下: 在前台用JS写的脚本方法,除了可以直接用在前台控件的属性中,还可以在后台运用. 即在后台页面加载时,调用JS方法.语法格式有 ...

最新文章

  1. 【NOIP2015】【Luogu2661】信息传递(有向图最小环)
  2. Work Measurement - 1
  3. 树状数组的建树 单点修改 单点查询 区间修改 区间查询
  4. scrapy读取mysql数据库_python3实战scrapy获取数据保存至MySQL数据库
  5. tex中把参考文献标题删除
  6. 谷歌技术三宝之BigTable(转)
  7. 线性判别用于提取词向量_历年试题公开 | 2017级线性代数(I)期末试题
  8. beego 初体验 - 环境搭建
  9. php 未定义偏移,错误php未定义的偏移:2-3-4等
  10. Juniper SRX210恢复密码过程
  11. LQR控制算法的浅析
  12. 百度网盘破解版下不了大文件
  13. 【读书笔记->统计学】12-02 置信区间的构建-t分布概念简介
  14. 牛客多校第八场 C CDMA 线性代数:沃尔什矩阵
  15. Element-UI学习之旅-Layout布局
  16. Excel如何统计指定背景颜色数据个数
  17. VMware虚拟机装系统提示Units specified dont exist!
  18. mapBox添加本地图片
  19. python 语法基础篇
  20. java判断线程结束_java中如何判断一个线程是否结束

热门文章

  1. 防止System.exit调用
  2. 发送带有接缝的活动邀请
  3. MongoDB与Spring Data项目
  4. Java中的正则表达式–软介绍
  5. 将Java向前推进? 一个定义。 一年回顾。
  6. ai背景合成_智能合成AI主播很危险,应立即取消!
  7. Java API 文档中的接口方法和抽象方法,有什么区别?
  8. Shell(bash) 介绍
  9. android 可行性分析,可行性研究项目分析程序与步骤
  10. 计算机主机中网卡的作用,计算机硬件组成及作用