作业:

1.  显示员工的last_name和对应的部门名称, 要求, 把不存在部门编号的员工也给查询到 :

题1的前置条件: 
        公司的业务需要 , 把id为25的员工 分配到一个新的项目组中, 部门名称待定!

update s_emp set dept_id=null where id=25;
        commit;
        select last_name,name from s_emp e,s_dept d where e.dept_id=d.id(+);

2.  显示每个部门的名称 和 对应的地区的名字 , 没有地区编号的部门也要显示

1.  s_dept表中的 name
    2.  s_region表中的name

题2的前置条件:

公司业务需要, 增加了新的部门, 但是还没确定办公地点 !

insert into s_dept values(250,'zhiqiang1',null);
        insert into s_dept values(251,'zhiqiang2',null);
        commit;

select d.id, d.name,r.name from s_dept d,s_region r where d.region_id=r.id(+);

3.  显示每个员工的工资 和 对应的工资级别 , 超出工资级别范围的 也要显示出来

工资表: salgrade

老板觉得自己工资太低了,  都不够每天泡个脚的 , 给自己涨了工资 涨到了66666, 
    给自己的小秘书涨到了8888

update s_emp set salary=66666 where id=1;
    update s_emp set salary=8888 where id=24;
    commit;

在进行外连接时, 如果进行了between (区间)进行比较 , 区间的两边都要添加(+)

between losal(+) and hisal(+);

select salary,grade from s_emp,salgrade where salary between losal(+) and hisal(+);
组函数

特点:

对于一组数据处理完毕后, 只返回一个结果 .  
    要求在查询时, 字段产生的结果要一一对应 !
    组函数对于null的处理是忽略

常用的组函数:

count   : 统计数据的数量
    max     : 统计一组数据中的最大值
    min     : 统计一组数据中的最小值
    sum     : 统计一组数据的和
    avg     : 计算一组数据的平均值

1.  求出s_emp表格中存在几个员工?

select count(*) from s_emp;

2.  求出s_emp表中最高的工资

select max(salary) from s_emp;

3.  求出s_emp表格中的最低工资

select min(salary) from s_emp;

4.  求出员工的工资总和

select sum(salary) from s_emp;

5.  排重后再使用组函数求和

select sum(distinct salary) from s_emp;

6.  求出所有员工的工资平均值

select avg(salary) from s_emp;

7.  求出所有员工的提成的平均值

select avg(commission_pct) from s_emp;  //得出的结果不对 .

select sum(commission_pct)/count(*) from s_emp;
软件连接失败network adapter

服务未启动

OracleXETNSListener服务未启动的原因:

1.  防火墙 / 杀毒软件 阻止了监听服务器的启动

2.  服务的配置文件产生错误(安装数据库以后, 更改了计算机名称)

解决方案: 
        重装
group by having分组子句

格式: ...group by 分组标准 having 组中的数据过滤条件

限制: 在带有分组的查询语句中 ,select后跟随的字段, 要么是分组标准字段,要么时经过组函数处理的字段 !

select 语句 完整格式: 
    select 字段 from 表名 [where 条件] [group by 分组标准 [having 过滤条件]] [order by 排序字段 排序规则];

select 子句执行顺序: 
    from子句-->where子句-->group by-->having-->select-->order by
where与having条件的区别:

where 对于当前查询的表格中的所有数据进行过滤 .

having: 对于分组以后的数据进行过滤

where过滤在having之前
-   按照部门的编号进行员工的分组,  统计每个部门的人数

select dept_id,count(*) from s_emp group by dept_id;

-   按照部门的编号进行员工的分组, 统计每个部门的人数 ,要求 ,部门人数低于3的不显示此部门

select dept_id,count(*) from s_emp group by dept_id having count(*)>2;

-   按照部门编号分组,显示部门的编号, 平均工资,为了公司的数据看起来漂亮, 只显示平均工资大于1200的部门 .
    select dept_id,avg(salary) from s_emp group by dept_id having avg(salary)>1200;

-   按照部门编号分组 ,显示部门的人数, 部门的编号 部门的名字

select count(*),dept_id,min(name) from s_emp e,s_dept d where e.dept_id=d.id group by dept_id;

count(*)--存在12个count
    dept_id--存在12个dept_id
    max(name)   --  存在12个name
子查询

概念: 把一个select语句的结果 , 当作另一个select语句的一部分 .

每一个select语句 就类似存在于内存中的一个表 .  而子查询就是查询一个已经存在的结果集 !

例如:  之前我们查询员工信息 :

select id,last_name,salary from s_emp;//生成了一个结果集

基于上面的结果, 查询其中id为25的员工

select * from (select id,last_name,salary from s_emp) where id=25;

子查询的语句 , 可以出现的位置:

1.  where条件之后

2.  having条件之后

3.  from子句后, 替换表名.
应用到where条件之后 : 
    把一个select语句的结果, 当作了另一个select语句的where条件

需求: 查询部门id最大的员工信息

1.  先查询出最大的部门id

select max(dept_id) from s_emp;
        2.  根据上面查询的部门id,查询部门的人员信息
        select id,salary,last_name from s_emp where dept_id=(select max(dept_id) from s_emp);

