記事ディレクトリ
まず、接続テーブルのクエリ
内部結合 (内部結合): 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';