8.2.2基本查询方法
SELECT*FROM DEPT;
select*from emp;
--单行注释
/*
多行注释
*/
/*
约束: 条件要求
规定字段值的要求
分类:
主键约束 : 唯一+非空
非空约束 : 要求当前字段值不能为null
唯一约束 : 表中所有数据当前字段值不能重复
默认约束 :
检查约束
外键约束 : dept部门不覅 emp员工表
--emp表中deptno外键字段引用了dept表中的主键字段deptno
--从表中的外键字段就关联了主表中的主键字段
--主表 : dept部门表
--从表 : emp员工表(外键所在的表)
*/
/*
1.找到scott.sql文件
2.使用plsql客户端打开scott.sql文件
3.点击齿轮F8执行文件
4.点击钥匙,切换登录SCOTT->TIGER
5.File新建SQL-WINDOW,执行SELECT * FROM DEPT;语句进行测试
*/
SELECT * FROM DEPT;
--查询语句 DQL
--查询: select 数据(*|字段|字段1,字段2..) from 数据源
--执行流程 : from --> select
--注意: 如果sql语句中没有过滤条件,默认查询数据源中所有的数据
-- * 结果集中要保留数据的所有字段值
--查询所有的员工信息
select * from emp;
select * from dept;
--查询所有的员工姓名
--要查询的数据: 员工姓名 ename
--数据的来源: 员工表 emp
--条件: 无
select ename from emp;
--查询所有员工的姓名,编号,薪资,部门编号
--要查询的数据:姓名 ename ,编号 empno ,薪资 sal ,部门编号 deptno
--数据的来源: 员工表emp
select ename,empno,sal,deptno from emp;
--查询所有部门编号
select deptno from dept;
--去重 : distinct 对结果集中完全相同的两条数据实现去重,只显示一条--> 结果集显示上的去重,对数据源中的数据无影响
--查询所有有员工存在的部门编号
select distinct deptno from emp;
select distinct deptno,ename from emp;
--别名
--字段定义别名 : select 字段 (as) 别名,字段 别名 from 数据源
--表定义别名 : select 字段 (as) 别名,字段 别名 from 数据源 别名
select empno as 员工编号,ename 员工姓名 from emp e;
select e.ename from emp e;
select e.* from emp e;
--伪列: 数据源中不是真实存在,但是sql语句中可查询使用
--伪列 : 数字,表达式,字符串,函数
select 1 from emp;
--表达式
select empno,ename,sal,sal*12 年薪 from emp;
--''表示字符串
--""原封不动显示
select deptno,dname,loc,'yjxxt' "公司 名称" from dept;
--别名使用英文默认大写显示
select deptno,dname,loc,'yjxxt' "name" from dept;
--虚表 dual: 没有数据没有字段
select * from dual;
select distinct 123*456 from emp;
select 123*456 from dual;
--null
--一个字段没赋值,默认null值
select * from emp;
--每一个员工奖金+100
--null值与数字运算结果为null
select ename,sal,comm,comm+100 from emp;
--字符串拼接: ||
--null值与字符串拼接结果为原串
select ename,sal,comm,comm||'100' from emp;
--nvl(条件1,条件2) 当条件1为null时,nvl函数的结果为条件2,当条件1不为null时,nvl函数的结果为条件1
select ename,sal,comm,nvl(comm,0)+100 from emp;
--查询每一个员工的员工信息以及年薪(默认12个月月薪)
select empno,ename,job,mgr,hiredate,sal,comm,deptno,sal*12 年薪 from emp;
--查询每一个员工的员工信息以及年薪(默认12个月月薪+1个月奖金)
select empno,ename,job,mgr,hiredate,sal,comm,deptno,sal*12 年薪,comm*2 奖金 from emp;
--查询每一个员工的员工信息以及年薪(默认12个月月薪+12个月奖金)
select empno,ename,job,mgr,hiredate,sal,comm,deptno,sal*12 年薪,nvl(comm,0)*12 奖金 from emp;
8.2.3函数(条件查询)
--条件查询 : select 数据(*|字段|字段..) from 数据源 where 行过滤条件
--执行流程 : from --> where --> select
--1) = > < >= <= != <> between and ..
--2) and , or , not 取反
-- 查询20部门的所有员工的信息
--数据 : 员工信息 *
--来源 : 员工表 emp
--条件 : deptno = 20
select * from emp where deptno = 20;
-- 查询30部门的员工的名称和工种
select ename,job from emp where deptno=30;
-- 查询 员工名称 为SMITH 的员工信息
select * from emp where ename='SMITH'
-- 查询工资为800的员工信息
select * from emp where sal = 800;
select e.* from emp e where e.sal = 800;
-- 查询除了'SMITH'之外的所有人信息
select * from emp where ename!='SMITH';
select * from emp where ename <> 'SMITH';
select * from emp where not ename = 'SMITH';
-- 查询工资大于1500的员工的工种和姓名
select job,ename,sal from emp where sal>1500;
-- 查询工资在1500~2500之间的员工工种和姓名和工资
select job,ename,sal from emp where sal>1500 and sal<2500;
select ename,job,sal from emp where sal>=1500 and sal<=2500;
select ename,job,sal from emp where sal between 1500 and 2500;
-- 查询 岗位 为 CLERK 且部门编号为 20的员工名称 部门编号,工资,工种
select ename,deptno,sal,job from emp where job='CLERK' and deptno=20;
-- 查询 岗位 为 CLERK 或部门编号为 20的员工名称 部门编号,工资,工种
select ename,deptno,sal,job from emp where job = 'CLERK' or deptno = 20;
-- 查询 岗位 不是 CLERK 员工名称 部门编号,工资
select job,deptno,sal from emp where job!='CLERK';
-- 查询 岗位 不是 CLERK 并且也不在20部门的 员工名称 部门编号,工资
select job,deptno,sal,ename from emp where job!='CLERK' and deptno!=20;
select ename,deptno,sal,job from emp where not( job = 'CLERK' or deptno = 20);
-- 查询所有可以领奖金的员工信息
select * from emp where comm is not null;
select * from emp where not comm is null;
-- 查询所有不可以领奖金的员工信息
select * from emp where comm is null;
-- 查询工资大于1500 或 含有佣金的人员姓名
select * from emp where sal>1500 or comm is not null;
/*
集合函数
Union、Union All、Intersect、Minus
- Union,并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;
- Union All,全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序 ;
- Intersect,交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
- Minus,差集(减去重复) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序
*/
--查询工资大于1500 或 含有佣金的人员姓名
select * from emp where sal>1500
Union
select * from emp where comm is not null;
--查询所有有员工存在你的部门编号
select distinct deptno from emp;
--查询所有没有员工存在你的部门编号
select deptno from dept
Minus
select distinct deptno from emp;
--like 模糊查询cccccccc
--% 任意个任意字符
-- _ 一个任意字符
--精确匹配,但是效率低
select * from emp where ename = 'SMITH';
--行为中包含A的员工信息
select * from emp where ename like '%A%';
--行为中以A开头2的员工信息
select * from emp where ename like 'A%';
--行为中倒数第二个字符为E的员工信息
select * from emp where ename like '%E_';
--测试数据
insert into emp(empno,ename,sal) values(1000,'t_%test',8989);
insert into emp(empno,ename,sal) values(1200,'t_tes%t',8000);
--查询姓名中包含%的
select * from emp where ename like '%A%%' escape('A');