需求: 查询公司所有的领导
        1.  先查询到公司所有的领导id(s_emp的mananger_id字段),并去重
        select distinct manager_id from s_emp where manager_id is not null;
        2.  根据上面查询到的领导的id , 通过in去匹配公司所有的领导
        select id,last_name,salary from s_emp where id in(select distinct manager_id from s_emp where manager_id is not null);
    需求: 查询公司所有的普通员工
        1.  先查询到公司所有的领导id(s_emp的mananger_id字段),并去重
        select distinct manager_id from s_emp where manager_id is not null;
        2.  根据上面查询到的领导的id , 通过not in去匹配公司所有的普通员工
        select id,last_name,salary from s_emp where id not in(select distinct manager_id from s_emp where manager_id is not null);
应用到having之后
    把一个select语句的结果, 当作了另一个select语句的分组 过滤条件

需求:找出部门的平均薪资比32号部门的平均薪资高的部门 ,显示部门的编号与平均薪资

1.  先查找出32号部门的平均薪资
            select avg(salary) from s_emp where dept_id=32;

2.  根据部门进行分组, 计算部门的平均薪资, 分组的过滤条件为, 平均薪资大于上面的查询结果
            select dept_id,avg(salary) from s_emp group by dept_id having avg(salary)>(select avg(salary) from s_emp where dept_id=32);
应用到from之后

把一个select查询语句的结果, 当作一个内容中的二维表

需求: 查询所有的员工的id,last_name,salary, 条件为 薪资大于1200
        select id,last_name,salary from s_emp where salary>1200;
        从上面的结果集中 查询所有的id,条件为id大于15
        select id from (select id,last_name,salary from s_emp where salary>1200) where id>15;
DDL(数据定义语句)

创建一个表格

数据类型:

number  : 数字
    varchar2: 变长字符串
    date    : 日期类型

创建表格的格式:

create table 表名(
    字段名1 数据类型(长度),
    字段名2 数据类型(长度),
    ...
    字段名n 数据类型(长度)
);

练习:

创建一个表格, 
    表名为person
    字段为: 
        -   id  长度为5的number类型
        -   name 长度为10的varchar2类型
        -   age 长度为3的number类型

create table person(
        id number(5),
        name varchar2(10),
        age number(3)
    );

练习2.

创建一个表格,
    表名为dsj13_user
        字段为:
        -   id  长度为5的number类型
        -   username 长度为20的varchar2类型
        -   password 长度为20的varchar2类型

create table dsj13_user(id number(5),username varchar2(20),password varchar2(20));

---------------------------------------------------------------

创建完毕, 使用desc查看一下表结构
删除一个表格

格式: drop table 表名;

练习: 
    删除person表
    drop table person;
    删除dsj13_user表
    drop table dsj13_user;
修改表的结构(了解)

很浪费系统的性能 ,
    1.  将表中的数据 进行备份
    2.  将表中的数据删除, 并将结构修改
    3.  将备份的数据 插入

-   删除表中的字段

格式: alter table 表名 drop column 字段名称;

需求: 删除person表格中的name字段

alter table person drop column name;

-   添加表中的字段

格式: alter table 表名 add 字段名 字段类型(长度);

需求: 向person表中 添加一个name字段 ,类型为varchar2长度为10

alter table person add name varchar2(10);
DML 数据操作语言

所有的dml操作. 都需要结束事务 !

事务: 将一系列的sql语句 看作一个业务, 统一处理 , 要么一起成功, 要么一起回滚!

银行金融系统

志强   1020000

陈凯     6
----------------

5块

1.  将志强余额减5
2.  凯凯的余额加5
3.  提交

转账业务

mysql

-----------
提交事务

commit;
回退事务

rollback;
insert语句 - 向数据库插入数据

1.  全字段添加
    格式: insert into 表名 values(数据列表);

数据列表 : 表示的是一个数据组, 数据的顺序 按照创建表格时的字段顺序传入 ,不同字段的值使用英文逗号隔开

例如:  表格的字段创建顺序如下:

create table person(
            id number(5),
            name varchar2(100),
            age number(8)
        );

我们在对这个表格进行全字段的添加数据时:

insert into person values(id,name,age);

练习:

-   向数据库中的person表格插入如下数据:

1.  编号:10,姓名:张三,年龄:18
            insert into person values(10,'张三',18);
            2.  编号:11,姓名:李四,年龄:28
            insert into person values(11,'李四',28);
            3.  编号:12,姓名:王二,年龄:38
            insert into person values(12,'王二',38);
            4.  编号:13,姓名:麻子,年龄:8
            insert into person values(13,'麻子',8);

commit;
2.  选择字段添加

格式: insert into 表名(字段列表) values(数据列表);
    --  字段列表可以任意排列 , 多个字段名之间使用英文逗号隔开 , 数据列表的顺序, 参照字段列表

