子查詢,意即查詢中還有另一個查詢,子查詢放置的位置可以在select、from、where中,有其個別用法及意義。
位置 | Select區間 | From區間 | Where區間 |
意義 | 一個子查詢回傳資料給母查詢當作一個欄位使用,只能回傳一筆單欄資料,此時的where條件能與母查詢的from區塊比對。 | 當作一個templatetable,可以給select、where直接使用,也可以與join系列聯合使用。 | 當作一種條件比對資料,透過in、exist、=等運算子來做條件限制 |
個別用法將在底下一一介紹
#假如這是記錄使用者的訂單
drop table user_order_A;
CREATE TABLE user_order_A (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '訂單ID',
name varchar(20) NOT NULL COMMENT '誰的訂單',
PRIMARY KEY(id)
)AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
#假如有A、B、C三位使用者下單
insert into user_order_A(id,name) values (1, 'A');
insert into user_order_A(id,name) values (2, 'B');
insert into user_order_A(id,name) values (3, 'C');
insert into user_order_A(id,name) values (4, 'A');
insert into user_order_A(id,name) values (5, 'B');
insert into user_order_A(id,name) values (6, 'C');
#假如這是記錄每訂單的項目價錢
drop table products_table;
CREATE TABLE products_table (
order_id bigint(20) NOT NULL COMMENT '關連訂單id',
product_name varchar(255) NOT NULL,
price bigint(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into products_table(order_id,product_name,price) values (1, "商品1", 20);
insert into products_table(order_id,product_name,price) values (3, "商品2", 10);
insert into products_table(order_id,product_name,price) values (2, "商品3", 50);
insert into products_table(order_id,product_name,price) values (5, "商品4", 10);
insert into products_table(order_id,product_name,price) values (5, "商品5", 10);
insert into products_table(order_id,product_name,price) values (6, "商品6", 80);
insert into products_table(order_id,product_name,price) values (1, "商品7", 10);
insert into products_table(order_id,product_name,price) values (2, "商品8", 10);
insert into products_table(order_id,product_name,price) values (3, "商品9", 40);
insert into products_table(order_id,product_name,price) values (2, "商品2", 10);
insert into products_table(order_id,product_name,price) values (4, "商品1", 20);
#使用子查詢select底下
SELECT user_order_A.id,
user_order_A.name,
(SELECT
SUM(products_table.price)
FROM
products_table
WHERE user_order_A.id = products_table.order_id
) AS price
FROM
user_order_A ;
結果:
使用在FROM後的JOIN子查詢
SELECT
user_order_A.id,
user_order_A.name,
products_table.price
FROM user_order_A
JOIN (SELECT
SUM(products_table.price),
products_table.order_id ,
products_table.price
FROM products_table
GROUP BY products_table.order_id
)AS products_table
ON(user_order_A.id= products_table.order_id)
GROUP BY user_order_A.id;
結果:
使用在WHERE後的子查詢條件資料
SELECT user_order_A.id,
user_order_A.name,
(SELECT
SUM(products_table.price)
FROM
products_table
WHERE user_order_A.id = products_table.order_id
) AS price
FROM
user_order_A
user_order_A.name IN (SELECT name FROM user WHERE user.id > 0)
結果︰
- 首頁
- JAVA 目錄
- JAVA WEB 目錄
- JAVA 其他未分類 目錄
- Grails目錄
- jQuery 目錄
- Apache 目錄
- JavaScript 目錄
- Spring + Hibernate 目錄
- Hibernate 目錄
- Linux 目錄
- 程式開發工具目錄
- MySQL 目錄
- PHP目錄
- C/C++ 目錄
- Google App Engine 目錄
- HTML5/CSS3
- 程式開發基本資訊
- Android
- Oracle 目錄
- Struts 目錄