sql基本命令

继续sql命令的学习
之前因为设定了系统环境变量PATH,所以这里可以直接进入数据库,用这个命令:

sqlplus  / as sysdba

如果不是配置了系统PATH让系统自己寻找路径,那么我们需要自己先要进入到要使用数据库的目录下,我们需要先切换到oracle用户下,

su - oracle

输入下面一系列命令找到数据库目录。

cd dbs
cd $ORACLE_HOME
cd rdbms/admin

找到utlsampl.sql这个文件,我们需要执行它,

sqlplus / as sysdba
startup

启动数据库后,at utls.sql这个文件,

@utlsampl.sql

输入完这个命令,数据库会推出,再进一次sql,这个文件就会加载进去。此时,数据库就可以正常使用了。

进入学习sql命令:

select输出ename,empno,deptno,job这四列,where是将没用的信息过滤掉,之筛选我们需要的数据。下面这条命令就是只输出部门编号为10的部门,部门下员工的信息就输出出来了。

SQL> select ename , empno , deptno , job   
  2  from emp
  3  where deptno=10;

ENAME           EMPNO     DEPTNO JOB
---------- ---------- ---------- ---------
CLARK            7782         10 MANAGER
KING             7839         10 PRESIDENT
MILLER           7934         10 CLERK

我们把"KING"筛选出来,那么king的基本信息就会被输出。ename是输出名字,所以要加单引号“‘’”,名字和字符都需要用单引号,数字不需要单引号。

SQL> select ename , empno , deptno , job
  2  from emp
  3  where ename='KING';

ENAME           EMPNO     DEPTNO JOB
---------- ---------- ---------- ---------
KING             7839         10 PRESIDENT

hiredate是要输出日期,也要加单引号。日期格式“DD-MM-RR”,RR是输出年代,并不是整个年的全称,就只输出后两位。

SQL>  select ename , empno , deptno , job , hiredate 
  2  from emp
  3  where hiredate='19-APRIL-87'
  4  ;

ENAME           EMPNO     DEPTNO JOB       HIREDATE
---------- ---------- ---------- --------- ---------
SCOTT            7788         20 ANALYST   19-APR-87

SQL> select ename , empno , deptno , job , hiredate
  2  from emp
  3  where hiredate='19-APR-87'; 

ENAME           EMPNO     DEPTNO JOB       HIREDATE
---------- ---------- ---------- --------- ---------
SCOTT            7788         20 ANALYST   19-APR-87

alter session的命令是改变时间格式,现在变成了年月日的输出形式。

SQL> alter session                                 
  2  set nls_date_format='YYYY-MM-DD';

Session altered.

输出在1987年4月19日以后入职的员工信息。

SQL>  select ename , empno , deptno , job , hiredate
  2   from emp
  3   where hiredate>'1987-04-19';

ENAME           EMPNO     DEPTNO JOB       HIREDATE
---------- ---------- ---------- --------- ----------
ADAMS            7876         20 CLERK     1987-05-23

部门编号大于20的部门及员工输出。

SQL> select ename , deptno  
  2  from emp
  3   where deptno>=20;

ENAME          DEPTNO
---------- ----------
SMITH              20
ALLEN              30
WARD               30
JONES              20
MARTIN             30
BLAKE              30
SCOTT              20
TURNER             30
ADAMS              20
JAMES              30
FORD               20

11 rows selected.

between… and…语句表示在两个范围的值之间。部门在10-30之间并且包括10和30。

SQL> select deptno , dname   
  2  from dept  
  3  where deptno between 10 and 30;

    DEPTNO DNAME
---------- --------------
        10 ACCOUNTING
        20 RESEARCH
        30 SALES

in是在组里的所有的值匹配。这个组里包括了Scott,King和Hyc三个人,但是hyc不在上面数据库里,所以在结果里没有hyc的输出结果。而且这里的名字必须大写,如果不大写的话,也不会有值输出。

SQL> select ename , sal
  2  from emp
  3  where ename in ('SCOTT','KING','HYC');

