Oracle-SQL简单查询语句处理笔记一数据处理及进展–数据:是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据处理:是指对各种形式的数据进行收集、储存、加工和传播的一系列活动的综合。
其目的是从大量的、原始的数据中抽取、推导出对人们有价值的信息。
数据处理的3个阶段:•人工管理阶段•文件系统阶段•数据库系统阶段关系型数据库•数据模型–是数据库系统中,用于抽象、表示、处理现实世界中数据的一种形式架构。
•数据模型三层次概念模型:是现实世界到信息世界的第一层抽象,常用E-R 图表示。
逻辑模型:是用户从数据库所看到的模型,是具体的DBMS 所支持的数据模型,常用的包括层次模型、网状模型、关系模型。
物理模型:是面向计算机物理表示的模型,描述了数据在储存介质上的组织结构,它不但与具体的DBMS有关,而且 V1.0 还与操作系统和硬件有关关系型数据库•关系模型关系模型有关系数据结构、关系操作集合和关系完整性约束三部分组成的。
关系数据结构:在关系模型中,现实世界的实体以及实体间的各种联系均用关系来表示。
在用户看来,关系就是一张由行和列组成的二维数据表。
关系操作:包括:选择、投影、连接、增加、删除、修改等。
关系完整性约束:包括实体完整性、参照完整性和用户定义的完整性。
算术运算符•算术运算符优先级乘除优先于加减相同优先权的表达式按照从左至右的顺序依次计算括弧可以提高优先权,并使表达式的描述更为清晰空值NULL•空值NULL –空值是指一种无效的、未赋值、未知的或不可用的值。
空值不同于零或者空格。
列别名好处:方便查看用来重新命名列的显示标题,如果SELECT语句中包含计算列,通常使用列别名来重新定义列标题。
•使用列别名的方法方式1:列名列别名方式2:列名 AS 列别名•以下三种情况列别名两侧需要添加双引号列别名中包含有空格列别名中要求区分大小写列别名中包含有特殊字符连接操作符使用 || 去连接,相当于java中的 + 号呢。
消除重复行使用DISTINCT 关键字习题整理一:简单的查询语句(查询oracle已经创建的表格,使用用户scott普通用户登陆)说明:Oracle常用的测试表:(可以通过自己创建测试表测试,最好不改变自带的oracle表哈)Emp 员工表(员工编号empno,员工名字ename,工资sal,职位job,部门编号deptno,奖金comm)Dept 部门表(部门编号deptno,部门名称dname,地址loc)BONUS 奖金表(同上)练习1笔记:在关于oracle的性能问题中,使用指定的列查询(如第2题)比使用select* (如第1题)会效率高很多,虽然结果一样,但是执行起来更加优化,这与关乎到有没有命中索引的问题。
• 1.使用两种方式查询所有员工(EMP)信息select * from emp;• 2.查询(EMP)员工编号、员工姓名、员工职位、员工月薪、工作部门编号。
selectempno,ename,job,sal,deptno from emp;练习2笔记:在oracle中,sqlplus以及在sql developer中,可以使用/*注释文字*/或者 --注释文字来注释文字,在编写程序的习惯中,好的习惯是对自己的程序编写好注释,这样方便其他人查看自己的代码。
• 1.员工转正后,月薪上调20%,请查询出所有员工转正后的月薪。
select empno,ename,job,sal*(1+0.2),deptno from emp;• 2.员工试用期6个月,转正后月薪上调转正后月薪上调20%,请查询出所有员工工作第一年的年薪所得(不考虑奖金部分,年薪的试用期6个月的月薪+转正后6个月的月薪)select empno,ename,job,6*sal+6*sal*(1+0.2),deptnofrom emp;练习3错误笔记:在起别名的时候,注意,别名如果是中文,需要写上双引号,单引号是报错的。
• 1.员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的所有收入(需考虑奖金部分),要求显示列标题为员工姓名,工资收入,奖金收入,总收入。
select ename "员工姓名",sal "工资收入",comm "奖金收入" ,6*sal+6*sal*(1+0.2)+12*comm "总收入" from emp;练习3• 1.员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的所有收入(需考虑奖金部分),要求显示列标题为员工姓名,工资收入,奖金收入,总收入。
select ename "员工姓名",sal "工资收入",comm "奖金收入" ,6*sal+6*sal*(1+0.2)+12*comm "总收入"from emp;练习4• 1.员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的所有收入(需考虑奖金部分),要求显示格式为:XXX的第一年总收入为XXX。
--笔记:需要使用连接符号||,同时,在连接符号中,需要单引号连接Select ename || '的第一年总收入为' ||(6*sal+6*sal*(1+0.2)+12*comm) from emp;• 2.查询员工表中一共有哪几种岗位类型。
--笔记:需要去掉重复的job。
distinct写在字段前边select distinct job from emp;练习5在SQL*Plus中,可以使用DESCRIBE 命令来查看表结构--使用desc table查看表结构desc emp;课后作业• 1.分别选择员工表、部门表、薪资等级表中的所有数据。
select *from emp;select * from dept;select * from bonus;• 2.分别查看员工表、部门表、薪资等级表的表结薪资等级表的表结构。
desc emp; --查看員工表desc dept;--查看部门表desc bonus;--查看薪资--第三章限制数据查询练习1• 1.查询职位为SALESMAN的员工编号、职位、入职日期。
select empno,job,hiredate from emp where job='SALESMAN';• 2.查询1985年12月31日之前入职的员工姓名及入职日期。
--笔记:在填写日期的时候,需要格式: '日-某月-年份',例如:30-12月-1985,不添加月这个中文会报错。
select empno,hiredate from emp where hiredate < '31-12月-1985';• 3.查询部门编号不在10部门的员工姓名、部门编号。
select empno,deptno from emp where deptno <> 10;练习2• 1.查询入职日期在82年至85年的员工姓名,入职日期。
select empno,hiredate from emp where hiredate between '1-1月-1982'and '31-12月-1985';• 2.查询月薪在3000到5000的员工姓名,月薪。
select ename,salfrom emp where sal between 3000 and 5000; select ename,salfrom emp where sal >=3000 and sal <=5000;• 3.查询部门编号为10或者20的员工姓名,部门编号。
select ename,deptno from emp where deptno in (10,20);select ename,deptno from emp where deptno =10 ordeptno=20;• 4.查询经理编号为7902 7566 7788 7902, 7566, 7788的员工姓名,经理编号。
select ename,mgrfrom emp where mgr in(7902,7566,7788,7902,7566,7788);练习3• 1.查询员工姓名以A开头的员工姓名。
--使用like关键字。
select ename fromemp where ename like 'A_%';• 2.查询员工姓名倒数第2个字符为T的员工姓名。
select ename fromemp where ename like '%_T_';• 3.查询奖金为空的员工姓名,奖金。
--判断是否为空,用Nullselect ename,commfrom emp where comm is null;练习4• 1.查询工资超过2000并且职位是MANAGER,或者职位是SALESMAN的员工姓名、职位、工资select ename,job,sal from emp where sal >2000 andjob='MANAGER';• 2.查询工资超过2000并且职位是 MANAGER或SALESMAN的员工姓名、职位、工资。
select ename,job,sal from emp where sal >2000 andjob='MANAGER' or job='SALESMAN';• 3.查询部门在10或者20,并且工资在3000到5000之间的员工姓名之间的员工姓名、部门、工资。
select ename,deptno,sal from emp where sal >2000 and sal<5000 and deptno in(10,20);• 4.查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位。
select ename,hiredate,job from emp where job not like'SALES_%'and hiredate <'31-12月-81' and hiredate > '1-1月-81' ;• 5.查询职位为SALESMAN或MANAGER,部门编号为10或者20,姓名包含A的员工姓名、职位、部门编号。
select ename,job,deptno from emp where job ='SALESMAN' or job ='MANAGER'and deptno in(10,20) and ename like 'A%';练习5• 1.查询部门在20或30的员工姓名,部门编号,并按照工资升序排序。