准备工作:
安装Oracle(Oracle11g):
https://www.2cto.com/database/201701/588135.html
卸载Oracle(安装出错重新安装时需要):
https://blog.csdn.net/Devin_LiuYM/article/details/59539020
访问数据库
方法一:
Sqlplus:sqlplus是Oracle自带的访问Oracle数据库的工具
打开运行(或者win + R)输入sqlplus点击回车
方法二:
CMD运行:通过Windows系统自带的cmd进入Oracle
- 1.环境变量
- 2.打开运行(或者win + R)输入 sqlplus 用户/密码
SQL语句
SQL语言分类:
数据定义语言(DDL Data Definition):
- create创建
- alter更改
- truncate清空
- drop删除
数据操纵语言(DML Data Manipulation Language):
- insert插入
- select选择
- delete删除
- update更新
事务控制语言(TCL Transaction Control Language):
- commit提交
- savepoint保存点
- rollback回滚
数据控制语言(DCL Data Control Language):
- grant授予
- revoke回收
简单查询(执行顺序)
注:以下所有sql示例的表,为Oracle下scott用户中的默认的表
DISTINCT:消除重复
- 【3.选择所需要的数据链】SELECT[DISTINCT] * | 列 [别名],列 [别名]…
- 【1.确定数据来源】FROM 表名称 [别名]
- 【2.筛选数据行】[WHERE限定条件]
数据连接查询:用 “||”(EMPNO与ENAME分别是表emp中的字段)
例子:SELECT EMPNO || ENAME FROM EMP
EMPNO||ENAME
- 7369SMITH
- 7499ALLEN
如上所示:|| 是将字段做了拼接然后展示出来
关系运算符
关系运算符主要进行大小的判断
- where
Select * from emp where sal<1200;
Select * from emp where sal=1200;
- 对于 = 需要注意:
也可以用来查询字符串
Select * from emp where ename = ‘SMITH‘;
-
对于不等于的判断,有两个 ‘!=‘,’<>’;在oracle中,数据是区分大小写的。
除了and 与 or之外,还可以使用NOT进行求反
Select * from emp where not sal>2000;
取得是 sal不大于两千的数,也就是小于等于。
范围运算between…and
- between…and的主要功能是进行范围的查询,其使用语法形式如下
- Where 字段|数值 between 最小值 and 最大值。
使用between。。and与关系运算符相比效率更高。
- 在Oracle中的所有运算符都不受数据类型的控制,在之前使用的数字进行判断,除了数字外,还可以用字符串或者是日期判断,重点看日期判断
例子:
- select * from emp where hiredate between ‘01-1月-1981’and’31-12月-1981’
空判断
在某些数据列上是允许存在null值的,但是对于null不能够使用关系运算符进行判断,可以使用is null来判断为空用is not null 来判断不为空
-查询所有领取佣金的雇员
- select * from emp where comm is not null
In操作符(谓词IN)
In指的是根据一个指定的范围进行数据查询
- 例子:
- select * from emp where empno=7499 or empno=7521 or empno=7844;
如果按照以上代码查询的话,将会查询三次,性能很差,面对指定范围数据查询的时候可以用IN操作
- select * from emp where empno in(7499,7521,7844);
- select * from emp where empno in(7499,7521,null);
将代码变为以上代码,会提升性能,在in中可以使用null
对数据进行筛选的时候也可以用not in
- select * from emp where empno not in(7499,7521,7844);
以上代码含义是查询到不包含以上三个中的任意一个。
-
但是:如果使用not in就不可以使用null
模糊查询
like可以实现数据的模糊查找操作,使用like,必须使用如下两个匹配符号:
- “_”:匹配任意一位符号
- “%”:匹配任意符号(包含匹配0位、1位、多位)
- 字符串用单引号’’
查询排序 order by子句
一般是自然顺序是不可控的,所以往往由用户自己进行排序操作。那么使用orderby
- 【3.选择所需要的数据链】SELECT[DISTINCT] * | 列 [别名],列 [别名]…
- 【1.确定数据来源】FROM 表名称 [别名]
- 【2.筛选数据行】[WHERE限定条件]
- 【4.数据排序】[ORDER BY 排序字段 [ASC|DESC],排序字段 [ASC|DESC],…]
Order by 是在select后面执行,说明它可以使用select定义的别名:
-
升序:ASC默认不写就是升序
-
降序:DESC,由高到低排序
排序可以在任意字符串上进行,包括字符串、日期
- 例:
- 按照日期排序降序
- select * from emp order by hiredate desc
单行函数(scott用户下测试)
单行函数可分为以下几种:符串函数、数值函数、日期函数、通用函数
字符串函数
字符串函数是针对字符串数据进行处理的函数
对字符串进行处理:UPPER()、LOWER()、REPLACE()、LENGTH()
INITCAP()、SUBSTR()
UPPER() 小写转大写
格式:UPPER(列|字符串)
-
select upper('Hello')from dual
- 结果为 “HELLO”
例:将用户输入的值转化为大写,并查询:
-
select * from emp where ename=upper('&inputname');
- 加上upper后可以将用户输入的值全部转换为大写,从而提高查询效率
LOWER() 大写转小写
格式:LOWER(列|字符串)
-
select lower('Hello')from dual
- 结果为“hello”
- dual为虚拟表,upper将所有小写字母转化为大写,lower将所有大写字母转化为小写。
REPLACE() 字符串的替换
LENGTH() 计算字符串的长度
语法: 数字 LENGTH(列 | 数字)
-
select ename,length(ename) from emp;
INITCAP() 首字母大写
语法:字符串 INITCAP(列 | 数据)
-
select initcap('helloworld')from dual
- 结果 “Helloworld”
SUBSTR() 字符串的截取
SUBSTR(‘被截取的字符串’,指定截取位置,指定结束位置(如果不写默认截取到末尾))
- 注意:
截取字符串的下标是从1开始的,也就是说截取字符串的下标及时,无论开始点输入0或者是1都当做1来计算。
- oracle中支持负数截取
总结:
Select子句确定数据列;
Where子句控制数据行;
Orderby子句永远最后执行。