SQL

複合インデックスの効果と注意点

概要 インデックスには複合インデックスというものがあります。 これは単一のカラムではなく、複数のカラムを組み合わせてインデックスを貼るもので、組み合わせで検索されるカラムに貼ると効率的です。 複合インデックスを使うにあたって、いくつか注意点が…

ChatGPTにSQLの集計と集計結果に対するcase文について説明してもらいました

はじめに 自分は普段SQLなどの小ネタをブログに書いたりしているのですが、説明のためにテーブルを用意したりするのはちょっと面倒です。 なのでやりたいことだけ書いて、全部解説してデータも例示してもらうことにしました。 こちらの仕事としては、集計し…

GROUP_CONCATでグループ化された行のカラムの値を連結して出力する

概要 グループ化された行のカラムの内容も表示したい時などに使うGROUP_CONCAT()について記載します 実行環境:MySQL5.6 SQL CREATE TABLE classroom ( classroom_id INT PRIMARY KEY, classroom_name VARCHAR(50) NOT NULL, capacity INT NOT NULL ); CREAT…

MySQLのSelect句で日付の差分を取得する方法と分単位の差分について

使用例 例えば最初にレコードが作られた日付と、何らかの処理が完了した日付の差分を取得するときなどに使うかと思います select created, finished, TIMESTAMPDIFF(MINUTE, created, finished) AS '分差分' from table order by id desc MySQLのDIFF関数は…

DB設計~第一正規化から第三正規化

はじめに 商品の注文履歴テーブルを作成する、という題材でDB設計(第一正規化から第三正規化まで)を考えていきます。 カラムは簡潔にするためにシンプルにしています。 第一正規化 これは単に一つのカラムに一つの値が入っている状態で、以下のような形で…

insert文のvaluesで副問い合わせを使う書き方メモ

SQL

テーブル名などは適当です。 このSQLの場合、anyというカラムにvaluesにある副問い合わせの結果がinsertされます。 insert into table1( any ) values ( ( select id from table2 where id = 5 ) );

副問い合わせの結果をJoinするSQLメモ

SQL

table名等は適当です。 select * from nTable left join ( select * from leftTable inner join anyTable on leftTable.id = anyTable.leftTableId ) leftResult on nTable.any = leftResult.any

MyBatisの動的SQLでchoose, when, otherwise構文を使用

MyBatisの条件式 MyBatisの動的SQLでif elseを使用したい場合、choose, when, otherwise構文を使用する。 MyBatisにはifはあるがelseはない。elseと同様の動きを実現するためにはchoose, when, otherwise構文を使用する。 www.mybatis.org 書き方 <select id="findActiveBlogLike" resultType="Blog"> SELECT * </select>…

Oracle 階層問い合わせ

SQL

oracleDBで再帰処理 参考リンク qiita.com start with~connect byの階層問い合わせはoracle特有の書き方なので、他のRDBでは動かない。