news 2026/5/6 17:26:25

java-SQL学习(插入,查询,过滤,排序,去重,更新,删除)(返回限制行数,字串模糊查询,区间数据,合并,约束)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java-SQL学习(插入,查询,过滤,排序,去重,更新,删除)(返回限制行数,字串模糊查询,区间数据,合并,约束)

好的,以下是从Java 角度学习 SQL 的最实用总结,重点覆盖你提到的所有操作:

  • 插入(INSERT)
  • 查询(SELECT)+ 过滤(WHERE)+ 排序(ORDER BY)+ 去重(DISTINCT / GROUP BY)
  • 更新(UPDATE)
  • 删除(DELETE)
  • 返回限制行数(LIMIT / OFFSET)
  • 字符串模糊查询(LIKE)
  • 区间数据(BETWEEN / >= <=)
  • 合并(UNION / UNION ALL)
  • 常见约束(PRIMARY KEY、FOREIGN KEY、UNIQUE、NOT NULL、DEFAULT、CHECK)

全部以MySQL为例(Java 最常用),并附上JDBC简单执行方式。

1.建表示例(带常见约束)

CREATETABLEstudent(idINTPRIMARYKEYAUTO_INCREMENT,-- 主键 + 自增student_noVARCHAR(20)UNIQUENOTNULL,-- 学号唯一 + 非空nameVARCHAR(50)NOTNULL,genderCHAR(1)DEFAULT'M'CHECK(genderIN('M','F')),-- 默认值 + 检查约束ageINTCHECK(age>=10ANDage<=50),scoreDECIMAL(5,2),class_idINT,create_timeDATETIMEDEFAULTCURRENT_TIMESTAMP,FOREIGNKEY(class_id)REFERENCESclass(id)-- 外键约束ONDELETESETNULLONUPDATECASCADE);

2. 常用 SQL 操作对照表(Java 视角)

操作SQL 写法示例JDBC 常见用法要点说明
插入INSERT INTO student(name, age, score) VALUES('张三', 20, 88.5)PreparedStatement+?防注入单行 / 多行 / 从查询插入
查询全部SELECT * FROM studentexecuteQuery()ResultSet开发中很少用*
过滤WHERE age > 18 AND score >= 60多条件用AND/OR
模糊查询WHERE name LIKE '%李%'LIKE '张_'setString(1, "%" + keyword + "%")% 任意字符,_ 单个字符
区间查询WHERE age BETWEEN 18 AND 25age >= 18 AND age <= 25BETWEEN 包含边界
排序ORDER BY score DESC, age ASCDESC 降序,ASC 升序(默认)
去重SELECT DISTINCT name FROM student只对单列 / 多列组合去重
限制行数LIMIT 10LIMIT 10 OFFSET 20(第21~30条)分页必用MySQL 专用(PostgreSQL 用 OFFSET … FETCH)
更新UPDATE student SET score = score + 5 WHERE id = 1001一定要加 WHERE!
删除DELETE FROM student WHERE id = 1001一定要加 WHERE!TRUNCATE TABLE 更快但清空全部
合并查询(SELECT name FROM student WHERE score > 90) UNION (SELECT name FROM teacher)UNION 去重,UNION ALL 不去重(性能更好)

3. 完整示例代码(JDBC 风格)