练习: 
        -   向数据库中的person表格插入如下数据: 
            1.  编号:20,姓名:待定,年龄:10
            insert into person(age,id) values(10,20);
            2.  编号:21,姓名:待定,年龄:20
            insert into person(age,id) values(20,21);
            3.  编号:22,姓名:待定,年龄:30
            insert into person(age,id) values(30,22);
            4.  编号:23,姓名:待定,年龄:40
            insert into person(age,id) values(40,23);
            commit;

Oracle数据库入门 基础知识day04 火推阳光笔记相关推荐

  1. oracle数据库中基础知识,oracle数据库基础知识

    oracle数据库基础知识 -- End loop --1 declare pnum number(4):=0; begin while pnum < 10 loop dbms_output.p ...

  2. Oracle数据库,基础知识

    1.Oracle的五大约束条件: 1 主键  primary key 2 外键  foreign key, 3 唯一  unique, 4 检测  check 5 非空  not null 实例运用: ...

  3. oracle数据库sql基础知识,Oracle数据库基础知识为内部培训资料.doc

    PAGE 1 课程 IL001100 ORACLE数据库基础知识 ISSUE1.0 开心Java整理 IL001100 ORACLE数据库基础知识 ISSUE1.0 目录 PAGE 1 PAGE 45 ...

  4. SQL与NoSQL数据库入门基础知识详解

    这几年的大数据热潮带动了一激活了一大批hadoop学习爱好者.有自学hadoop的,有报名培训班学习的.所有接触过hadoop的人都知道,单独搭建hadoop里每个组建都需要运行环境.修改配置文件测试 ...

  5. Oracle数据库迁移-基础

    Oracle数据库迁移-基础 作为一个开发人员,数据库知识肯定是需要我们掌握的.但是目前公司的数据库都是有专门的DBA维护的,一般都是给我们一个环境地址,然后我们书写CRUD SQL.而且公司产品要求 ...

  6. 数据库入门理论知识介绍以及编译安装MySql

    数据库入门理论知识介绍以及编译安装MySql 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 1.目前90%以上的公司面临的运维的瓶颈都在后端 最常见的2大瓶颈就是: 1&g ...

  7. Oracle数据库入门到高薪培训教程(从Oracle 11g 到 Oracle 19c)

    一.Oracle数据库入门到高薪培训视频教程(从 Oracle11g 到 Oracle19c) 本套Oracle视频教程学习地址: https://edu.51cto.com/course/18034 ...

  8. SQL入门基础知识详解

    ////// 导读:科学技术的快速发展正在改变我们的社会,也在不经意间改变着未来人们的职业规划.据媒体预测,数据分析将是未来最重要的工作技能之一.或许不久的将来,一家企业中80%的岗位,都需要数据分析 ...

  9. 数据分析必备——SQL入门基础知识

    数据说·梦想季 一直很喜欢一句话:山鸟与鱼不同路,从此山水不相逢.意思就是如果你现在不够优秀,即使遇见了,也不配拥有-...努力是唯一的方向! // 导读:科学技术的快速发展正在改变我们的社会,也在不 ...

最新文章

  1. 深入理解SQL注入绕过WAF和过滤机制
  2. lepus mysql 复制监控_MySQL数据库之CentOS搭建lepus3.8监控MySQL
  3. 在VS2005的工具箱中增加SharePoint的活动
  4. 又是系统时间惹的祸 TreeView
  5. java 缓冲流 刷新_java – 缓冲和刷新Apache Beam流数据
  6. 《王道计算机考研》:应用层
  7. 华为IPD研发项目管理5项精髓
  8. FP-growth算法原理解析
  9. MySQL 插入时,出现‘“Incorrect string value: ‘\\xF0\\x9F\\x98\\x85...‘ for column ‘commens‘ at row 3‘
  10. Allegro更新铜皮方法
  11. 新版淘客订单API【需token】
  12. 传智播客成都中心官网全新改版
  13. maven 多模块项目,打包其中一个项目,Could not find artifact org.javaboy:commons:pom:1.0-SNAPSHOT
  14. java版 设计一个程序, 输入整数l, 求边长为l的正方形面积, 比直径为l的圆形面积大多少.
  15. CStdioFile总结
  16. 皮一皮:听说有个东西叫充气娃娃...
  17. 10款冬季主题颜色分级预设(lut预设)
  18. 双目摄像头立体成像(三)双目摄像头的标定及测距(Ubuntu16.04 + OpenCV)
  19. 如何用python制成心_如何用python画爱心
  20. 精品微信小程序springboot在线考试系统小程序+后台管理系统

热门文章

  1. Mac下的切图神器——Slicy使用说明
  2. echarts-折线图-echarts字体大小自适应
  3. 量化投资界领头羊-明汯投资
  4. 弘辽科技:直通车推广计划能删除吗?删除会影响店铺宝贝权重吗?
  5. 微信小程序 wxml文件中嵌套循环
  6. 一根苹果数据线背后的“血战”
  7. 特斯拉上海工厂预计5月份完工 今年底正式投产
  8. Ubuntu 添加自动切换壁纸
  9. 计算机没有报考科目信息,报考计算机在职研究生的学员如果有一门考试科目没有通过怎么办...
  10. Pytorch实现卷积神经网络(回归问题)