GaussDB データベース SQL シリーズ - UNION & UNION ALL

目次

I.はじめに

二、GaussDB  UNION/UNION ALL

1. GaussDB UNION オペレーター

2. 構文の定義

3. GaussDBの実験例

1.実験台を作成する

2. 結合と重複排除 (UNION)

3. 重複排除なしで結合 (UNION ALL)

4. SQL 結果セットを WHERE 句とマージする (UNION ALL)

5. ビジネスロジック重複排除後のマージ(UNION ALL)

4. GaussDB UNION のよくあるエラー

1、「各 UNION クエリには同じ数の列が必要です」

2、「UNION タイプのタイムスタンプはタイムゾーンなしであり、テキストは一致しません」

V. まとめ

I.はじめに

SQL (Structured Query Language) は、リレーショナル データベースを管理するための標準言語です。これにより、ユーザーは SQL 言語を使用してデータベース内のデータを操作できるようになります。SQL の UNION は、複数の SELECT ステートメントの結果を 1 つの結果セットに結合できる非常に強力な関数です。この記事では、GaussDB データベースを例として、UNION 演算子の使用法を紹介します。

二、GaussDB  UNION/UNION ALL

1. GaussDB UNION オペレーター

GaussDB UNION 演算子は、2 つ以上の SELECT ステートメントの結果セットを結合するために使用されます。UNION 内の各 SELECT ステートメントには同じ数の列が必要であることに注意してください。列にも同様のデータ型が必要です。また、各 SELECT ステートメント内の列の順序は同じである必要があります。

2.構文の定義

1 ) UNION 構文

SELECT column1
      ,column2
	  ,……
FROM table1 
[WHERE condition]
UNION
SELECT column1
      ,column2
	  ,……
FROM table2 
[WHERE condition]

2 ) UNION ALL 構文

SELECT column1
      ,column2
	  ,……
FROM table1 
[WHERE condition]
UNION ALL
SELECT column1
      ,column2
	  ,……
FROM table2 
[WHERE condition]

注: UNION は 2 つ以上のセットをマージするときに重複排除操作を実行しますが、UNION ALL は重複排除を実行せずに 2 つ以上の結果セットを直接マージします。さらに、重複排除の実行には多くの時間がかかるため、実際のアプリケーション シナリオでは、2 つのコレクションに重複データがないことがビジネス ロジックで確認された場合、UNION を UNION ALL に直接置き換えてパフォーマンスを向上させることができます。

3. GaussDBの実験例

この論文では、GaussDB データベースを実験プラットフォームとして使用します。

1.実験テーブルの作成と初期化

1 ) 学生フォームの学生情報(ID、名前、性別、都市)

--创建学生信息表
CREATE table student(
 sId VARCHAR(10) NOT NULL
,sname VARCHAR(10) NOT NULL
,ssex VARCHAR(10) NOT NULl
,scity VARCHAR(10) NOT NULl
);

--初识化实验数据
INSERT INTO student VALUES('s01' , '赵雷' , '男', 'XIAN');
INSERT INTO student VALUES('s02' , '钱电' , '男', 'YUNNAN');
INSERT INTO student VALUES('s03' , '孙风' , '男', 'NIXIA');
INSERT INTO student VALUES('s04' , '李云' , '男', 'XIZANG');
INSERT INTO student VALUES('s05' , '周梅' , '女', 'XINJIANG');
INSERT INTO student VALUES('s06' , '吴兰' , '女', 'CHENGDU');
INSERT INTO student VALUES('s07' , '郑竹' , '女', 'XIAN');
INSERT INTO student VALUES('s08' , '张三' , '女', 'CHENGDU');

--查看结果集
SELECT * FROM student;

2 ) 教師情報フォーム(ID、名前、性別、市区町村) 

--创建教师信息表
CREATE table teacher(
 teid VARCHAR(10) NOT NULL
,tname VARCHAR(10) NOT NULL
,tsex VARCHAR(10) NOT NULL
,tcity VARCHAR(10) NOT NULL
);

--初始化实验数据
INSERT INTO teacher VALUES('t01' , '张磊', '男', 'XIAN');
INSERT INTO teacher VALUES('t02' , '李强', '男', 'BEIJING');
INSERT INTO teacher VALUES('t03' , '王刚', '男', 'XINJIANG');

--查看结果集
SELECT * FROM teacher;

2.結合と重複排除 (UNION)

--生徒と教師が所属する都市を取得し、都市名の最初の文字が昇順に並べ替えます。

SELECT t.city
FROM (
	SELECT scity AS city
	FROM student
	UNION
	SELECT tcity AS city
	FROM teacher
) t
ORDER BY t.city ASC;

結果セットは以下のスクリーンショットに示されているとおりであり、都市データの重複はありません。

3.重複排除なしで結合 (UNION ALL)

--すべての生徒と教師が所属する都市を取得し、都市名の最初の文字が昇順に並べ替えます。

SELECT t.city
FROM (
	SELECT scity AS city
	FROM student
	UNION ALL
	SELECT tcity AS city
	FROM teacher
) t
ORDER BY t.city ASC;

結果セットは以下のスクリーンショットに示されており、すべての都市データがリストされています。

4. SQL 結果セットを WHERE 句とマージする (UNION ALL)

-- 「XIAN」から生徒と教師のすべての情報を取得し、生徒と教師の数で昇順に並べ替えます。

SELECT t.*
FROM  
(SELECT Sid AS id
       ,Sname AS name
       ,Ssex AS sex
       ,Scity AS city
FROM student WHERE Scity='XIAN' 
UNION ALL
SELECT  Tid AS id
       ,Tname AS name
       ,Tsex AS sex
       ,Tcity AS city
FROM teacher WHERE Tcity='XIAN') t
ORDER BY t.id  ASC;

結果セットは以下のスクリーンショットに示されており、「XIAN」の生徒と教師のすべての情報がリストされています。

5.ビジネスロジック重複排除後のマージ(UNION ALL)

たとえば、上流システムが提供する 2 つ以上のテーブルが相互に重複データを保存せず、テーブル自体にも重複データがない場合、マージ時の SQL パフォーマンスを向上させ、SQL 実行時間を短縮するために、UNION を選択するビジネス シナリオもあります。 ALL 演算子。

4. GaussDB UNION のよくあるエラー

1、「各 UNION クエリには同じ数の列が必要です」

解決策: プロンプトに従って 2 つのテーブルのテーブル構造を確認し、フィールドの数が 1 つであるかどうかを確認します。

2、「UNION タイプのタイムスタンプにはタイムゾーンが含まれておらず、テキストは一致しません」

解決策: プロンプトに従って 2 つのテーブルのテーブル構造を確認し、フィールドの型が一致しているかどうかを確認します。

 

V. まとめ

実際のビジネス シナリオでは、GaussDB データベースを選択する場合でも、他のリレーショナル データベースを選択する場合でも、UNION および UNION ALL を使用する場合は次の点に注意する必要があります。

  • 左側と右側の SQL フィールドの数とタイプは一貫している必要があります。
  • ビジネスでデータの重複排除を考慮する必要があるかどうか (マージ前の重複排除またはマージ中の重複排除)。
  • テーブル内のデータのサイズに応じて、SQL の実行効率を評価し、遷移用の一時テーブルを選択してマージする必要があるかどうかを検討する必要があります。
  • SQLを書くためにSQLを書くことはできず、SQLを書く複雑さを考慮する必要があり、ビジネスニーズに基づいて選択する必要があります。

- 仕上げる

おすすめ

転載: blog.csdn.net/GaussDB/article/details/132269204