MySQL の高度なステートメント (2)

まず、接続テーブルのクエリ

内部結合 (内部結合): 2 つのテーブル内の結合フィールドが等しい行のみを返します。

ここに画像の説明を挿入

左結合 (左結合): 左側のテーブルのすべてのレコードと、右側のテーブルの同じ結合フィールドを持つレコードを含むすべてのレコードを返します。

ここに画像の説明を挿入

右結合 (右結合): 右側のテーブルのすべてのレコードと、左側のテーブルの同じ結合フィールドを持つレコードを含むすべてのレコードを返します。

ここに画像の説明を挿入

#内连接:
SELECT * FROM location A RIGHT JOIN Store_Info B on A.Store_Name = B.Store_Name ;
#左连接
SELECT * FROM location A LEFT JOIN Store_Info B on A.Store_Name = B.Store_Name ;
#右连接
SELECT * FROM location A RIGHT JOIN Store_Info B on A.Store_Name = B.Store_Name ;

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

他の内部結合方法:

SELECT * FROM location A INNER JOIN Store_Info B on A.Store_Name = B.Store_Name ;

SELECT * FROM location A, Store_Info B WHERE A.Store_Name = B.Store_Name;

ここに画像の説明を挿入

ここに画像の説明を挿入

2、ビューの作成 ---- ビュー

ビューとテーブルの違いは、テーブルは実際にデータ レコードを格納するのに対し、ビューはテーブル上に構築された構造であり、実際にはデータ レコードを格納しないことです。
ユーザーがログアウトするかデータベースへの接続が切断されると、一時テーブルは自動的に消えますが、ビューは消えません。
ビューにはデータは含まれず、その定義のみが保存され、一般にビューを使用すると複雑なクエリが簡素化されます。たとえば、複数のテーブルに対して結合クエリを実行し、統計的な並べ替え操作も実行したい場合、SQL ステートメントを記述するのは非常に面倒ですが、ビューを使用して複数のテーブルを結合し、そのビューに対してクエリ操作を実行することは同じです。テーブルに対して操作を実行するのと同じで、クエリも同様で非常に便利です。

语法:CREATE VIEW "视图表名" AS "SELECT 语句";
CREATE VIEW V_REGION_SALES AS SELECT A.Region REGION,SUM(B.Sales) SALES FROM location A 
INNER JOIN Store_Info B ON A.Store_Name = B.Store_Name GROUP BY REGION;

SELECT * FROM V_REGION_SALES;
DROP VIEW V_REGION_SALES;

ここに画像の説明を挿入

3、UNION ---- ジョイントセット

2 つの SQL ステートメントの結果をマージします。2 つの SQL ステートメントによって生成されたフィールドは、同じデータ レコード タイプ
UNION である必要があります。生成された結果のデータ レコード値は繰り返されず、順序に従ってソートされます。畑の

语法:[SELECT 语句 1] UNION [SELECT 语句 2];

UNION ALL :将生成结果的数据记录值都列出来,无论有无重复
语法:[SELECT 语句 1] UNION ALL [SELECT 语句 2];

SELECT Store_Name FROM location UNION SELECT Store_Name FROM Store_Info;

SELECT Store_Name FROM location UNION ALL SELECT Store_Name FROM Store_Info;

ここに画像の説明を挿入

ここに画像の説明を挿入

4. 交差値 - 2 つの SQL ステートメントの結果の交差値を取得します。

SELECT A.Store_Name FROM location A INNER JOIN Store_Info B ON A.Store_Name = B.Store_Name;

SELECT A.Store_Name FROM location A INNER JOIN Store_Info B USING(Store_Name);

ここに画像の説明を挿入

#取两个SQL语句结果的交集,且没有重复
SELECT DISTINCT A.Store_Name FROM location A INNER JOIN store_info B USING(Store_Name);

SELECT DISTINCT Store_Name FROM location WHERE (Store_Name) IN (SELECT Store_Name FROM store_info);

SELECT DISTINCT A.Store_Name FROM location A LEFT JOIN store_info B USING(Store_Name) WHERE B.Store_Name IS NOT NULL;

SELECT A.Store_Name FROM (SELECT B.Store_Name FROM location B INNER JOIN Store_Info C ON B.Store_Name = C.Store_Name) A 
GROUP BY A.Store_Name;

