oracle命令行登录 + 简单命令 + 基础查询 + 单行函数 (学习笔记)

最近在学习oracle,看了一些博客, 对oracle的基本操作有所了解,感觉有些博客很不错,特别是基本的一些操作,我就有点不要脸┭┮﹏┭┮,捡了现成的,转载过来\(^o^)/

原文地址:https://blog.csdn.net/cinderella___/article/details/80632927

使用oracle之前,先打开两个服务。计算机-》管理-》服务

OracleOraDb11g_home1TNSListener、OracleServiceORCL
打开
 · 运行——》cmd——》sqlplus
· win+R -> sqlplus

格式化指令 (命令不区分大小写)
 ·  set pagesize 30;//设置每页长度。
 ·  set linesize 300;//设置每行长度。

oracle命令创建记事本文件:  ed+空格+文件名
·  (如果不写后缀,默认为*.sql    找不到文件时就创建新的*.sql文件)  文件默认的路径:C:\Users\Administrator
·  保存文件后必须关闭才可以继续使用。
·  随后要想执行文件中的命令,使用“@文件名称”(默认找到*.sql的后缀)

用户切换语法:"  conn 用户名/密码 [as sysdba]  "
   ·  如果是使用sys登录,必须加上as sysdba,否则无法登录。
共有四个用户    ·超级管理员: sys/change_on_install
              ·普通管理员: system/manager
             ·普通用户:    scott/tiger
             ·大数据用户 :sh/sh

" show user  "命令,输出当前的登录的管理用户。emp表属于scott用户.
严格来讲,emp表的名称是“模式名称.表名称”,(用户名.表名称),即:scott.emp

在sqlplus命令里面,除了可以使用Oracle自己定义的命令之外,也可以使用host指令调用本机操作系统命令
·调用"echo"  命令:"host echo helloworld"
·调用"copy"  命令:"copy 源文件路径 拷贝文件路径 " 如: host copy e:\a.txt e:\b.txt

·DML:数据操作语言。主要是数据库的查询与更新。开发中使用的语言。
·DDL:数据定义语言。主要是指对象的创建。开发前的设计。
·DCL:数据控制语言。主要进行权限的管理操作。系统人员的工作。

select* from tab; 查询一个用户下所有的数据表。
desc 表名称;  查询一个表的结构。
根据每一列单独进行格式化操作。
例如: · col ename for a10;
          · col job for a10;


 简单查询基本语法:(首先执行的是from子句,确定数据来源)
    select [distinct]* | 列名称 [别名],列名称 [别名],...
    from 表名称 [别名];
eg:   select job,empno from emp;
("*"指的是全部记录,所有的行和列,distinct关键字用于消除重复内容,distinct只能放在select后面)
(如果查询的数据是多个列,只有当多个列的数据都相同的情况下才可以消除)

可以对查询的结果进行四则运算,eg:select sal*12 from emp;
加别名:select sal*12 income from emp;(别名不建议使用中文)

在使用SELECT子句查询数据的时候,除了查询还可以设置一些常量:
    ·如果常量是字符串,使用单引号声明,例如'hello',别名不需要引号:
    ·如果常量是数字,则直接编写;
    ·如果常量是日期,则按照日期风格格式编写,"xx日-xx月-xx年".
    ·eg: select  '雇员'ename from emp;
select子句中使用||可将两个列合并为一个列进行显示:
    ·eg1: select empno||ename from emp;
    ·eg2; select '雇员编号:'|| empno || ',姓名:'|| ename from emp;

在Oracle数据库中,所有的数据是要区分大小写的,
    ·eg:  select * from emp where ename='SMITH';和小写的smith不一样,只有大写有查询结果。
空的操作只能是IS NULL 或者IS NOT NULL;
    ·eg: 查询所有领取佣金的雇员信息(佣金存在,不为空)
    select * from emp where comm is not null;
    select * from emp where not comm is null;
select句子要落后与where子句执行
    ·关系运算符:>、<、>=、<>(!=);
    ·逻辑运算符:AND、OR、NOT;
    ·范围运算符:BETWEEN...AND;
    ·谓词判断:IN、NOT IN;
    ·空判断:IS NULL、IS NOT NULL;
    ·模糊查询:LIKE;
