数据库常用查询 *** 作

数据库常用查询 *** 作,第1张

--注释

--select *|字段名1,字段名2... from 表名

--1)

--查询|检索|获取 所有员工的所有信息

--查询的数据: 员工的所有信息

--数据的来源:员工表  emp

--条件:

select * from emp

--2)

--查询所有的员工名字

select ename from emp

--3)

--查询所有的员工编号和员工名称,员工上级的编号

--查询的数据: empno,ename,mgr

--数据的来源:员工表  emp

select empno,ename,mgr from emp

--4)

--查询所有部门部门编号

select deptno from dept

--5)

--查询出所有员工所在的部门的部门编号

select distinct  deptno from emp

--对查询数据进行去重(非字段去重) distinct

--6)

--查询出所有存在员工的部门的部门编号,以及员工名称

select deptno,ename from emp

select distinct sal,deptno from emp

--7)

--查询表达式,结果是表达式的值,显示的字段名就是表达式,计算值

select 1+1 from emp

select 'a' from emp

--8)

--给字段取别名  select 字段1 (as) 别名1,字段2 别名2 from 表名 别名  表的别名不能加as

--查询所有员工的名称(别名为:名字),员工编号(编号)

--别名默认变大写,别名中的内容原封不动出现 ""->中的内容原封不动出现

select 123+456 "get sum" from emp

select empno as 员工编号,ename "员工 姓名" from emp

--9)

--字符串 ''  原封不动显示""

select distinct '哈哈' 笑 from emp e

--10)

--字符串拼接 java中使用+  这里使用||

--查询 ab--cd  表达式

select distinct 'ab-'||'-cd' from emp

--查询所有的员工名字,给他们来一个前缀SXT

select 'sxt-'||ename from emp

--11)

--伪列 : 不存在的列就是伪列  比如:表达式,字符串

--12)

--虚表: 在oracle中不存在的表,也可以说是这个表中没有任何数据,没有任何字段 --oracle中的虚表:dual

--虚表的作用:可以不使用distinct就可以去重的效果,因为里面没有数据,不会出现多行

select * from dual

select distinct 123*456 from emp

select 123*456 from dual

select sysdate from dual

--比如查询当前时间

--13)

--给每一个员工在原来的基础上+100块钱奖金

--null 空

--null与数字运算,结果还为null

--null与字符串运算,结果原串

--nvl(参数1,参数2) 处理null使用  如果参数1为null,最终结果参数2,如果参数1不为null,最终的结果就是参数1

select comm 原奖金,comm||'100' 新奖金 from emp

select comm 原奖金,nvl(comm,0)+100 新奖金  from emp

--一节结尾小练习

--查询所有员工的名字, 工种, 年薪(不带奖金)

select ename,job,sal*12 年薪 from emp

--查询所有员工的名字,工种,年薪(带12月奖金的)

select ename,job,(sal+nvl(comm,0))*12 年薪 from emp

--查询所有员工的名字, 工种, 年薪(带一次奖金的)

select ename,job,sal*12+nvl(comm,0) 年薪 from emp

--select *|表达式|字符串|伪列|字段1 别名1,字段2 as 别名2... from 表名 别名|结果集 where 行过滤条件

--执行流程: from-->where-->select确定结果集

-- 查询20部门的员工信息

--数据: *

--来源: emp

--条件: deptno=20

select * from emp where deptno=20

-- ><>=  <=  = !=  <>

-- 查询工资大于1000的员工的姓名 工作岗位  工资  所属部门编号

--数据: ename,job,sal,deptno

--来源: emp

--条件: sal>1000

select ename,job,sal,deptno from emp where sal=1000

-- 查询不在20部门工作的员工信息

select * from emp where deptno != 20

select * from emp where deptno <>20

--where 中不能使用字段的别名

-- 查询员工的年薪大于20000的 员工名称、岗位 年薪

select ename 姓名,job 岗位,(sal+nvl(comm,0))*12 sum from emp where ((sal+nvl(comm,0))*12)>20000

select ename 姓名,job 岗位,(sal+nvl(comm,0))*12 sum from emp

select 岗位, sum

  from (select ename 姓名, job 岗位, (sal + nvl(comm, 0)) * 12 sum from emp)

where sum >20000

-- 查询  any(任意一个)  some(任意一个)  all(所有)

select * from emp where deptno = any(10,20)

select * from emp where deptno = some(10,20)

--大于最小的

select * from emp where sal>any(1500,2000)--薪资>1500的就可以

--大于最大的

select * from emp where sal>all(1500,2000)--薪资>2000的就可以

-- 查询 工种不为’SALESMAN’的员工信息 (注意 内容区分大小写)

select * from emp where not job ='SALESMAN'

--or或 and并且|都  not取反

-- -检索 工资 1600, 3000员工名称 岗位 工资

select ename,job,sal from emp where sal=1600 or sal=3000

select ename,job,sal from emp where not (sal=1600 or sal=3000)

-- 工资在2000到3000之间的员工信息

select * from emp where sal>2000 and sal<3000

