SQL 面试题

1. 表A,有一字段ID为自增字段,但是值不一定是连续的。 用一条SQL语句,查找出表中第31到第40条共10条记录。

 

   分析:此题其实就是实现一个分页功能。Oracle可以用rownum和 order by来实现,其他的DB可以用Top N来实现。

  Oracle实现:

       SELECT ID FROM
       (SELECT ROWNUM recno, ID from A ORDER BY recno)
       WHERE recno >30 AND recno < 41

 

 

 

2. 一新闻管理系统,有articles 和 comments 两个表,表结构如下:

   articles(id, name, content,clickCount)    其中id为主键

   comments(id, article_id, comment) 其中id为主键, article_id为外键,article的主键

   要求用一条SQL语句检索出name,clickCount以及文章的评论数量,如果这个文章没有评论则为0。

 

select name, clickCount, commentCount from(

  select id, name, clickCount,COUNT(article_id)  as commentCount from articles t LEFT OUTER JOIN      comments p ON t.id = p.article_id
  GROUP BY id,name, clickCount)

 

 

 

参考文章:

摘自:http://www.w3school.com.cn/sql/sql_top.asp

SQL TOP 子句

TOP 子句

TOP 子句用于规定要返回的记录的数目。

对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。

注释: 并非所有的数据库系统都支持 TOP 子句。

SQL Server 的语法:

SELECT TOP number|percent column_name(s)
FROM table_name

MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的

MySQL 语法

SELECT column_name(s)
FROM table_name
LIMIT number
例子
SELECT *
FROM Persons
LIMIT 5

Oracle 语法

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number
例子
SELECT *
FROM Persons
WHERE ROWNUM <= 5

原始的表 (用在例子中的):

Persons 表:

IdLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing
4ObamaBarackPennsylvania AvenueWashington

SQL TOP 实例

现在,我们希望从上面的 "Persons" 表中选取头两条记录。

我们可以使用下面的 SELECT 语句:

SELECT TOP 2
 * FROM Persons

结果:

IdLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York

SQL TOP PERCENT 实例

现在,我们希望从上面的 "Persons" 表中选取 50% 的记录。

我们可以使用下面的 SELECT 语句:

SELECT TOP 50 PERCENT
 * FROM Persons

结果:

IdLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值