SELECT A.Store_Name FROM 
(SELECT DISTINCT Store_Name FROM location UNION ALL SELECT DISTINCT Store_Name FROM store_info) A 
GROUP BY A.Store_Name HAVING COUNT(*) > 1;

ここに画像の説明を挿入

5、交差値なし

最初のSQL文の結果と、2番目のSQL文と重複しない結果を表示します。

SELECT DISTINCT Store_Name FROM location WHERE (Store_Name) NOT IN (SELECT Store_Name FROM store_info);

SELECT DISTINCT A.Store_Name FROM location A LEFT JOIN store_info B USING(Store_Name) WHERE B.Store_Name IS NULL;

SELECT A.Store_Name FROM 
(SELECT DISTINCT Store_Name FROM location UNION ALL SELECT DISTINCT Store_Name FROM store_info) A 
GROUP BY A.Store_Name HAVING COUNT(*) = 1;

ここに画像の説明を挿入

6. ケース

SQLでIF-THEN-ELSEなどのロジックとして使用されるキーワードです。

语法:
SELECT CASE ("字段名")
  WHEN "条件1" THEN "结果1"
  WHEN "条件2" THEN "结果2"
  ...
  [ELSE "结果N"]
  END
FROM "表名";

#"条件" 可以是一个数值或是公式。 ELSE 子句则并不是必须的。

SELECT Store_Name, CASE Store_Name 
  WHEN 'Los Angeles' THEN Sales * 2 
  WHEN 'Boston' THEN 2000
  ELSE Sales 
  END 
"New Sales",Date 
FROM Store_Info;

#"New Sales" 是用于 CASE 那个字段的字段名。

7、空の値(NULL)と値なし('')の違い

1. 値がない長さは 0 であり、スペースを使用しませんが、NULL 値の長さは NULL で、スペースを使用します。
2. IS NULL または IS NOT NULL は、フィールドが NULL か非 NULL かを判断するために使用され、値がないかどうかを調べることはできません。
3. 値なしの判定には ='' または <>'' を使用します。<> は等しくないことを表します。
4. count() を使用してフィールド統計の行数を指定する場合、NULL 値が見つかった場合は自動的に無視され、値が見つからなかった場合は計算のためにレコードに追加されます。

)

ここに画像の説明を挿入

SELECT length(NULL), length(''), length('1');
SELECT * FROM City WHERE name IS NULL;

ここに画像の説明を挿入

SELECT * FROM city WHERE name IS NOT NULL;
SELECT * FROM city WHERE name = '';
SELECT * FROM city WHERE name <> '';

ここに画像の説明を挿入

SELECT COUNT(*) FROM city;
SELECT COUNT(name) FROM city;

ここに画像の説明を挿入

8、正規表現 ----

一致パターン 説明
^ 一致するテキストの開始文字 '^bd' は bd で始まる文字列と一致します
$ テキストの末尾の文字と一致します 「qn$」は qn で終わる文字列と一致します
任意の 1 文字に一致します 「s.t」は、s と t の間に文字がある任意の文字列と一致します。
* 先行する 0 個以上の文字と一致します 'fo*t' は、任意の o が前にある t と一致します。
+ 前の文字と 1 回以上一致します 「hom+」は、ho で始まり、その後に少なくとも 1 つの m が続く文字列と一致します。
指定された文字列と一致します 「clo」は clo を含む文字列と一致します
p1 p2 p1 または p2 に一致します
[…] 文字セット内の任意の文字と一致します '[abc]' は a、b、または c に一致します
[^…] 括弧内にない任意の文字と一致します '[^ab]' は、a または b を含まない文字列と一致します。
{n} 前の文字列と n 回一致します 'g{2}' は 2 g を含む文字列と一致します
{n,m} 前の文字列と少なくとも n 回、最大で m 回一致します 'f{1,3}' は f に少なくとも 1 回、最大 3 回一致します

文法:

SELECT "字段" FROM "表名" WHERE "字段" REGEXP {模式};
SELECT * FROM store_info WHERE Store_Name REGEXP 'os';
SELECT * FROM store_info WHERE Store_Name REGEXP '\^[A-G]';
SELECT * FROM store_info WHERE Store_Name REGEXP 'Ho|Bo';

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_51728919/article/details/131383476