Oracle (01)Oracle数据库的安装步骤.搭建上课所用的数据库环境.table (二维表).查看表结构.数据库中常用的数据类型

版权声明:cxyo.cn https://blog.csdn.net/weixin_44075537/article/details/85032597

Oracle 01

目录
Oracle数据库的安装步骤
搭建上课所用的数据库环境
table (二维表) *****
查看表结构 *****
数据库中常用的数据类型 *****
SQL语句 *****
where子句 *****
对于null值 如何进行判断 *****
模糊查询 ***

存储数据

学员管理系统:

内存: 存取的速度很快   数据较容易丢失   贵

文件:    便宜 ,  可以永久存储!   存储速度 特别慢


**数据库:**  

        它不属于内存和文件之外的存储方式, 它只是数据存储时,  内存与文件结合使用的一种解决方案 !

主流数据库

Oracle: 企业级 大型数据库 甲骨文公司

oracle9i    oracle10g   oracle11g   oracle12c

mysql: 小型数据库 开源免费

db2 : IBM数据库

SqlServer: 微软数据库

Oracle数据库的安装步骤

建议: 没事就多装两遍 ~

目前腾讯电脑管家 与 360 会禁止oracle服务器的开机自启动!

前置条件
1. 下载安装包
2. 解压到任意目录
3. 关闭防火墙和杀毒软件

安装步骤:

1.  打开解压后的文件夹, 点击setup.exe
2.  继续点击下一步 
3.  选择软件安装的目录
4.  输入数据库口令(密码) 
5.  下一步 , 开始安装 !

如果在后续的流程中出现了错误 , 请卸载重装 !

卸载步骤:

1.  打开控制面板 或 其他的软件管理工具 

2.  选择程序, 寻找到oracle database11g

3.  将其卸载

验证数据库是否安装成功

  1. 通过运行(win+r)输入cmd命令 , 打开dos命令窗口

  2. 输入sqlplus 数据库账号/数据库密码:
    sqlplus system/123456

  3. 如果出现了sql>页面 , 表示安装且登录成功 .

搭建上课所用的数据库环境

  1. 因为oracle在安装时, 会自动根据当前系统的编码格式 设置为中文编码

    修改为 支持我们上课脚本的 英文环境
    添加系统环境变量

    变量名:NLS_LANG
    变量值:american_america.AL32UTF8
    

    执行完毕 第三步后, 可以将第一步的环境变量删除掉, 更改回中文环境了!

    变量名:temp_NLS_LANG
    变量值:american_america.AL32UTF8
    
  2. 导入脚本

    在sql>
    输入@路径/脚本名称

    例如: SQL> @C:\Users\j\Desktop\课件\oracle\script\summit2_drop.sql

  3. 查看脚本是否导入成功

    在sql>输入: desc s_emp;

    能出现如下结构: 表示环境搭建完毕!

        Name                                      Null?    Type
         ID                                        NOT NULL NUMBER(7)
         LAST_NAME                                 NOT NULL VARCHAR2(25)
         FIRST_NAME                                         VARCHAR2(25)
         USERID                                             VARCHAR2(8)
         START_DATE                                         DATE
         COMMENTS                                           VARCHAR2(255)
         MANAGER_ID                                         NUMBER(7)
         TITLE                                              VARCHAR2(25)
         DEPT_ID                                            NUMBER(7)
         SALARY                                             NUMBER(11,2)
         COMMISSION_PCT                                     NUMBER(4,2)

使用windows脚本 快速进入sql>页面

我们每一次 进入数据库, 都需要打开dos窗口, 在输入sqlplus命令. 很麻烦

在windows这个系统中, 是支持bat脚本运行的 , 编写一个脚本, 来快速的进入dos命令行, 并自动输入sqlplus指令

编写步骤:

  1. 新建文件 : xxx.bat
  2. 输入内容 : sqlplus system/123456
  3. 保存关闭, 双击打开

**RDB ***

关系型数据库

**RDBMS ***

关系型数据库管理系统 , 使用二维表进行数据的存储 !

DBA

数据库管理员

**table (二维表) *******

由行和列组成的表格, 我们称其为二维表

拥有以下五个元素:

  1. 表头: 描述了字段名称
  2. 一行: 一行表示一条数据
  3. 一列: 表示一条数据中的一部分
  4. 字段名: 描述在此表格中的当前列的数据的 含义
  5. 字段值: 描述的是当前列 的值 !

如何通过dos命令行访问数据库:

  1. 访问本机数据库

    dos命令行下输入: sqlplus 帐号/密码

  2. 访问其他计算机的数据库(本机需支持sqlplus命令)
    dos命令行下输入: sqlplus 帐号/密码@ip地址;

    也可以下载软件来连接 , 也可以自己编写软件来连接

