大家好,又见面了,我是你们的朋友全栈君。
SELECT
1.基本语法
- select * from 表名 查询这张表所有内容。
- select 列名 from 表名 查询这张表某一列所有内容。
- select 列名1,列名2…from 表名 查询这张表的列1,列2,等多列。
- select distinct 列名 from 表名 查询这一列去掉重复内容后的内容。
- select 表达式 from 表名 查询表达式,下面会详细讲。
- select 列名(表达式)as 别名 from 表名 给某一列或表达式取别名。
2.例子
如下这张表emp:
1)检索单个列 select ename from emp; 2) 检索多个列 select ename,job,sal from emp; 3) 检索所有列 select * from emp; 4) 去除重复 select distinct deptno from emp; 5) 别名 select ename as 姓名 from emp; 6) 伪列,即不存在的列,构建虚拟的列 select empno, 1*2 as count,‘cmj’ as name,deptno from emp; 7)虚表,及不存在的表,可以计算 select 1 1 from dual;
3.where过滤器
a)、= 、 >、 <、 >=、 <=、 !=、 <>、 between and b)、and 、or、 not、 union、 union all、 intersect 、minus c)、null :is null、 is not null、 not is null d)、like :模糊查询 % _ escape(‘单个字符’) e)、in 、 exists(难点) 及子查询
3.1 比较条件
= 、>、 <、 >=、 <=、 !=、 <>
- select * from emp where deptno = 20; 即查询deptno为20的所有员工信息
- select * from emp where sal > 1500; 查询员工工资大于1500的员工信息
- !=和<>都表示不等于
3.2 且或非
and、 or、 not
- select * from emp where sal>=1500 and sal<=3000; 查询员工工资大于1500并且小于3000的员工信息
- select * from emp where sal<1500 or sal>3000; 查询员工工资小于1500或大于3000的员工信息
3.3 null
null不能使用条件判断,只能使用is –存在佣金的员工名称 select * from emp where comm is null; –不存在佣金的员工名称 select * from emp where comm is not null;
3.4 集合操作
dept表
Union、Union All、Intersect、Minus Union,并集(去重) 对两个结果集进行并集操作,不 包括重复行同时进行默认规则的排序; Union All,全集(不去重) 对两个结果集进行并集操 作,包括重复行,不进行排序 ; Intersect,交集(找出重复) 对两个结果集进行交集操 作,不包括重复行,同时进行默认规则的排序; Minus,差集(减去重复) 对两个结果集进行差操作,不 包括重复行,同时进行默认规则的排序 –查询工资大于1500 或 含有佣金的人员姓名
- –union 去除重复行 select ename from emp where sal>1500 union select ename from emp where comm is not null;
- – union all 不去除重复行 select ename from emp where sal>1500 union all select ename from emp where comm is not null;
- –查询显示不存在雇员的所有部门号。 select deptno from dept minus 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;
3.5 like:模糊查询
模糊查询,使用通配符: %:零个及以上(任意个数的)的字符 _:一个字符 遇到内容中包含 % _ 使用escape(‘单个字符’)指定转义 符
- –查询员工姓名中包含字符A的员工信息 select * from emp where ename like ‘%A%’;
- –查询员工姓名中包含第二个A的员工名称信息 select * from emp where ename like ‘_A%’;
- –数据中 员工姓名中 存在 _ % ,如何查找: –1)、编写测试数据 insert into emp(empno,ename,sal) values(1000,‘t_%test’,8989); insert into emp(empno,ename,sal) values(1200,‘t_tes%t’,8000); –2)、查找 –查询员工姓名中包含字符%的员工名称 岗位 工资 部门编号 select ename,job,sal,deptno from emp where ename like ‘%a%%’ escape(‘a’); –查询员工姓名中包含第二个_的员工名称 岗位 工资 部门编 号
3.6. in 与 exists
in相当于使用or的多个等值,定值集合 ,如果存在 子查 询,确保 类型相同、字段数为1,如果记录多,效率不 高,用于 一些 少量定值判断上 –10或30部门的雇员信息 select * from emp where sal in(900,800); –子查询(查询中再有查询) in 只能存在一个字段 select * from emp where sal in (select sal from emp e where deptno=10);
select * from emp where deptno in(10,30); –部门名称为 SALES 或 ACCOUNTING 的雇员信息 select deptno from dept where dname in(‘SALES’,‘ACCOUNTING’); SELECT * FROM emp WHERE deptno IN (SELECT deptno FROM dept WHERE dname IN (‘SALES’, ‘ACCOUNTING’)); exists条件为true,存在记录则返回结果,后续不再继续 比较查询,与查询的字段无关,与记录有关
3.7 排序
使用 ORDER BY 排序,排序不是真实改变存储结构的顺 序,而是获取的集合的顺序。 顺序 :asc(默认) desc 多字段: 在前面字段相等时,使用后面的字段排序 空排序: 降序为 desc,注意 null 为最后
- –按工资降序 select * from emp order by sal desc;
- –null问题 select * from emp order by nvl(comm,0),comm desc;
- –工资 佣金排序 select ename,sal,comm,sal nvl(comm,0) c from emp where deptno in(20,30) order by c;
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/134375.html原文链接:https://javaforall.cn