Oracle-增删改查

增删改

处理日期

oracle 处理date 类型 必须使用 to_date 函数或 sysdate

 oracle   与  mysql 处理 date 的区别
     
     mysql 中的 date 类型 只 支持 年月日, 使用  '2000-10-01' 
     oracle 中  date 类型  包含 年月日时分秒,   使用 to_date 函数
                          
                   to_date('1999-10-15','yyyy-MM-dd')
 ​
  oracle 获取当前系统日期 用 sysdate
  mysql  获取当前系统日期 用  now()
 语法:
 insert into 表名 (列1,列2,.....)
     values (值1,值2,....);
 ​
 ​
 ​
 注意事项:
        a.   列的格式 必须与 值的 个数 相等
         b.   值 必须 与 列定义的 数据类型 一致
                   数字 直接写,
                         字符  用 单引号括起来
                         日期  用 to_date() 函数 或 sysdate
     
       c.  oracle 中 自增 与 mysql 不同 ,
                 oracle 中 使用 序列 生成 自增 
             
        d.  语法中的 列 可以不写, 但是 推荐 还是写       

-- 批量 插入: (从已有的表 中将 部分信息插入到 当前表) insert select

-- 语法: -- insert into 表名1(列1,列2) select 列21,列22 from 表名2

insert into emp1(ename,borndate,depid)

select ename,borndate,depid from emp;

 --批量 插入:  (从已有的表 中将  部分信息插入到 当前表)   insert  select
 ​
 --  result :     stuno,subno,examtime
 ​
 create table abc(
   stuno VARCHAR2(50),
     subno number,
     examtime date
 )
 ​
 ​
 ​
 insert into abc(stuno,subno,examtime)
 select stuno,subno,examtime from result;
 ​
 -- 
 select * from  abc;
 ​
 -- 删除 abc 
 ​
 drop table abc;
 ​

union

dual 确实是一张表.是一张只有一个字段,一行记录的表.(Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用)。

习惯上,我们称之为'伪表'.因为他不存储主题数据.

 insert into subject
 SELECT 3,'c语言',1 FROM DUAL union
 SELECT 4,'go语言',1 FROM DUAL 
 --  修改 ---------(带条件)
     
     -- update 表名  set 列名=值,列名2=值2 where 条件  [and 条件2  ]
         
     -- 改全部表 数据   ,  将  emp 的 sex 都改为 0
 ​
    -- 语法 :  update 表名  set 列名=新值;  
      
      select * from emp;
      
      update emp set sex='0';
     
     
     -- 带1条件的修改:  update 表名  set 列名=新值 where  条件;
     
     -- 将 员工编号为 1002 的员工 的性别 改为 1,   ( 员工编号,  性别 -->  emp)
        
     update emp set sex='1' where eno=1002;
         
     -- 将 员工编号为 1003 的 性别改为1 ,名字 改为 李四2;
     
     -- 修改 多列
  -- 语法:  update 表名  set 列名=值,列名2=值2,列名3=值3  where 条件;   
     
     
     update  emp set sex='1' , ename='李四2' where eno=1003
     
     -- 将员工编号为 1006 且 性别为 0 的员工的 名字改为 lili, 出生日期为 2000-12-12
     
     update emp set ename='lii' , borndate=to_date('2000-12-12','yyyy-mm-dd') 
     
     where eno=1006  and sex='0' ;
     
     --   sql  中  且,并且 and     或,或者 or
     
     
     --
 ​
     -- 删除     (带条件--- 删除表的数据)
          
     --   在 主从关系中, 先删 从表 再删主表
     
     --  delete from 表名 ;    -- 清空表,无数据 ,表结构依然在,
     
     -- delete from 表名 where 条件 [and 条件2];   --- 将符合条件的数据 删除
     
         delete from  emp ;
         
         
     delete from  dept where depid=10;
     
     select * from emp;
     
         select * from dept;
         
         
 --  删除表
 ​
 --语法:  drop table 表名;      -- 清空表,表里数据会清空,同时 表结构也会删除
  
  drop table emp;
  
         --   insert    delete    update     select 
     
     -- 查询    
     
     -- 语法:  select * from  表名    ; --- * 代表查询 全部列 
     
         select * from dept;
     
     
     --语法:   select 列名1 from 表名; --- 查询部分列
     
     select ename,sex from emp;
     
     -- 带条件查询
     
     select depname from  dept where depid =3;
     
     
     
     -- 查询 部门编号为2 的 员工信息
     
        select * from  emp where depid=2
     
     
     -- 查询部门编号为2的员工姓名及性别
     
        select ename,sex from  emp where depid=2
     
     -- 模糊查询   like 
     
   -- 通配符:     %  匹配任意字符     _  下划线 只匹配单个字符
     --
     --  
     -- 查询 姓王的员工信息 ,  王X   王XX  王XXX 王XXX
     
     
       select  *  from  emp  where ename  like '王%';
     
     
     
     -- 查询 姓名包含 四 字的员工信息,  四XX   X四   XX四
     
     select  *  from  emp  where ename  like '%四%';
     
     
     -- 查询 姓李 并且 名字为 2个字的 学生信息  李X   ,李XX  就不对
     
         -- 
     
     select  *  from  emp  where ename  like '李_';
     
     -- 查询 姓李 并且 名字为 3个字的 学生信息  李X 不对  ,李XX  
     
     
         select  *  from  emp  where ename  like '李__';
     
     
     
     -- 查询 员工编号为 1001 或 1002 或 1003 的员工姓名及性别
     select  ename  ,sex
     from  emp
     where eno=1001 or eno = 1002 or eno=1003
     
     --   in     not in 
     
     select  ename  ,sex,eno
     from  emp
     where eno in (1001,1002,1003)
     
     
     
         
     select  ename  ,sex,eno
     from  emp
     where eno not  in (1001,1002,1003)
     
 ​
 ​
  -- 排序查询       由小到大 叫  升序,  由大到小 叫 降序 
  
  --  order by  列名    desc (降序) asc (升序-- 默认的)
  
  -- 语法: select * from 表名 where 条件 order by 列名 desc [asc]
  
 ​
 ​
  -- 查询 部门编号为2 的员工信息, 并按照 员工编号进行 降序排列
  
  select *
  from  emp
  where depid=2
  order by eno desc ;
  
  
  
  -- 查询 部门编号为2 的员工信息, 并按照 出生日期进行 降序排列
  select *
  from  emp
  where depid=2
  order by borndate desc ;
 ​
 ​
 ​
  select *
  from  emp
  where depid=2
  order by eno asc  ;
 ​
 ​
 ​
  -- 去掉重复的数据   distinct
  
  --
  select depid from  emp ;
 ​
  select  distinct depid from  emp ;
 ​
 -- 查询 员工编号在 1001 与 1010 之间的员工信息    员工编号 >=1001 且 员工编号 <= 1010
 ​
  -- 方法1:
   select * from emp where eno >=1001 and eno <= 1010;
 ​
  -- 方法2: between  and 
     select * from emp where eno between 1001 and 1010;
 

   --select * from emp where eno between 1010 and 1001;  -- 无语法错误,但是 无匹配数据 无意义
 

   语法:   insert into 表名(列名1,列2, 列3,.....)
                  select  值1,值2,值3,....  from dual  union
                  select  值1,值2,值3,....  from dual   union
          select  值1,值2,值3,....  from dual   union
                  select  值1,值2,值3,....  from dual   union
                  select  值1,值2,值3,....  from dual   
 ​
 ​
 ​
 dual   表 是 oracle 特有的,  单行单列

 语法:
     update :
               update 表名 set 列=新值,列2=新值2,列3=新值3 
                 [ where   子句        ]
               
            如果update 时 没有 where 子句,则表里所有的数据都会被更新
         
         delete:
         
         delete from 表名 [where 子句];
                 
                 如果在删除时 没有where 子句 ,则 delete from 会清除表里的数据

查询

基础查询

 查询全部列 :  select * from  表名;
 查询 部分列:   select 列名1,列名2,.....  from  表名;
   列的重命名 需要使用 as, 也可不写
   select stuname as 姓名,phone 电话 from student;

条件查询

where 条件字句:检索数据中符合条件的值

 带条件的查询   SELECT * from  where 子句;
                         如果 where 有多个条件, 则 并且,且 用 and , 或,或者用  or        
 ​
 -- 查询 student 的全部数据
  select * from student;
  
  -- 查询 所有学生的 姓名与电话
  select stuname,phone from student;
 -- 列 重命名
  select stuname as 姓名,phone 电话 from student;
 ​
 ​
 -- 查询学号为 1001 的学生姓名与邮箱
 ​
  select stuname,email from student where stuno='1001';
 ​
 ​
 -- 查询 性别为 女 (1)  的学生姓名 与出生日期
 select stuname,borndate from student where sex=1;
 ​
 ​
 -- 查询 成绩在  80-90之间,参加 科目编号为1的 学生的学号
 select stuno,score
 from result
 where score>=80 and score<=90 and subno=1
 ​

模糊查询

  like       %     任意字符
                 _      任意一个字符
 ​

聚合函数

聚合函数查询: 5个 , 只有一个结果 count(*) 统计个数 max(列名) 对这列求 最大值 min(列名) 对这列求最小值 sum(列名) 对这列求 求和 avg(列名) 对这列求 平均值

count(*) 与 count(列名) 与 count(1) 的区别

count() 统计所有的数据的个数 包括 空行 null count(列名) 如果这个列名的值为null 则 不会进行统计 count(1) 与 count() 等同

分组查询

分组查询

      select 聚合函数,被分组的列名
      from  表名
      [where 子句]
      group by  列名
      [having 子句]

 -- 模糊 与 聚合的 练习
 ​
 -- 统计 名字中带有  丽 字的学生 个数
 ​
 select  count(*) 学生个数
 from  student
 where stuname  like '%五%';
 ​
 ​
 select * from student;
 ​
 ​
 -- 求 科目编号为 1 的最高成绩
 select max(score) 最高成绩, min(score) 最低成绩
 from   result
 where  subno=1
 ​
 ​
 select * from result;
 ​
 ​
 -- 求 参加了 科目编号为1 的考试的 总成绩与平均分
 ​
 ​
 select sum(score) 总分, avg(score) 平均分
 from   result
 where  subno=1
 ​
 ​
 ​
 ​
 /*
   1.统计一下年级编号为 2 的 年级一共开设多少门课
     2.统计一下 姓张的同学的个数
     3. 求 科目编号为 3 的 最高分
     
     4.将 学号为 1001 的学生的 姓名 改为 王丽丽, 邮箱为 uy@qq.com
     
     5. 删除 学号为 1001的 科目编号为1 的成绩
     
     6. 统计 年级编号为1 的学生个数
     
 ​
 */
 ​
 ​
 select * from  student;
 ​
 -- 分组查询
 select count(*) 女生个数 from  student  where sex=1;
 ​
 select count(*) 男生个数 from  student  where sex=0;
 ​
 --统计 男女个数
 select count(*), sex
 from   student
 group by sex
 ​
 ​
 ​
 -- 统计 年级编号为 1 的 男女个数
    --   先 筛选 年级编号为1 的 , 然后在分组 , 因此  用 where 
      --    where 是在分组前 进行数据的筛选
 ​
 select count(*), sex
 from   student
 where  gid=1
 group by sex
 -- 分组练习
 ​
 --  统计 各个年级的学生个数
 ​
 -- 统计 科目编号为1 ,成绩高于 90分的学生个数
 ​
 -- 统计 参加 各个科目的考试人数
 ​
 -- 统计 成绩高于80分的, 各个科目的考试人数
 ​
 ​

连接查询

  内连接:   inner  join
 ​
 外连接    left join /right  join
 ​
 内连接:  tableA        inner  join  tableB on 外键
                tableA  与 tableB  在 内连接 地位 是 等价的, 谁在前谁在后  不影响 执行结果
 ​
 where  写法
     
     外连接:     tableA  left join tableB  , tableA为主表,tableA里的全部数据都要显示,如果 匹配tableB 没有数据则以null填充
                 tableA  right join tableB  , tableB为主表,tableB里的全部数据都要显示,如果 匹配tableA 没有数据则以null填充

子查询

  -- 查询 一年级 的学生信息
  -- inner join
  select stuname,phone,stuno
  from  student s  inner join grade g on s.gid=g.id
  where  name='一年级';
  
  
  
  --where 写法 
  
   select stuname,phone,stuno
  from  student s  , grade g  
  where  name='一年级' and s.gid=g.id
  
  -- 查询 一年级 的学生信息
  -- 子查询 
  select stuname,phone,stuno
  from student s 
  where gid in (select id from grade where name='一年级')

排序

          select 聚合函数,被分组的列名
          from  表名
          [where 子句]
          group by  列名
          having 子句
          order by 列名[desc] 

其他

自增与序列

  在oracle 有一张特殊的表 dual
 ​
 dual 是oracle 中一个伪表, 利用这张表 可以查看序列(自增)
 查看 一个表达式的值,执行函数
 dual 最经常用来 选择系统变量或查看一个表达式的值
 ​
 /* 语法: create sequence 序列名(自己起) 
          minvalue   -- 最小值
          maxvalue   --最大值
          start with  -- 初始值 ,默认1
          increment by  -- 步长  ,增长量
          nocycle    -- 不循环   , cycle  -- 循环
                             -- 如果不循环,当达到最大值时,继续产生会发生错误
                                         --如果循环,当递增序列达到最大值时,循环到最小值,
                                         --如果循环,当递减序列达到最小值时,循环到最大值
         cache    -- 存放序列的内存块的大小,默认值为20  , nocache  不缓存
 */
 ​
 -- 1.创建 一个自增序列
  create sequence seq_dept_deptno
  start with  1
  increment by 1
  nocycle
  nocache
 ​
 ​
 -- 2. 使用 序列名.nextval 获得 值
 insert into dept(depid,depname)
 ​
 values(seq_dept_deptno.nextval,'其他部12');
 ​
 ​
 ​
 ​

分页

 --   分页查询, 规定 ,每页显示2条 记录 ,    ROWNUM
 /*
 select * 
 ​
 from (
       select A.*,ROWNUM rn
       from (select * from 分页的表的名字) A
           where ROWNUM<= 当前页*每页显示的条数
       ) 
 where rn>(当前页-1)*每页显示的条数;
 ​
 */
   --   第1页,每页显示 2条
 select * 
 from (
       select A.*,ROWNUM rn
       from (select * from emp) A
           where ROWNUM<= 2
       ) 
 ​
 where rn>0;
 ​
 -- 第二页 ,每页显示2条
 ​
 select * 
 from (
       select A.*,ROWNUM rn
       from (select * from emp) A
           where ROWNUM<= 4
       ) 
 ​
 where rn>2;
 ​
 ​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/287668.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

思科校园网搭建及配置综合小型实验

思科校园网搭建及配置综合小型实验 实验拓扑配置步骤配置聚合链路配置VTP&#xff0c;vlan域模板第一步 配置二层VLAN第二步 配置生成树第三步 配置相关IP地址第四步 配置DHCP及DHCP中继第五步 配置三层的网关冗余协议 双机热备及OSPF第六步 配置静态路由,NAT地址转换及其他配置…

STM32 ESP8266 物联网智能温室大棚 (附源码 PCB 原理图 设计文档)

资料下载: https://download.csdn.net/download/vvoennvv/88680924 一、概述 本系统以STM32F103C8T6单片机为主控芯片&#xff0c;采用相关传感器构建系统硬件电路。其中使用DHT11温湿度传感器对温度和湿度的采集&#xff0c;MQ-7一氧化碳传感器检测CO浓度&#xff0c;GP2Y101…

深度思考,AI项目的人工智能到底引领的是什么?

项目深度思考&#xff0c;人工智能到底引领的是什么&#xff1f; 人工智能引领技术之舞&#xff1a;项目深度思考项目背景&#xff1a;人工智能的魔法时代技术选择的深度思考&#xff1a;AI大决战团队协作的深度思考&#xff1a;AI联盟大会用户体验的深度思考&#xff1a;AI之光…

Redis命令---String篇 (超全)

目录 1.Redis Setnx 命令 - 只有在 key 不存在时设置 key 的值。简介语法可用版本: > 1.0.0返回值: 设置成功&#xff0c;返回 1 。 设置失败&#xff0c;返回 0 。 示例 2.Redis Getrange 命令 - 返回 key 中字符串值的子字符简介语法可用版本: > 2.4.0返回值: 截取得到…

Sigmaplot14安装包下载及安装教程

Sigmaplot 14下载链接&#xff1a;https://docs.qq.com/doc/DUnR0QmVzRVRXdGdB 1.鼠标右键解压到“Sigmaplot 14.0” 2.选中Sigmaplot14.0&#xff0c;鼠标右击选择“以管理员身份运行” 3.点击“Next” 4.选择I accept the terms of the license agreement&#xff0c;点击“N…

九州金榜|家庭教育中如何让孩子听话

心理学上有个专业名词叫做超限效应&#xff0c;是说如果外来刺激过多、过强或者是作用时间过久&#xff0c;就会让人感觉不耐烦&#xff0c;甚至是产生逆反心理。 这就是为什么现实生活中&#xff0c;很多父母就一件事唠叨无数遍&#xff0c;孩子依然不为所动的原因所在。 九…

Java获取windows操作系统基本信息

Java可以通过使用System类中的一些属性和方法来获取Windows操作系统的基本信息。以下是一些示例代码&#xff1a; public class WindowsInfo {public static void main(String[] args) {// 获取操作系统名称String osName System.getProperty("os.name");System.ou…

网络安全—IPSec安全策略

文章目录 网络拓扑添加策略ESP添加筛选器添加筛选器的操作另一台主机设置 AH 使用Windows Server 2003系统 网络拓扑 client1 IP 192.168.17.105client2 IP 192.168.17.106 只要保证两个主机在同一网段接口&#xff0c;即互相ping通即可完成策略的实现 下面的所有通讯都只是…

