学习笔记day64-----oracle-sql标准的表连接、集合运算、函数和分组、子查询、表操作

Oracle数据库系统学习指南:从核心架构到SQL/PLSQL实战 关系型数据库作为企业数据存储与管理的核心,其设计哲学与体系架构决定了数据处理的可靠性、性能与扩展性。理解数据库的物理与逻辑结构、内存管理与后台进程协同机制,是掌握其高性能与高可用能力的基础。这些原理直接关联到SQL执行效率、事务控制与系统调优等工程实践。在实际应用场景中,无论是海量数据处理、复杂业务逻辑封装还是系统日常运维,都需要深入理解从SQL查询优化到PL/SQL编程的完整技术栈。本文聚焦Oracle数据库,通过解析其核心概念与运作机制,并融入执行计划分析、存储过程开发等热词,为学习者构建从入门到实践的 阅读详情
1、sql标准中的表连接
    1.1、内连接
        语法:
            select 字段列表 
            from 表1 [inner] join 表2
            on 关联条件;
        --三表
            select 字段列表
            from 表1 join 表2 on 关联条件1
                    join 表3 on 关联条件2;
            select e.id,e.first_name,d.name dname,r.name rname from s_emp e join s_dept d on e.dept_id=d.id join s_region r on d.region_id=r.id;
    1.2、外连接
        左外连接:内连接的结果集加上左表匹配不上的数据
            select 字段链表
            from 左表 left outer join 右表
            on 关联条件;
        右外连接:内连接的结果集加上右表匹配不上的数据
            select 字段列表
            from 左表 right [outer] join 右表
            on 关联条件;
        全外连接:内连接的结果集加上两表匹配不上的数据
            select 字段列表
            from 左表 full [outer] join 右表
            on 关联条件;
        --内连接
            select e.id,e.first_name,d.name from s_emp e join s_dept d on e.dept_id=d.id;
        --左外连接
            select e.id,e.first_name,d.name from s_emp e left join s_dept d on e.dept_id=d.id;
        --右外连接
            select e.id,e.first_name,d.name from s_emp e right join s_dept d on e.dept_id=d.id;
        --全外连接
            select e.id,e.first_name,d.name from s_emp e full join s_dept d on e.dept_id=d.id;
            select e.id,e.first_name,d.name from s_emp e full join s_dept d on e.dept_id=d.id where e.id is null;
2、集合运算
    union :返回两个结果集的并集,去掉重复行
    union all:返回两个结果集的并集,不去重复行
        select id from s_emp union select id from s_dept;
        select id from s_emp union all select id from s_dept;
    intersect:返回两个结果集中相同的部分
        select id from s_emp intersect select id from s_dept;
    minus:返回第一个结果集减去两个结果集的交集之后的部分
        select id from s_emp minus select id from s_dept;
    注意:两个结果集的字段列表的数量和数据类型要匹配
        还可以用null来填充
        select first_name,id from s_emp union select null,id from s_dept;

