玖叶教程网

前端编程开发入门

SQL语句查询中怎么限制返回的数据量

TOP, LIMIT, ROWNUM用于规定要返回的记录的数目。对于拥有数千条记录的大型表来说,TOP, LIMIT, ROWNUM是非常有用的。

注:Sqlserver 使用TOP ,MySQL 使用 LIMIT, Oracle使用 ROWNUM。

1、LIMIT语法(Mysql)

SELECT 字段名
FROM 表名
LIMIT 数据数(数字)

2、ROWNUM语法(Oracle)

SELECT 字段名
FROM 表名
WHERE ROWNUM <=数据数(数字)
 

3、TOP语法(Sqlserver)

SELECT TOP 数据数(数字)或者(百分比) 字段名
FROM 表名 

准备测试用表,并构造些测试数据。

4、--建表语句,表test_account

注:下面建表语句在MySQL 中使用。Sqlserver, Oracle中需要修改。

DROP TABLE IF EXISTS `test_account`;
CREATE TABLE `test_account` (
 `id` int(20) auto_increment,
 `realname` varchar(500) NOT NULL,
 `username` varchar(500) NOT NULL,
 `age` int(10) NOT NULL,
 PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB;

5、--插入测试数据

INSERT INTO `test_account`(`id`, `realname`, `username`, `age`) VALUES (1, '管理员', 'admin', 23);
INSERT INTO `test_account`(`id`, `realname`, `username`, `age`) VALUES (2, '大王磊', 'dwl', 23);
INSERT INTO `test_account`(`id`, `realname`, `username`, `age`) VALUES (3, '徐兴昌', 'xxc', 15);
INSERT INTO `test_account`(`id`, `realname`, `username`, `age`) VALUES (4, '陈兴木', 'cmx', 18);
INSERT INTO `test_account`(`id`, `realname`, `username`, `age`) VALUES (5, '蔡晶', 'cj', 12);
INSERT INTO `test_account`(`id`, `realname`, `username`, `age`) VALUES (6, '许君', 'xj', 16);
INSERT INTO `test_account`(`id`, `realname`, `username`, `age`) VALUES (7, '陈兴木', 'mxc', 33);

6、利用存储过程构造些测试数据

drop procedure if exists `all_test_account`
CREATE PROCEDURE `all_test_account`(IN n int)
BEGIN 
 DECLARE i INT DEFAULT 1;
 WHILE (i <= n ) DO
 insert into `test_account` (realname,username,age) select realname,username,floor(rand()*100+rand()) as age from `test_account` order by rand() limit 1
 set i=i+1;
 END WHILE;
END

7、--调用存储过程

call all_test_account(1000);

8、--构造完毕,查询目前数据量,COUNT() 函数返回匹配指定条件的行数。

select count(*) from `test_account`;

9、-- 先查询 " test_account " 表中姓名为 "陈兴木" 的用户有多少

SELECT count(*) FROM test_account where realname='陈兴木';

10、-- 我们查询其中的11条

--Mysql写法
SELECT * FROM test_account where realname='陈兴木' LIMIT 11;
--Oracle写法
SELECT * FROM test_account where realname='陈兴木' ROWNUM <= 11 ;
--Sqlserver写法
SELECT top 11 * FROM test_account where realname='陈兴木';

11、--随机查询数据

--Mysql写法
SELECT * FROM test_account where realname='陈兴木' ORDER BY RAND() LIMIT 11 ;
--Oracle写法
SELECT * FROM test_account SAMPLE(20) where realname='陈兴木' and ROWNUM <=11;
--Sqlserver写法
SELECT top 11 * FROM test_account where realname='陈兴木' order by newid();

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言