pytorch学习笔记

torchvision处理图像的 pytorch官网上看数据集的包&#xff0c;COCO数据集目标检测、语义分割&#xff0c;cifar物体识别 预训练好的模型 这个模块是图片的处理 root-位置&#xff0c;train-创建的true是个训练集&#xff0c;transform 前面是输出图片的数据类型&#xff0c;“…

在较高时间周期 这些现货黄金投资法值得一用

以日线图和周线图为代表的较高时间周期&#xff0c;一直是投资者很少利用的。之所以这么说&#xff0c;不是说投资者不会在日线图上分析&#xff0c;而是很少利用日线图交易。一来持仓过夜&#xff0c;会有相关的费用产生。二来很多人做现货黄金以短线为主。其实这种较高的时间…

【解决|三方工具】导入 XChart 后提示丢失关于 TMPPro 工具引用

开发平台&#xff1a;Unity 2021 版本 插件版本&#xff1a;XChart 3.0&#xff1a;官方文档 - https://github.com/XCharts-Team/XCharts   问题描述 导入 XChart 插件至 Unity 中出现 目录&#xff1a;Component、Theme 等提示丢失 TMPPro&#xff08;TextMeshPro 工具&…

如何在ArcGIS Pro中指定坐标系

在进行制图的时候&#xff0c;为了实现某些特定的效果&#xff0c;需要指定特定的坐标系&#xff0c;但是现有的数据可能不是所需要的坐标系&#xff0c;这时候就需要对现有的数据坐标系进行处理&#xff0c;这里为大家介绍一下ArcGIS Pro中指定坐标系的方法&#xff0c;希望能…

Java经典框架之SpringSecurity

SpringSecurity Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. SpringSecurity基本应用…

宏集七轴机械臂,以精准力控实现柔性抛光打磨!

&#xff08;一&#xff09;行业背景 传统的手工抛光打磨存在劳动强度高、抛光效果不稳定、难以处理复杂形状、安全风险和无法满足高质量要求等痛点。因此&#xff0c;应用工业机器人进行自动化表面精加工的技术随之崛起。 然而&#xff0c;打磨抛光领域一直难以实现全面的自动…

深入了解隧道代理HTTP的协议与技术细节

隧道代理HTTP&#xff0c;作为一种网络通信的桥梁技术&#xff0c;其背后的协议与技术细节承载着网络世界的无尽奥秘。对于技术人员而言&#xff0c;深入了解这些细节&#xff0c;不仅有助于优化网络性能&#xff0c;还能为网络安全提供坚实的保障。 一、隧道代理HTTP的协议基…

计算机网络--作业

作业一 1、比较电路交换、报文交换和分组报文交换优缺点 电路交换 电路交换是以电路连接为目的的交换方式&#xff0c;通信之前要在通信双方之间建立一条被双方独占的物理通道&#xff08;由通信双方之间的交换设备和链路逐段连接而成&#xff09;。 优点&#xff1a; ①由于…

编织Spring魔法:解读核心容器中的Beans机制【beans 一】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 编织Spring魔法&#xff1a;解读核心容器中的Beans机制【beans 一】 前言什么是Spring核心容器Beans的生命周期管理&#xff1a;初始化和销毁方法&#xff1a;各种作用域&#xff1a; beans的配置方式…

值得推荐的 5 个前端性能测试工具

前言 PageSpeed Insights 谷歌开发的一个免费的网页分析工具&#xff0c;在地址栏中输入被分析的网站url地址&#xff0c;点击分析&#xff0c; 可模拟移动设备访问页面结果分析 桌面设备访问页面结果分析 前端开发工程师&#xff0c;可以根据这个报告进行页面优化 Lighthous…

7-验证码识别

文章目录 验证码识别1、验证码的用途和分类验证码的作用验证身份验证行为 验证码的类型静态验证码&#xff1a;图片验证码问答式验证码问答式验证码行为式验证码&#xff1a;点击行为式验证码&#xff1a;拖动间接式验证码&#xff1a;短信、邮件、语音电话无感验证码 2、验证码…

微信小程序封装vant 下拉框select 多选组件

老规矩先上效果图&#xff1a; 本组件主要由小程序vant ui组件&#xff0c;vant 小程序ui网址&#xff1a;vant-weapp 主要代码如下: 先封装子组件&#xff1a; select-checkbox 放在 components 文件夹里面 select-checkbox.wxml: <view><van-field label"{…