3、组函数和分组
    3.1、常用的组函数
        3.1.1、功能
            count   统计一组数据的个数
                select count(salary) from s_emp;
                参数可以是任意类型 可以使用*
            max     统计一组数据的最大值
            min     统计一组数据的最小值
                select max(salary),min(salary) from s_emp;
                select to_char(max(start_date),'yyyy-mm-dd'),to_char(min(start_date),'yyyy-mm-dd') from s_emp;
                参数可以是数值、数值、日期字符串
            sum     统计一组数据的和
            avg     统计一组数据的平均值
                select sum(salary),avg(salary) from s_emp;
        3.1.2、组函数对NULL的处理--忽略
            select count(manager_id) from s_emp;
        3.1.3、参数可以使用distinct
            select count(salary),count(distinct salary) from s_emp;
            select sum(salary),sum(distinct salary) from s_emp;
    3.2、分组
        3.2.1、分组语句的语法
                多列分组
            根据分组标准,把数据分成多个部分
                group by 分组标准 
                select 
                from
                where
                group by
                order by
        3.2.2、按照部门分组,统计每个部门的人数
            select dept_id,count(id) cnt from s_emp e group by dept_id;         
            --在分组语句中,字段要么是分组标准,要么是组函数的参数
        --列出每个部门的编号、名称以及人数
        select e.dept_id,d.name dname,count(e.id) from s_emp e join s_dept d on e.dept_id=d.id group by e.dept_id,d.name;
        --列出部门人数多余2人的部门    
            错误的,主函数不能在where子句中使用
        select e.dept_id,d.name dname,count(e.id) from s_emp e join s_dept d on e.dept_id=d.id where count(id)>2 group by e.dept_id,d.name;
        3.2.4、having子句
            语法:
                having 条件
            功能:在分组语句中,根据条件筛选符合条件的组
            select dept_id,count(id) cnt from s_emp where 1=1 group by dept_id having count(id)>2 order by cnt desc;

            语法顺序:
            select      列出要显示的字段列表
            from        从哪个表中检索数据
            where       从元表中根据条件筛选符合条件的行
            group by    根据分组标准,把数据分成多个部分
            having      根据条件,对分组结果进行筛选,检索出符合分组条件的部分
            order by    根据排序标准对结果集进行排序
            执行顺序:
            from        从哪个表中检索数据
            where       从元表中根据条件筛选符合条件的行
            group by    根据分组标准,把数据分成多个部分
            having      根据条件,对分组结果进行筛选,检索出符合分组条件的部分
            select      列出要显示的字段列表
            order by    根据排序标准对结果集进行排序

        --统计每个部门的平均工资,累出平均工资超过1400的部门信息
        select d.id,d.name,avg(salary) avgs from s_emp e join s_dept d on e.dept_id=d.id group by d.id,d.name having avg(salary)>1400 order by avgs desc;

4、子查询
    子查询就是一个select语句嵌入到另一条sql语句中,作为其中的一部分。
        其中,嵌入的select语句,称为子查询;外层的sql语句,称为父查询
    在执行时,先执行嵌入的子查询,再执行父查询。
    4.1 where子句中
        4.1.1、单值的子查询
            where子句中的条件 可以使用比较运算符(<>等)
            --列出工资高于‘Ben’的员工的信息
                select id,first_name,salary from s_emp where salary>(select salary from s_emp where first_name='Ben');
        4.1.2、多行单列的子查询
            当子查询的结果是多行单列时,需要使用能够处理多只的运算符,比如in、not in、any、all等。
            any、all需要和比较运算符配合使用,比如>any、<all等
            --使用子查询,列出s_emp表中的领导的信息
                select id,first_name from s_emp where id in(select distinct manager_id from s_emp);
            --列出所有普通员工的信息
                select id,first_name from s_emp where id not in(select distinct nvl(manager_id,0) from s_emp);
            注意:在not in中不能带有null值,
                原理:
                    in(null,1,2)==> x=null or x=1 or x=2
                    not in(null,1,2)==> x!=null and x!=1 and x!2 ==>永远为假
        4.1.3、子查询中需要引用父查询中的字段,使用exists关键字
            --列出有员工的部门
                select d.id,d.name from s_dept d where exists (select * from s_emp e where e.dept_id=d.id);
    4.2、having子句
        --列出平均工资高于43号部门平均工资高的部门信息
        select dept_id,avg(salary) avgs from s_emp group by dept_id having avg(salary)>(select avg(salary) from s_emp where dept_id=42);
    4.3、from子句中
        任何一个合法的select语句,都会在内存中构建一张临时表,可以称为内存表
        --列出工资高于公司的平均工资的员工信息
            select id,first_name,salary from s_emp where salary>(select avg(salary) from s_emp);
        --列出工资高于本部门平均工资的员工
            select e.id,e.first_name,e.salary,s.avgsa from s_emp e, (select dept_id did,avg(salary) avgsa from s_emp group by dept_id) s
            where e.dept_id=s.did and e.salary>s.avgsa;
    4.4、select子句中
        把子查询放到select子句中,可以认为是外连接的另一种实现方式
        --列出所有员工的编号名字和所在部门的名称
        select e.id,e.first_name,(select name from s_dept d where e.dept_id=d.id) dname from s_emp e;

