MySQL での select、distinct、limit の使用

MySQL での select、distinct、limit の使用

1. はじめに

このブログは非常に基本的な内容なので、 MySQL経験がある場合は読み飛ばしてください。このブログを書く目的は初心者向けです。以下では、select を使用して、指定されたテーブルの単一の列、複数の列、またはすべての列を表示する方法について説明します。

まず、次の構造のテーブルを準備します。

名前を設定します utf8mb4;
FOREIGN_KEY_CHECKS = 0 を設定します。

-- ----------------------------
-- ユーザー用テーブル構造
-- ----------------------------
`user` が存在する場合はテーブルを削除します。
テーブル `user` を作成します (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主キー',
  `name` varchar(255) NOT NULL COMMENT 'ユーザー名',
  `age` int(11) NOT NULL COMMENT '年齢',
  `sex` smallint(6) NOT NULL COMMENT '性別',
  主キー (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 デフォルト CHARSET=utf8;

表のデータは次のとおりです。

`user` に VALUES (1, '李子8', 18, 1) を挿入します。
INSERT INTO `user` VALUES (2, '张三', 22, 1);
`user` VALUES (3, '李四', 38, 1) に INSERT INTO します。
`user` VALUES (4, '王五', 25, 1) に INSERT INTO します。
INSERT INTO `user` VALUES (5, '六麻子', 13, 0);
`user` VALUES (6, '田七', 37, 1) に INSERT INTO します。

FOREIGN_KEY_CHECKS = 1 を設定します。

MySQL4.1以降では、データベース キーワードは完全に大文字と小文字を区別しません。データベース名、テーブル名、列名はデフォルトでは大文字と小文字を区別しませんが、変更することができます (推奨されません)。

2. 選択

2.1 単一列のクエリ

まず、 useを使用して操作対象のデータベースを指定します。

mysql> liziba を使用します。
データベースが変更されました

次に、 select使用して、 userテーブルからname列をクエリします。select select後には列名が続き、 fromテーブル名が続きます。

table_name から column_name を選択します。

mysql> ユーザーから名前を選択します。
+--------+
| 名前 |
+--------+
| プラムエイト|
| 張三|
| 李思|
| 王武|
| 劉麻子|
| 天斉|
+--------+
セット内の 6 行 (0.00 秒)

2.2 複数の列のクエリ

複数の列をクエリする場合と単一の列をクエリする場合の違いは、select の後に複数の列名がコンマで区切られて続くことです。

table_name から column_name1、column_name2、column_name3 を選択します。

mysql> ユーザーから名前と年齢を選択します。
+--------+-----+
| 名前 | 年齢 |
+--------+-----+
| プラムエイト | 18 |
| 張三 | 22 |
| 李思 | 38 |
| 王武| 25 |
| 6 つの穴 | 13 |
| 天啓 | 37 |
+--------+-----+
セット内の 6 行 (0.00 秒)

2.3 すべての列をクエリする

すべての列をクエリする方法は 2 つあります。1 つ目は、すべての列名を一覧表示する、上記の 2 つの派生メソッドです。

mysql> ユーザーから id、name、age、sex を選択します。
+----+--------+-----+-----+
| ID | 名前 | 年齢 | 性別 |
+----+--------+-----+-----+
| 1 | プラム 8 | 18 | 1 |
| 2 | 張三 | 22 | 1 |
| 3 | 李思 | 38 | 1 |
| 4 | 王武 | 25 | 1 |
| 5 | 劉麻子 | 13 | 0 |
| 6 | 天斉 | 37 | 1 |
+----+--------+-----+-----+
セット内の 6 行 (0.00 秒)

2 番目のタイプは、一部のプログラマーによって最も一般的に使用されるSQLでもあり、*** ワイルドカード文字 ** を使用してテーブルのすべての列を置き換えます。

テーブル名から*を選択します。

mysql> ユーザーから * を選択します。
+----+--------+-----+-----+
| ID | 名前 | 年齢 | 性別 |
+----+--------+-----+-----+
| 1 | プラム 8 | 18 | 1 |
| 2 | 張三 | 22 | 1 |
| 3 | 李思 | 38 | 1 |
| 4 | 王武 | 25 | 1 |
| 5 | 劉麻子 | 13 | 0 |
| 6 | 天斉 | 37 | 1 |
+----+--------+-----+-----+
セット内の 6 行 (0.00 秒)

ヒント:これはプログラマーにとってタブーです。テーブルのすべての列を取得する必要がなく、テーブルの列名が移植されている場合は、すべてのデータに対してクエリを使用するのではなく、データベース列クエリを指定する必要があります。これにより、クエリのパフォーマンスが向上します。

3. 明確な

一意の列値を持つデータをクエリする必要がある場合は、 distinctキーワードを使用して重複を削除できます。

上記の表に新しいデータを挿入します。データのageはLi Zi Baと同じで、 sexも同じです。

mysql> insert into user (name, age, sex) values('谢礼', 18, 1);
クエリは正常、1 行が影響を受けました (0.01 秒)

年齢列の値が等しいことがわかります

mysql> ユーザーから * を選択します。
+----+--------+-----+-----+
| ID | 名前 | 年齢 | 性別 |
+----+--------+-----+-----+
| 1 | プラム 8 | 18 | 1 |
| 2 | 張三 | 22 | 1 |
| 3 | 李思 | 38 | 1 |
| 4 | 王武 | 25 | 1 |
| 5 | 劉麻子 | 13 | 0 |
| 6 | 天斉 | 37 | 1 |
| 7 | ありがとう | 18 | 1 |
+----+--------+-----+-----+
セット内の行数は 7 です (0.00 秒)

この時点で、 userテーブル内のユーザーの年齢を取得します。 distinctキーワードを使用して、重複排除する必要がある列の前に適用できます。

mysql> ユーザーから個別の年齢を選択します。
+-----+
|年齢|
+-----+
| 18 |
| 22 |
| 38 |
| 25 |
| 13 |
| 37 |
+-----+
セット内の 6 行 (0.00 秒)

ここで注意すべき点が 1 つあります。distinct キーワードのdistinct排除はすべてのフィールドに適用されます。distinct キーワードの後に​​複数distinctフィールドが続く場合、重複していないとみなされるには、複数のフィールドの値が異なっている必要があります。

たとえば、 userテーブルにagename両方に一意のデータがない場合、 distinctキーワードは無効ではありませんが、存在しません。

mysql> ユーザーから個別の年齢、名前を選択します。
+-----+--------+
| 年齢 | 名前 |
+-----+--------+
| 18 | プラムエイト |
| 22 | 張三|
| 38 | 李思|
| 25 | 王武|
| 13 | 6つの穴 |
| 37 | 天斉 |
| 18 | 感謝の贈り物 |
+-----+--------+
セット内の行数は 7 です (0.00 秒)


distinctキーワードに続くフィールド値が等しくない場合でも、 distinctキーワードを使用して重複を削除できます。たとえば、Li Ziba と Xie Li は年齢と性別が同じなので、 distinctキーワードによって 1 つのデータがフィルタリングされます。

mysql> ユーザーから個別の年齢、性別を選択します。
+-----+-----+
| 年齢 | 性別 |
+-----+-----+
| 18 | 1 |
| 22 | 1 |
| 38 | 1 |
| 25 | 1 |
| 13 | 0 |
| 37 | 1 |
+-----+-----+
セット内の 6 行 (0.00 秒)

4. 制限

前のクエリは、条件を満たすすべてのレコードを返します。指定された数のレコードのみが必要な場合は、 limitキーワードを使用して返される行を制限できます。このシナリオは、データのページングによく使用されます。

limitの値は 0 以上の整数である必要があります。負の数または小数が渡されると、エラーが報告されます。

mysql> ユーザー制限 0 から * を選択します。
空のセット (0.00 秒)

mysql> ユーザー制限 1 から * を選択します。
+----+--------+-----+-----+
| ID | 名前 | 年齢 | 性別 |
+----+--------+-----+-----+
| 1 | プラム 8 | 18 | 1 |
+----+--------+-----+-----+
セット内の 1 行 (0.00 秒)

limitで指定された値がテーブルの行レコード値より大きい場合、すべてのデータが返されます。例えば、 select count(1)で user テーブルのレコード値をクエリすると、合計 7 つのデータがあります。このとき、8 を渡してもエラーは発生せず、 MySQLすべてのデータをuserテーブルに戻します。

mysql> ユーザーからcount(1)を選択します。
+----------+
| カウント(1) |
+----------+
| 7 |
+----------+
セット内の1行(0.01秒)

mysql> ユーザー制限 8 から * を選択します。
+----+--------+-----+-----+
| ID | 名前 | 年齢 | 性別 |
+----+--------+-----+-----+
| 1 | プラム 8 | 18 | 1 |
| 2 | 張三 | 22 | 1 |
| 3 | 李思 | 38 | 1 |
| 4 | 王武 | 25 | 1 |
| 5 | 劉麻子 | 13 | 0 |
| 6 | 天斉 | 37 | 1 |
| 7 | ありがとう | 18 | 1 |
+----+--------+-----+-----+
セット内の行数は 7 です (0.00 秒)

limit後には、開始値、終了値、または閉じた間隔 (開始値と終了値を含む) を表す 2 つのパラメータを続けることができます。パラメータが続く場合は終了値を示し、開始値はデフォルトで 0 になります。 MySQLデータのインデックスは 0 から始まることに注意してください。

limit 2 , 4 は、行番号が 2 から 4 の 3 番目から 5 番目のデータ項目を照会することを意味します。

mysql> ユーザー制限 2, 4 から * を選択します。
+----+--------+-----+-----+
| ID | 名前 | 年齢 | 性別 |
+----+--------+-----+-----+
| 3 | 李思 | 38 | 1 |
| 4 | 王武 | 25 | 1 |
| 5 | 劉麻子 | 13 | 0 |
| 6 | 天斉 | 37 | 1 |
+----+--------+-----+-----+
セット内の 4 行 (0.00 秒)

これで、MySQL の select、distinct、limit の使用に関するこの記事は終了です。MySQL の select、distinct、limit の使用に関する詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 選択最適化ソリューションに関する簡単な説明
  • MySQL で結果を選択して更新を実行する例のチュートリアル
  • MySQLの読み書き分離により挿入後にデータが選択されなくなる問題を解決
  • MySQL SELECT文の実行方法
  • MySQL で distinct メソッドを使用する詳細な例
  • MySQL で重複を削除するには、distinct または group by を使用する必要がありますか?
  • MySQL における distinct と group by の違い
  • MySQLのLIMIT文について詳しく説明します
  • union (all) と limit および exists キーワードの使用法を理解するための MySQL シリーズチュートリアル
  • MySQL のクエリパフォーマンスに対する制限の影響

<<:  vue3.0 プロジェクトを素早く構築するための手順を完了する

>>:  CSS 複数 3 列適応レイアウト実装の詳細な説明

推薦する

JavaScript の非同期処理で待機時間を節約できますか?

JavaScriptで非同期実行の結果を同期的に取得するには、 for ループ内でawaitを使用...

MySQL の binlog_format モードと設定の詳細な分析

MySQL レプリケーションには、SQL ステートメント ベースのレプリケーション (SBR)、行ベ...

MySQL エンコーディング utf8 および utf8mb4 utf8mb4_unicode_ci および utf8mb4_general_ci

参考: MySQL 文字セットの概要utf8mb4 は MySQL 8.0 のデフォルトの文字セット...

Vue.js ドロップダウン コンポーネント付きテキストボックス

ドロップダウン付きのテキストボックスを使用すると、ユーザーはドロップダウン リストから入力を選択した...

JConsoler を使って Tomcat の JVM メモリを監視する方法を説明します

目次1. Tomcatを監視する方法2. Java独自の監視コマンド3. Tomcatのトラブルシュ...

Alibaba Cloud SSHリモート接続がしばらくすると切断される問題を解決

問題の再現Alibaba Cloud Server は、Finalshell リモート接続を使用して...

MySQL の最適化: InnoDB の最適化

勉強の計画は簡単に中断され、継続するのが困難です。先日、社内で事業の方向性を調整するための会議があり...

Centos6.5 glibc アップグレードプロセスの紹介

目次シナリオ要件glibc バージョンglibcのインストールglibc ソフトリンクシナリオ要件C...

Node の SMS API で検証コード ログインを実装するためのサンプル コード

1. ノードサーバーのセットアップ + データベース接続ここでの操作は比較的簡単でわかりやすいです。...

ノード スキャフォールディングを使用してトークン検証を実装するサーバーを構築する方法

コンテンツスキャフォールディングを使用してノードプロジェクトを素早く構築するデータベースとやり取りす...

ウェブページでmp3またはフラッシュプレーヤーコードを再生する

コードをコピーコードは次のとおりです。 <オブジェクト id="player1&qu...

MySQLデータをOracleに移行する正しい方法

mysql データベースには student テーブルがあり、その構造は次のとおりです。 Oracl...

Hyper-V インストール CentOS 8 の問題の分析

CentOS 8 がリリースされてから随分経ちました。Linux 仮想マシンをいじっている人間として...

MySQLデータベースでの値の追加、変更、削除、クリアの例

3. MySQLデータ管理最初の方法:お勧めできません。複雑そうです -- 学生テーブルの grad...