Select
Bob を使用した MySQL の SELECT クエリの例を以下に示します。
基本的な SELECT
SELECT sm.id, sm.name
FROM seeded_models sm
WHERE sm.id > ?
ORDER BY sm.id
LIMIT ?
mysql.Select(
sm.Columns("id", "name"),
).From(
sm.Name().As("sm"),
).Where(
sm.ColByName("id").GT(mysql.Arg(100)),
).OrderBy(
sm.ColByName("id"),
).Limit(10)
JSON 操作
MySQL の JSON 関数を使用した SELECT:
SELECT JSON_EXTRACT(data, '$.name') as name
FROM users
WHERE JSON_EXTRACT(data, '$.age') > ?
mysql.Select(
mysql.F("JSON_EXTRACT", mysql.Quote("data"), mysql.Arg("$.name")).As("name"),
).From("users").
Where(
mysql.F("JSON_EXTRACT", mysql.Quote("data"), mysql.Arg("$.age")).GT(mysql.Arg(25)),
)
REGEXP を使用した検索
SELECT * FROM users WHERE email REGEXP ?
mysql.Select(mysql.Raw("*")).
From("users").
Where(
mysql.Quote("email").Regexp(mysql.Arg("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$")),
)
GROUP BY と HAVING
SELECT department, COUNT(*) as count
FROM employees
GROUP BY department
HAVING count > ?
mysql.Select(
mysql.Quote("department"),
mysql.F("COUNT", mysql.Raw("*")).As("count"),
).From("employees").
GroupBy(mysql.Quote("department")).
Having(
mysql.Quote("count").GT(mysql.Arg(5)),
)
UNION クエリ
SELECT name, 'user' as type FROM users
UNION
SELECT name, 'admin' as type FROM admins
users := mysql.Select(
mysql.Quote("name"),
mysql.Raw("'user'").As("type"),
).From("users")
admins := mysql.Select(
mysql.Quote("name"),
mysql.Raw("'admin'").As("type"),
).From("admins")
users.Union(admins)
サブクエリ
SELECT * FROM users
WHERE id IN (
SELECT user_id FROM orders
WHERE created_at > ?
)
subquery := mysql.Select(mysql.Quote("user_id")).
From("orders").
Where(mysql.Quote("created_at").GT(mysql.Arg(time.Now().AddDate(0, -1, 0))))
mysql.Select(mysql.Raw("*")).
From("users").
Where(
mysql.Quote("id").In(subquery),
)
JOIN 操作
SELECT u.name, p.title
FROM users u
LEFT JOIN posts p ON u.id = p.user_id
WHERE u.active = ?
mysql.Select(
mysql.Quote("u", "name"),
mysql.Quote("p", "title"),
).From(
mysql.Quote("users").As("u"),
).LeftJoin(
mysql.Quote("posts").As("p"),
mysql.Quote("u", "id").EQ(mysql.Quote("p", "user_id")),
).Where(
mysql.Quote("u", "active").EQ(mysql.Arg(true)),
)
これらの例は、Bob を使用して MySQL で実行可能な様々な SELECT クエリパターンを示しています。