SQL文と構造を理解する:MariaDBにおける数値リテラル
数値リテラルの種類
MariaDBで扱える数値リテラルは、大きく以下の3種類に分類されます。
整数リテラル
10進数、8進数、16進数で表される整数値です。- 10進数
123
,-1000
,0
- 8進数
0644
,012
- 16進数
0xCAFE
,0xF0
- 10進数
小数リテラル
小数点を含む数値を表します。指数表記も可能です。12.3
,-5.67
,3.14e2
(3.14 x 10^2)
特殊な数値リテラル
特定の意味を持つ数値を表します。NULL
: 値が存在しないことを示します。NaN
: 数値ではないことを示します。Infinity
: 正の無限大を表します。
数値リテラルの型
数値リテラルは、格納するデータ型に応じて型が自動的に割り当てられます。
- 小数リテラル:
DECIMAL
,FLOAT
,DOUBLE
など - 整数リテラル:
INT
,BIGINT
,SMALLINT
など
必要な精度や範囲に応じて適切な型を選択することが重要です。
数値リテラルは、様々なSQL文で使用できます。以下に例を示します。
- 条件式における数値の比較
SELECT * FROM products WHERE price < 50;
- 計算式における数値の使用
SELECT order_id, product_id, quantity * unit_price AS total_price FROM orders;
- 列への値の代入
INSERT INTO customers (id, name, price) VALUES (1, 'John Doe', 12.50);
- 文字列リテラルの中に数値を含める場合は、数値リテラルを
CAST
関数で変換する必要があります。 - 数値リテラルは、変数や式に代入することもできます。
数値リテラルの型と使用方法
-- 整数リテラル
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
age SMALLINT NOT NULL
);
INSERT INTO customers (name, age) VALUES ('John Doe', 30), ('Jane Doe', 25);
SELECT id, name, age FROM customers;
-- 小数リテラル
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL
);
INSERT INTO products (name, price) VALUES ('Laptop', 1299.99), ('Phone', 649.99);
SELECT id, name, price FROM products;
-- 特殊な数値リテラル
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT NOT NULL,
order_date DATE NOT NULL,
total_amount DECIMAL(10,2) NOT NULL
);
INSERT INTO orders (customer_id, order_date, total_amount) VALUES (1, '2024-06-21', 234.50);
SELECT id, customer_id, order_date, total_amount FROM orders;
数値リテラルの演算
以下のコード例は、MariaDBにおける数値リテラルの演算を示しています。
SELECT 10 + 5 * 2; -- 結果: 20
SELECT 10 / 2; -- 結果: 5.0
SELECT 10 ^ 2; -- 結果: 100
SELECT -10; -- 結果: -10
数値リテラルの関数
以下のコード例は、MariaDBにおける数値リテラルの関数使用を示しています。
SELECT ABS(-10); -- 結果: 10
SELECT SQRT(16); -- 結果: 4.0
SELECT POW(2, 3); -- 結果: 8.0
SELECT ROUND(12.345, 2); -- 結果: 12.34
SELECT * FROM customers WHERE age > 25;
SELECT * FROM products WHERE price < 500;
SELECT * FROM orders WHERE total_amount IS NULL;
代替方法とその利点
パラメータ化されたクエリ
利点: * SQLインジェクション対策になる * コードの再利用性が高まる * 可読性が向上する
例:
-- 整数リテラル SELECT * FROM products WHERE price < 50; -- パラメータ化されたクエリ SET price_limit = 50; SELECT * FROM products WHERE price < :price_limit;
関数
利点: * コードをモジュール化できる * 複雑な計算をカプセル化できる * 可読性が向上する
-- 整数リテラル SELECT id, name, age * 2 AS double_age FROM customers; -- 関数 CREATE FUNCTION double_age(age INT) RETURN age * 2; SELECT id, name, double_age(age) AS double_age FROM customers;
変数
利点: * コードを簡潔に記述できる * 計算結果を再利用できる
-- 整数リテラル SET age_limit = 30; SELECT * FROM customers WHERE age > 30; -- 変数 SET age_limit = 30; SELECT * FROM customers WHERE age > age_limit;
算術演算子
利点: * コードを簡潔に記述できる * 既存の列を数値として操作できる
-- 整数リテラル SELECT id, name, price + 10 AS discounted_price FROM products; -- 算術演算子 SELECT id, name, price + 0.1 * price AS discounted_price FROM products;
どの代替方法が適切かは、状況によって異なります。
- 既存の列を数値として操作したい場合は、算術演算子を使用する必要があります。
- コードを簡潔に記述したい場合は、変数を使用する必要があります。
- コードの再利用性を高めたい場合は、関数を使用する必要があります。
- セキュリティが重要な場合は、パラメータ化されたクエリを使用する必要があります。