常用的数据库命令:

清除屏幕:

host cls

有时列显示过宽 ,调整:

col 列名 for a长度;

不可设置数字列的宽度 ,  并且设置只针对当前dos显示的效果有效 , 不会影响数据

**查看表结构 *******

desc 表名;

例如: desc s_emp;

员工表: s_emp

员工表表结构: 熟悉掌握, 因为后期大多的课程, 是基于这个表格的 !

Name(列字段名称)            Null?(列数据可以为空?)    Type(列数据的类型)
 ----------------------------------------- -------- -----------------------

 ID(员工编号)                NOT NULL                   NUMBER(7)   |number表示数据类型,(7):表示存储的位数长度
 LAST_NAME(姓)              NOT NULL                   VARCHAR2(25)
 FIRST_NAME(名)                                        VARCHAR2(25)
 USERID(用户编号)                                       VARCHAR2(8)
 START_DATE(入职日期)                                   DATE
 COMMENTS(备注)                                         VARCHAR2(255)
 MANAGER_ID(他领导的员工编号)                             NUMBER(7)
 TITLE(职位)                                            VARCHAR2(25)
 DEPT_ID(部门编号)                                      NUMBER(7)
 SALARY(月薪)                                           NUMBER(11,2)|number表示数据类型,(11):表示存储的位数长度 2表示的小数点后的位数
 COMMISSION_PCT(奖金)                                  NUMBER(4,2)

not null 表示不可为空 , null ? 下不出现任何的字符, 则表示允许为空

**数据库中常用的数据类型 *******

  1. number: 数字类型, 类似Java中的double

  2. varchar2: 变长字符串类型

    varchar2 与 char(定长字符串) 类型的区别:

    varchar2在声明长度后, 如果存储不满, 则自动缩小长度 ! 
    char声明长度后, 如果存储不满, 会使用空格补足!
    
  3. date: 日期类型

**SQL语句 *******

结构化查询语言 大多数的数据库 , 操作上基本上都一致 !

**SQL语句的五种分类: *******

DQL(Data query language): 数据查询语句 (SELECT)

DML(data manipulation language):数据操作语句

DDL(data define language):数据定义语句    

TCL(transaction control language):事务控制语句

DCL(data control language):数据控制语句

DQL->Select语句

SELECT语句负责 从数据库中查询数据

From子句

  1. 如何查询单个列的值 ***
    格式:select 列名 from 表名;

    案例:查询员工表格中的员工编号:
    语句:select id from s_emp;

  2. 如何查询多个列的值 ***
    与查询单个列的方式基本相同, 多个列之间使用英文逗号隔开 !
    格式:select 列名1,列名2…列名n from 表名;

    案例:查询员工表格中的员工编号以及对应的月薪:
    语句:select id,salary from s_emp;

    练习:查询员工表格中的员工编号(id),姓(last_name),名(first_name),月薪(salary):
    语句:select id,last_name,first_name,salary from s_emp;

    设置列显示的长度:

    col 列名 for a长度; //不能设置数字列
    例如: col last_name for a20;
    例如: col first_name for a20;

  3. 如何查询一个表中的所有列:*

    • 表示所有(all) , 与查询单列的方式基本一致, 把列名改为*号即可

    格式:select * from 表名;

    案例:查询员工表格中的所有员工信息
    语句:select * from s_emp;

查询时额外的操作

在查询数据时, 可以对结果进行运算 , 例如算数运算 ,字符串拼接, 直接在列名处进行运算即可!

  1. 算数运算 + - * / 熟悉

    • 案例:计算员工的年薪 (salary16)
      语句:select id,salary
      16 from s_emp;

    • 练习:计算员工的年薪salary16加奖金commission_pct
      语句:select id,salary
      16+salary16commission_pct/100 from s_emp;

**- null值的运算 *****

数据库中 所有的类型的默认值为 null 

oracle中null值经过运算后, 结果永远为null

使用nvl函数运算null值:

格式: nvl(参数1,参数2)

关于数据库中null值的处理, 一定要尽早进行 !

作用: 用来处理null , 如果参数1为null,则返回参数2, 如果参数1不为null则返回参数1.

例如: nvl(commission_pct,0) : 如果员工有提成, 则返回提成 , 如果没有提成则返回0

-   练习:计算员工的年薪salary*16加奖金commission_pct
    语句:select id,salary*16+salary*16*nvl(commission_pct,0)/100 from s_emp;

-   练习:计算员工的日薪, 按照一月21个工作日计算
    语句:select id,salary/21 from s_emp;

-   练习:计算员工的时薪, 按照一个月21天算, 一天8个小时计算
    语句:select id,salary/21/8 from s_emp;

**列的别名 ****

