徐州制作网站的公司有哪些,廊坊永清网站建设,庆阳网站设计师招聘,wordpress 增加 专题在 Oracle 数据库的知识体系中#xff0c;数据查询语言#xff08;DQL#xff09;无疑是最为常用且关键的部分之一。对于 Java 全栈开发者而言#xff0c;熟练掌握 DQL 不仅能高效地从数据库中获取所需数据#xff0c;更是构建强大后端应用的基石。通过 DQL#xff0c;我…在 Oracle 数据库的知识体系中数据查询语言DQL无疑是最为常用且关键的部分之一。对于 Java 全栈开发者而言熟练掌握 DQL 不仅能高效地从数据库中获取所需数据更是构建强大后端应用的基石。通过 DQL我们可以像一位经验丰富的图书管理员在庞大的数据库书库中精准快速地找到每一本 “数据之书”。接下来让我们深入探索 Oracle 数据库 DQL 的奥秘。 目录
一、DQL 查询数据
一语法结构总览
二查询所有数据
三条件查询
四去重查询
五排序查询
二、系统函数
一聚合函数
二字符串函数
三转换函数
四数值函数
三、求交集、并集与差集
四、企业工作小技巧 一、DQL 查询数据
一语法结构总览
DQL 的基本语法为
select 字段列表 from 表的表名 [where 条件筛选] [order by 排序样本] [having 聚合过滤] [group by 分组字段];这一语法结构如同一个精密的工具每个部分都有其独特的作用协同工作以实现多样化的数据查询需求。 二查询所有数据
指定字段查询当我们只需要获取表中的部分字段数据时可明确指定字段列表。例如从book表中查询id、book_name、author_name和price字段
Select id,book_name,author_name,price from book全字段查询若要获取表中的所有字段数据使用通配符*即可
Select *from book在 Java 全栈开发中当我们构建一个简单的图书管理系统后端时如果前端页面需要展示书籍的所有信息那么使用Select *from book查询出所有字段数据再通过 Java 的数据库连接框架如 MyBatis、Hibernate将数据传递给前端展示。但在实际企业项目中应谨慎使用*因为它可能会带来不必要的数据传输开销特别是在表字段较多时。 三条件查询
条件查询允许我们根据特定条件筛选出符合要求的数据这在实际应用中极为常见。
基本比较运算符包括等于、!或不等于、大于、小于、大于等于、小于等于。例如查询价格大于 50 的书籍
select * from book where price 50;模糊查询使用like关键字结合通配符%和_进行模糊匹配。 %通配符 %在后以前面字符为基准向后匹配 0 到 n 个字符。比如查询出版社名称以 “你干嘛” 开头的所有书籍
select * from book where publish like 你干嘛%;%在前以后面字符为基准向前匹配 0 到 n 个字符。例如查询出版社名称以 “哎哟” 结尾的书籍
select * from book where publish like %哎哟;%在两侧以中间字符为基准向前后匹配 0 到 n 个字符。如查询出版社名称中包含 “干嘛” 的书籍
select * from book where publish like %干嘛%;_通配符 _在后以前面字符为基准向后匹配 1 个字符。例如查询作者姓名为两个字且第二个字为 “辰” 的书籍
select * from book where author_name like 辰_;_在前以后面字符为基准向前匹配 1 个字符。如查询作者姓名为三个字且第三个字为 “西” 的书籍
select * from book where author_name like __西;_在两侧以中间字符为基准向前后分别匹配 1 个字符。比如查询作者姓名三个字且中间字为 “东” 的书籍
select * from book where author_name like _东_;在 Java 全栈开发的电商项目中用户在搜索商品时模糊查询就派上了大用场。前端用户输入关键词后端通过构建类似的模糊查询语句从数据库中检索出相关商品信息返回给用户。
3. 范围查询
使用in关键字查询离散范围。例如查询id是 1、3、5 的书籍
select * from book where id in (1,3,5);使用between and查询连续范围。比如查询价格在 50 到 80 之间的书籍
select * from book where price between 50 and 80;非 NULL 查询通过is null和is not null判断字段是否为空。例如查询没有作者的书籍
select * from book where author_name is null;查询填写了作者的书籍
select * from book where author_name is not null;四去重查询
当查询结果中存在重复数据且我们希望去除这些重复时使用distinct关键字。例如从book表中查询不同的书籍名称和价格
Select distinct book_name,price from book注意distinct关键字作用于其后的所有字段组合并且通常不建议在其后加上唯一标识字段如id因为这会使distinct失去去重意义。在 Java 全栈开发中当我们从数据库获取数据用于前端展示时如果不希望出现重复数据影响用户体验就可以使用distinct进行去重操作。 五排序查询
排序查询用于对查询结果进行排序使数据呈现更具条理性。 基本排序语法为select字段列表 from 表的表名[where 条件筛选] [order by 排序样本];通过asc升序可省略和desc降序指定排序方式。例如查询出版社名称以 “宇宙” 开头的书籍并按出版日期升序排列
Select *from book where publish like ‘宇宙%’ order by publish_date asc按出版日期降序排列
Select *from book where publish like ‘宇宙%’ order by publish_date desc复合排序可以指定多个排序条件先执行前面的排序条件再执行后面的。例如从book表中先按价格升序再按出版日期降序排序
Select *from book order by price ascpublish_data desc在电商平台的 Java 全栈项目中这种复合排序非常有用。比如商品展示页面可能需要先按照销量进行降序再按照价格进行升序以展示热门且价格合理的商品。示例代码如下
create table goods(id number(3) primary key,goods_name nvarchar2(20),goods_type nvarchar2(20),goods_price number(10,2),goods_store number(3),goods_sales number(3),make_address nvarchar2(120)
);INSERT INTO goods (id, goods_name, goods_type, goods_price, goods_store, goods_sales, make_address)
VALUES
(1, 苹果, 水果, 5.99, 100, 200, 山东烟台);INSERT INTO goods (id, goods_name, goods_type, goods_price, goods_store, goods_sales, make_address)
VALUES
(2, 香蕉, 水果, 3.49, 150, 300, 海南三亚);INSERT INTO goods (id, goods_name, goods_type, goods_price, goods_store, goods_sales, make_address)
VALUES
(3, 大米, 粮食, 25.75, 500, 1000, 黑龙江五常);select * from goods where goods_type 水果 order by goods_sales desc, goods_price asc;二、系统函数
一聚合函数
聚合函数用于对一组数据进行计算返回一个单一的值。
Count统计满足条件的数据行数。例如统计book表中总共有多少条数据
select count(*) from book;统计作者名字不为空的书籍数量
select count(author_name) from book;统计书籍表中名字带 “童话” 的书籍数量
select count(*) from book where author_name like %童话%;Max查询最大值。如查询关于天文书籍中最贵的价格
select max(price) from book where author_name like %天文%;Min查询最小值。例如查询关于天文书籍中最低的价格
select min(price) from book where author_name like %天文%;Avg查询平均数。查询历史书籍售卖的平均价格如果存在价格为 NULL 的情况使用nvl函数将其转换为 0 后再求平均
select avg(nvl(price,0)) from book where author_name like %历史%;Sum查询和。例如查询科幻书籍售卖的总价
select sum(price) from book where author_name like %科幻%;需要注意的是max、min、avg、sum函数不能直接使用*。在 Java 全栈开发中聚合函数常用于统计报表功能。比如在一个财务系统中使用sum函数统计某段时间内的订单总金额再通过 Java 代码将统计结果展示在报表页面上。 二字符串函数
字符串函数用于处理和操作字符串数据。
大小写转换 upper函数将字符串转换为大写。例如将parents表中email字段的值转换为大写
select id,name,upper(email) from parents;lower函数将字符串转换为小写
select id,name,lower(email) from parents;字符串拼接使用concat函数进行字符串拼接。例如查询parents表中地址以 “成都” 开头的记录
select * from parents where address like concat(成都,%);也可以在虚拟表dual中测试字符串拼接效果
select concat(hello,world) from dual;去除空格trim函数用于去掉字符串两侧的空格。例如处理parents表中address字段的空k格。
select id,name,trim(address) from parents; 字符串截取 ubstr函数从指定位置开始截取字符串。例如从parents表中address字段的第 3 个字符开始截取
select id,name,substr(address,3) from parents; 也可以指定截取长度。如从第 3 个字符开始截取长度为 4 的字符串
select id,name,substr(address,3,4) from parents;获取字符串长度length函数返回字符串的长度。例如获取parents表中address字段值的长度
select id,name,length(address) from parents;字符串替换replace函数用于替换字符串中的指定部分。比如将parents表中address字段里的 “市” 替换为 “国”
select id,name,replace(address,市,国) from parents;三转换函数 日期格式化使用to_char函数对日期进行格式化。例如从book表中查询书籍信息并将publish_date字段格式化为yyyy - MM - dd的形式
select id,book_name,to_char(publish_date,yyyy-MM-dd) as publish_date from book;字符串转日期to_date函数将字符串解析为日期类型。例如在虚拟表dual中将字符串2010 - 10 - 10解析为日期
select to_date(2010-10-10,yyyy-MM-dd) as birthday from dual;字符串转数值to_number函数将字符串转换为数值类型。例如在虚拟表dual中将字符串123转换为数值
select to_number(123) from dual;条件转换 使用CASE WHEN语句进行条件判断和转换。例如在parents表中根据gender字段的值转换为对应的性别描述
select id,name,CASE genderWHEN 0 THEN女WHEN 1 THEN男ELSE 其它
END as gender from parents;decode函数也可实现类似功能
select id,name,decode(gender,0,女,1,男,其它) as gender from parents;在 Java 全栈开发中转换函数常用于数据格式的统一和处理。比如从数据库中获取的日期数据通过to_char函数格式化后更方便在前端页面展示。 四数值函数
数值函数用于对数值进行各种运算。
四舍五入 round函数进行四舍五入默认保留整数。例如对3.1415926进行四舍五入
select round(3.1415926) from dual;也可以指定保留小数位数。如保留 2 位小数
select round(3.1415926,2) from dual;取余mod函数计算两个数相除的余数。例如计算 10 除以 3 的余数
select mod(10,3) from dual;向上取整ceil函数将数值向上取整。例如对3.14向上取整
select ceil(3.14) from dual;向下取整floor函数将数值向下取整。例如对3.14向下取整
select floor(3.14) from dual;三、求交集、并集与差集
在处理多个查询结果集时我们可以使用minus求差集、intersect求交集、union求并集操作。
交集例如在friend_info表中查询 “小齐” 和 “蒲哥” 共同的好友
select friend_name from friend_info where user_name 小齐
intersect
select friend_name from friend_info where user_name 蒲哥;并集查询 “小齐” 和 “蒲哥” 的所有好友去重
select friend_name from friend_info where user_name 小齐
union
select friend_name from friend_info where user_name 蒲哥;需要注意union和union all的区别union all不会去重。例如查询 “小齐” 和 “蒲哥” 的所有好友不去重
select friend_name from friend_info where user_name 小齐
union all
select friend_name from friend_info where user_name 蒲哥;在 Java 全栈开发的社交类应用中这些集合操作可以用于好友推荐、兴趣匹配等功能。比如通过交集操作找到有共同兴趣爱好的用户为用户推荐可能认识的人。 四、企业工作小技巧 查询优化在企业项目中数据量往往非常庞大。对于复杂的查询尽量使用索引来提高查询效率。例如如果经常根据作者姓名查询书籍那么为author_name字段创建索引可以显著加快查询速度。同时避免在where条件中对字段进行函数操作因为这会导致索引失效。代码规范与注释在 Java 全栈开发中编写数据库查询相关代码时要遵循良好的代码规范。例如在使用 MyBatis 框架时SQL 语句尽量写在 XML 文件中并添加详细注释说明每个查询的功能、参数含义以及预期返回结果。这不仅方便团队成员理解和维护代码也有助于在出现问题时快速定位和解决。数据安全与权限控制在进行数据查询时要严格控制用户权限。在数据库层面通过角色和权限设置确保不同用户只能查询其有权限访问的数据。在 Java 代码中对用户输入进行严格的校验和过滤防止 SQL 注入攻击保障数据安全。 通过对 Oracle 数据库 DQL 的深入学习和实践我们在数据查询和处理能力上有了显著提升。在未来的 Java 全栈开发旅程中灵活运用这些知识将为我们打造高效、稳定且安全的应用系统奠定坚实基础。