学习笔记——day22(DML单表查询语句)

 ̄綄美尐妖づ 提交于 2019-12-05 11:20:29

DML

-- 这是注释
/*
这是多行注释
  ## mysql中的注释
*/

注释

单表查询语句

-- 查询 sql 查询emp表中的所有列
/*
 * 代表所有列
 select * 
 from 查询表
*/
select *
from emp;

-- 查询emp表中的员工姓名员工工资以及员工的部门编号
/*
 查询列:姓名ename 工资sal 部门编号deptno
 查询表:emp
*/
select ename,sal,deptno
from emp;


-- 别名 给列起别名 as可以省略 
-- 通常建议使用 "" 引起来  "" 原样输出
-- ''引起来的称之为字符串
select ename as "姓  名",sal ,deptno from emp;

select ename "姓  名",sal ,deptno from emp;

-- 查询员工的工资,并且查看工资涨幅10%之后的员工工资
-- 列是支持四则运算
select ename "姓名", sal "工资",sal*1.1 "涨幅工资" from emp;

-- 查询员工的姓名以及员工的年薪
-- (工资+奖金)*12
-- 参与四则运算时 如果列包含null值 那么最后的结果也是null
select ename "姓名",sal "月薪", comm "奖金",(sal+comm)*12 "年薪" from emp;
select ename "姓名",sal "月薪", comm "奖金",(sal+nvl(comm,0))*12 "年薪" from emp;

-- 函数 方法名(参数)
-- oracle中对于为null判定的独有函数  将这些独有的内容称之为 
-- 在mysql中如果要判定数据是否为null 通过使用mysql的函数 ifnull(可能存在null值的列,填充的值)
select nvl(comm,0) from emp; 

-- 字符串拼接
-- 我叫XXX,我的工资是XXX 
select '我叫' || ename || ',我的工资是:' || sal as "自我介绍" from emp;

-- mysql和oracle都支持 concat
select concat('我叫',ename) from emp;


-- 通过sql做一些四则运算 一定要符合sql语法
select 1+1 from emp;

-- 虚表  dual
select 1+1 from dual;

-- 查询整个公司中有哪些职位 job
-- 去除重复行记录
-- distinct 去除完全重复行记录
select distinct job from emp;
-- 去除重复的行记录之后 查看公司的员工姓名以及工作
select distinct job,sal from emp;


-- 过滤  where
/*
 关系运算符:== != <> > < >= <=  
 and 且  or或 
*/
-- 查询员工工资大于1000的员工姓名以及员工工资
/*
 查询列 ename,sal
 查询表 emp
 过滤条件 sal>1000
  sql语句的执行顺序:1:from 2:where 3:select
*/
select ename,sal
from emp
where sal>1000;


-- 查询员工的工作不是clerk 且 工资大于500小于2000 的员工的姓名工作以及工资
/*
 查询列 ename,job,sal
 查询表  emp
 过滤条件  job!='CLERK'  and (sal>500 and sal<2000)
*/
select ename,job,sal
from emp 
where job!='CLERK'  and (sal>500 and sal<2000);

--查询 员工的年薪大于20000的 员工名称、岗位 年薪
/*
 查询列 ename,job,(sal+comm)*12 as "年薪"
 查询表  emp
 过滤条件  (sal+comm)*12 >20000
 编写dql 如果不小心有可能会漏数据
*/
select ename,job,(sal+nvl(comm,0))*12 as "年薪"
from emp
where (sal+nvl(comm,0))*12 >20000;

-- 子查询
select e.ename,e.job,e.年薪
from
   (select ename,job,(sal+nvl(comm,0))*12 as "年薪" from emp) e
where e.年薪 >20000;

-- any some all
--查询 工种为’SALESMAN’的员工信息  (注意 内容区分大小写)
select *
from emp
where job=upper('salesman');



--检索 工资 大于 2000员工名称 岗位 工资
select ename,job,sal
from emp
where sal>2000;


--检索 工资 小于 3000员工名称 岗位 工资
select ename,job,sal
from emp
where sal<3000;



--检索 工资 2000, 3000员工名称 岗位 工资
select ename,job,sal
from emp
where sal in(2000,3000);

/*
 查询列 ename,job,sal
 查询表  emp
 过滤条件  sal=2000 or sal =3000
*/
select ename,job,sal
from emp
where sal=all(3000);

--查询部门编号为20的员工名称




-- 查询员工工资大于900小于2000的员工姓名以及员工工资
select ename,sal
from emp
where sal>900 and sal<2000;

-- between 。。。 and...  大于等于 且 小于等于
select ename,sal
from emp
where sal between 950 and 1250;

-- >= 和some any 一样 大于等于最小值  
-- all 大于等于最大值
select ename,sal
from emp
where sal >= all(950,1250);