有时我们在对表格中数据进行查询时, 数据的列名出现了变化, 我们需要 一个更见名知意的列名来表示数据 , 可以给数据添加一个别名来显示!

格式:select 列名1 别名1,列名2 别名2… 列名n 别名n from 表名;

案例:
查询年薪: select id,last_name,salary*16 y_sal from s_emp;

  • 特殊的别名:
    有时我们在别名中 可能会存在一些特殊字符, 例如空格 !

    那么这时编写的语句 会出现错误: 因为如下的语法, 就像是在给年薪添加两个别名
    select salary*16 y sal from s_emp;

    如果要解决这个错误, 应让数据库清晰的认识到 ,y sal 是一个别名, 那么通过双引号将其引住即可!
    此解决方案 又叫别名的原样显示:
    之前的 别名无论是否大写, 在显示时都展示为大写, 通过双引号引住的别名, 会原样显示(大小写敏感)

    例如:select id,last_name,salary*16 “y sal” from s_emp;

**SQL中的字符串 ****

  • Oracle中关于大小写的规则:

    在sql中, 只有字符串是大小写敏感的 !

String text = “你好”;
syso(text); 你好

Java中:
定义形式: 使用双引号引住: “你好”
表现形式: 表现形式中 引号是不存在的: 你好

Oracle中:
定义形式: 使用英文单引号引住: ‘你好’
表现形式与Java一致:你好

  1. 字符串的拼接

    在oracle中 字符串拼接符: ||

练习: 查询员工表格(s_emp)中的员工姓 , n a m e ; s e l e c t l a s t n a m e 名 ,并给这个字段起别名为name; select last_name||' ’||first_name name from s_emp;

  1. 如何在字符串中拼接一个单引号
    字符串单引号在oracle中编写方式为: ‘’’’

    练习: 查询员工表格中的姓’名:
    语句: select last_name||’’’’||first_name name from s_emp;

数据的排重显示 熟悉

排重关键字: distinct , 在查询时编写到字段的前面加空格即可 !

  • 单字段排重
    在查询时, 如果指定排重的单个字段产生了重复, 则忽略掉此行数据!

    • 查询员工的薪资
      select salary from s_emp;

    • 查询员工的薪资, 并对薪资进行排重显示
      select distinct salary from s_emp;

  • 多字段排重
    在查询时, 如果指定的多个字段出现了重复, 则忽略掉此行数据

    • 查询员工的薪资 与 领导编号, 并对这两个数据进行排重操作 !
      select distinct salary,manager_id from s_emp;

错误

未选定行: 表示查询不到数据!

**where子句 *******

对查询进行条件的添加, 对产生的结果集进行过滤 , 匹配条件的将被查询到, 不匹配的将不会出现在结果集中!

常用的比较运算符: = != > < >= <=

字符串在比较相等时, 一样使用等号 !

格式: select 列名 from 表名 where 查询条件;

案例:查询员工的信息(id,last_name,salary), 要求id等于10 
语句:select id,last_name,salary from s_emp where id=10;


练习:查询员工的信息(id,last_name,salary),要求 id大于10;
语句:select id,last_name,salary from s_emp where id>10;

练习:查询员工的信息(id,last_name,salary),要求 领导编号(manager_id)为1;
语句:select id,last_name,salary,manager_id from s_emp where manager_id=1;

练习:查询员工的信息(id,last_name,salary),要求月薪在1300以下
select id,last_name,salary from s_emp where salary<1300;

特殊的条件:

极限条件: 永真条件 , 永假条件

永真条件: 
select * from s_emp where 1=1;

永假条件:
select * from s_emp where 1!=1;

对于字符串进行比较时, 需要注意的地方:

1.  在oracle数据库中 字符串需要使用单引号 引住 !
2.  在oracle中 字符串是大小写敏感的, 也就是比较时区分大小写

案例:查询员工的信息(id,last_name,salary), 条件: last_name等于Chang
语句:select id,last_name,salary from s_emp where last_name='Chang';

练习: 查询员工的日薪(salary/21),一个月按21天算, 条件为 last_name为Dancs
语句: select salary/21 from s_emp where last_name='Dancs';

特殊的运算符(关键字) (熟练)

between: 表示一个闭区间 (包含开始和结尾)

使用方式:  ... where 字段 between 初始范围 and 最大范围;

案例: 查询员工的信息(id,last_name,salary) , 条件为: 工资在800到1000以内的员工
语句: select id,last_name,salary from s_emp where salary between 800 and 1000;

练习:查询员工的信息, 要求薪资在 1000-1450之间
语句:select id,last_name,salary from s_emp where salary between 1000 and 1450;

in: 表示从某个取值列表中匹配 !

使用方式: ... where 字段 in(取值1,取值2,取值3...取值n);

