Ⅰ sql子查詢如何使用主查詢里的欄位作為篩選條件
sql子查詢使用主查詢里的欄位作為篩選條件的方法:
使用SELECT子句、GROUP BY子句、HAVING子句、ORDER BY子句中均可使用子查詢語句,較常用的是WHERE子句、HAVING子句和FROM子句。
子查詢是在一個完整的查詢語句中,嵌套不同功能的小查詢,從而完成復雜查詢的一種編寫形式。本部分主要介紹非關聯子查詢,關聯子查詢的適用場景,語句寫法,執行邏輯及相對應的注意事項。
Ⅱ SQL必知必會(二)函數、子查詢
#文本處理函數
UPPER() --大寫
LOWER() --小寫
SOUNDEX() --讀音類似
LENGTH() --字元串長度
#日期和時間處理函數
SELECT order_code
FROM order_table
WHERE DATEPART(yy,order_date)=2012
#to_char()函數提取日期成分,MySQL可用year()函數提取年份
SELECT order_num
FROM order_table
WHERE to_number(to_char(order_date,'YYYY'))=2012; --to_char提取日期成分to_number轉化為數值
SELECT order_num
FROM order_table
WHERE order_date BETWEEN to_date('01-01-2012') AND to_date('12-31--2012'); --字元串轉日期
#數值處理函數
ABS() --絕對值
COS() --餘弦
EXP() --指數值
PI() --圓周率
SIN() --正弦
SQRT() --平方根
TAN() --正切
#平均數AVG()
SELECT AVG(a) AS avg_a
FROM tableA
WHERE a='DLL01';
#計數
SELECT COUNT(*) AS num_cust --對所有行計數,不管是否NULL值
FROM tableA;
SELECT COUNT(a) AS num_a --指定了列名,會忽略NULL值
FROM tableA;
#最值
MAX()和MIN(),忽略NULL值
#總值SUM(),忽略NULL值
SELECT SUM(price*quantity) AS total_price
FROM tableA
WHERE order_code=20008
#以上聚集函數只包含不同值
SELECT AVG(DISTINCT order_price) AS avg_price
FROM tableA
WHERE id='DLL01';
兩個子句:GROUP BY 和 HAVING
#GROUP BY創建分組HAVING過濾分組
SELECT vend_id, COUNT(*) AS num_prods
FROM tableA
WHERE price>=4
GROUP BY vend_id
HAVING COUNT(*)>=2;
ORDER BY price --GROUP BY在WHERE之後在ORDER BY之前
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
#子查詢順序為從內而外
SELECT order_num
FROM tableA
WHERE id='DLL01';
(輸出20007和20008)
SELECT id
FROM tableB
WHERE order_num IN(20007,20008);
#合並為子查詢。只能查詢單個列
SELECT id
FROM tableB
WHERE order_num IN (SELECT order_num FROM tableA WHERE id='DLL01')
SELECT cust_name,
cust_state
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id=Customers.cust_id) AS orders
FROM Customers
ORDER BY cust_name;
#Orders.cust_id=Customers.cust_id完全限定列名,在兩張表中名字相同列拿出來比較,防止歧義
Ⅲ sql 子查詢如何寫
select id from 表A
full join
(select id,count(id) from 表B group by id)
on A.id=B.id
Ⅳ SQL中SELECT中的FROM子句可否帶另外一個SELECT
可以
SQL中SELECT嵌套
SELECT語句
是很常見的
SQL語句
,嵌套SELECT語句也叫
子查詢
,一個SELECT
語句的查詢結果能夠作為另一個語句的輸入值。子查詢不但能夠出現在Where子句中,也能夠出現在from子句中,作為一個
臨時表
使用,也能夠出現在select
list中,作為一個欄位值來返回。
例1:select子查詢出現在Where子句中
select
ename,deptno,sal
from
emp
where
deptno=(select
deptno
from
dept
where
loc='NEW
YORK');
例2:select子查詢出現在from子句中
SELECT
ename,job,sal,rownum
FROM
(SELECT
ename,job,sal
FROM
EMP
ORDER
BY
sal);
例3:select子查詢出現在select
list中,作為一個欄位值來返回
SELECT
ename,job,sal
FROM
EMP
WHERE
deptno
in
(
SELECT
deptno
FROM
dept
WHERE
dname
LIKE
'A%');
(4)sqlselect子查詢擴展閱讀
在select子句里能支持直接嵌套一個select子查詢,但是該select子查詢返回的
結果集
必須是單行,返回多
行時
會提示ORA-01427:
single-row
subquery
returns
more
than
one
row(ORA-01427:
單行子查詢返回多個行
):
select
(
SELECT
id
from
data_
dictionary
where
id=1)
From
v_photosum_attach
;
select
(
SELECT
id
from
data_dictionary
where
id=lock_purpost)
From
v_photosum_attach
;
注釋:lock_purpost是表v_photosum_attach里的一列的列名。
參考資料來源:
搜狗網路
-子查詢
Ⅳ SQL Server 之 子查詢與嵌套查詢
當由where子句指定的搜索條件指向另一張表時,就需要使用子查詢或嵌套查詢。
1 子查詢
子查詢是一個嵌套在select、insert、update或delete語句或其他子查詢中的查詢。任何允許使用表達式的地方都可以使用子查詢。
1.1語法規則:
- 子查詢的select查詢使用圓括弧括起來
- 不能包括compute或for browse子句
- 如果同時指定top子句,則可能只包括order by子句
- 子查詢最多嵌套32層,個別查詢可能會不支持32層嵌套
- 任何可以使用表達式的地方都可以使用子查詢,主要它返回的是單個值
- 如果某個表只出現在子查詢中而不出現在外部查詢中,那麼該表中的列就無法包含在輸出中
1.2 語法格式:
- where 查詢表達式 [not] in(子查詢)
- where 查詢表達式 比較運算符 [any|all] (子查詢)
- where [not] exists (子查詢)
2 嵌套查詢
嵌套查詢是指將一個查詢塊嵌套在另一個查詢塊的where子句或having短語的條件中的查詢。
嵌套查詢中上層的查詢塊稱為外側查詢或父查詢,下層查詢塊稱為內層查詢或子查詢。SQL語言允許多層嵌套,但是在子查詢中不允許出現order by子句,order by子句只能用在最外層的查詢中。
嵌套查詢的處理方法是:先處理最內側的子查詢,然後一層一層地向上處理,直到最外層的查詢塊。
2.1 簡單的嵌套查詢
子查詢的運算符含有=、<>、<、>、<=、>=
三個查詢:
第一個:查詢年紀>25的老師所教的學生
第二個:查詢年紀>25的老師
第三個:驗證查詢到的學生信息
對比:當子查詢中的分那會的結果不是一個時,父查詢無法正常工作
2.2 帶IN的嵌套查詢
當子查詢返回一系列值時,適合帶IN的嵌套查詢。
2.3 NOT IN
2.4 SOME
2.5 ANY
2.6 ALL
2.7 EXIST
Ⅵ SQL查詢語句中,什麼叫子查詢
嵌套SELECT語句也叫子查詢,一個
SELECT
語句的查詢結果能夠作為另一個語句的輸入值。子查詢不但能夠出現在Where子句中,也能夠出現在from子句中,作為一個臨時表使用,也能夠出現在select
list中,作為一個欄位值來返回。
1、單行子查詢
:單行子查詢是指子查詢的返回結果只有一行數據。當主查詢語句的條件語句中引用子查詢結果時可用單行比較符號(=,
>,
<,
>=,
<=,
<>)來進行比較。
例:
select
ename,deptno,sal
from
emp
where
deptno=(select
deptno
from
dept
where
loc='NEW
YORK');
2、多行子查詢:多行子查詢即是子查詢的返回結果是多行數據。當主查詢語句的條件語句中引用子查詢結果時必須用多行比較符號(IN,ALL,ANY)來進行比較。其中,IN的含義是匹配子查詢結果中的任一個值即可("IN"
操作符,能夠測試某個值是否在一個列表中),ALL則必須要符合子查詢的所有值才可,ANY要符合子查詢結果的任何一個值即可。而且須注意ALL
和ANY
操作符不能單獨使用,而只能與單行比較符(=、>、<
、>=
、<=
、<>)結合使用。
例:
1).多行子查詢使用IN操作符號例子:查詢選修了老師名叫Rona(假設唯一)的學生名字
sql>
select
stName
Ⅶ sql where嵌套select子查詢
sql where嵌套select子查詢
判定A表的數據是否存在B表,如果存在則顯示存在,不存在則顯示不存在
例如S#存在於SC表和student表中,判定s#是否都在student表中存在存在則顯示存在,不存在則顯示不存在,具體如下:
from student
select s#,
case when s# in(select s# from sc) then '存在'
when s# not in( select s# from sc) then '不存在'
end
from student