oracle数据库学习之初步(1)

本文介绍了Oracle数据库的基本概念,包括Oracle服务器的组成、Oracle实例与数据库的区别,以及如何通过SQL语句进行用户管理。此外,还提供了SQL SELECT语句的基础用法,如数据查询、筛选、去重等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle Database的基本概念

一个 Oracle 服务器:
是一个数据管理系统(RDBMS),它提供开放的, 全面的, 近乎完整的信息管理
由一个 Oracle 实例 和一个 Oracle 数据库组成

Oracle 数据库 和 Oracle 实例
Oracle 服务器由两大部分组成, Oracle 数据库 和 Oracle 实例。
Oracle 数据库: 位于硬盘上实际存放数据的文件, 这些文件组织在一起, 成为一个逻辑整体, 即为 Oracle 数据库. 因此在 Oracle 看来, “数据库” 是指硬盘上文件的逻辑集合, 必须要与内存里实例合作, 才能对外提供数据管理服务。
Oracle 实例: 位于物理内存里的数据结构. 它由一个共享的内存池和多个后台进程所组成, 共享的内存池可以被所有进程访问. 用户如果要存取数据库(也就是硬盘上的文件) 里的数据, 必须通过实例才能实现, 不能直接读取硬盘上的文件。
区别: 实例可以操作数据库; 在任何时刻一个实例只能与一个数据库关联; 大多数情况下, 一个数据库上只有一个实例对其进行操作。

oracle数据库和oracle实例的关系,以及web集群的概念

oracle实例的理解

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

下列的SQL语句均是基于自带的scott用户进行的,其中scott用户的密码已经被改成11,原密码为tiger

对于那些登陆sqlplus时输入用户指令后显示该用户时lock上锁状态的,需要解锁后使用。
以下提供了一种修改普通用户 口令(密码)的方式。

通过dba用户修改普通用户 密码
C:>sqlplus / as sysdba
SQL> alter user scott account unlock;
SQL> alter user scott identified by aa;

alter user scott identified by aa ; –ok(在SQL语句中的注释用–)
alter user scott identified by 11; –err
alter user scott identified by ‘11’; –err
alter user scott identified by “11”; –ok

**

基本的SQL SELECT语句

**
1 登录

普通用户登录
        C:\>sqlplus scott/11  即:用户名+密码
        quit退出
超级用户登录

            C:\>sqlplus /nolog

                SQL*Plus: Release 10.1.0.2.0 - Pr

                Copyright (c) 1982, 2004, Oracle.

            SQL> connect /as sysdba   //操作用户登录方式
            已连接。

查看用户下有什么表

        SQL> select * from tab; tab是数据字典 (oracle超级管理员分配给普通用的资源....,tab关键字....)

SQL> select * from dept; 查询dept表的所有记录

DEPTNO(部门编号) DNAME 部门名称        LOC 位置
    ---------- -------------- -------------
            10 ACCOUNTING     NEW YORK
            20 RESEARCH       DALLAS
            30 SALES          CHICAGO
            40 OPERATIONS     BOSTON

SQL> desc dept
名称 是否为空? 类型
—————————————– ——– ——-
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)

基本命令

> set linesize 150 设置行宽
set pagesize 140 设置页大小


    SQL> select * from emp;

EMPNO(员工编号) ENAME (员工名字) JOB 工种编号
MGR HIREDATE(日志时间) SA(工资)L
COMM(奖金) DEPTNO(部门编号)
———- ———- ——— ———- ————– ———- ———- ———-
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10

        已选择14行。

-– 设置列宽
数字方式
SQL> col empno for 99999999999999999999

    字符方式设置列宽
                SQL> col ename for a20
                SQL> select * from emp;

—清屏
host cls

======================================
select 语言(*检索所有列 部分列 表达式 别名)
select * from emp;
—显示员工姓名 员工编号 工作 月薪 年薪
select ename, empno, job, sal , sal*12 from emp;

    select ename as "员工姓名" , empno "编号", job 工作, sal 月 薪 , sal*12  年薪 from emp;
    --1别名: 可以省掉 "" 和 as 
    --2别名,有空格时, 不能省掉""

SQL> select ename as “员工姓名” , empno “编号”, job 工作, sal “月 薪” , sal*12 年薪 from emp

            员工姓名         编号 工作           月 薪       年薪
            ---------- ---------- --------- ---------- ----------
            SMITH            7369 CLERK            800       9600
            ALLEN            7499 SALESMAN        1600      19200
            WARD             7521 SALESMAN        1250      15000
            JONES            7566 MANAGER         2975      35700
            MARTIN           7654 SALESMAN        1250      15000
            BLAKE            7698 MANAGER         2850      34200
            CLARK            7782 MANAGER         2450      29400
            SCOTT            7788 ANALYST         3000      36000
            KING             7839 PRESIDENT       5000      60000
            TURNER           7844 SALESMAN        1500      18000
            ADAMS            7876 CLERK           1100      13200
            JAMES            7900 CLERK            950      11400
            FORD             7902 ANALYST         3000      36000
            MILLER           7934 CLERK           1300      15600

            已选择14行。

