news 2026/6/9 22:34:29

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/6/5 9:54:15

Java毕设选题推荐:基于springboot的游戏售卖商城系统基于SpringBoot+Vue的游戏装备交易商城系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/5 10:46:36

【时间之外】AI招聘这么干行不行?

目录 一、背景 二、目标 三、策略 1. 岗位与画像 2. 多元化渠道 3. 构建AI评估体系 4. 实施AI招聘流程 5. 持续优化 四、实施步骤 1. 准备 2. 策略 3. 执行 4. 优化 五、案例 六、总结与展望 一、背景 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&am…

作者头像 李华
网站建设 2026/6/5 9:55:55

Java毕设选题推荐:基于springboot的智慧生产安全系统安全巡检系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/9 7:00:19

Java毕设项目推荐-基于SpringBoot+Vue的植物健康系统管理系统设计与实现基于springboot的植物养护系统【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华