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 列適応レイアウト実装の詳細な説明

推薦する

CSSは、入力ボックスのフローティングテキスト効果を実現するために、placeholder-shown疑似クラスを使用します。

この記事では、:placeholder-shown 疑似クラスを使用して、純粋な CSS で浮動疑問...

Vue computedのキャッシュ実装原理の詳細な説明

目次計算結果を初期化する依存関係の収集アップデートを配布する総括するこの記事では、計算された初期化と...

16進カラーコード(完全版)

赤とピンク、およびそれらの 16 進コード。 #990033 #CC6699 #FF6699 #FF...

オブジェクト内のフィールドを削除する js メソッド

この記事では主に、オブジェクト内のフィールドを削除するための js の実装を紹介し、次のように共有し...

JavaScript 関数呼び出し、適用、バインド メソッドのケース スタディ

要約する1. 類似点どちらも、ターゲット関数が実行されると内部の this ポインターを変更できます...

WeChatアプレット学習ノート: ページ構成とルーティング

最近、小さなプログラムの開発を勉強して見直しており、学習結果のいくつかをメモしています。公式の We...

フロントエンド開発における一般的なテクニックのまとめ

1. 記事タイトルリストの右側に日付を表​​示する方法:コードをコピーコードは次のとおりです。 &l...

クラウドネイティブテクノロジー Kubernetes (K8S) の紹介

目次01 Kubernetes とは何ですか? 02 KubernetesとCompost+Swar...

JavaScriptカルーセルの実装について

今日もとても実践的な事例です。名前を聞くだけで高度で難しそうですよね?今日はカルーセル画像の真髄を簡...

小規模プログラムへのデータキャッシュ機構の応用と実装

ミニプログラムデータキャッシュ関連知識データ キャッシュ: データをキャッシュして、アプレットを終了...

最高の無料英語フォント33選を紹介

チャンクファイブフリータイプファミリーCuprum JAH I フリーフォントイェセヴァブークレフィ...

Linux で誤って削除したメッセージ ファイルを復元する方法

プロセスで使用されていて、誤って削除されたファイルがある場合、それらを回復することができます。プロセ...

Vue での keepAlive の使用例の詳細な説明

開発においては、一覧から詳細ページにジャンプし、また詳細ページに戻る際に一覧ページの状態(スクロール...

マウスを置いたときに半透明効果のテキスト説明を実現するための純粋な CSS (初心者は必読)

効果は以下のとおりです。 例1 例2:例1[結婚式の計画]を例にとるHTML: <div cl...

位置固定オフセット問題を解決する方法の詳細な説明

質問CSS 固定配置の position:fixed は非常に使いやすいです。ブラウザのビューポート...