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表显示获得补助的所有雇员名、工资及补助,并以工资升序和补助降序排序。
*/
来源:CSDN
作者:陈肉肉
链接:https://blog.csdn.net/Katherine_c/article/details/98654701