一、Oracle用户模式与模式 对象
1.概念
模式就是数据库对象的集合,数据库对象包括表、函数、索引、视图、过程。
2.示例模式scott
SQL> select table_name from user_tables;
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DEPT
EMP
BONUS
SALGRADE
二、简单查询
1.查询所有列
1.1 查询单个表中的所有列
查询当前用户模式下的表
SQL> conn scott/tiger
已连接。
SQL> select * from dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
20 RESEARCH DALLAS
30 SALES CHICAGO
查询其他模式下的表,需要使用模式名.表名指定
SQL> conn system/123456
已连接。
SQL> select * from emp;
select * from emp
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from scott.emp;
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
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 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
已选择 10 行。
1.2 查询多个表中的所有列
表名间使用,隔开
SQL> select * from dept,salgrade;
DEPTNO DNAME LOC GRADE LOSAL HISAL
---------- ---------------------------- -------------------------- ---------- ---------- ----------
10 ACCOUNTING NEW YORK 2 1201 1400
10 ACCOUNTING NEW YORK 3 1401 2000
10 ACCOUNTING NEW YORK 4 2001 3000
40 OPERATIONS BOSTON 2 1201 1400
40 OPERATIONS BOSTON 3 1401 2000
40 OPERATIONS BOSTON 4 2001 3000
20 RESEARCH DALLAS 2 1201 1400
20 RESEARCH DALLAS 3 1401 2000
20 RESEARCH DALLAS 4 2001 3000
30 SALES CHICAGO 2 1201 1400
30 SALES CHICAGO 3 1401 2000
30 SALES CHICAGO 4 2001 3000
已选择 12 行。
2.查询特定列
SQL> select losal,grade from salgrade;
LOSAL GRADE
---------- ----------
1201 2
1401 3
2001 4
--注:忘记表中有哪些字段,可以使用desc查询
伪列
概念:伪列是一种数据类型,用于唯一标识一条记录,是基于64位编码的18个字符。不是真实存在于数据表中的列,所以被称为伪列,可以查询 但不能增删改。
作用:
①以最快的方式访问表中的一行
②能显示表的行是如何存储的
③作为表中唯一标识
常用的伪列:
rowid,数据库中每一行都有一个行地址,rowid伪列返回该行地址。可以使用rowid值来定位表中的一行。通常情况下,rowid值可以唯一标识数据库的一行。
rownum,查询结果返回的每一行,对应都有一个rownum伪列数值代表的次序。比如返回结果的第一行对应的rownum值为1,第二行为2.通过使用rownum伪列,可以限制查询返回的行数。
SQL> select rowid,rownum from emp;
ROWID ROWNUM
------------------ ----------
AAAR2NAAHAAAAFrAAA 1
AAAR2NAAHAAAAFrAAB 2
AAAR2NAAHAAAAFrAAC 3
AAAR2NAAHAAAAFrAAD 4
AAAR2NAAHAAAAFrAAE 5
AAAR2NAAHAAAAFrAAF 6
AAAR2NAAHAAAAFrAAG 7
AAAR2NAAHAAAAFrAAH 8
AAAR2NAAHAAAAFrAAI 9
AAAR2NAAHAAAAFrAAJ 10
已选择 10 行。
SQL> desc emp
名称
是否为空? 类型
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- --------------------------------------------------------------------------------------------------------------------
EMPNO
NOT NULL NUMBER(4)
ENAME
VARCHAR2(10)
JOB
VARCHAR2(9)
MGR
NUMBER(4)
HIREDATE
DATE
SAL
NUMBER(7,2)
COMM
NUMBER(7,2)
DEPTNO
NUMBER(2)
SQL> select * from emp where rownum<=5;
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
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
3.查询日期列
日期列有多种显示格式:简体中文、美国英语、
3.1 以简体中文显示日期结果
=>=>通过设置会话的nls_date_language参数来实现
3.2 以美国英语显示日期结果
=>通过设置会话的nls_date_language参数来实现
SQL> alter session set nls_date_language='AMERICAN';
会话已更改。
SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- ------------ ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 13-JUL-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
已选择 10 行。
3.3 以特定格式显示日期结果
比如xxxx年xx月xx日,xxxx-xx-xx等
=>通过设置会话的nls_date_format参数来实现
①格式化为xxxx年xx月xx日
SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY''年''MM''月''DD''日';
②格式化为xxxx-xx-xx
SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY''-''MM''-''DD''-';
会话已更改。
3.4 to_char()自定义日期格式
语法:TO_CHAR(日期|数字|列,转换格式)
eg:使用to_char()将系统日期转换为YYYY-MM-DD格式
SQL> select to_char(sysdate,'YYYY-MM-DD') 转换后日期 from dual;
转换后日期
--------------------
2025-03-14
4.排除重复列
明日再来~