ENAME             SAL
---------- ----------
SCOTT            3000
KING             5000

输出comm是空值的员工。

SQL> select ename , comm
  2  from emp
  3  where comm is null;

ENAME            COMM
---------- ----------
SMITH
JONES
BLAKE
CLARK
SCOTT
KING
ADAMS
JAMES
FORD
MILLER

10 rows selected.


not是非,这里是过滤掉不是空值的员工,所以有comm的员工会输出出来。

SQL> select ename , sal
  2  from emp
  3  where comm is not null
  4  ;

ENAME             SAL
---------- ----------
ALLEN            1600
WARD             1250
MARTIN           1250
TURNER           1500

用and语句连接两个并列的条件,是要同时符合这两个条件。并且and左右两边颠倒过来也是一样的。

SQL> select ename , deptno , sal , comm , hiredate
  2  from emp
  3   where deptno=30 and sal<3000;

ENAME          DEPTNO        SAL       COMM HIREDATE
---------- ---------- ---------- ---------- ----------
ALLEN              30       1600        300 1981-02-20
WARD               30       1250        500 1981-02-22
MARTIN             30       1250       1400 1981-09-28
BLAKE              30       2850            1981-05-01
TURNER             30       1500          0 1981-09-08
JAMES              30        950            1981-12-03

6 rows selected.

or表示或的关系,要么是条件一要么是条件二

SQL>  select ename , deptno , sal , comm , hiredate
  2  from emp              
  3  where sal<3000 or deptno=30;

ENAME          DEPTNO        SAL       COMM HIREDATE
---------- ---------- ---------- ---------- ----------
SMITH              20        800            1980-12-17
ALLEN              30       1600        300 1981-02-20
WARD               30       1250        500 1981-02-22
JONES              20       2975            1981-04-02
MARTIN             30       1250       1400 1981-09-28
BLAKE              30       2850            1981-05-01
CLARK              10       2450            1981-06-09
TURNER             30       1500          0 1981-09-08
ADAMS              20       1100            1987-05-23
JAMES              30        950            1981-12-03
MILLER             10       1300            1982-01-23

11 rows selected.

用distinct去重,只把不同的工作输出出来。

SQL> select distinct job
  2  from emp;

JOB
---------
CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST

输出job是analyst并且sal大于3000,以及job是manager的。

SQL> select ename , deptno , sal , comm , hiredate
  2  from emp
  3  where job='ANALYST' and sal>3000 or job='MANAGER';

ENAME          DEPTNO        SAL       COMM HIREDATE
---------- ---------- ---------- ---------- ----------
JONES              20       2975            1981-04-02
BLAKE              30       2850            1981-05-01
CLARK              10       2450            1981-06-09

order by是按顺序排列,asdc是从小到大排列,dscb是从大到小排列,默认是从小到大。

SQL> select ename , sal
  2  from emp
  3  order by sal;

ENAME             SAL
---------- ----------
SMITH             800
JAMES             950
ADAMS            1100
WARD             1250
MARTIN           1250
MILLER           1300
TURNER           1500
ALLEN            1600
CLARK            2450
BLAKE            2850
JONES            2975

ENAME             SAL
---------- ----------
SCOTT            3000
FORD             3000
KING             5000

14 rows selected.

按姓名 的字母顺序进行排列。

SQL> select ename , sal
  2  from emp
  3  order by ename;

ENAME             SAL
---------- ----------
ADAMS            1100
ALLEN            1600
BLAKE            2850
CLARK            2450
FORD             3000
JAMES             950
JONES            2975
KING             5000
MARTIN           1250
MILLER           1300
SCOTT            3000

ENAME             SAL
---------- ----------
SMITH             800
TURNER           1500
WARD             1250

14 rows selected.

将部门编号和工资升序排列。输出结果是部门从小到达,每个部门的工资从小到大。如果输出三个列,order这个命令就无法排列,只会把第一个排序列出。

