The database is MS SQL Server 2012, and the data used is the test data in the product account set. サンプル フィールドの意味は次のとおりです。
XSDD | 販売注文 | CGDD1 | 注文書 | DJLX | ドキュメントタイプ |
XSDDMX | 受注明細 | CGDD2 | 注文書の詳細 | YWRQ | 営業日 |
DDLS | ご注文の流れ | LSBH | シリアルナンバー | FKKHMC | お支払いのお客様名 |
結合クエリと左右の結合
1.クロスコネクション
SELECT * FROM XSDD,XSDDMX WHERE XSDD_DDLS = '51'
XSDDMX は合計 4738 行、XSDD は合計 2803 行です。上記のクエリの結果は 4738 行で、これは実際には DDLS が 51 の列と XSDDMX の列の積です。
この一般的に使用される接続方法は暗黙的相互接続と呼ばれ、2 つのテーブル間のカンマを変更して交差させる別の方法は明示的と呼ばれます。
2、内部接続
SELECT * FROM XSDD,XSDDMX WHERE XSDD_DDLS = XSDDMX_DDLS
同様に、明示的なクエリ メソッドがあり、これら 2 つのメソッドの結果は同じであり、どちらも接続条件とクエリ条件を満たす接続テーブルのデータ行を返します。
SELECT * FROM XSDD inner join XSDDMX on XSDD_DDLS = XSDDMX_DDLS
3. 外部接続
左外部結合:
SELECT XSDD_DDLS,CGDD1_LSBH FROM XSDD LEFT OUTER JOIN CGDD1 ON XSDD_DDLS = CGDD1_LSBH
XSDD は合計 2803 行、CGDD1 は合計 1587 行あり、クエリ結果は 2803 行で、クエリ結果には XSDD のシリアル番号がすべて含まれていることがわかります。CGDD1 で該当しない部分については、 、 CGDD1 の列が NULL として表示されます。結果は次のようになります。
右外部結合:
SELECT XSDD_DDLS,CGDD1_LSBH FROM XSDD RIGHT OUTER JOIN CGDD1 ON XSDD_DDLS = CGDD1_LSBH
クエリ結果は 1587 行で、クエリ結果は右の図のようになりますが、実際には次のように簡単にまとめることができます: NULL は LEFT の右側、NULL は RIGHT の左側
キーワード: グループ化
これは非常に一般的に使用されるキーワードですが、当初、この機能の習熟度が低いため、効率に影響を与えるいくつかの問題が発生しました。
そのアプリケーションは、実際には統計などの機能に焦点を当てています。
INSERT INTO XSFXHZ
SELECT XSFXMX_DJLX,'KH',XSFXMX_FKKH,XSFXMX_FKKHMC,'93',ISNULL(sum(XSFXMX_HSJE),0) ,
XSFXMX_ZGBH FROM XSFXMX
WHERE XSFXMX_YWRQ BETWEEN CONVERT(varchar(8),@year)+@s3sta AND
CONVERT(varchar(8),@year)+@s3end
GROUP BY XSFXMX_DJLX,XSFXMX_ZGBH,XSFXMX_FKKH,XSFXMX_FKKHMC
ここで照会されるフィールドは固定値である必要があり、グループ化機能と組み合わせると、これらのフィールドは実際には 3 つのタイプに分けられると結論付けることができます。
- 1つ目は「KH」「93」などの既製の弦です
- 2 番目は、XSFXMX_DJLX など、グループ化してクエリを実行するフィールドです。
- 3つ目は集計関数で、このグループ内の対応する計算列の計算結果値を計算します(多くの場合、sumやmaxなど)。
Group Byのフィールドはカンマでつないでいます.クエリ結果では,これらのフィールドの1つが異なる場合,それは独立してグループを形成します.具体的には,いくつかの異なるグループがあります.これは実際には順列と組み合わせの問題です. .
キーワード: union および union all
関数は 2 つのクエリの結果セットをマージすることであり、結果フィールドの名前は最初のクエリの結果に従います。
SELECT CGDD1_LSBH FROM CGDD1
UNION
SELECT XSDD_DDLS FROM XSDD
2 つの違いは、union all は重複を削除しないことです。
SELECT CGDD1_LSBH FROM CGDD1
UNION ALL
SELECT XSDD_DDLS FROM XSDD
関数
関数の内容は実行後にデータベースに保存されるため、実行後にステートメントまたはストアド プロシージャ内で直接呼び出すことができます。
SQL では、関数は次の 3 つのカテゴリに分類されます。
- 組み込み関数: システムによって提供され、変更することはできません
- スカラー関数: 単一の値を返すユーザー定義関数
- テーブル値関数: テーブル値を返します
今回は、プロジェクトでテーブル値関数を使用し、次のように記述します。
if exists(select * from sys.objects where name = 'GetDwqxFun') drop function GetDwqxFun;
go
CREATE FUNCTION GetDwqxFun(@zgid nvarchar(30))
RETURNS @TempDwlb TABLE
(
id nvarchar(30)
)
AS
BEGIN
--
INSERT INTO @TempDwlb
SELECT @zgid,ZWZGZD_ZGMC FROM ZWZGZD
END
特定の形式に注意してください。関数値の戻りテーブルに値を割り当てることを忘れないでください。
その他の一般的に使用される組み込み関数
getDate()
この関数の機能は、現在のシステム日付を取得することであり、その効果は次のとおりです。
SELECT GETDATE() now
変換()
この関数の役割は、日付を新しいデータ型の一般的な関数に変換することです。上記のものと一緒に使用できます。効果は次のとおりです。
SELECT CONVERT(varchar(100), GETDATE(), 112)
人々がツールとしてよく使う SQL は、仕事でビジネス機能を実装するためだけに使用すると、操作が非常にシンプルで便利になるため、使用しないとすぐに忘れてしまう可能性があります。