-- 等值判定:
-- 查询员工的薪资是950 或者 1250的员工姓名以及员工工资
select ename,sal
from emp
where sal=950 or sal=1250;

-- in 代表列的值是否在区间中 过滤在区间中的
select ename,sal
from emp
where sal in (950,1250);

-- 查询员工的薪资不是950 1250的员工姓名以及员工工资

select ename,sal
from emp
where sal!=950 and sal!=1250;

select ename,sal
from emp
where sal not in (950,1250);

--查询 岗位 为 CLERK  且部门编号为 20的员工名称 部门编号,工资
select ename,job,deptno,sal
from emp
where job='CLERK' and deptno=20;

--查询 岗位 为 CLERK  或部门编号为 20的员工名称 部门编号,工资
select ename,job,deptno,sal
from emp
where job='CLERK' or deptno=20;

--查询 岗位 不是 CLERK 员工名称 部门编号,工资
select ename,deptno,sal
from emp
where job != 'CLERK';

-- 存在佣金的员工名称
select ename,comm
from emp
where comm is not null;

-- 不存在奖金的员工名称
select ename,comm
from emp
where comm is null;

--查询工资大于1500 或 含有佣金的人员姓名

select ename,sal,comm from emp where sal >1500 or comm is not null;

-- 工资大于1500  --含有佣金的人员姓名 求并集 一定保证查询列的个数 顺序 类型要一模一样
select ename from emp where sal >1500
union
select ename from emp where comm is not null;

-- 不去除完全重复行
select ename,sal,comm from emp where sal >1500
union all
select ename,sal,comm from emp where comm is not null;

----查询显示不存在雇员的所有部门号
-- 查询部门表,将所有部门表中的部门编号列出来
-- 查询员工表,对这两张表中 不一样的内容
-- minus 差集  minus前 - 后
select deptno from dept
minus
select distinct deptno from emp;

select deptno from dept
where deptno not in (select distinct deptno from emp);

--查询工资大于1500 且 含有佣金的人员姓名
select ename,sal,comm from emp where sal >1500
intersect
select ename,sal,comm from emp where comm is not null;           

-- 模糊查询
-- % 匹配0个或者是多个任意字符 _一个任意字符
-- 查询员工的姓名包含S的员工的姓名,工资以及工作
select ename,sal,job
from emp
where ename like '%S%';
-- 查询员工的姓名第三个字母是R的员工的姓名,工资以及工作
select * from emp;
select ename,sal,job
from emp
where ename like '__R%';

-- 查询员工姓名包含%的员工的姓名 工作 
select ename,job
from emp
where ename like '%\%%' escape '\';


--'SALES'或'ACCOUNTING'部门的雇员信息
select * from dept;

-- 查询'SALES'或'ACCOUNTING'对应的部门编号
select deptno from dept where dname='SALES' or dname = 'ACCOUNTING' ;

-- 查询10,30部门的员工信息 255
select *
  from emp
 where deptno in (select deptno
                    from dept
                   where dname = 'SALES'
                      or dname = 'ACCOUNTING');
                      

-- 排序
-- 查询员工信息 姓名以及工资 工资大于1500 按照工资升序排序 
/*
 查询列 ename,sal
 查询表 emp
 过滤条件 sal > 1500
 排序列 sal
 排序规则 asc默认升序  desc降序
*/
select ename,sal
from emp
where sal>1500
order by sal desc;


-- 查询员工的姓名以及工资和奖金 按照工资的升序排序 如果工资相同 按照奖金的降序排序
select ename,sal,comm
from emp
where 1=1
order by sal asc,comm desc;


/*
1、使用基本查询语句.
    (1)查询DEPT表显示所有部门名称.
    (2)查询EMP表显示所有雇员名及其全年收入(月收入=工资+补助),
  处理NULL行,并指定列别名为"年收入"。(NVL(comm,0) comm取空值时用0替代)
    (3)查询显示不存在雇员的所有部门号。
2、限制查询数据
    (1)查询EMP表显示工资超过2850的雇员姓名和工资。
    (2)查询EMP表显示工资不在1500~2850之间的所有雇员及工资。
    (3)查询EMP表显示代码为7566的雇员姓名及所在部门代码。
    (4)查询EMP表显示部门10和30中工资超过1500的雇员名及工资。
    (5)查询EMP表显示第2个字符为"A"的所有雇员名其工资。
    (6)查询EMP表显示补助非空的所有雇员名及其补助。
3、排序数据
    (1)查询EMP表显示所有雇员名、工资、雇佣日期,并以雇员名的升序进行排序。
    (2)查询EMP表显示在1981年2月1日到1981年5月1日之间雇佣的雇员名、岗位及雇佣日期,并以雇佣日期进行排序。
    (3)查询EMP表显示获得补助的所有雇员名、工资及补助,并以工资升序和补助降序排序。
*/
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!