Ballerina.io で MariaDB データベースと SQL LIKE ステートメントを駆使:データ操作の達人になるためのガイド
Ballerina.io は、SQL LIKE ステートメントを使用して、MariaDB データベース内のデータに対するクエリを実行する方法を提供します。LIKE ステートメントは、パターンマッチングを使用して、特定の条件に一致する行を検索するために使用できます。
必要なライブラリ
Ballerina.io で SQL LIKE ステートメントを使用するには、以下のライブラリをインポートする必要があります。
import ballerina/io;
import ballerinax/mysql;
import ballerinax/mysql.driver as _;
クエリの実行
以下のコードは、albums
テーブル内の title
列に "emonad" を含むすべてのアルバムを取得する方法を示しています。
mysql:Client db = check new ("localhost", "root", "password", "MUSIC_STORE", 3306);
public function main() {
string title = "%emonad%";
stream<Album, error?> albumStream = db->query(`SELECT * FROM albums where title like ${title}`);
// ストリームを処理して結果を Album[] またはエラーに変換します。
Album[]|error albums = from Album album in albumStream select album;
io:println(albums);
}
LIKE ステートメントには、パターンを指定するために使用できる 2 つのワイルドカード文字があります。
%
: 0 個以上の任意の文字に一致します。_
: 1 文字に一致します。
例
以下の例は、LIKE ステートメントを使用してさまざまなパターンに一致する行を検索する方法を示しています。
title like '%emonad%'
: "emonad" を含むすべてのタイトルに一致します。
WHERE 句
LIKE ステートメントは、WHERE 句の一部として使用できます。WHERE 句は、クエリ結果をさらに絞り込むために使用される条件式です。
以下の例は、title
列に "emonad" を含み、かつ price
列が 10 ドル以下のすべてのアルバムを取得する方法を示しています。
stream<Album, error?> albumStream = db->query(`
SELECT * FROM albums
WHERE title like '%emonad%' AND price <= 10.0
`);
Ballerina.io で MariaDB データベースと SQL LIKE ステートメントを使用する:サンプルコード
ライブラリのインポート
import ballerina/io;
import ballerinax/mysql;
import ballerinax/mysql.driver as _;
データベースへの接続
mysql:Client db = check new ("localhost", "root", "password", "MUSIC_STORE", 3306);
このセクションでは、さまざまな LIKE ステートメントを使用してデータを取得する方法を示す 3 つの例を紹介します。
例 1:title 列に "emonad" を含むすべてのアルバムを取得
string title = "%emonad%";
stream<Album, error?> albumStream = db->query(`SELECT * FROM albums where title like ${title}`);
例 2:末尾が "monad" であるすべてのアルバムのタイトルを取得
string titleSuffix = "_monad";
stream<string, error?> titleStream = db->query(`SELECT title FROM albums where title like '${titleSuffix}'`);
例 3:最初の文字が "e" で、その後 "monad" を含むすべてのアルバムのタイトルと価格を取得
string titlePattern = "e%monad%";
stream<Record<string, float>, error?> resultStream = db->query(`
SELECT title, price FROM albums
WHERE title like '${titlePattern}'
`);
ストリームの処理
以下のコードは、ストリームを処理して結果を Album[]
またはエラーに変換する方法を示しています。
Album[]|error albums = from Album album in albumStream select album;
io:println(albums);
エラー処理
すべてのデータベース操作にはエラー処理が必要です。以下のコードは、エラーが発生した場合に適切なメッセージを出力する方法を示しています。
if (albums is error) {
io:println("Error: ${albums.error}");
} else {
io:println(albums);
}
コードの説明
db
変数は、MariaDB データベースへの接続を表します。title
変数は、LIKE ステートメントで使用されるパターンを格納します。albumStream
変数は、albums
テーブルからの結果を格納するストリームを表します。albums
変数は、albumStream
ストリームを処理して結果をAlbum[]
またはエラーに変換します。io:println
関数は、コンソールにメッセージを出力します。
実行方法
このコードを実行するには、以下の手順を実行します。
- Ballerina コンパイラをインストールします。
sample.bal
という名前のファイルにコードを保存します。- 以下のコマンドを実行してコードをコンパイルします。
balc sample.bal
./sample
まとめ
このサンプルコードは、Ballerina.io で MariaDB データベースと SQL LIKE ステートメントを使用してデータにアクセスする方法を理解するのに役立ちます。
- このコードはあくまで例であり、ニーズに合わせて変更する必要があります。
- Ballerina.io と MariaDB に関する詳細については、それぞれのドキュメントを参照してください。
Ballerina.io で MariaDB データベースと SQL LIKE ステートメントを使用する:その他の方法
Prepared ステートメントを使用すると、SQL クエリをより安全かつ効率的に実行できます。以下のコードは、Prepared ステートメントを使用して title
列に "emonad" を含むすべてのアルバムを取得する方法を示しています。
mysql:Client db = check new ("localhost", "root", "password", "MUSIC_STORE", 3306);
public function main() {
string title = "%emonad%";
mysql:PreparedStatement stmt = db->prepareStatement(`SELECT * FROM albums where title like ?`);
stmt->setString(1, title);
stream<Album, error?> albumStream = stmt->executeQuery();
// ストリームを処理して結果を Album[] またはエラーに変換します。
Album[]|error albums = from Album album in albumStream select album;
io:println(albums);
}
mysql:Client db = check new ("localhost", "root", "password", "MUSIC_STORE", 3306);
public function main() {
string title = "%emonad%";
stream<Album, error?> albumStream = db->queryParam(`
SELECT * FROM albums
WHERE title like :title
`, ["title": title]);
// ストリームを処理して結果を Album[] またはエラーに変換します。
Album[]|error albums = from Album album in albumStream select album;
io:println(albums);
}
WHERE 句で他の条件を指定する
string title = "%emonad%";
stream<Album, error?> albumStream = db->query(`
SELECT * FROM albums
WHERE title like ${title} AND price <= 10.0
`);
JOIN を使用して、複数のテーブルからデータを結合できます。以下のコードは、albums
テーブルと artists
テーブルを結合して、title
列に "emonad" を含むすべてのアルバムとそのアーティストを取得する方法を示しています。
string title = "%emonad%";
stream<Record<string, string>, error?> resultStream = db->query(`
SELECT albums.title, artists.name
FROM albums
JOIN artists ON albums.artist_id = artists.id
WHERE albums.title like '${title}'
`);
サブクエリを使用して、クエリ内で別のクエリを実行できます。以下のコードは、albums
テーブル内のすべてのアルバムのタイトルと、そのアルバムに関連付けられているジャンルを取得する方法を示しています。
stream<Record<string, string>, error?> resultStream = db->query(`
SELECT albums.title, genres.name
FROM albums
JOIN genres ON albums.genre_id = genres.id
`);
集計関数を使用して、データの集計を取得できます。以下のコードは、albums
テーブル内のすべてのアルバムの平均価格を取得する方法を示しています。
float averagePrice = db->querySingle<float>(`SELECT AVG(price) FROM albums`);
io:println("Average price: ${averagePrice}");
トランザクションを使用すると、複数のデータベース操作を原子的に実行できます。以下のコードは、albums
テーブルに新しいアルバムを追加する方法を示しています。
mysql:Client db = check new ("localhost", "root", "password", "MUSIC_STORE", 3306);
public function main() {
string title = "New Album";
float price = 9.99;
try {
db->beginTransaction();
db->executeUpdate(`INSERT INTO albums (title, price) VALUES ('${title}', ${price})`);
db->commitTransaction();
sql mariadb where-clause