Oracle入门基础(一)一一基本查询
阅读原文时间:2023年07月09日阅读:2
SQL> --当前用户
SQL> show user

SQL>  --当前用户下的表
SQL> select * from tab;
TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
DEPT                           TABLE
EMP                            TABLE
BONUS                          TABLE
SALGRADE                       TABLE                                            

SQL> --员工表的结构
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> --清屏
SQL> host cls

SQL> --查询所有的员工信息
SQL> select * from 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 

SQL> --设置行宽
SQL> show linesize
linesize 80
SQL> set linesize 120
SQL> --设置列宽
SQL> col ename for a8
SQL> col sal for 9999

SQL> --通过列名
SQL> select empno,ename,job,mgr,hiredate,sal,comm,deptno from 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                  

SQL> SQL优化的原则:
SQL> 1。尽量使用列名

SQL> --查询员工信息:员工号 姓名 月薪 年薪
SQL> select empno,ename,sal,sal*12  from emp;
     EMPNO ENAME      SAL     SAL*12
      7369 SMITH      800       9600
      7499 ALLEN     1600      19200                                                                                    

SQL> --查询员工信息:员工号 姓名 月薪 年薪 奖金 年收入
SQL> select empno,ename,sal,sal*12,comm,sal*12+comm from emp;
     EMPNO ENAME      SAL     SAL*12       COMM SAL*12+COMM
      7369 SMITH      800       9600
      7499 ALLEN     1600      19200        300       19500                                                             

SQL> /*
SQL> SQL中的null
SQL> 1、包含null的表达式都为null
SQL> 2、null永远!=null
SQL> */
SQL> --nvl(a,b)   nvl2
SQL> select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0)   from emp;
     EMPNO ENAME      SAL     SAL*12       COMM SAL*12+NVL(COMM,0)
      7369 SMITH      800       9600                          9600
      7499 ALLEN     1600      19200        300              19500                                                      

SQL> --2、null永远!=null
SQL> --查询奖金为null的员工
SQL> select *  from emp  where comm=null;
未选定行

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
SQL> host cls

SQL> select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0)  from emp;
     EMPNO ENAME      SAL     SAL*12       COMM SAL*12+NVL(COMM,0)
      7369 SMITH      800       9600                          9600
      7499 ALLEN     1600      19200        300              19500                                                      

SQL> --distinct 去掉重复记录
SQL> select distinct deptno from emp;
    DEPTNO
        30
        20
        10                                                                                                              

SQL> select distinct deptno,job from emp;
    DEPTNO JOB
        20 CLERK
        30 SALESMAN
        20 MANAGER
        30 CLERK
        10 PRESIDENT
        30 MANAGER
        10 CLERK
        10 MANAGER
        20 ANALYST
SQL> --distinct作用于后面所有的列

SQL> --连接符 ||
SQL> --concat函数
SQL> select concat('Hello','  World');
select concat('Hello','  World')
                               *
第 1 行出现错误:
ORA-00923: 未找到要求的 FROM 关键字 

SQL> select concat('Hello','  World') from emp;

CONCAT('HELL
------------
Hello  World
Hello  World                                                                                                            

SQL> select 3+2 from dual;
       3+2
         5                                                                                                              

SQL> --dual表:伪表
SQL> --伪列
SQL> select 'Hello'||'  World' 字符串 from dual;

字符串
------------
Hello  World                                                                                                            

SQL> --查询员工信息:***的薪水是****
SQL> select ename||'的薪水是'||sal 信息 from emp;

信息
SMITH的薪水是800
ALLEN的薪水是1600