5、表操作
    5.1、标识符的命名
        1) 首字母必须是英文字母
        2) 包含因为字母、数字、'_'、$、#
        3) 1~30未完、
        4) 不能和其他的数据库对象重名
        5) 不能是使用关键字
    5.2、创建表和删除表
        1) 语法:
            create table 表名(
                        字段名 数据类型,
                        字段名 数据类型,
                        ...
                        字段名 数据类型。
                );
        2) 示例
            create table emp_lx_42( id number(7), name varchar2(20), salary number(11,2), s_date date);
        5.2.2、删除表
            语法:
                drop table 表名
            --删除emp_lx_42
            drop table emp_lx_42;
            select table_name from user_tables where table_name like 'EMP%';

        5.3
            5.3.1、insert语句
                功能:向表中写入数据行
                1)语法
                    insert into 表名[(字段列表)] values(值列表);
                2)示例
                    insert into emp_lx_42(id,name,salary,s_Date) values(1,'test1',2500,to_date('2018-07-06','yyyy-mm-dd'));
                提交
                commit;
                    insert into emp_lx_42 values(2,'test2',2000,to_date('2018-07-05','yyyy-mm-dd'));
                    insert into emp_lx_42(id,name,s_date) values(3,'test3',sysdate);
            5.3.2、update语句
                功能:根据条件更改表中的数据
                语法:
                    update 表名 set 字段=新值[,字段=新值,...] [where 子句];
                --修改员工的工资,每人加1000,3000封顶
                    update emp_lx_42 set salary = 3000 where salary > 2000;
                    update emp_lx_42 set salary = salary + 1000 where salary <= 2000;
                --把salary为null的员工的salary设置为2500
                    update emp_lx_42 set salary = 2500 where id = 3;
                回滚
                rollback;
                update emp_lx_42 set name='Ben',salary=2500,s_date='01-JUL-18' where id=1;
            5.3.3、delete语句
                功能:根据条件删除表中的数据行
                语法:
                    delete [from] 表名 [where 子句];
                示例:
                    delete from emp_lx_42;
                    delete from emp_lx_42 where id = 3;
                --截断表
                truncate table 表名;--属于ddl语句
                功能:相当于没有where子句的delete语句,而且不能回滚
【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01 编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩ 阅读详情

相关推荐

【信息科学与工程学】【数据科学】第五十一篇 数据仓库00 基础设计01

数据仓库设计的系统性解决方案,涵盖架构模式、分层设计、百万级访问支撑、海量数据配置及与数据库/数据湖的对接策略: ​​ODS(操作数据层)​​:原始数据镜像,保留历史快照 ​​DWD(明细数据层)​​:清洗、标准化、维度退化 ​​DWS(汇总数据层)​​:主题宽表、轻度聚合 ​​ADS(应用数据层)​​:高度聚合,面向报表/API ​​二、百万用户访问架构设计​​ ​​1. 核心架构组件​​ ​​2. 关键配置参数(以Snowflake为例)​​ ​​3. 性能优化措

weixin_49199313的博客 1202

千萬行源碼 , 不及一條買賣公式(真實使用中)

C#版,首先公開我使用的炒股公式: using System;namespace TradingAlg{    class Program    {        static void Main(string[] args)        {            Decimal[] WeekClose = new Decimal[] {1,2,3,4,5,6,7,8,9,10}; //周收市價...

大成若缺 219

【信息科学与工程学】计算机科学与技术——第七十七篇 系统架构设计02

