• ORACLE - 数据查询


    案例1:插入数据

    1. INSERT INTO "WATERBOSSFACTORY"."TBL_STUDENTS"("STU_NUM", "STU_NAME", "STU_SEX", "STU_AGE", "STU_TEL", "STU_CID") VALUES ('2022000001', '赵云', '男 ', '22', '17896523785', '001');
    2. insert into table_name(column1,column2) select column1,column2 from other_table;
    3. // 创建表时直接插入数据
    4. CREATE TABLE tbl_test AS SELECT STU_NUM,STU_AGE,STU_SEX FROM TBL_STUDENTS;

    注:

    (1)小括号中指定需要添加数据的列名,可以一个到多个,如果是所有列都添加数据时,可以省略,建议不省略

    (2)values中给出的数据需要和列名一致

    案例2:修改数据

    UPDATE "TBL_STUDENTS" SET "STU_NUM" = '2022000003', "STU_NAME" = '赵云', "STU_SEX" = '男 ', "STU_AGE" = '22', "STU_TEL" = '17896523785', "STU_CID" = '001' WHERE "STU_NUM" = '2022000001' AND "STU_NAME" = '赵云' AND "STU_SEX" = '男 ' AND "STU_AGE" = '22' AND "STU_TEL" = '17896523785' AND "STU_CID" = '001';

    案例3:删除表中的数据

    DELETE TBL_STUDENTS WHERE STU_NUM = '2022000003'

    案例4:简单查询语句

    为快速创建数据,下载了方方格子,一个excel神器可以快速生成电话号码,姓名等等,此时一共有1343条数据。

    1. // 指定列与所有列
    2. SELECT STU_NAME FROM TBL_STUDENTS;
    3. // 所有列
    4. SELECT * FROM TBL_STUDENTS;
    5. // 字段起别名
    6. SELECT STU_NAME AS 姓名,STU_AGE AS 年龄 FROM TBL_STUDENTS;
    7. // 计算列
    8. SELECT STU_NAME AS 姓名,2022-STU_AGE AS 出生年 FROM TBL_STUDENTS;
    9. // 使用函数
    10. SELECT STU_NAME AS 姓名,SUBSTR(STU_TEL, 8, 4) AS 电话后四位 FROM TBL_STUDENTS;
    11. // 把重复性的记录去掉,只保留一条。修饰多字段时,多个字段的值都不一样才保留
    12. SELECT DISTINCT STU_NAME,STU_AGE FROM TBL_STUDENTS;

    注:

    (1)distinct如果是多个字段时,会造成多个字段都不相等时算做重复,如果此时还想单个去重,则使用group by

    案例4:排序

    ORDER BY默认升序,空是最大的

    1. SELECT * FROM TBL_STUDENTS WHERE STU_CID = '002' ORDER BY STU_TEL DESC
    2. // 多字段排序
    3. SELECT * FROM TBL_STUDENTS WHERE STU_CID = '002' ORDER BY STU_TEL DESC,STU_AGE

    注:

    (1)多字段排序,谁在前面谁先排序

    案例5:分组查询

    聚合函数:conunt()  数据统计   sum() avg()max() min()

    1. // 聚合查询
    2. SELECT sum(STU_AGE) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%'
    3. SELECT max(STU_AGE) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%'
    4. SELECT min(STU_AGE) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%'
    5. SELECT conut(STU_AGE) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%'
    6. SELECT AVG(STU_AGE) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%'
    7. // 分组查询
    8. SELECT STU_SEX,COUNT(*) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%' GROUP BY STU_SEX
    9. // HAVING GROUP BY分组后的结果添加过滤条件
    10. SELECT STU_AGE,COUNT(*) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%' GROUP BY STU_AGE HAVING STU_AGE != 14

    (1)如果使用group by的结果,则select 后只能是分组字段或者聚合函数,如果使用其它的,则会报错

    ORA-00979: not a GROUP BY expression
    (2)HAVING必须添加到group By的后面

    案例6:嵌套查询

    根据其它表的信息,查询本表的数据

    1. // 展示班级名称和班级中的人数
    2. SELECT '计控2班',COUNT(*) FROM TBL_STUDENTS WHERE STU_CID = (SELECT CLASS_ID FROM TBL_CLASSES WHERE CLASS_NAME = '计控二班')

    注:子查询只返回一个值,则使用=,如果是多条数据,则使用IN关键字

    案例7:连接查询

    两个表的内容进行拼接,并且按照两个表的过滤条件过滤

    内连接:查询出两个表的匹配数据

    第二条是条件查询使用WHERE,第三条是内连接使用ON,分为等值连接和不等值连接,不等值连接用的不多

    1. // 数量是两个表的笛卡尔积(集合相乘,个数是两个集合的个数的乘积)
    2. SELECT * FROM TBL_STUDENTS,TBL_CLASSES
    3. SELECT * FROM TBL_STUDENTS student,TBL_CLASSES class WHERE student.STU_CID = class.CLASS_ID
    4. SELECT * FROM TBL_STUDENTS student INNER JOIN TBL_CLASSES class ON student.STU_CID = class.CLASS_ID
    5. SELECT * FROM TBL_STUDENTS LEFT JOIN TBL_CLASSES ON TBL_STUDENTS.STU_CID = TBL_CLASSES.CLASS_ID
    6. // 显示班级表的所有数据,如果学生和班级匹配一条则显示一条,如果学生没有进班级,则此条不显示,如果班级没有进学生,则此条显示,但是学生是空
    7. SELECT * FROM TBL_STUDENTS RIGHT JOIN TBL_CLASSES ON TBL_STUDENTS.STU_CID = TBL_CLASSES.CLASS_ID

    外连接:JOIN关键字前边的是左连接,后边的是右连接

    左外连接:包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行

    右外连接 :包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
    全外连接 : 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。

  • 相关阅读:
    Flowable 之事件和网关
    Cesium Vue(四)— 物体(Entity)的添加与配置
    基于TCP的RPC服务
    Structured Streaming join 操作
    Ubuntu 安装 tbb 步骤详解
    解线性方程组python实现直接分解法(Doolittle,克劳特,追赶法)
    027、工具_redis-benchmark
    HTTPS安全相关-通信安全的四个特性-ssl/tls
    Java的日期与时间之如何计算业务代码的运行时间呢?
    Metasploit常用命令、技术功能模块
  • 原文地址:https://blog.csdn.net/qq_45759288/article/details/125418282