Oracle学习笔记(一)
来源:互联网 发布:淘宝直通车计算机出价 编辑:程序博客网 时间:2024/05/21 09:39
我的Oracle用户及密码:
- sys:change_on_install
- system:manager
- Scott:tiger
- sh:sh
连接到数据库命令:sqlplus scott/tiger
连接成功后,切换用户:conn sys/change_on_install AS SYSDBA。其他用户不需要AS SYSDBA。
格式化命令:
- 设置每行的长度:SET LINESIZE 300
- 设置每页的长度:SET PAGESIZE 30
调用本机命令:如Host echo hello
sql简介
SQL指的是结构化查询语言。
- DML(数据操作语言):主要指的是数据库的查询与更新操作。
- DDL(数据定义语言):主要指的是数据对象的创建(表、用户)
- DCL(数据控制语言):主要是进行权限的管理操作
SCOTT用户表的结构
打开SQL PLUS ,登录到SCOTT用户。
查询一个用户下的所有表:select * from tab;
查询到SCOTT用户有四张表:BONUS、DEPT、EMP、SALGRADE。
下面要查询每张表的结构:
DESC dept;
DESC EMP;
DESC salgrade;
DESC bonus;
bonus表中没有数据。
SQL简单查询
查询emp表的全部记录
select * from emp;
查询每个雇员的编号、姓名、职位、工资
select empno,ename,job,sal from emp;
查询所有的职位信息,使用DISTINCE不会出现重复列。但是如果查询的是多个列,那么只有在多个列数据都相同时,才能消除。
select DISTINCT job from emp;
查询每个雇员的编号、姓名、基本年薪。
select empno,ename,sal*12 income from emp;
查询每个雇员的编号、姓名、基本年薪(每年十五个月工资,每个月200元餐补、100元交通补贴、100元的电话补贴,每年5个月高温补贴200元)。
select empno,ename,(sal*15+(200+100+100)*12 + 200*5) incomefrom emp;
直接查询常量
select '雇员',empno,ename from emp;
查询效果:雇员编号:XXXX,姓名:XXX,收入:XXX。“||”负责进行输出内容的连接
select '雇员编号:'||empno,'姓名:'||ename,'收入:'||sal from emp;
SQL限定查询
查询基本公司高于1500的雇员
select *from empwhere sal>1500;
查询smith的完整信息,注意Oracle中的数据区分大小写
select *from empwhere ename='SMITH';
查询工资是5000的雇员信息
select *from empwhere sal=5000;
查询不是销售人员的雇员编号、姓名、职位。”!= 或者 <>”
select empno,ename,jobfrom empwhere job!='SALESMAN';
查询工资范围在1500到3000的雇员
select *from empwhere sal>=1500 and sal<=3000;
查询工资大于2000或者是办事员的雇员
select *from empwhere sal>2000 or job='CLERK';
查询所有工资小于2000。用NOT实现
select *from empwhere NOT sal>=2000;
查询工资范围在1500到3000的雇员,性能比AND高
select *from empwhere sal between 1500 and 3000;
查询所有在1981年雇佣的雇员
select *from empwhere hiredate between '01-1月 -1981' and '31-12月 -1981';
查询所有领取佣金的雇员
select *from empwhere comm is not null;select *from empwhere not comm is null;
查询雇员编号为7369、7566、7788、9999的雇员信息
select *from empwhere empno = 7369 or empno = 7566 or empno = 7788 or empno = 9999;
select *from empwhere empno in(7369,7566,7788,9999);
查询雇员编号不为7369、7566、7788、9999的雇员信息
select *from empwhere empno not in(7369,7566,7788,9999);
select *from empwhere not empno in(7369,7566,7788,9999);
注意:not in操作中不能有null值
select *from empwhere empno not in(7369,7566,7788,null);
结果:未选定行。
使用WHERE最大的用处在于控制显示的数据行,就是别显示全部数据行。使用 NOT IN 的目的是为了查询部分数据行,如果有了null,就变成了查询全部不为空的数据,而某些数据如主键,永远不能为空,就变成了查询全部数据。在大型数据库中,就宕机了。
模糊查询,在使用Like时,可以使用通配符:
- “_”,匹配任意的一位字符;
- “%”,匹配任意位字符;
查询姓名是以字母A开头的雇员信息
select * from emp where ename like 'A%';
查询姓名是以第二个字母位A开头的雇员信息
select * from emp where ename like '_A%';
查询姓名是包含A字母的雇员信息
select * from emp where ename like '%A%';
查询排序
查询所有雇员信息,按照工资由高到低排序。
select * from emp order by sal desc;
查询所有销售人员信息,按照雇佣日期由早到晚排序。
select * from emp where job='SALESMAN' order by hiredate asc;
查询所有雇员信息,按照工资由高到低排序,如果相同,则按照雇佣日期由早到晚排序。
select * from emp order by sal desc ,hiredate asc;
查询每个雇员的编号、姓名、年薪,按照年薪由低到高排序。
select empno,ename,sal*12 income from emp order by income asc;
排序查询总结
- 使用 OREDER BY 查询的时候,排序是在最后完成的;
- ORDER BY 子句是最后执行的子句;
- 在ORDER BY 之中可以设置多个排序的字段;
- ORDER BY 有两种模式:ASC、DESC;
- ORDER BY 是唯一一个可以使用SELECT子句定义别名的子句。
练习题
选择部门30中所有员工。
select * from emp where deptno=30;
列出所有办事员(CLERK)姓名、编号和部门编号。
select ename,empno,deptno from emp where job='CLERK';
列出佣金高于薪资60%的员工。
select * from emp where comm > sal*0.6;
找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)。
select * from empwhere (job='MANAGER' and deptno=10) or (job='CLERK' and deptno=20);
找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK),以及既不是经理也不是办事员但是工资大于等于2000的所有员工的详细资料。
select * from empwhere (job='MANAGER' and deptno=10) or (job='CLERK' and deptno=20) or (job not in ('MANAGER','CLERK') and sal>=2000 );
找出 收取佣金的员工的不同工作
select distinct job from emp where comm is not null;
找出不收取佣金或收取佣金低于100的员工。
select * from emp where comm is null or comm <100;
显示不带有“R”的员工的姓名
select ename from emp where not ename like '%R%';select ename from emp where ename not like '%R%';
显示带有“A”的员工的姓名,显示的结果按照基本工资有高到低排序,如果基本工资相同,则按照雇佣年限由早到晚顺序,如果雇佣日期相同,则按照职位排序。
“`sql
select *
from emp
where ename like ‘%A%’
order by sal desc,hiredate asc,job;
- Oracle学习笔记(一)
- ORACLE学习笔记(一)
- ORACLE学习笔记(一)
- ORACLE学习笔记(一)
- Oracle学习笔记(一)
- Oracle学习笔记(一)
- Oracle学习笔记(一)
- Oracle学习笔记(一)
- Oracle学习笔记(一)
- oracle学习笔记(一)
- oracle学习笔记(一)
- Oracle学习笔记(一)
- ORACLE学习笔记(一)
- Oracle学习笔记(一)
- Oracle学习笔记(一)
- Oracle学习笔记(一)
- Oracle学习笔记(一)
- Oracle学习笔记(一)
- React页面登录之后返回之前浏览页面
- 26、27、28
- 获取屏幕的分辨率,工作区宽高
- JavaWeb之JSTL标签库
- 函数节流与防抖
- Oracle学习笔记(一)
- Delphi 高效的通用对象池
- Hibernate工具类,实现CURD操作
- HTTP响应时间测试代码
- iOS中的懒加载
- Java 通过 JDBC 连接 MySQL 数据库的简单示例
- DirectX11之3D渲染管线
- Git submodule 如何删除一个 submodule
- Ubuntu屏幕分辨率设置