--between 小范围值  and 大范围的值  两者之间  <= >=

select * from emp where sal between 1600 and 3000

---查询 岗位 为 CLERK 且部门编号为 20的员工名称 部门编号,工资

select ename ,deptno ,sal 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 ename ,deptno ,sal,job from emp where job!='CLERK'

select ename ,deptno ,sal,job from emp where not job='CLERK'

select ename ,deptno ,sal,job from emp where job<>'CLERK'

-- 查询 岗位 不为 CLERK 并且部门编号不为 20的员工名称 部门编号,工资

select ename ,deptno ,sal,job from emp where job!='CLERK' and deptno!=20

select ename ,deptno ,sal,job from emp where not (job='CLERK' or deptno=20)

--存在佣奖金的员工名称

select ename,comm from emp where not comm is null

select ename,comm from emp where comm is not null

--不存在奖金的员工名称

select ename,comm from emp where comm is null

--集合

--Union,并集(去重) 对两个结果集进行并集 *** 作,不包括重复行同时进行默认规则的排序;

--Union All,全集(不去重) 对两个结果集进行并集 *** 作,包括重复行,不进行排序 ;

--Intersect,交集(找出重复) 对两个结果集进行交集 *** 作,不包括重复行,同时进行默认规则的排序;

--Minus,差集( 减去重复 ) 对两个结果集进行差 *** 作,不包括重复行,同时进行默认规则的排序

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

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

select ename,sal,comm from emp where sal>1500

select ename,sal,comm from emp where comm is not null

--并集

select ename,sal,comm from emp where sal>1500

Union

select ename,sal,comm 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

--查询显示不存在雇员的所有部门号。

--求出所有的部门号

select deptno from dept

--有员工的部门号

select distinct deptno from emp

select deptno from dept

Minus

select distinct deptno from emp

-- 查询显示存在雇员的所有部门号。

select deptno from dept

Intersect

select distinct deptno from emp

--模糊匹配  like %任意任意字符  _一个任意字符  一起使用

--查询员工姓名中包含字符A的员工信息

select * from emp where ename like '%A%'

--完全匹配

select * from emp where ename like 'SMITH'

--查询员工姓名以'A'结尾的员工信息

select * from emp where ename like 'A%'

--查询员工姓名中第二个字母为A的员工信息

select * from emp where ename like '_A%'

insert into emp(empno,ename,sal) values(1000,'t_%test',8989)

insert into emp(empno,ename,sal) values(1200,'t_tes%t',8000)

--escape('单个字符')指定转义符

--查询员工姓名中包含字符%的员工信息

select * from emp where ename like '%B%%' escape('B')

--当执行插入数据,删除数据,修改的时候,默认开启事务

--可提交  commit 

--可回滚  rollback

--多个人中任意一个值就可以

select * from emp where sal=1600 or sal=3000 or sal=1500

select * from emp where sal in(1500,1600,3000)

--select 字段.. from 结果集 where 行过滤条件 order by 排序字段 desc降序|asc升序(默认)..

--执行流程: from-->where-->select-->排序

select empno,ename,sal from emp order by sal desc,empno asc

--按照奖金升序排序,如果存在null值,所有的奖金null值的数据最先显示

select empno,ename,sal,comm from emp where deptno in (10,30) order by comm asc nulls first

在SQL*Plus中可以处理三种类型的命令:SQL语句、PL/SQL块和SQL*Plus命令。

但三者之间是有区别的。

脚本中的 “:job”是一种绑定变量的方式,属于sql plus的命令格式。需要写成如下格式,然后在plsql developer的命令窗口中执行,或者到sqlplus中执行。

var job number

begin

sys.dbms_job.submit(job =>:job,

what =>'ps_inventory_io',

next_date =>to_date('01-01-4000', 'dd-mm-yyyy'),

interval =>'trunc(sysdate)+1+0/24')

commit

end

/

1)SQL语句是以数据库为 *** 作对象的语言,主要包括数据定义语言DDL、数据 *** 纵语言DML和数据控制语言DCL以及数据存储语言DSL。当输入SQL语句后,SQL*Plus将其保存在内部缓冲区中。

当SQL命令输入完毕时,有三种方法可以结束SQL命令:在命令行的末尾输入分号(;)并按回车;在单独一行上用斜杠(/);或用空行表示。

2)PL/SQL块同样是以数据库中的数据为 *** 作对象。但由于SQL不具备过程控制功能,所以,为了能够与其他语言一样具备面向过程的处理功能,在SQL中加入了诸如循环、选择等面向过程的处理功能,由此形成了PL/SQL。所有PL/SQL语句的解释均由PL/SQL引擎来完成。使用PL/SQL块可编写过程、触发器和包等数据库永久对象。

3)SQL*Plus命令主要用来格式化查询结果、设置选择、编辑及存储SQL命令、以设置查询结果的显示格式,并且可以设置环境选项。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6460220.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-22
下一篇 2023-03-22

发表评论

登录后才能评论

评论列表(0条)

保存