MySQLのWhereの使用方法について説明します。
1. はじめに
データベーステーブルのデータの特定のサブセットを取得する必要がある場合、where句を使用してフィルタリングの検索条件を指定することができます。where句は豊富な使用シナリオがあり、MySQLステートメントの中でも特に注目する必要があります。whereには、MySQL以外で実装可能なすべての関数が実装されていますが、MySQLで直接クエリをフィルタリングすると高速でネットワーク転送オーバーヘッドを節約することができます。
2. 本体
まず、以下に示すDDLとテーブルデータを持つUserテーブルを用意し、これをコピーしてそのまま使用できるようにします。
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'username',
`age` int(11) NOT NULL COMMENT 'age',
`sex` smallint(6) NOT NULL COMMENT 'gender',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'Li Zixi', 18, 1);
INSERT INTO `user` VALUES (2, 'Zhang San', 22, 1);
INSERT INTO `user` VALUES (3, '李四', 38, 1);
INSERT INTO `user` VALUES (4, '王五', 25, 1);
INSERT INTO `user` VALUES (5, 'Liu Ma Zi', 13, 0);
INSERT INTO `user` VALUES (6, 'Tian Qi', 37, 1);
INSERT INTO `user` VALUES (7, 'Xie Li', 18, 1);
SET FOREIGN_KEY_CHECKS = 1;
初期状態の並び順は以下の通りです。
mysql> select * from user;
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | Li Zi Hsi | 18 | 1 |
| 2 | Zhang San | 22 | 1 |
| 3 | Li Si | 38 | 1 |
| 4 | Wang Wu | 25 | 1 |
| 5 | Six Pocky | 13 | 0 |
| 6 | Tian Qi | 37 | 1 |
| 7 | Xie Li | 18 | 1 |
+ ----+--------+-----+-----+
7 rows in set (0.00 sec)
2.1 WHERE句の位置
where節はfromの後に位置し、例.
mysql> select * from user where age=18;
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | Li Zi Hei | 18 | 1 |
| 7 | Xie Li | 18 | 1 |
| 8 | Li ZiQi | 18 | 1 |
+ ----+--------+-----+-----+
3 rows in set (0.00 sec)
order byを使用する場合、where節はorder byの前に来ます。
mysql> select * from user where age = 18 order by name;
+ ----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | li zi hii | 18 | 1 |
| 8 | li zi qi | 18 | 1 |
| 7 | Xie Li | 18 | 1 |
+ ----+--------+-----+-----+
3 rows in set (0.00 sec)
2.2 演算子
where節は、以下に示す8つの演算子をサポートしています。
<テーブル 演算子 演算子の説明 = に相当する。 <> とは一致しない ! = とは一致しない < 未満 <= 以下 > より大きい >= 以上 との間 2つの値の間隔 例:BETWEEN 1 AND 100
次に、テーブル演算子を使って、whereサブクエリを1つ1つ実行していきます。
2.2.1 演算子「=」について
演算子は完全一致の問い合わせに使用できますが、MySQL はデフォルトで大文字と小文字を区別しないことに注意してください。
必要条件
名前がplum eightに等しいクエリデータ
ステートメントです。
select * from user where name = 'LiZiHi';
結果
+----+--------+-----+-----+
| ID|名前|年齢|性別
+----+--------+-----+-----+
| 1|LiZiHi|18|1|です。
+----+--------+-----+-----+
セットで1列(0.00秒)
演算子 = は、where 節にマッチするデータが複数ある場合に、そのすべてを返します。また、データの並べ替えを指定する必要がある場合は、order by と組み合わせて、並べ替えを行うことができます。
2.2.2 演算子 <> および !
この2つの演算子は、不等間隔のデータをマッチングさせるという同じ効果を得ることができます。
必要条件
名前がプラムエイトと一致しないデータを問い合わせる
ステートメントです。
select * from user where name <> '李子捌';
select * from user where name ! = 'LiZiHi';
結果
+----+--------+-----+-----+
| ID|名前|年齢|性別
+----+--------+-----+-----+
| 2|チャン・サン|22|1|||。
| 3|リ・シー|38|1
| 4|ワン・ウー|25|1||。
| 5|シックスポッキー|13|0|。
| 6|天啓(てんけい)|37|1||。
| 7|ありがとうございます|18|1||。
| 8|李子奇|18|1|||。
+----+--------+-----+-----+
7列セット (0.00秒)
2.2.3 演算子 <= , <, >=, >
これらの4つの演算子は数値型のカラムデータ比較に使用されますが、テキストフィールドで動作する場合、返される結果が期待したデータでない可能性を除いて、MySQLは同様に実行できます(理論的には誰もそのようにプレイしませんが、エラーは報告されません!)。
必要条件
年齢が20歳以下の全ユーザーを問い合わせる
ステートメントです。
select * from user where age <= 20;
結果
+----+--------+-----+-----+
| ID|名前|年齢|性別
+----+--------+-----+-----+
| 1|LiZiHi|18|1|です。
| 5|シックスポッキー|13|0|です。
| 7|ありがとうございます|18|1|です。
| 8|李子奇(リ・ジーチ)|18|1
+----+--------+-----+-----+
4列セット (0.00秒)
2.2.4 と の間
BETWEEN ANDは、2つの閉じた区間であるため、開始値と終了値を含む2つの範囲の値を問い合わせるために使用されます。例えば、BETWEEN 1 AND 100は、1および100のデータを含みます。
必要条件
年齢が20歳以上50歳以下のユーザーへの問い合わせ
ステートメントです。
select * from user where age between 20 and 50;
+----+------+-----+-----+
| ID|名前|年齢|性別
+----+------+-----+-----+
| 2|チャン・サン|22|1|||。
| 3|リ・シ|38|1|||。
| 4|ワン・ウー|25|1|||。
| 6|ティエン・チー|37|1|||。
+----+------+-----+-----+
4列セット(0.00秒)
2.3 Null値
null値とは、データがないことを意味し、テーブルを構築する際に、その中のカラムがnull値を含むことができるかどうかを指定することができる。nullは、データ型では0、文字型ではスペースと同じ意味ではないことに注意してください。
null 値が null であるクエリに対して、MySQL は特別な where 節を提供します。
必要条件
nameにNULL値を含むクエリデータ
ステートメントです。
select * from user where name is null;
結果
エンプティセット(0.00秒)
userテーブルにnameの値がNULLのデータがないため、データが返されません。nameカラムがNULLでないデータを問い合わせる必要がある場合、どのようにすればよいでしょうか。
今回は、is not nullを使用することができます。
mysql> select * from user where name is not null;
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | Li Zi Hsi | 18 | 1 |
| 2 | Zhang San | 22 | 1 |
| 3 | Li Si | 38 | 1 |
| 4 | Wang Wu | 25 | 1 |
| 5 | Six Pocky | 13 | 0 |
| 6 | Tian Qi | 37 | 1 |
| 7 | Xie Li | 18 | 1 |
| 8 | Li Ziqi | 18 | 1 |
+----+--------+-----+-----+
これは、MySQLの使用に関するこの記事の終わりです、より関連するMySQLの使用に関するコンテンツは、スクリプトハウスの過去の記事を検索してくださいまたは、次の関連記事を閲覧を続けるスクリプトハウスをサポートするために、今後さらに願っています!.
関連
-
MySQLのデータバックアップにmysqldumpを使用する方法
-
mysqlでインデックスに障害が発生する原因は何ですか?
-
MySqlの整数インデックスと文字列インデックスの失敗または暗黙の変換問題
-
SQL基本クエリステートメント
-
MySQLのNULLについて解説した記事
-
[解決済み】MySQL - オペランドは1つのカラムを含む必要があります。
-
[解決済み] 親の行を削除または更新できない:外部キー制約が失敗する
-
[解決済み】文字列からuniqueidentifierに変換する際に変換に失敗する - 2つのGUIDの場合
-
Mysql がエラー 1241 を報告 オペランドは 1 つのカラムを含む必要があります。
-
Djangoマイグレーションエラー 外部キー制約を追加できない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLにおけるorder byの使用方法の詳細
-
MySQLとOracleの一括挿入SQLの汎用的な記述例
-
MySQL サービスとデータベース管理
-
MySQLはこのようなUpdateステートメントを書くべきではありません
-
MySQLインストールチュートリアル(Windows用)詳細
-
MySQLインデックスベースストレステストの実装
-
[解決済み】SQLサーバーのテンポラリーテーブルで「すでに名前のついたオブジェクトがあります」エラーが発生する。
-
mysql5.7のインストールと、無料・長期利用を目的としたNavicateの導入プロセスについて
-
SQLException。オペランドは1列でなければなりません。
-
MySQLの起動エラー:ERROR 2003 (HY000)。localhost'上のMySQLサーバーに接続できない(10061)