数据库(Oracle)——SQL查询篇

    技术2022-07-10  166

    数据库

    数据库(Database)是按照数据结构来组织、存储和管理数据的仓库;随着信息技术和市场的发展,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

    SQL语言介绍

    SQL(Structured Query Language)为数据库的语言,在 1974 年由 Boyce【博伊 斯】和 Chamberlin【钱伯林】提出的一种介于关系代数与关系演算之间的结构化查询 语言,是一个通用的、功能极强的关系型数据库语言。它包含三部分:

    SELECT

    语法(命令不区分大小写,内容区分大小写)

    SELECT [DISTINCT] {*,column alias,..} FROM table alias WHERE 条件表达式 ORDER BY 排序字段列表 [asc|desc]

    注意: 解析步骤: from where select order by

    条件查询

    查询列(字段)

    select distinct *|字段|表达式 as 别名 from 表 表别名

    查询某个表中所有的记录的所有字段信息 SELECT * FROM 表名; 查询某个表中所有的记录的指定字段信息 SELECT 列名 FROM 表名; 查询某个表中所有的记录的字段 1 字段 2 SELECT 列名 1,列名 2 FROM 表名; 去除重复记录 SELECT distinct 列名 FROM 表名; 查询表达式 SELECT 表达式 FROM 表名; 使用别名 SELECT xxx as 别名 FROM 表名 表别名 例表:

    部分列

    例1: 例2:

    所有列

    例1:

    去除重复

    例1:

    别名

    例1: 注意: as: 字段别名可以使用 as,表别名不能使用 as (可省略) " ": 原样输出,可以存在 空格与区分大小写

    字符串

    注意:使用’ '表示字符串(注意区分" ") ,拼接使用 || 例1:

    伪列

    例1:

    虚表(用于计算表达式,显示单条记录的值)

    例1:

    null

    注意:null 遇到数字参与运算的结果为 null,遇到字符串为空串 例1: 例2: 例3:

    查询行(记录)

    where 过滤行记录条件 ① = 、 >、 <、 >=、 <=、 !=、 <>、 between and ② and 、or、 not、 union、 union all、 intersect 、minus ③ null :is null、 is not null、 not is null ④ like :模糊查询 % _ escape(‘单个字符’) ⑤ in 、 exists(难点) 及子查询 m 例表:

    比较条件(= 、>、 <、 >=、 <=、 !=、 <>)

    例1:(嵌套一个: 查询在前 过滤在后) 例2:(不使用别名 (推荐) :过滤在前,查询在后) any、some、all(了解) 例1:

    且(and)、或(or)、非(not)

    例1: 例2: 例3:

    NULL(null 不能使用条件判断,只能使用 is)

    例1: 例2:

    集合操作(Union、Union All、Intersect、Minus)

    Union: 并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序; Union All: 全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序; Intersect: 交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序; Minus: 差集(减去重复)。 例1:(Union) 例2:(Union all) 例3:(Intersect) 例4:(Minus)

    模糊查询(like)

    模糊查询,使用通配符: %: 零个及以上(任意个数的)的字符 _: 一个字符 例1: 例2: 注意:

    遇到内容中包含 % _ 使用 escape('单个字符')指定转义符 --1)、编写测试数据 insert into emp(empno,ename,sal) values(1000,'t_%test',8989); insert into emp(empno,ename,sal) values(1200,'t_tes%t',8000); --2)、查找 --查询员工姓名中包含字符%的员工名称 岗位 工资 部门编号 select ename,job,sal,deptno from emp where ename like '%a%%' escape('a'); --指定一个字符

    获取所有行的记录

    select * from emp; select * from emp where 1=1 ; select * from emp where ename like '%';

    in、exists与排序

    例表:

    in与exists

    in

    相当于使用 or 的多个等值、定值集合,如果存在 子查询,确保类型相同、字 段数为 1;如果记录多,效率不高,用于一些少量定值判断上。

    例1:(in) 注意:

    ```java 便于理解 使用 java 思维 while(外层结果集){ while(内层结果集){ if(emp.deptno==10){ syso("...."); } if(emp.deptno==30){ syso("...."); } } } ==>in :如果记录多,效率不高,用于 一些 少量定值判断上

    exists

    条件为 true,存在记录则返回结果,后续不再继续比较查询,与查询的字段无 关,与记录有关。

    例1:(exists) 例2:

    排序(order by)

    使用 ORDER BY 排序,排序不是真实改变存储结构的顺序,而是获取的集合的 顺序。 升序 : asc(默认) 降序: desc; 多字段: 在前面字段相等时,使用后面的字段排序; 空排序: 升序 null 排在最前面;降序 null 排在最后面。

    例1:(升序) 例2:(降序)

    Processed: 0.012, SQL: 9