SQL> select ename , sal , deptno 
  2  from emp
  3  order by deptno ,sal;

ENAME             SAL     DEPTNO
---------- ---------- ----------
MILLER           1300         10
CLARK            2450         10
KING             5000         10
SMITH             800         20
ADAMS            1100         20
JONES            2975         20
SCOTT            3000         20
FORD             3000         20
JAMES             950         30
MARTIN           1250         30
WARD             1250         30

ENAME             SAL     DEPTNO
---------- ---------- ----------
TURNER           1500         30
ALLEN            1600         30
BLAKE            2850         30

14 rows selected.

order by 3是查找上边select后边的第三列,那么就是查找deptno。

SQL> select ename , sal , deptno 
  2  from emp
  3  order by 3;

ENAME             SAL     DEPTNO
---------- ---------- ----------
CLARK            2450         10
KING             5000         10
MILLER           1300         10
JONES            2975         20
FORD             3000         20
ADAMS            1100         20
SMITH             800         20
SCOTT            3000         20
WARD             1250         30
TURNER           1500         30
ALLEN            1600         30

ENAME             SAL     DEPTNO
---------- ---------- ----------
JAMES             950         30
BLAKE            2850         30
MARTIN           1250         30

14 rows selected.

优先级运算,最先算加减,后算比较大小,所以2000+1000会被先计算出来,然后结果是sal>3000的结果。

SQL> select ename , sal , deptno 
  2  from emp
  3  where sal>2000+1000;

ENAME             SAL     DEPTNO
---------- ---------- ----------
KING             5000         10

这个命令是将表格以横200纵200的格式列表。可以横向展开所有的数据,就不会因为格满而跑到下一行。

SQL> set pages 200 lines 200

empno=数字,可以直接用数字去查询员工信息。

QL> select ename , empno , sal
  2  from emp
  3  where empno=7788;

ENAME           EMPNO        SAL
---------- ---------- ----------
SCOTT            7788       3000

*/是重复上一条成功执行的命令。
*l是查询上条命令

SQL> select ename , empno , sal
  2  from emp
  3  where empno=7788;
ENAME           EMPNO        SAL
---------- ---------- ----------
SCOTT            7788       3000

SQL> /

ENAME           EMPNO        SAL
---------- ---------- ----------
SCOTT            7788       3000

SQL> l
  1  select ename , empno , sal
  2  from emp
  3* where empno=7788

输入 n a m e 命 令 , 既 可 以 自 动 查 询 名 字 , 只 要 把 想 要 查 找 的 员 工 姓 名 输 入 即 可 。 但 要 注 意 的 是 因 为 还 是 名 字 , 所 以 要 注 意 单 引 号 。 如 果 ′ name命令,既可以自动查询名字,只要把想要查找的员工姓名输入即可。但要注意的是因为还是名字,所以要注意单引号。如果' namename’外加引号,下边直接输名字;如果$name外边没加引号,后面输入名字时就要加上,否则没有输出结果。

SQL> select ename , empno , sal
  2  from emp
  3  where ename='&name';
Enter value for name: KING
old   3: where ename='&name'
new   3: where ename='KING'

ENAME           EMPNO        SAL
---------- ---------- ----------
KING             7839       5000

我们把所有四行都用$加变量,那么下边就可以输入下边四个变量,可以按自己想查找的条件一次调用。

SQL>  select &col
  2  from &tab
  3  where deptno=&no
  4   order by ℴ
Enter value for col: ename ,sal*12,deptno
old   1:  select &col
new   1:  select ename ,sal*12,deptno
Enter value for tab: emp
old   2: from &tab
new   2: from emp
Enter value for no: 20
old   3: where deptno=&no
new   3: where deptno=20
Enter value for order: 2
old   4:  order by &order
new   4:  order by 2

ENAME          SAL*12     DEPTNO
---------- ---------- ----------
SMITH            9600         20
ADAMS           13200         20
JONES           35700         20
FORD            36000         20
SCOTT           36000         20


你可能感兴趣的:(IT数据分析)