計算フィールドを作成します。
スプライス
SELECT Concat(vend_name, ' (', vend_country, ')')
AS ven_title
FROM Vendors
ORDER BY vend_name;
計算
SELECT prod_id, quantity, item_price,
quantity*item_price AS expanded_price
FROM OrderItems
WHERE order_num = 20008;
テスト計算
SELECT
ステートメントを確認するために使用することができます正しいかテスト、例えば次のとおりです。
SELECT 2 * 3; -- (will return 6)
SELECT TRIM(' abc '); -- (will return 'abc')
SELECT Now(); -- (will return current time)
データ・ハンドラー
機能
テキスト処理関数
SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
FROM Vendors
ORDER BY vend_name;
SOUNDEX()
ファンクション、英数字モードに代表される音節を記述する任意のアルゴリズムにテキスト文字列は、あいまい音を探すために使用することができます
SELECT cust_name, cust_contact
FROM Customers
WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');
日付と時刻の処理関数
SELECT order_num
FROM Orders
WHERE strftime('%Y', order_date) = 2012
数値ハンドラ
一般的な数学関数はABS() COS() EXP() PI() SIN() SQRT() TAN()
絶対値、余弦、指数関数、PI、正弦波、平方根、正接であります
集約されたデータ
集計関数
AVG
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
カウント
SELECT COUNT(*) AS num_cust
FROM Customers;
MAX
SELECT MAX(prod_price) AS max_price
FROM Products;
MIN
SELECT MIN(prod_price) AS min_price
FROM Products;
和
SELECT SUM(quantity) AS items_ordered
FROM OrderItems
WHERE order_num = 20005;
異なる値の集計
DISTINCT
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
集約関数の組み合わせ
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;
パケットデータ
GROUP BY
グループの作成
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id;
GROUP BY
ではWHERE
、次のステートメント、ORDER BY
ステートメントの前に
パケットフィルタリング
WHERE
ラインフィルタ、HAVING
フィルタパケット
SELECT cust_id, COUNT(*) AS orders
FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;
SELECT句の順序
SELECT - > WHERE - - > GROUP BY - > HAVING - > ORDER BY> FROM
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
WHERE prod_price >= 4
GROUP BY vend_id
HAVING COUNT(*) >= 2;
ORDER BY vend_id
サブクエリを使用します
サブクエリ
サブクエリフィルタ
外向きのプロセスから
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM ORDERItems
WHERE prod_id = 'RGAN01'));
計算フィールドとして、
SELECT cust_name, cust_state,
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id) AS orders
FROM Customers
ORDER BY cust_name;
テーブルの結合
リンク
リンクの作成
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;
デカルト積は、直接2つのテーブルを乗じ、クロスカップリング、結合していない状態と呼ばれます
内側連結
SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;
インナーには知られている結合当量カプラー、平等のテストに基づいて2つのテーブルを
複数のテーブルを結合
SELECT prod_name, vend_name, prod_price, quantity
FROM OrderItems, Products, Vendors
WHERE Products.vend_id = Vendors.vend_id
AND OrderItems.prod_id = Products.prod_id
AND order_num = 20007;
高度なリンク
表の別名
利点は、使用してSQL文の中で何度も同じテーブルをできるように、文を短くすることができます
SELECT cust_name, cust_contact
FROM Customers AS C, Orders AS O, OrderItems AS OI
WHERE C.cust_id = O.cust_id
AND O.order_num = OI.order_num
AND OI.prod_id = 'RGAN01';
自己結合
SELECT C2.cust_id, C2.cust_name, C2.cust_contact
FROM Customers AS C1, Customers AS C2
WHERE C2.cust_name = C1.cust_name
AND C1.cust_contact = 'Jim Jones';
DBMS処理リンクは、はるかに速くサブクエリより
ナチュラルリンク
各列に返さ後、複数回の除外
外部リンク
SELECT Customers.cust_id, Orders.order_num
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;
リンク集約機能付
SELECT Customers.cust_id, COUNT(Orders.order_num) AS num_order
FROM Customers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id;
複合クエリー
連合
使用UNION
各SELECTステートメントを与える、プラスUNION間
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ('IL', 'IN', 'MI')
UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';
ルール
各クエリは、データ・タイプは互換性があるように、同じ列、式、または集計関数を含める必要があります
これは、重複行が含まれています
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ('IL', 'IN', 'MI')
UNION ALL
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';