ホームページ >データベース >mysql チュートリアル >MySQL での複雑なクエリ手法の共有

MySQL での複雑なクエリ手法の共有

WBOY
WBOYオリジナル
2023-06-14 13:08:342017ブラウズ

MySQL は、広く使用されているリレーショナル データベース管理システムです。複雑なクエリは、MySQL を使用する際の非常に一般的な要件の 1 つであり、複雑なクエリ タスクをエレガントに完了する方法は、MySQL ユーザーにとって必須のスキルです。この記事では、読者が MySQL クエリをよりよく習得できるように、MySQL の複雑なクエリ テクニックをいくつか紹介します。

1. WHERE 句を使用してデータをフィルタリングする

WHERE 句は、返される結果セットを制限するために使用される MySQL の非常に一般的な句です。 WHERE 句を使用すると、不要なデータを簡単に除外し、修飾されたデータを返すことができます。 WHERE 句の構文形式は次のとおりです。

SELECT column_name(s) FROM table_name WHERE condition;

このうち、条件はフィルタリングに使用される条件であり、比較条件、範囲条件、NULL 条件、論理演算子、およびワイルドカードなど

たとえば、年齢フィールドが 18 歳以上である Student テーブル内のすべてのレコードをクエリする場合は、次のように記述できます。

SELECT * FROM student WHERE age>=18;

WHERE 句を使用するクエリの効率を大幅に向上させ、結果を制限することができますが、これはニーズの範囲内です。同時に、複数の条件を使用してデータをフィルタリングすることもできます (例:

SELECT * FROM student WHERE age>=18 AND gender='male';

2. JOIN を使用して複数のテーブルをクエリします

JOIN は、で最も広く使用されているクエリ メソッドの 1 つです) MySQL: JOIN を通じて複数のテーブルにクエリを実行し、これらのテーブルの対応するフィールドに基づいて結果セットを結合します。 JOIN 操作では、特定の条件に従って 2 つのデータ セットを結合し、2 つのテーブルを「リンクする」という目的を達成できます。

JOIN 操作には、INNER JOIN、LEFT JOIN、RIGHT JOIN の 3 つがあります。

  1. INNER JOIN

INNER JOIN は最も一般的に使用される JOIN 操作で、2 つのテーブルから同時に条件を満たすレコードを選択します (等結合とも呼ばれます)。 ON 句を使用して結合条件を指定できます。たとえば、学生の名前とクラスの名前をクエリしたい場合は、次のように記述できます。

SELECT student.name, class.class_name FROM student 
INNER JOIN class ON student.class_id=class.id;

このクエリの結果は、学生の名前とクラスの名前を返します。

  1. LEFT JOIN

LEFT JOIN 操作は、左側のテーブルのすべてのレコードと、右側のテーブルに一致するレコード (存在する場合) を返します。右側のテーブルに一致するレコードがない場合は、NULL が返されます。たとえば、クラス名と学生の名前をクエリしたい場合は、次のように記述できます:

SELECT class.class_name, student.name FROM class 
LEFT JOIN student ON student.class_id=class.id;

このクエリ結果は、すべてのクラスの名前と学生の名前を返します (学生がいる場合)、学生がいない場合、名前フィールドには NULL が表示されます。

  1. RIGHT JOIN

RIGHT JOIN 操作は LEFT JOIN 操作と似ていますが、右側のテーブルのすべてのレコードが返され、条件を満たすレコードが返される点が異なります。左側の表にあるものが返されます (存在する場合)。左側のテーブルに一致するレコードがない場合は、NULL が返されます。たとえば、学生の名前とそのクラスの名前をクエリしたい場合は、次のように書くことができます:

SELECT student.name, class.class_name FROM student 
RIGHT JOIN class ON student.class_id=class.id;

このクエリの結果は、すべての学生の名前とそのクラスの名前を返します (一致するものがない場合 条件がクラスの場合、クラス名フィールドには NULL が表示されます。

3. サブクエリの使用

サブクエリとは、1 つのクエリ内に別のクエリをネストすることを指します。 MySQL では、WHERE 句、FROM 句、および SELECT 句でサブクエリを使用できます。サブクエリを使用すると、テーブル内の特定のフィールドの最大値または最小値をクエリするなど、非常に複雑なクエリ要件を実現できます。

たとえば、学生の中で 3 番目に高いスコアを持つ学生の記録をクエリしたい場合は、次のように書くことができます:

SELECT * FROM student WHERE score=(
  SELECT DISTINCT(score) FROM student GROUP BY score ORDER BY score DESC LIMIT 2,1);

このクエリ結果は、次のような学生の記録を返します。生徒の中で3番目に高い得点。

4. 一時テーブルの使用

一時テーブルは MySQL の非常に便利な機能です。実行時に一時テーブルを作成し、クエリ結果をこの一時テーブルに保存して、より複雑なデータ操作を実行できます。 。一時テーブルは、CREATE TEMPORARY TABLE ステートメントを使用して作成するか、SELECT INTO ステートメントを使用して構築できます。

たとえば、長年にわたる学生の平均スコアと最高スコアをクエリしたい場合は、次のように記述できます:

CREATE TEMPORARY TABLE history_score (  
  `stu_id` INT NOT NULL,
  `avg_score` DECIMAL(5,2),
  `max_score` INT,
  PRIMARY KEY (`stu_id`)
);

INSERT INTO history_score(stu_id, avg_score, max_score)
SELECT s.id, AVG(score) AS avg_score, MAX(score) AS max_score FROM score AS sc 
INNER JOIN student AS s ON sc.stu_id = s.id
GROUP BY s.id;

SELECT st.name, sc.avg_score, sc.max_score FROM student AS st 
INNER JOIN history_score AS sc ON st.id = sc.stu_id;

このクエリは、一時テーブルhistory_scoreを作成します。各生徒の長年にわたる平均点と最高点が記録されます。平均点と最高点はこの一時テーブルに保存され、INNER JOIN を使用して生徒の名前とこの一時テーブルのデータが接続され、取得されます。最終的なクエリ結果。

概要

上記の手法を使用すると、MySQL で複雑なデータ クエリを実行し、クエリの効率を向上させ、クエリ結果をよりニーズに合ったものにすることができます。もちろん、複雑なクエリを実行する前に、これらの高度なクエリ技術をより適切に使用できるように、SQL 構文と MySQL のデータ構造と特性を完全に理解する必要があります。

以上がMySQL での複雑なクエリ手法の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。