面试必须要知道的 SQL 语法,语句



1、说明:一条 sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段
= a.主键字段 order by a.排序字段

2、说明:前 10 条记录 select top 10 * form table1 where 范围
3、说明:选择在每一组 b 值相同的数据中对应的 a 最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜, 每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
4、说明:包括所有在 TableA 中但不在 TableB 和 TableC 中的行并消除所有重复行而派生出一个结果表 (select a from tableA ) except (select a from tableB) except (select a from tableC)
5、说明:随机取出 10 条数据 select top 10 * from tablename order by newid()
6、说明:随机选择记录 select newid()
7、说明:删除重复记录 Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
8、说明:列出数据库里所有的表名 select name from sysobjects where type='U'
9、说明:列出表里的所有的 select name from syscolumns where id=object_id('TableName')
10、说明:列示 type、vender、pcs 字段,以 type 字段排列,case 可以方便地实现多重选择,类似 select 中的 case。 select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type 显示结果: type vender pcs 电脑 A 1 电脑 A 1 光盘 B 2 光盘 A 2 手机 B 3 手机 C 3
11、说明:初始化表 table1 TRUNCATE TABLE table1
12、说明:选择从 10 到 15 的记录 select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
13.请教一个面试中遇到的 SQL 语句的查询问题 表中有 A B C 三列,用 SQL 语句实现:当 A 列大于 B 列时选择 A 列否则选择 B 列,当 B 列大于 C 列时 选择 B 列否则选择 C 列。 示例如下: select (case when a>b then a else b end ), (case when b>c then b esle c end) from table_name
14.面试题:一个日期判断的 sql 语句? 请取出 tb_send 表中日期(SendTime 字段)为当天的所有记录?(SendTime 字段为 datetime 型, 包含日期与时间) 示例如下: select * from tb where datediff(dd,SendTime,getdate())=0
15.有一张表,里面有 3 个字段:语文,数学,英语。其中有 3 条记录分别表示语文 70 分,数学 80 分,英语 58 分,请用一条 sql 语句查询出这三条记录并按以下条件显示出来(并写出您的思路): 大于或等于 80 表示优秀,大于或等于 60 表示及格,小于 60 分表示不及格。 显示格式: 语文 数学 英语 及格 优秀 不及格 示例如下: select (case when 语文>=80 then '优秀' when 语文>=60 then '及格' else '不及格') as 语文, (case when 数学>=80 then '优秀' when 数学>=60 then '及格' else '不及格') as 数学, (case when 英语>=80 then '优秀' when 英语>=60 then '及格' else '不及格') as 英语, from table
16.在 sqlserver2000 中请用 sql 创建一张用户临时表和系统临时表, 里面包含两个字段 ID 和IDValues,类型都是 int 型,并解释下两者的区别? 用户临时表:create table #xx(ID int, IDValues int) 系统临时表:create table ##xx(ID int, IDValues int) 区别: 用户临时表只对创建这个表的用户的 Session 可见,对其他进程是不可见的. 当创建它的进程消失时这个临时表就自动删除. 全局临时表对整个 SQL Server 实例都可见,但是所有访问它的 Session 都消失的时候,它也自动删除.
17.sqlserver2000 是一种大型数据库,他的存储容量只受存储介质的限制,请问它是通过什么方式实现这种无限容量机制的。 它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQL Server 的存储容量是可以扩大的. SQL Server 2000 数据库有三种类型的文件: 主要数据文件 主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf。 次要数据文件 次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。 次要数据文件的推荐文件扩展名是 .ndf。 日志文件 日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是 .ldf。
18.请用一个 sql 语句得出结果 从 table1,table2 中取出如 table3 所列格式数据,注意提供的数据及结果不准确,只是作为一个 格式向大家请教。 如使用存储过程也可以。 table1 -------------------------------- 月份 mon 部门 dep 业绩 yj 一月份 01 10 一月份 02 10 一月份 03 5 二月份 02 8 二月份 04 9 三月份 03 8 table2 部门 dep 部门名称 dname -------------------------------- 01 国内业务一部 02 国内业务二部 03 国内业务三部 04 国际业务部 table3 (result) 部门 dep 一月份 二月份 三月份 -------------------------------- 01 10 null null 02 10 8 null 03 null 5 8 04 null null 9 -------------------------------- 1) select a.部门名称 dname,b.业绩 yj as '一月份',c.业绩 yj as '二月份',d.业绩 yj as '三月份' from table1 a,table2 b,table2 c,table2 d where a.部门 dep = b.部门 dep and b.月份 mon = '一月份' and a.部门 dep = c.部门 dep and c.月份 mon = '二月份' and a.部门 dep = d.部门 dep and d.月份 mon = '三月份' and 2) select a.dep, sum(case when b.mon=1 then b.yj else 0 end) as '一月份', sum(case when b.mon=2 then b.yj else 0 end) as '二月份', sum(case when b.mon=3 then b.yj else 0 end) as '三月份', sum(case when b.mon=4 then b.yj else 0 end) as '四月份', sum(case when b.mon=5 then b.yj else 0 end) as '五月份', sum(case when b.mon=6 then b.yj else 0 end) as '六月份', sum(case when b.mon=7 then b.yj else 0 end) as '七月份', sum(case when b.mon=8 then b.yj else 0 end) as '八月份', sum(case when b.mon=9 then b.yj else 0 end) as '九月份', sum(case when b.mon=10 then b.yj else 0 end) as '十月份', sum(case when b.mon=11 then b.yj else 0 end) as '十一月份', sum(case when b.mon=12 then b.yj else 0 end) as '十二月份', from table2 a left join table1 b on a.dep=b.dep
19.华为一道面试题 一个表中的 Id 有多个记录,把所有这个 id 的记录查出来,并显示共有多少条记录数。 ------------------------------------------ select id, Count(*) from tb group by id having count(*)>1 select * from(select count(ID) as count from table group by ID)T where T.count>1



联系我们 | 友情链接