Oracle入门学习第一天

Oracle第一天

一学习目标

  1. Oracle介绍
  2. Oracle安装
  3. Oracle体系结构
  4. 基本查询
  5. 条件查询
  6. 单行函数
  7. 多行函数

二、Oracle介绍

mysql关系型的数据库 , 表于表的关系:外键 , 端口号:3306

redis:非关系型数据库 ,key - value , 端口号:6379

Oracle :关系型的数据库 , 端口号:1521

     收费:19万左右, 每年交服务费

      效率高, 安全

Oracle的版本:8I 9I 10G 11G 12C

职位:DBA(数据库管理员) , javaEE开发工程师

三、Oracle安装

1) 安装虚拟机: 解压到没有中文的路径之下

解压到没有中文的路径下  -- xxx.vmx 文件,双击打开

2) 在虚拟中安装oracle数据库

数据库的口令: orcl, 此口令是为 sys ,system

3)配置虚拟网卡:必须配置静态的ip地址

选择是仅主机模式, 如果改变了ip地址:修改配置文件,重启服务()

4)安装plsql工具

安装路径绝对不能有:小括号,空格,特殊符号

5) 解决中文乱码的问题

-- 环境变量的名称: NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
-- 查询服务端的密码

select userenv('language') from dual;

四、Oracle体系结构

数据库:只有一个数据库

实例:后台运行的一个进程

表空间:逻辑存储单位

数据文件:物理存储单位

用户:面向用户管理,都会对应一个表空间,向表空间中添加数据,都是保存到数据文件中

五、介绍scott用户和scott用户下的表

Oracle公司(甲骨文):埃里森, 软件开发实验室

scott的第一位程序员, pointbase

scott用户,密码:tiger

– 解锁用户

– alter user 用户名 account unlock;

alter user scott account unlock

— 重置密码

– alter user 用户名 identified by 密码;

alter user scott identified by tiger;

六、基本查询

-- dual :是一张虚表, 为了完善查询的语法结构,只有一行一列
   -- 别名:如果是数字开头或者纯数字必须加双引号
   -- 字符串使用单引号,别名使用双引号
   select 
   length('abc') "长度",
   length('abc') as "长度",
   length('abc') as 长度, 
   length('abc') as '123'   from dual;
   -- 消除重复的记录
   select distinct job from emp;
   -- 四则运算:+ - *  /      -- 连接符号:||
   select concat('a' , 'b') from dual;
   select concat(concat('a' , 'b'),'c') from dual;
   select 'a' || 'b'|| 'c' from dual;
   select '1' + 1 from dual;
   -- 查询员工的年薪: nvl(comm,0)
   select sal * 12 + nvl(comm,0),nvl(comm,0) from emp;

七、条件查询

-- 查询有奖金的员工
   select * from emp where comm > 0;

   select * from emp where comm is not null and comm != 0;
   -- 查询没有奖金的员工
   select * from emp where comm is null or comm = 0;
   -- not 取反
   select * from emp where not(comm is not null and comm != 0);

   -- 查询1981年入职的员工
   select * from emp where to_char(hiredate,'yyyy') = '1981';

   select * from emp where hiredate >= to_date('1981-01-01','yyyy-mm-dd')
                       and hiredate <= to_date('1981-12-31','yyyy-mm-dd');

   select * from emp where hiredate between  to_date('1981-01-01','yyyy-mm-dd')  
                                         and to_date('1981-12-31','yyyy-mm-dd') ; 
                       --- 函数:to_char  to_date
    -- to_char (p1,p2):将日期转换为字符串
                 -- p1:要转换的日期
                 -- p2:转换的格式
      select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss day') from dual;

    -- to_date(p1,p2):将字符串转换为日期
                 -- p1:要转换的字符串
                 -- p2:转换的格式        
     select '2018-07-06 11:11:11' , 
     to_date('2018-07-06 11:11:11' ,'yyyy-mm-dd hh24:mi:ss') from dual;
     -- upper: 转换为大写 lower :转换为小写
     select * from emp where upper(ename) like upper('%M%');
     -- 排序
   -- 查询所有员工按照工资升序
   select * from emp order by sal asc;
   -- 查询所有员工按照工资降序
   select * from emp order by sal desc;
   -- 查询所有员工按照奖金升序排序(null值放到前面)
   select * from emp order by nvl(comm,0) asc;

   select * from emp order by comm asc nulls first; 
   -- 查询所有员工按照奖金降序排序(null值放到后面) 
   select * from emp order by comm desc nulls last; 

八、单行函数

 -- 单行函数
   select length(ename) from emp;
   --字符串函数
      -- concat
      -- length
      -- substr(str, p1 ,p2): str:截取的字符串 ,p1:开始的索引 ,p2:截取的长度
         -- 起始索引用0和1是一样的
      select substr('abcjavadef' , 4, 4 ) from dual;
      select substr('abcjavadef' , 1, 3 ) from dual;
      select substr('abcjavadef' , 0, 3 ) from dual;
      -- replace(str ,p1,p2) : 替换  str:要替换的字符串 p1:被替换的 p2:替换成的
      select replace('abcdefa' , 'a' ,'z') from dual;
      -- trim() 去除两侧的空白
      select trim('   abc    '),ltrim('   abc    '),rtrim('   abc    ') from dual;
      -- upper lower

   --日期函数
      -- 两个日期相减 == 天数
      select sysdate - hiredate from emp;
      -- 周数
      select (sysdate - hiredate) / 7 from emp;
      -- 月数:months_between
      select months_between(sysdate , hiredate) from emp;
      -- 修改月份: add_months
      select add_months(sysdate ,-12) from dual;
   --数值函数
      -- round () 四舍五入
      select round(2.666) from dual;
      -- trunc() 截取
      select trunc(2.666,1) from dual;
      -- mod() 模运算符(求余)
      select mod(3,10) from dual;
   --转换函数
      -- to_char to_date
      -- to_char to_number
      select 1 ,to_char(1),'1',to_number('1') from dual;
      select 1 + '1' from dual;
   --通用函数
      -- nvl

九、多行函数

 -- 多行函数(聚合函数,分组函数)(count, avg, max ,min ,sum)
   -- 分组后能显示的列:分组函数和在group by语句中出现的列
   select 
      count(1),deptno, avg(sal),max(sal) ,min(sal) ,sum(sal)
   from emp group by deptno;

   -- 查询大于4个人的部门
   -- 在where中不能加分组函数,where 必须放到group by前面
   -- having 在分组的基础上进一步的筛选
   select count(1),deptno from emp  group by deptno having count(1) > 4;

练习

1.  查询和smith相同部门的员工姓名和雇用日期
    select ename,hiredate from emp where deptno=(select deptno from emp where ename=upper('smith'))
2.  查询工资比公司平均工资高的员工的员工号,姓名和工资。
     select empno,ename,sal from emp where sal> (select avg(sal) from emp)

3.  查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
  select empno,ename,sal,deptno from emp where sal>(select avg(sal) from    emp where deptno=20)and deptno!=20

4.  查询和姓名中包含字母U的员工在相同部门的员工的员工号和姓名
  select empno,ename from emp where deptno=(select deptno from emp where    ename like '%U%')

5. 查询领导是King的员工姓名和工资
select ename,sal from emp where mgr= (select empno from emp where ename='KING')

你可能感兴趣的:(oracle)