重要:
1、Oracle命令是不区分大小写的,但是切换密码区分大小写。
------------------------------------------------------------------------
2、执行顺序
3、select
1、from
2、where
修改Oracle密码:
一、权限用户:
CMD运行命令:
① 输入sqlplus /nolog进入Oracle控制台;
② 输入 conn /as sysdba,以DBA角色进入;
③ 连接成功后,输入“select username from dba_users”查看用户列表;
④ 若修改某一个用户密码, 修改用户口令 格式为:
alter user 用户名 identified by 新密码;
以 apps 为例,密码修改为 123456;
可输入alter user apps identified by 123456;
二、普通用户:
用 system 登录进去之后,执行下面的命令:
SQL> alter user scott account unlock;
用户已更改。
这样就完成解锁的操作。接下来,你还可以重新给 scott 这个用户设定密码。
修改scott的登录密码:
SQL> alter user scott identified by tiger;
用户已更改。
大功告成,此时你再拿 scott 和 tiger 来登录就可以了!
SQL> conn scott/tiger
已连接。
三、加锁/解锁(普通用户默认加锁)
Oracle 中给用户加锁与解锁的代码:
SQL> alter user 用户名 account lock; (加锁)
SQL> alter user 用户名 account unlock; (解锁)
格式化命令:
设置每列长度:COL 列名称 FOR A长度;
eg: 设置列名称位为ename占10个长度, **COL ename FOR A10;
设置所有每行长度: SET LINESIZE 长度;
设置所有每页长度: SET PAGESIZE 长度。
切换用户:
① SYS 为最高权限用户;登陆SYS需要执行 **SYS AS SYADBA;**,
切换SYS需执行**CONN SYS/密码 AS SYADBA;**。
② SYSTEM 管理用户;登陆SYSTEM直接执行**SYSTEM**即刻,
切换SYSTEM执行**CONN SYSTEM/密码**即刻切换。
③ SCOTT普通用户;登陆SCOTT直接执行**SCOTT**即刻,
切换SCOTT执行**CONN SCOTT/密码**即刻切换。
④ SH大数据用户,登陆SH直接执行**SH**即刻,
切换SH执行**CONN SH/密码**即刻切换。
常用命令
查询一张表: SELECT *FROM 表名称;
查询所有表: SELECT *FORM TAB;
查询表结构: DESC 表名称;
scott用户下的4张表:
1、dept表
序号 | 列名称 | 类型 | 描述 | |
---|---|---|---|---|
1 | DEPTNO | NUMBER(2) | 表示部门编号,最多由2位数字构成 | |
2 | DNAME | VARCHAR2(14) | 表示部门名称,最多由14个字符构成 | |
3 | LOC | VARCHAR2(13) | 表示部门位置,最多由13个字符构成(3个字符一表示一个中文) |
2、emp表:
序号 | 列名称 | 类型 | 描述 |
---|---|---|---|
1 | EMPNO | NUMBER(4) | 表示部门编号,最多由4位数字构成 |
2 | ENAME | VARCHAR2(10) | 表示雇员名称,最多由10个字符构成 |
3 | JOB | VARCHAR2(9) | 表示雇员职位,最多由9个字符构成 |
4 | MGR | NUMBER(4) | 每个雇员的领导编号,最多由4位数字构成 |
5 | HIREDATE | DATE | 雇佣日期,包含日期和时间 |
6 | SAL | NUMBER(7,2) | 基本工资,小数点最多占2位,整数占5位 |
7 | DEPTNO | NUMBER(2) | 表示部门编号,最多由2位数字构成 |
3、工资等级(salgrade)表,分5等,由工资确定等级:
序号 | 列名称 | 类型 | 描述 |
---|---|---|---|
1 | GRADE | NUMBER | 工资等级编号 |
2 | LOSAL | NUMBER | 此等级的最低工资 |
3 | HISAL | NUMBER | 此等级的最高工资 |
4、工资表
序号 | 列名称 | 类型 | 描述 |
---|---|---|---|
1 | ENAME | VARCHAR2(10) | 表示雇员名称,最多由10位数字构成 |
2 | JOB | VARCHAR2(9) | 表示雇员职位,最多由9个字符构成 |
3 | SAL | NUMBER | 表示雇员基本工资 |
4 | COMM | NUMBER | 佣金 |
简单查询
select 属性,属性...... from 表名称;
select distinct 属性,属性...... from 表名称;
以emp表为例,EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,DEPTNO。只查询enamel,job,可以执行命令select enamel,job from emp;我们在仅查询job时select job from emp;会出现重复的职位,此时用distinct可消除,select distinct job from emp;distinct命令只可用在select之后,若用distinct查询ename,job则不会消除,distinct只可消除两列中相同的所对应的横行内容。
四则运算及改名
Oracle可对简单数据列进行四则运算及计算后的改名(在属性后面空格加要改的名称),以emp为例。
select ename,sal*12 income from emp;
常量声明及连接符(||(可使几列变成一列,数据内容连接))
1、如果常量是字符串则用单引号;
2、如果是数字则直接写数字;
3、如果是日期则按标准日历格式书写。
eg:执行
select '编号:'||empno||' 姓名:'||ename||' 工资:'||sal from emp;
-----------------------------------------------------------------------------------------
'编号:'||EMPNO||'姓名:'||ENAME||'工资:'||SAL
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
编号:7369 姓名:SMITH 工资:800
编号:7499 姓名:ALLEN 工资:1600
编号:7521 姓名:WARD 工资:1250
编号:7566 姓名:JONES 工资:2975
编号:7654 姓名:MARTIN 工资:1250
编号:7698 姓名:BLAKE 工资:2850
编号:7782 姓名:CLARK 工资:2450
编号:7788 姓名:SCOTT 工资:3000
编号:7839 姓名:KING 工资:5000
编号:7844 姓名:TURNER 工资:1500
编号:7876 姓名:ADAMS 工资:1100
编号:7900 姓名:JAMES 工资:950
编号:7902 姓名:FORD 工资:3000
编号:7934 姓名:MILLER 工资:1300
统一改名:
select '编号:'||empno||' 姓名:'||ename||' 工资:'||sal 信息 from emp;
-----------------------------------------------------------------------------------------
信息
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
编号:7369 姓名:SMITH 工资:800
编号:7499 姓名:ALLEN 工资:1600
编号:7521 姓名:WARD 工资:1250
编号:7566 姓名:JONES 工资:2975
编号:7654 姓名:MARTIN 工资:1250
编号:7698 姓名:BLAKE 工资:2850
编号:7782 姓名:CLARK 工资:2450
编号:7788 姓名:SCOTT 工资:3000
编号:7839 姓名:KING 工资:5000
编号:7844 姓名:TURNER 工资:1500
编号:7876 姓名:ADAMS 工资:1100
编号:7900 姓名:JAMES 工资:950
编号:7902 姓名:FORD 工资:3000
编号:7934 姓名:MILLER 工资:1300
若无连接符用,
select '编号:',empno,' 姓名:',ename,' 工资:',sal from emp;
---------------------------------------------------------------------------------
'编号:' EMPNO '姓名:' ENAME '工资:' SAL
------------------ ---------- -------------------- -------------------- -------------------- ----------
编号: 7369 姓名: SMITH 工资: 800
编号: 7499 姓名: ALLEN 工资: 1600
编号: 7521 姓名: WARD 工资: 1250
编号: 7566 姓名: JONES 工资: 2975
编号: 7654 姓名: MARTIN 工资: 1250
编号: 7698 姓名: BLAKE 工资: 2850
编号: 7782 姓名: CLARK 工资: 2450
编号: 7788 姓名: SCOTT 工资: 3000
编号: 7839 姓名: KING 工资: 5000
编号: 7844 姓名: TURNER 工资: 1500
编号: 7876 姓名: ADAMS 工资: 1100
编号: 7900 姓名: JAMES 工资: 950
编号: 7902 姓名: FORD 工资: 3000
编号: 7934 姓名: MILLER 工资: 1300
限定查询
WHERE筛选行而SELECT筛选列。
关系运算符
<,>,<=,>=,!=(<>)。
select *from emp where sal>1500;
----------------------------------------------
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
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
7902 FORD ANALYST 7566 03-12月-81 3000 20
select *from emp where ename='SMITH';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
---------------------------------------------------------------------------------------------------
select *from emp where sal=1500;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
Oracle中字符和数字都可用 = 连接
select *from emp where job !='SALESMAN';
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
逻辑运算符
AND OR NOT
SELECT *FROM emp where sal>1500 and sal<3000;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
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
SELECT *FROM emp where sal>1500 or job='CLECK';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
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
7902 FORD ANALYST 7566 03-12月-81 3000 20
SELECT *FROM emp where sal>1500;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
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
7902 FORD ANALYST 7566 03-12月-81 3000 20
已选择7行。
SQL> SELECT *FROM emp where NOT sal<=1500;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
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
7902 FORD ANALYST 7566 03-12月-81 3000 20
范围运算符
BETWEEN….AND(包含最大最小值);
SELECT *FROM emp where sal between 1500 and 3000;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
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
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
SELECT *FROM emp where HIREDATE between '01-1月 -81' AND '01-12月 -81';
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
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
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
已选择8行。
空判断
IS NULL ,IS NOT NULL
select *from emp where comm is not null; //select *from emp where not comm is 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
SQL> select *from emp where comm is null;
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
谓词运算
IN NOT IN
SELECT *FROM EMP WHERE DEPTNO=10 AND JOB='MANAGER' or DEPTNO=20 AND JOB='CLERK' OR (JOB NOT IN ('MANAGER','CLERK') AND SAL>=2000);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
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
7902 FORD ANALYST 7566 03-12月-81 3000 20
select *from emp where empno in(7369,7499);
select *from emp where empno = 7369 or empno=7499;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
select *from emp where empno not in(7369,7499);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ---------- -------------- ---------- ---------- ----------
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
NOT IN和NULL
select *from emp where empno in(7369,7499,null);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
//相当于全部查询,查询不为空的数据
select *from emp where empno not in(7369,7499,null);
未选定行
模糊查询
LIKE(任意数据类型都可使用)
NOT LIKE 不在范围内
1、’_’匹配任意一位字符
2、’%’匹配零位、一位、多位字符
select *from emp where ename like '%A%';
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
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
已选择7行。
SQL> select *from emp where ename like 'A%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
SQL> select *from emp where ename like '_A%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7900 JAMES CLERK 7698 03-12月-81 950 30
查询排序(ORDER BY)
1、执行顺序
改名空格,执行','
-----------------------------------------------------------------------
3、SELECT
1、FROM
2、WHERE
4、ORDER BY (DESC ASC)
2、可设置多个字段排序
SELECT *FROM EMP ORDER BY SAL DESC;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
7902 FORD ANALYST 7566 03-12月-81 3000 20
7788 SCOTT ANALYST 7566 19-4月 -87 3000 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
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7369 SMITH CLERK 7902 17-12月-80 800 20
已选择14行。
SQL> SELECT *FROM EMP WHERE JOB='SALESMAN' ORDER BY SAL DESC;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
//首先按照工资降序,若工资相同则按雇佣日期升序
SQL> SELECT *FROM EMP ORDER BY SAL DESC,HIREDATE;
SELECT *FROM EMP ORDER BY SAL DESC,HIREDATE ASC;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
7902 FORD ANALYST 7566 03-12月-81 3000 20
7788 SCOTT ANALYST 7566 19-4月 -87 3000 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
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7369 SMITH CLERK 7902 17-12月-80 800 20
3、order by(只有它可以使用)可以使用select定义的别名而where不可以,注意执行顺序
select empno,ename,sal income from emp order by sal;
EMPNO ENAME INCOME
---------- -------------------- ----------
7369 SMITH 800
7900 JAMES 950
7876 ADAMS 1100
7521 WARD 1250
7654 MARTIN 1250
7934 MILLER 1300
7844 TURNER 1500
7499 ALLEN 1600
7782 CLARK 2450
7698 BLAKE 2850
7566 JONES 2975
7788 SCOTT 3000
7902 FORD 3000
7839 KING 5000
4、子句
2、select empno,ename,sal income //select子句
1、from emp //from子句
3、order by sal; //order by子句