使用LIKE模糊查询时,如果不设置关键字(%%"),则表示查询全部。
LIKE可以应用在各种数据类型上,不一定是字符串。
    ·eg: select * from emp where sal like '%9%';
使用NOT IN 查询时,查询范围里面不允许出现NULL,否则不会有任何查询结果。
    ·  eg: select * from emp where empno not in(7369,7788,null); 结果未选定行
SECLECT子句落后于WHERE子句执行,所以在SELECT定义的别名,无法在WHERE中使用。

在整个的SQL查询结构之中,只有ORDER BY可以调用SELECT中定义的别名。

ORDER BY 子句是在SELECT子句之后执行,则order by可以使用在SELECT之中定义的别名:
    eg:  查询每个雇员的编号,姓名,年薪,按照年薪由低到高排序:
      select empno,ename,sal*12 as 年薪 from emp order by 年薪;
    ·ASC (默认,不写也是ASC):按照升序排列
    ·DESC : 降序。
同时设置多个排序字段:
    按照工资由高到低,如果工资相同,则按照雇佣日期由早到晚:
     ·eg:  SELECT * from emp ORDER BY sal DESC,hiredate ASC; (ASC是默认的)

···字符串函数:
    返回值 函数(参数列表)                                                     函数功能描述
·字符串 UPPER(列 | 字符串)                              将传入的字符串变为大写字母形式
·字符串 LOWER(列 | 字符串)                             将传入的字符串变为小写字母形式
·字符串 INITCAP(列 | 字符串)                            开头首字母大写,其他字母全部小写
·字符串 LENGTH(列 | 字符串)                            取得字符串的长度
·字符串 SUBSTR(列|字符串,开始索引,[长度])      进行字符串的截取,如果没有设置长度,表示从开始索引一直截取到结尾  
·字符串 REPLACE(列|字符串,旧内容,新内容)       将指定字符串数据由新内容替代旧内容

~在Oracle里面,所有额函数如果要进行验证,也必须编写sql语句,为了方便,专门提供了一个dual虚拟表。
eg:    SELECT upper('hello') from dual;
~在程序之中,所有字符串的首字母索引都是0,但是在Oracle里面,所有字符串首字母索引设置为1,如果写的0,那么也会按照1的方式进行处理。
~范例:取每位雇员姓名的后三位字母:SELECT ename,substr(ename,-3) FROM emp;
  长度可以设置为负数,表示后面第几位索引,此类设置方式只有Oracle数据库才有。


···数值函数:
    返回值 函数(参数列表)                                                     函数功能描述
·数字 round(列 | 数字 [,小数位])          实现数据的四舍五入.没有设置小数点的保留位数,默认不保留小数位进行进位;设置为负数,表示进行整数位的四舍五入
·数字 trunc(列 | 数字  [,小数位])          实现小数位数据的截取,截取时不进位。
·数字 mod(列 | 数字,列 | 数字)            求模(计算余数)

··日期公式:
    日期 + 数字 = 日期(表示若干天之后的日期)
    日期 - 数字 = 日期(表示若干天之前的日期)
    日期 - 日期 = 数字(天数)
若果直接使用天数来进行年或者月的计算,最终的结果不准确。所以Oacle提供了以下准确计算日期的操作函数:
···日期函数:
    select next_day(sysdate,'星期三') from dual;数功能描述
·日期 add_months(列 | 日期,月数)                        返回在指定日期上增加月数后的日期
·数字 month_between(列 | 日期,列 | 日期)          返回两个日期之间的天数
·日期 last_day(列 | 日期)                                     取得指定日期所在月份的最后一天
·日期 next_day(列 | 日期,'星期X')                         返回下一个指定的一周时间数对应的日期
Oracle里面提供了2个伪列 "sysdate" 和 "systimestamp" 来获得当前的日期。SELECT sysdate from dual;
eg:    查询所有在雇佣所在月倒数第三天雇佣的雇员信息:
    SELECT empno,hiredate,last_day(hiredate)-2 from emp where hiredate=last_day(hiredate)-2;
 查询当前日期的下一个星期三:select next_day(sysdate,'星期三') from dual;


 ···转换函数:
    返回值 函数(参数列表)                                        函数功能描述
·字符串 to_char(列 | 日期 | 数字,转换格式)          将日期或数字格式化为指定结构的字符串
·日期 to_date(列 | 字符串,转换格式)                    按照指定的转换格式编写字符串或将其变为日期型数据
·数字 to_number(列 | 字符串)                             将字符串变为数字


eg一1:    ·select to_char(sysdate,'yyyy-mm-dd') from dual; 年-月-日
    ·select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;  年-月-日 时:分:秒
    ·select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;表示按照24小时显示
to_char()函数可以实现日期的拆分:·select to_char(sysdate,'yyyy'),to_char(sysdate,'mm'),to_char(sysdate,'dd') from dual;
  : 查询2月份雇佣的雇员:select* from emp where to_char(hiredate,'mm')='02';
      或者select* from emp where to_char(hiredate,'mm')=2; oracle提供有自动转型操作,自动完成类型匹配。
eg一2:    ·select to_char(187816257272672,'L999,999,999,999,999,999') from dual; L表示货币,9表示任意数字。
eg二1:    ·select to_date('1888-12-3','yyyy-mm-dd') from dual;一般意义不大
eg三1:    ·select to_number('1')+to_number('2') from dual;和select '1'+'2' from dual;结果一样,因为Oracle里面有自动转型操作。


···通用函数(Oracle特色函数):
    返回值 函数(参数列表)                                        函数功能描述
·数字 nvl(列 | NULL,默认值)                 如果传入的是null,则使用默认数值处理,否则使用原始数值处理。
·数据类型 decode(列|字符串|数值,比较内容1,显示内容1,比较内容2,显示内容2,...[,默认显示内容])
(设置的内容会与每一个比较内容进行比较,如果内容相同,则使用显示内容进行输出,如果都不相同,则使用最后的默认信息输出)

eg1:    select empno,ename,sal,comm,(sal+nvl(comm,0))*12 as 年薪 from emp;

alter table Student modify Sage int;修改列定义

一次性插入多条记录,直接拷贝多条信息:
insert into SC values(9512101,'c01',90);
insert into SC values(9512101,'c02',86);
insert into SC values(9512101,'c06',null);
insert into SC values(9512102,'c02',78);
insert into SC values(9512102,'c04',66);
insert into SC values(9521102,'c01',82);
insert into SC values(9521102,'c02',75);


delect from myemp where  EMPNO in (
    select myemp.EMPNO
    from myemp join mydept on mydept.DEPTNO = myemp.DEPTNO
    where JOB = 'MANAGER'
    and sal<1000
);
delect from myemp1 where  EMPNO in (select EMPNO from mydept where JOB = 'MANAGER') and sal<1000;

---------------------
作者:Ethiopia1024
来源:CSDN
原文:https://blog.csdn.net/cinderella___/article/details/80632927
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/Angel_guoo/article/details/84798863
今日推荐