第十三章:数据库(基本查询方法和条件查询)

本文介绍了SQL的基本查询方法,包括SELECT语句的使用,如查询所有字段、指定字段、去重等。此外,讲解了注释、别名、表达式、虚表DUAL、NULL值处理以及DISTINCT关键字。还探讨了条件查询,如比较运算符、逻辑运算符、BETWEEN、LIKE等,并展示了如何使用集合函数进行数据集的并集、交集和差集操作。最后,提到了LIKE模糊查询和NULL值处理的示例。
摘要由CSDN通过智能技术生成

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');
​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值