oracle数据库学习之初步(1)
来源:互联网 发布:淘宝在哪开店 编辑:程序博客网 时间:2024/04/30 11:01
Oracle Database的基本概念
一个 Oracle 服务器:
是一个数据管理系统(RDBMS),它提供开放的, 全面的, 近乎完整的信息管理
由一个 Oracle 实例 和一个 Oracle 数据库组成
Oracle 数据库 和 Oracle 实例
Oracle 服务器由两大部分组成, Oracle 数据库 和 Oracle 实例。
Oracle 数据库: 位于硬盘上实际存放数据的文件, 这些文件组织在一起, 成为一个逻辑整体, 即为 Oracle 数据库. 因此在 Oracle 看来, “数据库” 是指硬盘上文件的逻辑集合, 必须要与内存里实例合作, 才能对外提供数据管理服务。
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 列表中的一个字符,数字,日期。 日期和字符只能在单引号中出现。 每当返回一行时,字符串被输出一次。
- oracle数据库学习之初步(1)
- oracle数据库学习之初步(2)
- oracle数据库之初步(3)
- oracle数据库之初步(4)DML
- oracle数据库初步之用户
- oracle数据库初步之约束
- oracle数据库初步之查询
- oracle数据库初步之函数
- oracle数据库初步之操作表
- web初步学习之标签(1)
- oracle数据库初步之表空间与数据文件
- oracle数据库初步之操作表中的数据
- oracle 初步学习笔记
- oracle的初步学习
- Oracle初步学习
- MySQL数据库学习初步
- 数据库初步学习
- mysql数据库初步学习
- Android Studio Ndk 编程
- origin 函数
- 基于OpenStack和Kubernetes构建组合云平台——网络集成方案综述
- poj1363: Rails解题报告
- (9) 数据结构入门概念小结--每天五分钟学习数据结构
- oracle数据库学习之初步(1)
- 万维链
- [转载]最近让ibm的processor folding给害了
- 1053. 住房空置率
- 机器学习--线性回归
- JDK环境变量配置
- 编程实现一个单链表的查找
- 计算器(2)
- [HDU1559][DP]最大子矩阵和