Ⅰ sql嵌套查詢
你說的要查score表,但是你查詢中from的表是scores。
如果不是這個原因,你看下資料庫連接是否正確。
Ⅱ 標准SQL嵌套查詢語句
1、簡單子查詢
select name,age from person
where age >
(
select age from person
where name = '網路'
)
2、in嵌套查詢
select name from person
where countryid in
(
select countryid from country
where countryname = '網路'
)
(2)sql條件嵌套擴展閱讀:
嵌套查詢的意思是,一個查詢語句(select-from-where)查詢語句塊可以嵌套在另外一個查詢塊的where子句中,稱為嵌套查詢,其中外層查詢也稱為父查詢,主查詢,內層查詢也稱子查詢,從查詢。
子查詢的語法規則
1、子查詢的select查詢總是使用圓括弧括起來。
2、不能包括compute或for.browse子句。
3、如果同時指定top子句,則可能只包括order by子句。
4、子查詢最多可以嵌套到32層。個別查詢可能會不支持32層嵌套。
5、任何可以使用表達式的地方都可以使用子查詢,只要它返回的是單個值。
6、如果某個表只出現在子查詢中二不出現在外部查詢中,那麼該表的列就無法包含在輸出中。
Ⅲ sql多表多條件嵌套查詢
select * from phome_ecms_memberpro where userid in( select userid from phome_ecms where checked >1 and id in ( select userid from phome_ecms_memberpro group by userid having count(userid)>4)) order by id asc
--存儲過程 效率更高些 這個寫的不好。一般都不in查詢 因為他的效率特別低。而且不需要全部欄位的話,盡量就不用select * 來查詢。慢慢努力哦!
Ⅳ 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語句中什麼條件下嵌套查詢和多表連接查詢通用,什麼條件下只能用嵌套查詢
這兩個沒有太大的關系,如果能夠用多表連查解決的問題,一般都採用join連查的方式,這樣速度最快;
select t1.name,t2.name from T_table1 t1 left join T_table2 t2 on t1.id = t2.tid;
嵌套查詢一般用於解決復雜問題,比如t1記錄書籍的名稱、作者、銷量,那麼要找出名字、作者不重復的記錄,就要用嵌套了
selectt1.bookfromtablet1wherenotexists(
select1fromtablet2wheret1.author=t2.authorandt1.book=t2.bookandt1.id>t2.id
)
Ⅵ Sql問題:檢索條件嵌套,在線急等~
create table tt
(
任務號 VARCHAR(20),
工序 int,
起始時間 datetime
)
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('A',1,'2015/2/28');
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('A',2,'2015/3/1');
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('A',3,'2015/3/2');
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('B',1,'2015/2/2');
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('B',2,'2015/3/2');
INSERT INTO tt (任務號段盯 ,工返洞序 ,起始時間 ) VALUES ('B',3,'2015/3/3');
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('C',2,'2015/3/3');
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('C',3,'2015/3/3');
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('C'漏燃枯,4,'2015/3/3');
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('C',5,'2015/3/3');
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('D',1,'2015/2/12');
INSERT INTO tt (任務號 ,工序 ,起始時間 ) VALUES ('D',2,'2015/2/12');
select * from tt
select * from tt where 任務號 IN (
select a.任務號 from
(select 任務號,MIN(工序) AS 最小 FROM TT GROUP BY 任務號) a
left join
(select * FROM tt) B
ON A.任務號=B.任務號 AND A.最小=B.工序
WHERE 起始時間 = '2015-02-28')
Ⅶ sql語句中where條件的嵌套子查詢性能
子查詢:
使用子查詢的原則
1.一個子查詢必須放在圓括弧中。
2.將子查詢放在比較條件的右邊以增加可讀性。
子查詢不包含 ORDER BY 子句。對一個 SELECT 語句只能用一個 ORDER BY 子句,
並且如果指定了它就必須放在主 SELECT 語句的最後。
ORDER BY 子句可以使用,並且在進行 Top-N 分析時是必須的。
3.在子查詢中可以使用兩種比較條件:單行運算符和多行運算符。
子查詢的類型
單行子查詢:從內 SELECT 語句只返回一行的查詢
多態液行子查詢:從內 SELECT 語句返回多行的查臘閉畢詢
單行子查詢
單行子查詢是從內查詢返回一行的查詢。在該子查詢類型中用一個單行操作符。幻燈片中輪芹列出了單行操作符。
例
顯示那些 job ID 與雇員 141 相同的雇員。
SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141);
SELECT last_name, job_id, salary
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141)
AND salary >
(SELECT salary
FROM employees
WHERE employee_id = 143);
顯示 job ID 與雇員 141 相同,並且薪水 高於雇員 143 的那些雇員。
註:外和內查詢可以從不同的表中取得數據。
SELECT last_name, job_id, salary
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees);
求所有人誰的工資最小。
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE department_id = 50);
求每個部門的最小工資,但是要高於50號部門的工資。
SELECT employee_id, last_name
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees
GROUP BY department_id);
問題出現在:單行子查詢返回了多個查詢值;
應改為:
SELECT employee_id, last_name
FROM employees
WHERE salary in
(SELECT MIN(salary)
FROM employees
GROUP BY department_id);
SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE last_name = 'Haas');
如果子查詢返回的是零值,不會對主程序造成影響;
如果子查詢返回的是空值,那麼會影響主程序的返回值;
SELECT employee_id,
last_name
FROM employees
WHERE employee_id NOT IN
(SELECT manager_id
FROM employees)
SELECT employee_id,
last_name
FROM employees
WHERE employee_id NOT IN
(SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL)
放在select下的子查詢的返回值必須是一個具體值,
from後面也可以加子查詢;
having後面也可以加子查詢;
order by後面也可以;
多列子查詢適應於:成對比較;非成對比較。
SELECT employee_id, manager_id, department_id
FROM employees
WHERE (manager_id, department_id) IN
(SELECT manager_id, department_id
FROM employees
WHERE employee_id IN (178,174))
AND employee_id NOT IN (178,174);
輸出:176 149 80
只有要查詢的東西和你子查詢返回的東西一一對應上了,你的查詢才能成功。
如果有一個 對應不上那麼你的查詢不會成功。
非成對的子查詢:
SELECT employee_id, manager_id, department_id
FROM employees
WHERE manager_id IN (SELECT manager_id
FROM employees
WHERE employee_id IN (174,141))
AND department_id IN (SELECT department_id
FROM employees
WHERE employee_id IN (174,141))
AND employee_id NOT IN(174,141);
輸出:144 124 50
143 124 50
142 124 50
176 149 80
上面兩個程序就是成對子查詢和非成對子查詢兩者之間的區別。
如果我想去顯示員工信息,要求:員工的工資高於本部門的平均工資。
SELECT a.last_name,
a.salary,
a.department_id
FROM employees a
WHERE a.salary >
(SELECT AVG(salary)
FROM employees b
WHERE b.department_id = a.department_id);
in line view(內聯視圖)
SELECT a.last_name, a.salary,
a.department_id, b.salavg
FROM employees a, (SELECT department_id,
AVG(salary) salavg
FROM employees
GROUP BY department_id) b
WHERE a.department_id = b.department_id
AND a.salary > b.salavg;
Ⅷ sql多表多條件嵌套查詢(mysql中多表嵌套查詢例子)
select*fromphome_ecms_memberprowhereuseridin(selectuseridfromphome_ecmswherechecked<1andidin(selectuseridfromphome_ecms_(userid)<4))orderbyidasc
--存儲過程效率更高些這個寫的不好。一般都不in查詢因為衫沖他的效率特別低。而且不需要全部字纖塌攔段毀胡的話,盡量就不用select*來查詢。慢慢努力哦!
Ⅸ 什麼是SQL語言中的嵌套查詢
如果只是單個的條件的時候,即只有一個連接條件的時候,使用兩種方式都是一樣的,但是,如果是多個條件的話,就要考慮一下效率了,一般這種情況下需要嵌套查詢更能提高效率,因為連接查詢是先要做笛卡爾積之後之後再篩選,而嵌套查詢的話可以先篩選。
Ⅹ sqlwhere後可以有多個條件後再嵌套嗎
可以。SQL 語句的 Where 條件使用了兩個索引,分別是二級唯一索引 ISBN 和二級非唯一索引 Author。MySQL 會根據索引選擇性納慧或等指標選擇其中洞伍一個索引來使用,而另外一個沒有被使用的 Where 條件就被當做普通的過濾條件,一般稱被用到的索引稱為 Index Key,而作為普通過濾的條件則被稱為 Table Filter。比如上面這條SQL 使用 ISBN索引來查詢,則 ISBN 就是 Index Key,而 Author = 'Tom' 這個條件就是 Table Filter。
所以,該 SQL 執行的過程就是依次將 Index Key 范圍內的索引記錄讀取,然後碧前回表讀取完整數據記錄,然後返回給MySQL的服務層按照 Table Filter 進行過濾。 至於加鎖,如下圖所示則需要將涉及的 Index Key 對應的索引記錄都進行加鎖。