案例: 查询领导编号(manager_id)为1或2或3的员工的信息(id,last_name,salary)!
语句: select id,last_name,salary,manager_id from s_emp where manager_id in(1,2,3);

练习:查询员工的信息, 要求id为1或2或3或4或5的员工
语句:select id,last_name,salary,manager_id from s_emp where id in(1,2,3,4,5);

**对于null值 如何进行判断 *******

通过查询领导编号, 来观察问题:

1.  查询所有的领导编号等于1的用户
    select id from s_emp where manager_id=1;

2.  查询所有的领导编号不等于1的用户
    select id from s_emp where manager_id!=1;

上面的两个案例 ,只查询到24的结果, 少了id为1的员工 . 我们发现 id为1的员工是没有领导编号的,也就是说领导编号为null;

上面学习的判断逻辑符号 , 无法应用在null值上 !

对于null值的判断, 需要使用 is null 来判断
格式: … where 字段 is null;

案例: 查询领导编号为null的员工:
语句: select id from s_emp where manager_id is null;

练习: 查询员工表格中 , 没有奖金(commission_pct)的员工
语句: select id from s_emp where commission_pct is null;

**模糊查询 *****

  1. 董飞充气版娃娃

  2. 高帆版仿真会旋转版

  3. 董飞/高帆 娃娃变脸版

  4. 晓阳养成版

关键字: like

使用方式: … where 字段名 like ‘模糊格式文本’;

文本中可以存在两种特殊含义的符号(通配符):

  1. _ :表示一个任意的文本字符

  2. % :表示0-n个任意的文本字符

  3. 查询以晓阳开头的文本:

    … where 字段名 like ‘晓阳%’;

  4. 查询包含娃娃的文本
    … where 字段名 like ‘%娃娃%’;

  5. 查询倒数第三个字 为 旋 的文本
    … where 字段名 like ‘%旋__’;

  6. 查询第二个字符为飞的文本
    … where 字段名 like ‘_飞%’;

练习:

-   查询s_emp表格中 last_name中包含a的员工的信息(id,last_name,salary) , 
    select id,last_name,salary from s_emp where last_name like '%a%';

-   查询s_emp表格中 last_name中开头为N的员工的信息(id,last_name,salary) , 
    select id,last_name,salary from s_emp where last_name like 'N%';

-   查询s_emp表格中 last_name中第二个字符为o的员工的信息(id,last_name,salary) , 
    select id,last_name,salary from s_emp where last_name like '_o%';

-   查询s_emp表格中 last_name中倒数第二个字符为e的员工的信息(id,last_name,salary) , 
    select id,last_name,salary from s_emp where last_name like '%e_';

疑问:

如果要模糊查询的文本中包含_怎么办?  (了解)

例如:  

查询user_tables表格中 table_name 中以S_开头的数据 !

select table_name from user_tables where table_name like 'S_%';

使用转义字符 , escape

select table_name from user_tables where table_name like 'S\_%' escape '\';

逻辑条件连接符

用于连接多个条件

与: and *****

案例:查询员工的id为6 , 并且 领导编号为2的员工的 信息 (id,last_name.salary)
语句:select id,last_name,salary from s_emp where id=6 and manager_id=2;


练习:查询员工的id为3 , 且 工资(salary)为1400的员工的信息(id,last_name.salary)
select id,last_name,salary from s_emp where id=3 and salary=1400;

或: or *****

练习: 查询员工的薪资为1400 或者 1450的员工的信息(id,last_name.salary)
select salary,id,last_name from s_emp where salary=1400 or salary=1450;

非: not *

闭区间的not使用, 得到不属于闭区间的内容: 
格式: ...where 字段名称 not between 最小范围 and 最大范围;

    案例: 获取员工的信息(id,last_name,salary) ,条件为 薪资不再1000-1300之间的员工

    语句: select id,last_name,salary from s_emp where salary not between 1000 and 1300;

in的使用: 从结果集中忽略 列表中的值 !
格式:where 字段名称 not in(值1,值2...值n);

    案例: 获取员工薪资 不是1400和1450的员工信息(id,last_name,salary)
    语句: select id,last_name,salary from s_emp where salary not in(1400,1450);

is null的not使用: *** 

格式:where 字段名称 is not null   : 取出不为null的数据航      

    案例:获取员工的信息, 条件为manager_id不为null!
    语句:select id,last_name,salary from s_emp where manager_id is not null;

**条件的优先级: ***

练习: 获取员工的信息(id,last_name.salary) 条件为: 员工工资小于1000 且部门编号为31或42
语句: select id,last_name,salary from s_emp where salary<1000 and (dept_id=31 or dept_id=42);

猜你喜欢

转载自blog.csdn.net/weixin_44075537/article/details/85032597