ラベル SQL の投稿を表示しています。 すべての投稿を表示
ラベル SQL の投稿を表示しています。 すべての投稿を表示

2023年10月17日火曜日

SQL テーブルにカラムを追加するALTER文を紹介

どうも。どっことです。今回は、既存のテーブルにカラムを追加するALTER文について紹介したいと思います。

テーブルにカラムを追加するALTER文

アプリのアップデートに伴い、もともと管理していたデータテーブルにさらに情報を追加したい、など、どうしてもテーブルにカラムの追加が必要になることがあると思います。そんな時は、ALTERを使って既存のテーブルにカラムを追加することができます。

サンプル①

まずはシンプルなALTER文です。

alter table テーブル名 add column カラム名 型;

テーブル名カラム名は必要な値を設定してください。

サンプル② オプション付き

またオプションとして、初期値を設定することができます。DEFAULT 節を使って初期値を指定します。

alter table テーブル名 add column カラム名 型 default 初期値;

例えば、userというテーブルにage カラムをデフォルト値を18として追加する場合は以下となります。

alter table user add column age int default 18;

まとめ

今回は、既存のテーブルにカラムを追加するALTER文について紹介しました。

新しいテーブルに引っ越したり、そもそも別テーブルで管理するなどの方法もありますが、今回はそんな中での一つの解決案として紹介させていただきました。

SQLはデータベースにおけるデータの永続化をする上で避けることができない技術だと思いますので、頭の片隅にいれておくだけでも開発効率やスピードに違いが出てくると思います。

参考

2023年10月2日月曜日

SQL SQLでもビット演算は計算できる

どうも。どっことです。今回はSQLでのビット演算について備忘録を記載します。

SQLでビット演算

SQLでもビット演算することができます。ビット演算は情報系の学生やエンジニアには基礎的な内容ですが、Androidだけで言えば使うことがあまり多くないかもしれません。

しかし、確かにビット演算による機能実装は行われており、例えばIntentに付与するflagの値はこのビット演算により制御されています。

これをもとに考えると、アプリやデータなどの複数の重複した状態を管理するのに向いていそうです。例えばSNSのコメントの「お気に入り」「リブート/リポスト」「いいね」などを管理するとき、booleanで管理するのが一番シンプルな実現方法ですが、最大値7の整数(000〜111)でまとめてしまう、という管理でも実現することができます。これの嬉しいことは、似たようなデータ要素を追加するとき、例えば「ミュート」を追加する場合にも、変数を追加せずに最大桁数を7→15の整数(0000〜1111)に上げることだけで十分実現できるということです。

変数を追加するというのはプログラムのデータ上だけでなくデータベースのテーブルやAPIでのやりとりにも影響してくるので、このようなOn/Offのデータをビット管理するのは拡張性を意識したときに優れていると考えられます。

積(and)

select 1 & 1; 1
select 1 & 0; 0

和(or)

select 1 | 1; 1
select 1 | 0; 1
select 0 | 0; 0

反転(not)

select ~0; -1
select ~1; 0

左シフト

select 1<<2; 4

右シフト

select 4>>1; 2

2023年8月4日金曜日

SQL 複数のキーを主キーに設定するPRIMARY KEY節を紹介

どうも。どっことです。今回は複数のキーをPRIMARY KEYに設定するSQLを紹介します。

複数のキーをPRIMARY KEYに設定する

まず、前提として主キーが1つだけの場合です。

テーブルを生成する際、1つのキーだけを主キーに設定する場合は以下のようになります。

create table user(id int primary key,  name text);

しかし複数のキーを主キーに設定する場合、上記と同じような形にするとエラーが発生します。

複数のキーを設定する場合は、最後の方にPRIMARY KEY節を追加します。例えばid,subIdを主キーに設定する場合は以下となります。

create table user(id int, subId int, value text, ..., PRIMARY KEY(id, subId));

今回は簡単ですが以上です。

2023年2月17日金曜日

SQL テーブルを内部/外部結合するSQL文を解説

アプリの中でデータベースを実装するとき、いくつかのテーブルを結合させてまとめて情報取得したい機会が多く出てきます。テーブルの結合にはいくつか種類がありますが、使用頻度が多いのは、内部/外部結合でしょうか。

今回は、頑張ってテーブルを設計していい感じに正規化したけど、いざ必要なデータを取ろうとしたときに内部結合/外部結合どう書けばいいんだっけ...という時のために、それぞれの書き方を備忘録として説明します。

内部結合の場合

SELECT * FROM table_a INNER JOIN table_b ON table_a.id = table_b.id

内部結合は、結合する際に結合条件に合致するもののみ一覧として出力される結合方法です。本当に必要なものだけ取得したい、という場合はこちらになると思います。

外部結合の場合

SELECT * FROM table_a LEFT JOIN table_b ON table_a.id = table_b.id

内部結合は合致するもののみ出力してくれる一方で、外部結合は結合する際に結合条件に合致しないものもNULLとして出力してくれる結合方法です。すべての項目を一覧として表示したいなどはこちらになると思います。結合には上記の左外部結合(LEFT OUTER JOIN)だけでなく右外部結合(RIGHT OUTER JOIN)もありますが、今回は省略します。(もしくは追記します。)

移行予定

どうも。どっことです。 タイトルの通りですが、諸事情により GitHubPage に移行予定です。 https://mkt120.github.io/ この備忘録に記載の内容を転記しつつ、今後はこちらのページを更新していく予定です。