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

来源:互联网 发布:淘宝在哪开店 编辑:程序博客网 时间:2024/04/30 11:01

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 列表中的一个字符,数字,日期。    日期和字符只能在单引号中出现。     每当返回一行时,字符串被输出一次。
原创粉丝点击