DB. MySQL 6. クエリ内のサブクエリ
4989 ワード
サブクエリ
リンクテキスト
1.非常関所サブクエリ
クエリー文の内部にある別のクエリー文は、外部クエリーと内部サブクエリーが独立して実行され、互いに関連しません.
ex1)SELECT
CategoryID, CategoryName, Description,
(SELECT ProductName FROM Products WHERE ProductID = 1)
FROM Categories;
クエリー・ステートメントに別のクエリー・ステートメントを挿入して、別のテーブルからデータをロードします.
ex2)SELECT * FROM Products
WHERE Price < (
SELECT AVG(Price) FROM Products
);
サブクエリを使用してPriceの平均値を求め、平均値より低い値を抽出します.
ex3)SELECT CategoryID, CategoryName, Description
FROM Categories;
CategoriesテーブルのCategoryID、CategoryName、Description列
ex3-1)SELECT CategoryID FROM Products
WHERE Price > 50;
Poductsテーブルには50より大きいCategoryIDがあります.
ex 3-2)合成ビュー
PoductsテーブルのPriceが50より大きいCategoryIDを抽出し、CategoryNameおよびDescription列のデータを読み込みます.
ALL, ANY
演算子の未~ALLサブクエリのすべての結果~ANYサブクエリの1つ以上の結果~~
ex1) ALLSELECT Price FROM Products
WHERE CategoryID =2;
CategoryIDが2の値を抽出してPriceを表示
ex 1-1)ALLの適用SELECT * FROM Products
WHERE Price > ALL(
SELECT Price FROM Products
WHERE CategoryID =2
);
CategoryIDが2より大きいPrice値が表示されます.CategoryIDが2の場合、Max値より大きい値が表示されます.
ex2) ANYSELECT CategoryID FROM Products
WHERE Price > 50;
50以上のCategoryID
適用ex 2-1)ANYSELECT CategoryID, CategoryName, Description
FROM Categories
WHERE CategoryID = ANY (
SELECT CategoryID FROM Products
WHERE Price > 50);
Price値が50より大きいCategoryIDに同じ値がある場合、その値が表示されます.
"CategoryID = ANY"== "CategoryID IN"
2.関連サブクエリ
外部と内部のサブクエリが担当します.
ex1)
製品表
カテゴリテーブル
ProductsテーブルにはCategoryIDがあります.
クラスには各クラスのクラスIDが持つデータがあります.SELECT ProductID, ProductName,
(
SELECT CategoryName FROM Categories C
WHERE C.CategoryID = P.CategoryID
) AS CategoryName
FROM Products P;
SELECT
CategoryID, CategoryName, Description,
(SELECT ProductName FROM Products WHERE ProductID = 1)
FROM Categories;
SELECT * FROM Products
WHERE Price < (
SELECT AVG(Price) FROM Products
);
SELECT CategoryID, CategoryName, Description
FROM Categories;
SELECT CategoryID FROM Products
WHERE Price > 50;
SELECT Price FROM Products
WHERE CategoryID =2;
SELECT * FROM Products
WHERE Price > ALL(
SELECT Price FROM Products
WHERE CategoryID =2
);
SELECT CategoryID FROM Products
WHERE Price > 50;
SELECT CategoryID, CategoryName, Description
FROM Categories
WHERE CategoryID = ANY (
SELECT CategoryID FROM Products
WHERE Price > 50);
SELECT ProductID, ProductName,
(
SELECT CategoryName FROM Categories C
WHERE C.CategoryID = P.CategoryID
) AS CategoryName
FROM Products P;
ex2)
Supplier表
Customersテーブル
各テーブルが持つCountyとCity情報を用いて1つのテーブルに整理する.
SELECT SupplierName, Country, City,
(
SELECT COUNT(*) FROM Customers C
WHERE C.Country = S.Country
) AS CustomersInTheCountry,
(
SELECT COUNT(*) FROM Customers C
WHERE C.Country = S.Country AND C.City = S.City
) AS CustomersInTheCity
FROM Suppliers S;
EXISTS / NOT EXISTS
EXISTS演算子以外の未EXISTSがあるか
ex1) EXISTS
SELECT CategoryID, CategoryName
FROM Categories C
WHERE EXISTS(
SELECT * FROM Products P
WHERE P.CategoryID = C.CategoryID AND P.Price > 80
);
P.Category IdおよびC.CategoryIDと同じ価格で80を超えるデータがある場合に表示されます.
ex2) NOT EXISTS
SELECT CategoryID, CategoryName
FROM Categories C
WHERE NOT EXISTS(
SELECT * FROM Products P
WHERE P.CategoryID = C.CategoryID AND P.Price > 80
);
これは、80以上の価格のデータを除いて、P.CategoryIDとC.CategoryIDが同じであることを示している.
Reference
この問題について(DB. MySQL 6. クエリ内のサブクエリ), 我々は、より多くの情報をここで見つけました https://velog.io/@jinzza456/DB.-MySQL-6.-쿼리-안에-서브쿼리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol