【SQL】 LIMIT ~ 出力する行数を制限する ~

【1】LIMIT

* 出力する行数を制限する
* PostgreSQL や Snowflake でも使えるみたい

【2】構文

SELECT [項目1] (, ...)
FROM [テーブル名]
LIMIT ([開始位置(行数],) 取得する行数

【3】サンプル

SELECT * FROM user LIMIT 5

1)出力結果

"1"  "1" "Kim"   "1983-12-11"
"2" "1" "Mike"  "2018-02-02"
"3" "1" "Sam"   "1922-12-30"
"4" "1" "Smith" "2006-07-14"
"5" "1" "Nancy" "2003-08-19"

2)テストデータ

テーブル作成

CREATE TABLE IF NOT EXISTS `user` (
  `id` INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `user_category` INT(11) DEFAULT 1,
  `name` VARCHAR(20) NULL DEFAULT NULL,
  `birthdate` DATE NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

テストデータ

-- REPLACE構文:ユニーク値が重複した場合、古いレコードを削除し、新しいレコードを挿入
REPLACE INTO `user` (`id`, `user_category`, `name`, `birthdate`) VALUES
    (1, 1, 'Kim', '1983-12-11'),
    (2, 1, 'Mike', '2018-02-02'),
    (3, 1, 'Sam', '1922-12-30'),
    (4, 1, 'Smith', '2006-07-14'),
    (5, 1, 'Nancy', '2003-08-19'),
    (6, 1, 'Kachy', '2001-12-01'),
    (7, 2, 'Ken', '1936-05-10'),
    (8, 2, 'Coco', '1979-04-02'),
    (9, 2, 'Tom', '1999-03-17'),
    (10, 2, 'Son', '2000-09-22'),
    (11, 2, 'Tommy', '1929-05-02'),
    (12, 3, 'Carry', '1892-11-23'),
    (13, 3, 'Chan', '1977-11-03');

【4】LIMITあれこれ

1)行数を制限したいが総行数を知りたい

 * 「SQL_CALC_FOUND_ROWS」と「FOUND_ROWS()」を使う

2)公式サイト

https://dev.mysql.com/doc/refman/5.6/ja/information-functions.html#function_found-rows

3)サンプル

SELECT SQL_CALC_FOUND_ROWS * FROM user LIMIT 5;

出力結果

5行データが出力(略)

SELECT FOUND_ROWS();
13

参考文献

http://www.i2kt.com/dbms/sqlref/dml/sql_01011201.html