SQL 面试题
2009-06-24 14:13
375 查看
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
Next Page
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
注释:
并非所有的数据库系统都支持 TOP 子句。
我们可以使用下面的 SELECT 语句:
* FROM Persons[/code]
我们可以使用下面的 SELECT 语句:
* FROM Persons[/code]
结果:
分析:此题其实就是实现一个分页功能。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 子句
Previous PageNext Page
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 表:Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
4 | Obama | Barack | Pennsylvania Avenue | Washington |
SQL TOP 实例
现在,我们希望从上面的 "Persons" 表中选取头两条记录。我们可以使用下面的 SELECT 语句:
SELECT [code]TOP 2
* FROM Persons[/code]
结果:
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
SQL TOP PERCENT 实例
现在,我们希望从上面的 "Persons" 表中选取 50% 的记录。我们可以使用下面的 SELECT 语句:
SELECT [code]TOP 50 PERCENT
* FROM Persons[/code]
结果:
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New |