Oracle检索数据

发布于:2025-03-15 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、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.排除重复列

明日再来~

5.带有表达式的SELECT子句

6.为列指定别名

7.处理NULL

8.连接字符串