===============
—显示员工姓名 员工编号 工作 月薪 年收入(月薪*12+comm)

select ename, empno, job, sal , sal*12+comm from emp ;

空值问题:
注意:空值不是空格或者0
1 NULL空值 任何数和null运算都为null (null无穷大)
即:包含空值的数学表达式的值都为空值

    2 空值不是空  null != null

    **null滤空函数** 
    nvl (a, b) -- 当a是空的时候,返回b( 其中 b可以是数字/字符串)
    ---字符串和日期在sql语言用单引号扩起来...

    select ename, empno, job, sal , nvl (sal*12+comm, 0) from emp 

    SQL> ed

已写入 file afiedt.buf

1* select ename, empno, job, sal , nvl (sal*12+comm, 0) from emp
SQL> edit
已写入 file afiedt.buf

1 select ename, empno, job, sal , sal*12+ nvl(comm,0) 年收入
2* from emp
SQL> /

        ENAME                     EMPNO JOB              SAL     年收入
        -------------------- ---------- --------- ---------- ----------
        SMITH                      7369 CLERK            800       9600
        ALLEN                      7499 SALESMAN        1600      19500
        WARD                       7521 SALESMAN        1250      15500
        JONES                      7566 MANAGER         2975      35700
        MARTIN                     7654 SALESMAN        1250      16400
        BLAKE                      7698 MANAGER         2850      34200
        CLARK                      7782 MANAGER         2450      29400
        SCOTT                      7788 ANALYST         3000      36000
        KING                       7839 PRESIDENT       5000      60000
        TURNER                     7844 SALESMAN        1500      18000
        ADAMS                      7876 CLERK           1100      13200
        JAMES                      7900 CLERK            950      11400
        FORD                       7902 ANALYST         3000      36000
        MILLER                     7934 CLERK           1300      15600

        已选择14行。


查询奖金为空的员工
        select * from emp
        where comm is null
          1  select * from emp
          2*                    where comm is null
        SQL> /

             EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
        ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
              7369 SMITH      CLERK           7902 17-12月-80            800                    20
              7566 JONES      MANAGER         7839 02-4月 -81           2975                    20
              7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30
              7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10
              7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20
              7839 KING       PRESIDENT            17-11月-81           5000                    10
              7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20
              7900 JAMES      CLERK           7698 03-12月-81            950                    30
              7902 FORD       ANALYST         7566 03-12月-81           3000                    20
              7934 MILLER     CLERK           7782 23-1月 -82           1300                    10

查询奖金不为空的员工
        select * from emp
                where comm is not null


       EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
    -------- ---------- --------- ---------- -------------- ---------- ---------- ----------
        7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30
        7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30
        7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30
        7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30

========null 捣蛋鬼 ======

—连接符 :把列与列,列与字符连接在一起。

        select 'hello' || 'world' from emp; 

        select 'hello' || 'world' from dual;  --伪表

    dual是数据字典 (oracle超级管理员分配给普通用的资源....,tab关键字....)

dual是一个虚拟表,用来构成select的语法规则,Oracle保证dual里面永远只有一条记录。我们可以用它来做很多事情,如下:

1、查看当前用户,可以在 SQL Plus中执行下面语句

select user from dual;

2、用来调用系统函数

select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual;–获得当前系统时间

select SYS_CONTEXT(‘USERENV’,’TERMINAL’) from dual;–获得主机名

select SYS_CONTEXT(‘USERENV’,’language’) from dual;–获得当前locale

select dbms_random.random from dual;–获得一个随机数

3、得到序列的下一个值或当前值,用下面语句

select your_sequence.nextval from dual;–获得序列your_sequence的下一个值

select your_sequence.currval from dual;–获得序列your_sequence的当前值

4、可以用做计算器

select 7*9 from dual;


    SQL> select sysdate from dual;

            SYSDATE
            --------------
            07-10月-14

            SQL>

—-DISTINCT 1)作用去除重复的行

              1* select DISTINCT deptno from emp
            SQL> /

                DEPTNO
            ----------
                    30
                    20
                    10

            SQL> \

            2)DISTINCT 修饰多个字段的时, 例如当部门编号和工种都一样的时候,认为是重复的...否则 不同行.
                    ====DISTINCT 2个字段

            select DISTINCT deptno, job from emp

SQL 和 SQL*Plus的区别

这里写图片描述

这里写图片描述

**字符串:**        
    字符串可以是 SELECT 列表中的一个字符,数字,日期。
    日期和字符只能在单引号中出现。
     每当返回一行时,字符串被输出一次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值