importjava.sql.*;publicclassSqlDemo{privatestaticfinalStringURL="jdbc:mysql://localhost:3306/school?useSSL=false&serverTimezone=Asia/Shanghai";privatestaticfinalStringUSER="root";privatestaticfinalStringPASS="123456";publicstaticvoidmain(String[]args){try(Connectionconn=DriverManager.getConnection(URL,USER,PASS)){// 1. 插入insertStudent(conn,"李四",19,92.5);// 2. 模糊查询 + 区间 + 排序 + 限制行数 + 去重queryStudents(conn,"李",18,25);// 3. 更新updateScore(conn,1,5.0);// 4. 删除deleteStudent(conn,100);}catch(SQLExceptione){e.printStackTrace();}}// 插入(推荐使用 PreparedStatement 防注入)staticvoidinsertStudent(Connectionconn,Stringname,intage,doublescore)throwsSQLException{Stringsql="INSERT INTO student (name, age, score) VALUES (?, ?, ?)";try(PreparedStatementps=conn.prepareStatement(sql)){ps.setString(1,name);ps.setInt(2,age);ps.setDouble(3,score);introws=ps.executeUpdate();System.out.println("插入成功,受影响行数:"+rows);}}// 查询:模糊 + 区间 + 排序 + 分页 + 去重示例staticvoidqueryStudents(Connectionconn,StringnameKeyword,intminAge,intmaxAge)throwsSQLException{// 写法1:推荐(清晰、安全)Stringsql=""" SELECT DISTINCT name, age, score FROM student WHERE name LIKE ? AND age BETWEEN ? AND ? ORDER BY score DESC, age ASC LIMIT 10 OFFSET 0 """;try(PreparedStatementps=conn.prepareStatement(sql)){ps.setString(1,"%"+nameKeyword+"%");ps.setInt(2,minAge);ps.setInt(3,maxAge);try(ResultSetrs=ps.executeQuery()){while(rs.next()){System.out.printf("姓名:%s 年龄:%d 分数:%.1f%n",rs.getString("name"),rs.getInt("age"),rs.getDouble("score"));}}}}// 更新staticvoidupdateScore(Connectionconn,intid,doubleaddScore)throwsSQLException{Stringsql="UPDATE student SET score = score + ? WHERE id = ?";try(PreparedStatementps=conn.prepareStatement(sql)){ps.setDouble(1,addScore);ps.setInt(2,id);introws=ps.executeUpdate();System.out.println("更新成功,受影响行数:"+rows);}}// 删除staticvoiddeleteStudent(Connectionconn,intid)throwsSQLException{Stringsql="DELETE FROM student WHERE id = ?";try(PreparedStatementps=conn.prepareStatement(sql)){ps.setInt(1,id);introws=ps.executeUpdate();System.out.println("删除成功,受影响行数:"+rows);}}}

4. 快速记忆口诀(面试/实战最常用)

5. 常见坑 & 建议

问题错误写法示例正确/推荐写法
SQL 注入WHERE name = '" + name + "'永远用PreparedStatement+?
忘记 WHEREUPDATE student SET score=0开发/测试环境加WHERE 1=0保险
分页从 1 开始LIMIT 0,10(第1页)前端页码-1 转 offset
LIKE 前缀 % 失效索引LIKE '%abc'尽量用LIKE 'abc%'或全文索引
大数据合并UNION(去重慢)优先UNION ALL+ 业务去重

如果你当前用的是MyBatis / Spring Data JPA / JdbcTemplate,可以告诉我,我再给你对应写法。

想深入哪个部分(比如多表 JOIN、子查询、索引优化、事务、批量插入)?直接说,我继续给你展开最实用的代码和注意点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:17:20

实战复盘:如何用 HTML+JS+AI 打造一款“影迹”智能影视管理系统

在数字化时代&#xff0c;我们囤积了大量的影视资源链接&#xff08;百度网盘、夸克网盘&#xff09;&#xff0c;但它们通常以杂乱的 TXT 文本形式存在。只有链接&#xff0c;没有海报&#xff1b;只有片名&#xff0c;没有评分。 为了解决这个痛点&#xff0c;我开发了**“影…

作者头像 李华
网站建设 2026/5/6 2:32:53

基于 SpringCloud 的作品投票系统vue3

目录项目技术支持可定制开发之功能亮点源### 技术栈选择功能模块设计关键实现细节性能与安全优化项目技术支持 后端语言框架支持&#xff1a; 1 java(SSM/springboot/Springcloud)-idea/eclipse 2.Nodejs(Express/koa)Vue.js -vscode 3.python(django/flask)–pycharm/vscode 4…

作者头像 李华
网站建设 2026/4/23 9:59:01

基于Spring Cloud技术的智慧云停车场服务管理系统vue3

目录智慧云停车场服务管理系统摘要技术架构核心功能模块系统优势项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作智慧云停车场服务管理系统摘要 基于Spring Cloud和Vue3的智慧云停车场服务管理系统旨在通过…

作者头像 李华
网站建设 2026/5/5 0:36:59

基于的城市公交查询地图系统(编号:1410396)--论文vue3

目录 论文摘要内容系统核心技术功能亮点创新点 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 论文摘要内容 该论文基于Vue3框架开发的城市公交查询地图系统&#xff08;编号&#xff1a;1410396&#x…

作者头像 李华
网站建设 2026/5/2 9:51:48

学长亲荐10个AI论文软件,助你搞定研究生毕业论文!

学长亲荐10个AI论文软件&#xff0c;助你搞定研究生毕业论文&#xff01; AI 工具如何助力论文写作&#xff0c;让研究生轻松应对学术挑战 在研究生阶段&#xff0c;论文写作是每一位学生必须面对的重要任务。无论是开题报告、文献综述&#xff0c;还是最终的毕业论文&#xff…

作者头像 李华