编号类型模型配方企业资本运作的方法/规则/条件/依据及所有的步骤(​风险处理/异常处理/危机应对关联知识法律法规和裁决依据​​由发起人(通常是知名投资人、投行或产业资本)先设立一个只有现金、无实际业务的特殊目的收购公司(SPAC),通过IPO募集资金并在交易所上市。然后在规定时间内(通常24个月)寻找一家非上市公司进行合并(De-SPAC),使目标公司迅速实现上市,规避传统IPO的复杂流程和不确定性。1.:在开曼或特拉华注册空壳公司,注入少量种子资金。2.

weixin_49199313的博客 311

oracle部门员工表关系查询

查询各个部门内员工个数 department:deptno dname employee: deptno empno personnel select e.deptno,count(e.empno) from (select * from emp em group by em.empno)e ————这是自己想出来的,是错误的 select e.deptno,count(e....

移动开发记录 584

高动态范围结构光三维测量技术:从多曝光融合到深度学习的演进与应用

本文深入探讨了高动态范围结构光三维测量技术的演进与应用,从传统的多曝光融合技术到深度学习驱动的创新方案。通过工业案例展示了该技术在提升测量精度和效率方面的显著优势,特别是在处理高反光、复杂表面时的突破性表现。文章还提供了针对不同工业场景的技术选型指南,帮助工程师优化三维测量解决方案。

weixin_29063979的博客 293

基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案分享

各位FPGAer周末愉快,今天熊猫君分享一个基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案。

haoxingheng的专栏 1445

oracle表分组统计,Oracle入门笔记【3】多表查询与分组统计查询

1,先实现多表查询:select * from emp,dept;(可以发现两个集合发生了乘积,这叫笛卡尔积问题。)消除笛卡尔积:select *from emp e,dept dwhere e.deptno=d.deptno;(这只是消除了显示的笛卡尔积而已,开发中多表查询尽量避免)范例1:select e.empno,e.ename,e.job,e.sal,e.sal,d.dname,d.lo...

weixin_30668061的博客 416

orangepi 5 plus ubuntu24.04上安装redroid

OrangePi 5 Plus运行reDroid云手机方案总结 在RK3588+Ubuntu 24.04上部署reDroid(Android容器化方案)的关键步骤: 内核要求:确保启用binderfs(无需ashmem,新版reDroid使用memfd替代); 安装流程: 安装Docker并配置代理加速镜像拉取; 拉取reDroid镜像(推荐Android 12/13 ARM64版本); 通过挂载binderfs启动容器,指定分辨率与DPI参数; 多实例管理: 脚本化创建多个容器(如8个实例),分配独立端口

babytiger的专栏 2292

Mysql入门到精通全集(SQL99)包含关系运算,软考数据库工程师复习首选

本文系统梳理了MySQL数据库的核心知识点,包括数据库基础概念、SQL语句分类、数据操作语言、数据定义语言、事务控制、存储引擎、索引、视图、数据库设计范式等。重点介绍了DQL查询语句的各种用法,如条件查询、分组查询、连接查询等,以及DDL语句的表操作和约束设置。同时详细讲解了触发器、存储过程、变量、流程控制等高级功能,并全面归纳了MySQL内置函数的分类和使用方法。全文结构清晰,内容全面,涵盖了MySQL数据库从基础到高级的核心技术要点,可作为MySQL学习的系统性参考文档。

渣渣盟的博客 1万+

高通camx ThreadManager

m_pCore->AcceptNewJob是将一个Job或者任务插入一个Queue,有一个工作线程循环从Queue中取Job任务执行,执行任务就是回调任务中的callback函数,AcceptNewJob实现。调用AddToPriorityQueue将任务添加到queue任务队列,那么什么时候从这个queue中取任务执行呢?有个线程循环执行DoWork,最终调用checkAndDequeue取任务执行。

GetnextWindow的专栏 435

记录一次PowerJob使用达梦数据库的配置

记录一次PowerJob使用达梦数据库的配置

早晨阳光一般暖的博客 2159

全网最细java零基础学习就业课程教学之java基础篇15:Mysql数据库

大学生零基础java学习就业

weixin_43841075的博客 274

Unity零基础到入门 ☀️| 小万字教程 对 Unity 中的 协程 ❤️全面解析+实战演练❤️

Unity,为了让Unity基础知识专栏更加完善,又肝了一篇协程来学习。 协程在Unity中还是很常用的,一起来看一下协程的基本概念和使用方法吧!

努力前行,总会成为自己心中的那道光 8万+

数据库——MySQL

MySQL数据库基础教程全面介绍了关系型数据库的核心概念和操作。

qq_46518480的博客 417

Cursor自动生成测试用例

或者把你已有的规则直接复制粘贴到这个文档内(这里我用的是Markdown格式和CSV格式的测试用例生成规则,可以同时生成Markdown和CSV格式的测试用例)。在AI对话框这里,我们可以看到Cursor会逐步来帮我们生成测试用例,先分析识别需求文档,然后生成测试用例,最后会进行质量检查,确保生成的用例符合规范。生成的Markdown格式,可直接导入Xmind,生成思维导图,对应到具体的功能模块看具体的测试点,逻辑会更直观一些。(1)选中规则文档和需求文档:@你的测试用例规则文档@你的需求文档。

十二测试录 2432

Aip1640、TM1640驱动程序

本文介绍了AIP1640/TM1640驱动芯片的编程实现,主要包括硬件接口定义和通信协议函数。通过宏定义配置时钟(CLK)和数据线(DIO)的GPIO控制,实现了I2C协议的启动、停止、字节发送等基本操作。核心函数AIP1640_Disp_Drive()完成显示驱动流程:先发送0x40命令设置地址自增模式,再发送0xC0起始地址和16字节显示数据,最后设置亮度参数。文中还包含5微秒延时函数、显示数据缓冲区定义,以及LED和数码管(SMG)的位映射注释说明。该代码适用于控制LED数码管显示,支持亮度调节功能。

zqx的博客 1401

MySQL 入门

本文全面介绍了MySQL数据库及其相关技术,内容涵盖: 数据库基础概念:包括数据库系统组成、关系型与非关系型数据库对比、MySQL核心特点等; MySQL操作管理:详细讲解了安装配置、SQL语句分类、数据类型、索引原理等核心内容; 高级特性:深入分析事务、锁机制、存储引擎、主从复制等关键特性; 扩展架构:系统介绍了读写分离、集群部署、分库分表等企业级解决方案; 开发集成:提供了JDBC连接、MyCat中间件等实践指南。 文章采用结构化组织方式,从基础到高级层层递进,包含了大量实用性强的代码示例和配置模板

weixin_51689532的博客 1243

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

多维聚合实战:GROUPING SETS、窗口函数与稀疏性处理

多维聚合是BI报表、指标体系和机器学习特征工程的核心数据操作,其本质是在多个维度交叉下对原始数据进行语义保持的汇总计算。传统GROUP BY在面对维度稀疏性、层级关系和动态基准需求时极易失效,导致空值误判、同比失真与TOP N逻辑崩溃。现代解决方案依赖GROUPING SETS实现一次扫描多维组合,结合窗口函数完成聚合后计算(如占比、滚动均值),并通过GENERATE_SERIES或维度补全策略应对隐式缺失问题。技术价值在于保障‘数字可解释’——每个NULL都需明确区分是数据缺失、分组折叠还是计算空集。典型

weixin_30564901的博客 466

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

MySQL(开发篇)

外键:用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。我们来看一个例子:左侧的emp表是员工表,里面存储员工的基本信息,包含员工的ID、姓名、年龄、职位、薪资、入职日期、上级主管ID、部门ID,在员工的信息中存储的是部门的ID dept_id,而这个部门的ID是关联的部门表dept的主键id,那emp表的dept_id就是外键,关联的是另一张表的主键。注意:目前上述两张表,只是在逻辑上存在这样一层关系,也就是逻辑外键;在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的。

m0_61925586的博客 860

mysql自学

目录一、数据库概念二、mysql安装2.1 ubuntu安装mysql2.2 rockylinux安装mysql2.3 windows安装mysql2.4 数据初始化2.5 修改密码2.6 创建用户2.7 忘记密码2.8 默认端口2.9 远程连接三、数据库管理工具Dbeaver四、mysql练习库4.1 world库4.2 sakila库4.3 employees库4.4 自建库导出4.5 全库备份与恢复(all-databases)4.6 查询结果导出五、SQL语言六、五种数据类型6.1 整数型6.2 浮

zhangli2009x的博客 258

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

C++学习笔记day52-----Qt-designer、qtcreator

designer、qtcreator

displayMessage的博客 3092

C++学习笔记day49-----C++98-异常处理

异常处理

displayMessage的博客 1171

C++学习笔记day28-----UC-创建一个子进程,回收一个子进程,替换进程的映像,环境变量

创建一个子进程,回收一个子进程,替换进程的映像,环境变量

displayMessage的博客 875

C++学习笔记day24-----UC-虚拟地址到物理内存地址的映射,通过系统调用操作文件

内存管理—–堆,虚拟地址到物理地址的映射,系统调用的文件操作

displayMessage的博客 764

C++学习笔记day47-----C++98-继承中的构造函数,析构函数,拷贝构造函数,拷贝赋值函数,多重继承,虚继承

继承中的构造函数,析构函数,拷贝构造函数,拷贝赋值函数,多重继承,虚继承

displayMessage的博客 697
上一篇: 解析main()函数的参数-----getopt()
下一篇: 学习笔记day65-----oralce-事物控制语句、约束、其他数据库对象、分页
displayMessage
博客等级 码龄11年 34粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值