第14章の章X
章X
スプライシングフィールド、連結方式の()関数へのスプライス2列
SELECT Concat(vend_name, ' (', vend_country, ')')
FROM vendors
ORDER BY vend_name;
タイプの出力
ACME (USA)
Anvils R US (USA)
データを整理する関数空間RTRIM()で右に不要なデータを削除するには
SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')')
FROM vendors
ORDER BY vend_name;
LTRIM()は、トリム()を削除スペース側左スペースを除去します。
エイリアスを使用して、ASキーワード
SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') AS vend_title
FROM vendors
ORDER BY vend_name;
算術計算
SELECT prod_id,
quantity,
item_price,
quantity * item_price AS expanded_price
FROM orderitems
WHERE order_num = 20005;
章XI
テキスト機能を処理する、アッパー()関数
SELECT vend_name, Upper(vend_name) AS vend_name_upcase
FROM vendors
ORDER BY vend_name;
同様のY.Lieの連絡先の名前と一致するように、発音のSoundex()関数
SELECT cust_name, cust_contact
FROM customers
WHERE Soundex(cust_contact) = Soundex('Y Lie');
日付と時刻の操作関数
SELECT cust_id, order_num
FROM orders
WHERE order_date = '2005-09-01';
ORDER_DATEとは、日付を取得するには、Data()関数と比較して、特定の時間が含まれている場合
SELECT cust_id, order_num
FROM orders
WHERE Date(order_date) = '2005-09-01';
すべての日付は、月に2つのアプローチ一致します
SELECT cust_id, order_num
FROM orders
WHERE Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30';
SELECT cust_id, order_num
FROM orders
WHERE Year(order_date) = 2005 AND Month(order_date) = 9;
後者は、何日の月を心配する必要はありません。
章XII
AVG()関数
SELECT AVG(prod_price) AS avg_price
FROM products;
特定のベンダーの製品の平均価格を返します。
SELECT AVG(prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;
COUNT()関数
COUNT(*)は、NULL値を含む、すべての行をカウントする
特定の列にCOUNT(列)の値を有する行カウントを
SELECT COUNT(*) AS num_cust
FROM customers;
SELECT COUNT(cust_email) AS num_cust
FROM customers;
MAX()関数、非データシーケンス、MAX()関数は、最後の行を返し、NULL値は無視されます
SELECT MAX(prod_price) AS max_price
FROM products;
MIN()関数は、非データ列、MIN()関数は、最上位の行を返し、NULL値は無視されます
SELECT MIN(prod_price) AS min_price
FROM products;
SUM()関数
SELECT SUM(quantity) AS items_ordered
FROM orderitems
WHERE order_num = 20005;
SELECT SUM(quantity*item_price) AS total_price
FROM orderitems
WHERE order_num = 20005;
異なる値の集計、DISTINCT
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;
DISTINCT使用した後、唯一異なる価格の平均を検討
COUNT(DISTINCT)が間違っている、あること、DISTINCT列名は、COUNT(*)のために使用することはできませんが
集約関数の組み合わせ
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM products;
章XIII
グループの作成
SELECT vend_id, COUNT(*) AS num_prods
FROM products
GROUP BY vend_id;
ここでは、各vend_idではなくnum_prod一度、リスト全体に対して計算されます
パケットフィルタリング
SELECT cust_id, COUNT(*) AS orders
FROM orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;
製品prod_price <10をフィルタリングするために、パケットが行われます
SELECT vend_id, COUNT(*) AS num_prods
FROM products
WHERE prod_price >= 10
GROUP BY vend_id
HAVING COUNT(*) >= 2;
GROUP BYはソートORDER BYを使用してのみ頼ることはできません
SELECT order_num, SUM(quantity*item_price) AS ordertotal
FROM orderitems
GROUP BY order_num
HAVING SUM(quantity*item_price) >= 50
ORDER BY ordertotal;
ない最後の1の場合、結果は昇順たOrderTotalにおける結果によると、最後の文を追加する場合は、昇順列order_num従います
SLELCT句の順序
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
第14章
サブクエリ
SELECT order_num
FROM orderitems
WHERE prod_id = 'TNT2';
問い合わせさらにお問い合わせによると、列order_num
SELECT cust_id
FROM orders
WHERE order_num IN (20005, 20007);
問い合わせさらにお問い合わせによると、CUST_ID
SELECT cust_name, cust_contact
FROM customers
WHERE cust_id IN (10001, 10004);
この3件の問い合わせを統合することができます
SELECT cust_name, cust_contact
FROM customers
WHERE cust_id IN (SELECT cust_id
FROM orderts
WHERE order_num IN (SELECT order_num
FROM order_items
WHERE prod_id = 'TNT2'));
性能の限界のために、あまりにも多くのサブクエリを入れ子にすることはできません。
顧客の注文は10001カウントされます
SELECT COUNT(*) AS orders
FROM orders
WHERE cust_id = 10001;
各クライアント行うCOUNT(*)は、このサブクエリとして
SELECT cust_name,
cust_state,
(SELECT COUNT(*)
FROM orders
WHERE orders.cust_id = customers.cust_id) AS orders
FROM customers
ORDER BY cust_name;
このサブクエリで
顧客がCUST_ID 10001、10002、10003、10004、10005を持っている
と10001はCUST_IDで注文、10001、10003、10004、10005有する
顧客のそれぞれについて、従ってCUST_ID、受注CUST_IDでCOUNT(*)戻ります数量インチ