子育てエンジニアブログ

子育てに励むシステムエンジニア(SE)のブログ

【SQL】【SQL Server】交差結合について

SQLで交差結合についてわかっていなかったのでメモ。
今回はDBはSQL Server

よく、下のようなFROM句に複数のテーブル名があってSELECTすることがある。

SELECT * FROM work1,work2;

で、work1にはデータがあってwork2にはデータがない時にSELECTした時に何も表示されないのでナゼ?と思った。

CREATE TABLE #work1
(id int
 ,name varchar(10)
);

CREATE TABLE #work2
(id int
 ,name varchar(10)
);

INSERT INTO #work2
    ([id], [name])
VALUES
    (1, 'test');

select * from #work1,#work2

実行結果
f:id:STSA:20201113214228p:plain

答えは簡単。交差結合をしているかららしい。

交差結合とは2つのテーブルのデータの全ての組み合わせを取得する。
明示的に書くとCROSS JOIN。

つまり次のようなSQLを実行しているのと同じ。

select * from #work1 cross join #work2

どちらにもテーブルのデータがあればSELECTできる。

CREATE TABLE #work1
(id int
 ,name varchar(10)
);

CREATE TABLE #work2
(id int
 ,name varchar(10)
);

INSERT INTO #work2
    ([id], [name])
VALUES
    (1, 'test');

INSERT INTO #work1
    ([id], [name])
VALUES
    (1, 'testwork1');

select * from #work1 cross join #work2

実行結果
f:id:STSA:20201113223549p:plain

そもそもFROM句で,を使って複数テーブル指定してるのが謎だったのだけど、それは交差結合だったのか。
勉強になった。

【Excel】【VBA】VBAでファイル出力するサンプル

VBAでファイル出力するサンプルを作ってみた。

早速ですが、ソースは下記。

'*****************************************************************
'ファイル出力
'*****************************************************************
Sub outputTextFile()

  Const text1 As String = "定型文1"
  Const text2 As String = "定型文2"

  Dim filePath As String
  filePath = ActiveWorkbook.Path & "\" & "outputtest.txt" 'ファイルパス
 
  Dim WB As Workbook
  Set WB = ActiveWorkbook
    
  Dim WS As Worksheet
  'Set WS = WB.Worksheets(1)
  Set WS = WB.Worksheets("Sheet1")
 
  Open filePath For Output As #1
     Print #1, WS.Cells(1, 1).Value
     Print #1, text1 & WS.Cells(1, 1).Value & text2
  Close #1

  MsgBox "ファイルの作成が完了しました。"

End Sub


ファイル出力は作り込めば色々楽できそう。

【Excel】【VBA】VBAで数式が入力されているセルを色付けして数式を表示する方法

Excelで数式が入力されているセルがたくさんあって、固定値を埋め込んでいるところと混ざってしまったので、
どうにか区別できないか調べた結果、VBAで数式が入力されているセルを色付けする方法と数式を表示す方法を見つけたのでメモ。

早速ですが、ソースは下記。

Sub 数式が入力されているセルを色付けする()
  On Error GoTo ERROR
  Cells.SpecialCells(xlCellTypeFormulas).Interior.Color = RGB(181, 255, 20)
  Exit Sub
ERROR:
  Select Case ERR.Number
    Case 1004
      MsgBox "存在しません。"
    Case Else
      MsgBox "エラー"
  End Select
End Sub

下記のようなシートがあった場合に、実行すると、
f:id:STSA:20201111225439p:plain
このように数式が入力されているセルだけ色がつく。
f:id:STSA:20201111225452p:plain
f:id:STSA:20201111225506p:plain

さらに、数式タブ>数式の表示 をすると、式の中身を見れて便利かも。
f:id:STSA:20201111230156p:plain

これをVBAでやるとこんな感じ。

ActiveWindow.DisplayFormulas = True

なので、合わせてるとこんな感じ。

Sub 数式が入力されているセルを色付けして式を表示()
  On Error GoTo ERROR
  Cells.SpecialCells(xlCellTypeFormulas).Interior.Color = RGB(181, 255, 20)
  ActiveWindow.DisplayFormulas = True
  Exit Sub
ERROR:
  Select Case ERR.Number
    Case 1004
      MsgBox "存在しません。"
    Case Else
      MsgBox "エラー"
  End Select
End Sub


下記を参考にさせていただきました。
www.relief.jp