目录
二、Orcale 的默认系统用户登录,创建表空间及创建授权新用户
十、Orcale 数据库进行 Group By 分组时需要注意什么?
引言
作为开发必须的数据库分为很多种,我们通常要求根据需要进行Mysql 或 Orcale 数据库的使用,因为之前小编一直用的是MySQL数据库,现在用了一段时间Orcale数据库,那么本文就主要说说Orcale数据库的下载安装和使用,也会讲到一些MySQL 和 Orcale 的使用区别。
一、Orcale 11g数据库的下载和安装
下载链接: https://pan.baidu.com/s/1IHDva0FaFF28IJ7QzWNAEA
提取码:zmhy
如果需要其他版本可以跳转官网下载:
安装流程
1. 解压安装包,再框选解压后的两个安装包再次解压,得到 database 文件夹
2. 进入 database 文件夹,双击 setup.exe 进行安装
3. 点击安装后会弹出以下窗口,不需要操作,稍等片刻,会弹出弹框说不满足要求,不需要管,点击“是”即可。
4. 不需要绑电子邮箱的话,直接下一步,出现弹框选择“是”;继续点下一步,再下一步
5. 然后进行口令设置,相当于设置默认系统密码,密码需要满足规定的格式要求。
设置好以后点击“下一步”
6. 在先决条件检查页面,点击确认。 然后等待安装即可。安装过程会比较慢,有两个进度条会顺次执行。
7. 安装好以后会出现如下选项,
点击“口令管理”可以设置用户和密码,点击确认将直接结束安装。
如果你点击了确定,是不是意识到不知道该怎么登陆 Orcale 数据库你?继续往下看,解决办法尽在下边。
如果你点击进入了“口令管理”,你需要做的有如下操作:
1、重新设置sys和system的用户密码。
2、将sh和scott账号的勾去掉,并重新设置密码。
3、点击确定,完成安装。
如果你直接点击了“确定”,直接结束了安装,你要做的是用 Orcale 系统账号登陆并创建新用户供你使用。 具体流程如下:
1. 找到电脑菜单 -> 全部应用 -> Orcale... -> SQL Plus, 点击打开
2. 跟着下边登陆,创建授权用户执行sql语句
3. 登陆 Navicat 等可视化图形工具,创建连接,连接Orcale数据库
二、Orcale 的默认系统用户登录,创建表空间及创建授权新用户
请输入用户名:as sysdba
请输入用户名:sys
输入口令:下载时定义的(大写+小写+数字)口令 【看不到输入的内容,所以输错重来就行】
--------------------------
-- 这里路径自定义设置,设置的是保存创建Orcale空间表的存放位置
create tablespace UBP datafile 'D:\UBP.dbf' size 200m autoextend on next 100m maxsize unlimited;
---------------------------
-- 创建用户UBP,设置密码UBP,并赋予初始表资源为 UBP
create user UBP identified by UBP default tablespace UBP;
---------------------------
-- 授予权限,分两步,分别授予用户(UBP) connect, resource 和 dba 权限
-- 用户名和表名重复没有关系,自己清楚就行
grant connect, resource to UBP;
grant dba to UBP;
三、Orcale 数据库 表字段的类型
Orcale 数据库字段类型,大体分为六类,分别是字符串类型、数字数据类型、日期时间数据类型、 大型对象(LOB)数据类型、 RAW 和 LONG RAW 数据类型、 ROWID 和 UROWID 数据类型。
其中需要特别注意的是常用的三种: VARCHAR2, NUMBER,Date.
- 在 Orcale 中,弃用了 MySQL 数据库的 VARCHAR,取而代之的是 VARCHAR2,
- NUMBER(P,S) 代替了 MySQL 中 int 等基本数据类型。其中 P,precision 表示数字中的有效位(没有指定的话,将使用默认 38 作为精度),S,scale 表示小数点右侧的位数,默认为0(可设置为负数,表示将把该数字取舍到小数点左边的指定位数)
- Date 类型,同 MySQL 一样用来处理日期类型,但是它对类型有更强制性的要求,在 Navicat 工具中进行 sql 匹配时,因为书写的只能是字符串类型,所以需要使用 date = TO_DATE("2023-09-05", "yyyy-mm-dd")
- 大小写,Orcale 在创建表字段时最好将表名和字段名都大写。 在查询字段时,查询的字段名可以小写, Orcale 会在查询时自动转换为大写。
四、如何用 sql 语句创建一个 Orcale 数据库的表
在Oracle中创建数据表的时候,建议表名字段名全部为大写,会减少一些错误的产生。
在查询的时候使用小写字段可以成功查询,如果需要,可以给字段和表名加双引号,给字符串类型加单引号。
create table Student (
id number(10) primary key, //primary key 设置主键
name varchar2(20) not null, //varchar2 必须添加长度
classId number(10) not null,
"uId" varchar2(20) unique not null, //unique 设置唯一
birthday date //date 不能加长度
);
五、如何用 sql 语句查询 Orcale 数据库的表字段
查询中常见的错误:
- 查询字段没有大写
2. 表字段没有大写
3. “张三”,使用双引号包裹
4. 最终 sql
select * from STUDENT s where s.NAME = '张三';
六、Orcale 中引号的使用
----------------------------1. 创建表
Orcale中创建表语句,对于表名和字段名都可以加双引号或者不加。
----------------------------2. 查询表
Mysql中查询语句为:(不支持倒引号查询)
Oracle中的查询语句: (仅支持单引号和无引号查询)
----------------------------3. 具体用途
单引号的使用:
1. 用来限定字符串(varchar2等),界定一个字符串的开始和结束。上边的“张三”查询不到也正是因为这个原因。
2. 当做转义字符使用,对应的 MySQL 中一般使用 \ 来转义
双引号的使用:
在创建表时,用来限定表名,列名的名称,如果不使用引号直接声明字段,遇到数据库中的关键字就会创建失败,比如 desc
七、如何进行多表联查(左外连,隐式内联)
隐式内联:需要注意对于命名相同的字段通过 表名.字段名 进行区分,如此处的 CLASS_ID
select s.*, c.NAME className, c.stu_num from STUDENT s, CLASS c
where s.NAME = '张三' and s.CLASS_ID = c.CLASS_ID;
左外连:查询左表的全部和右表关联的数据。区别于 where 查询,左外连用 ON 进行条件筛选。
如果需要多个表进行左外连查,那就按照:
表a LEFT JOIN 表b ON 条件1 LEFT JOIN 表c ON 条件2 的格式。
对应的,右外联用的是 RIGHT JOIN
select s.*, c.NAME className, c.stu_num FROM STUDENT s
LEFT JOIN CLASS c ON s.NAME = '张三' and s.CLASS_ID = c.CLASS_ID;
八、如何对查到的数据排序并重新编号
1. 直接查询
2. 排序并编号查询
-- 关键部分是 row_number () over ( ORDER BY ID),
其中排序利用的是 Order By,编号用的是 row_number,但是两者又是一个整体,如果缺少了 ORDER BY,语句就会报错。
SELECT row_number () over ( ORDER BY ID ) rn, s.* from STUDENT s;
九、如何复合查询获取表中的数据条数
这里提供两种办法,但是都需要子查询,也都需要对字段分组(group by),试着思考分组需要注意什么。
-- 方法一,查询字段使用子查询。
select c.*, (select count(ID) from STUDENT s where s.CLASS_ID = c.CLASS_ID GROUP BY CLASS_ID) num
from CLASS c where c.CLASS_ID = 1;
-- 方法二,查询表进行合并,增加子查询字段。
SELECT n.class_id, n.name, n.stu_num, n.id, COUNT(ID) NUM
FROM (select c.*, s.ID from STUDENT s, CLASS c where c.CLASS_ID = s.CLASS_ID) n
WHERE n.CLASS_ID = 1
GROUP BY n.id, n.class_id, n.name, n.stu_num ;
十、Orcale 数据库进行 Group By 分组时需要注意什么?
通过上面的复合查询我们知道要求COUNT值,我们需要分组,那么直接对需要求的字段分组为什么会报不是分组呢? 在 Orcale 中,规定了 GROUP BY 需要遵守的规则,要么将查询的所有字段都进行分组,要么通过子查询的方式。
所以这个查询正确的写法就是: SELECT n.class_id, n.name, n.stu_num, n.id, COUNT(ID) NUM FROM (select c.*, s.ID from STUDENT s, CLASS c where c.CLASS_ID = s.CLASS_ID) n WHERE n.CLASS_ID = 1 GROUP BY n.id, n.class_id, n.name, n.stu_num ;
结束语
我接触 Orcale 仅有四周时间,接触到的知识面还尚浅,但也希望这篇博文能对你有一定的帮助。如果你看到了这里,相信或多或少会有一些收获吧,那如果可以的话,就麻烦点个赞再走吧!感谢您的收看~