用sql语句,查询每个班级成绩排名前三名的学生姓名

说实话,在SQL Server里查名字这种事儿,我当年也是磕磕绊绊过来的。
你说的这几点,我帮你捋一捋,尽量说得更像咱们平时聊天。

比如你说的场景,假设有个表叫Employees,里面有两行数据,Name这一列分别是"张三"和"李张"。
你想查所有名字里带"张"的,这事儿用=肯定不行,我试过,直接就报错了。
记得有一次我急着做报表,写了个WHERE Name = '张',结果提示"无法将字符串值与日期/时间/数字值进行比较",当时我愣了几秒,才反应过来不能这么比。

正确姿势是用LIKE。
这个关键字就像个橡皮筋,能圈住你想要的字。
但要注意,LIKE后面不能光跟个字,得加个通配符。
你说的百分号%就是最常用的通配符,它代表"任意多个任意字符"。
所以,查名字里带"张"的,可以这样写:
sql SELECT FROM Employees WHERE Name LIKE '%张%'
这就相当于说:"Name这一列里,只要能找到'张'这个字,不管它前面后面有啥,都给我挑出来"。
结果就会把"张三"和"李张"都给你筛出来。

有意思的是,如果你只写LIKE '张%',那查出来的就只能是姓张的人。
我有个同事当年就是这步搞错,非要加个%在前面,结果系统就只认"张"开头的,连"李张"都没找到,最后把数据查不全还急得满头大汗。

还有个坑是前后都得加%。
你说的"如果想要前后都有关键字'张',那么一定要在前后都加百分号",这特别关键。
比如你要查叫"张张"的人,或者"张爱张"这种,就得写成LIKE '%张%张%'。
我记得有个客户数据特别奇葩,有人叫"张三张",有人叫"张张三",如果只写'张%'就全漏了。
最后改用'张%张%'才搞定,当时看着SQL跑出来的结果,还挺有意思。

不过要注意,LIKE查询效率可能不高,特别是大数据表。
我之前负责一个百万级用户表,用LIKE '%张%'查数据,跑了好几分钟。
后来改用全文索引才快起来。
但说实话,这技术细节得另说,你问的是基础用法,这几点肯定得记住:查姓名带某字用LIKE,前后加%实现任意位置匹配。

Oracle查询前几条数据的方法

2 02 3 年,我那个朋友问我Oracle数据库里怎么实现类似SQL Server的SELECT TOP功能。
我说,其实挺简单的,Oracle没有直接的SELECT TOP,我们得用ORDER BY和ROWNUM来玩。

上周,我教他先从表里选出需要的列,比如学生的ID和姓名,然后按姓名排序。
接着,用子查询加ROWNUM,这个ROWNUM是从1 开始的,然后我们在WHERE子句里让它小于等于1 0,这样就能选出前1 0条记录了。

我那个朋友说,那要查第1 00到1 5 0条记录怎么办?我就说,可以用ROW_NUMBER()函数,这样能更好地分区和排序。

我给他写了个例子,他说这挺高级的。
然后我又说,如果你想用ROWNUM,也可以,但得手动计算,可能效率不高。

他说,那我还是用ROW_NUMBER()吧,听起来更高效。
我说,你看着办,不过我确实推荐用这个方法。
他笑了笑,说好的,谢谢你。
我也就没再说什么,算了。

sql查询语句:top n的用法

嗯,记得上次帮小李写报表,他那个SQL写了好几版。
一开始用TOP3 ,结果数据明明是按销量降序的,但他看的是销量升序,最后发现是ORDER BY写反了。
所以字段名对不对,真得仔细核对。
而且,小李用的SQL Server,他说那个TOP后面直接跟数字就行,他朋友在Oracle那边,就得用ROWNUM,搞得我都有点混乱了。
等等,还有个事,他那个表有上万条记录,用TOP3 的时候,其实数据库是全表扫描了,虽然只是前三条,但性能上还是有点影响,这点也得注意。
突然想到,如果表结构特别复杂,比如有视图或者计算字段,那TOP关键字用起来会不会更麻烦?