新编号查询示例(分类查询).sql

本文介绍了如何通过SQL查询按id前4位分组,并找出最小一组的缺号,以及最小编号为表中每组的最小编号的方法。包括创建测试表、插入测试数据、进行查询处理并展示结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*--查询新编号的示例

    要求:
    按id前4位分组,查询出最小一组的缺号,如果没有,则用最大组的id+1

--邹建 2004.12(引用请保留此信息)--*/

--测试数据
create table tb(id int)
insert tb select 10010001
union all select 10010002
union all select 10010003
union all select 10010004
union all select 10010005
--union all select 10020001
union all select 10020002
union all select 10020003
union all select 10020004
union all select 10030001
go

--查询处理1(最小编号为:xxxx0001的处理)
select 新id=left(id,4)+right(10001+right(a.id,4),4)
from(
    select id=isnull(min(a.id),(select max(id) from tb))
    from(
        select id from tb
        union all
        select distinct left(id,4)+'0000' from tb
    )a left join(
        select id=max(id) from tb group by left(id,4)
    )b on a.id=b.id
    where b.id is null and     not exists(
        select * from tb where id=left(a.id,4)+right(10001+right(a.id,4),4))
)a

--查询处理2(最小编号为表中每组的最小编号)
select 新id=left(id,4)+right(10001+right(a.id,4),4)
from(
    select id=isnull(min(a.id),(select max(id) from tb))
    from tb a left join(
        select id=max(id) from tb group by left(id,4)
    )b on a.id=b.id
    where b.id is null and     not exists(
        select * from tb where id=left(a.id,4)+right(10001+right(a.id,4),4))
)a
go

--删除测试
drop table tb

/*--测试结果

新id              
----------------
10020001

(所影响的行数为 1 行)


新id              
----------------
10030002

(所影响的行数为 1 行)
--*/
### SQL 查询语句示例教程 #### 使用 `LIKE` 关键字进行模糊匹配查询 为了查找特定模式的数据记录,可以使用 `LIKE` 关键字配合通配符 `%` 来实现模糊搜索功能。例如要找出名字中含有“嘎嘎嘎”的所有记录: ```sql SELECT Id AS id, Name AS name FROM table_example WHERE Name LIKE '%嘎嘎嘎%' ``` 这条命令会返回字段名为 `Name` 中含有字符串“嘎嘎嘎”的所有行数据[^1]。 #### 创建多张关联表格结构定义 当构建数据库应用时经常需要设计多个相互之间存在关系的实体模型,在这里展示如何建立三张表——分别是学生基本信息表 (`student`)、课程信息表(`course`)以及成绩记录表(`SC`)来表示学校教务管理系统中的部分逻辑架构: - **学生表 (Student)** 存储学生的学(Sno),姓名(Sname),性别(Ssex),年龄(Sage) 和所在院系(Sdept) ```sql CREATE TABLE student ( Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) UNIQUE, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) ); ``` - **课程表 (Course)** 记录每门课编号(Cno),名称(Cname),先修课程代(Cpno)(可为空),学分(Ccredit): ```sql CREATE TABLE course( Cno CHAR(4) PRIMARY KEY, Cname CHAR(40) NOT NULL, Cpno CHAR(4), Ccredit SMALLINT ); ``` - **选课情况表(SC)** 描述哪些同学选择了哪几门科目并给出相应分数: ```sql CREATE TABLE SC( Sno CHAR(9), Cno CHAR(4), Grade SMALLINT ); ``` 上述代码片段展示了怎样通过 SQL DDL(Data Definition Language 数据定义语言)指令完成这组具有内在联系的对象建模工作[^2]。 #### 复杂条件下的聚合分析操作 对于更复杂的业务需求场景下,则可能涉及到组合多种运算符来进行精确筛选或是基于某些维度做汇总统计的任务。比如下面这段脚本就实现了这样一个目标:获取超过三十周岁以上的注册者分布状况报告;具体来说就是计算各个地区内满足该年龄段限制的人数总和,并按照这个数值大小排列取前三名输出结果集。 ```sql SELECT city, COUNT(*) AS user_count FROM users WHERE age > 30 GROUP BY city HAVING COUNT(*) > 5 ORDER BY user_count DESC LIMIT 3; ``` 此段程序首先过滤掉了不符合年龄范围内的个体样本点,接着依据居住地属性进行了分类计数处理得到初步的结果集合;之后利用 HAVING 进一步限定只有那些成员数目不少于六个的城市才会被纳入最终呈现列表之中;最后再依照人数多少实施逆向排序选取排名最靠前三个条目作为答复内容的一部分[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值