子查詢,巢狀查詢,nested query,是巢狀在外層查詢where語句中的查詢,子查詢為主查詢返回其所需的資料,或者對外查詢中的查詢結果作進一步限制。
select..
.from
table
where
#主查詢,外層查詢
(select..
from
table
where..
.);#子查詢,內層查詢
內層查詢返回列col_name的值,外層查詢意義相同的列col_name和子查詢的返回值做比較。使用關係運算子時,返回值至多乙個,使用in時,返回值可以有多個。
select..
.from
table
where col_name 關係運算子 |in|
notin
(select col_name from
table
where..
.);關係運算子:=、<、>、<=、>=、!=
示例:
查詢和潘多拉老師在乙個學院的教師資訊
select
*from teacher
where department_id =
(select department_id from teacher where teacher_name=
'潘多拉'
)查詢哪些同學至少有一門功課在95分以上
select student_id,student_name from student where student_id in
(select
distinct student_id from choose where score=95)
;查詢所有成績都在85分以上的同學
select student_id,student_name from student
where student_id notin(
select
distinct student_id from choose where score<
85)
any和some同義,在進行比較運算時只要子查詢的查詢結果有一行能使結果為true,則結果就為true;而all則要求子查詢中的所有行都使結果為true時,結果才為true.
select
from
table
where col_name 關係運算子 [
any|
some
|all](
select col_name from
table
where..
.);
查詢有成績大於等於'201710201102'同學的所有成績的同學資訊
select
distinct a.student_id,a.student_name
from student a inner
join choose b on a.student_id=b.student_id
where b.score>=
all(
select choose.score from choose where choose.student_id=
'201710201102');
select
distinct a.student_id,a.student_name
from student a inner
join choose b on a.student_id=b.student_id
where b.score>=
(select
max(choose.score)
from choose where choose.student_id=
'201710201102'
);
exists用來檢查子查詢是否有查詢結果返回,只要返回一行,exists的結果即為true,外查詢語句將進行查詢;反之結果為false,此時外層語句將不進行查詢。
select
from
table
where
[exists
|not
exists](
select col_name from
table
where..
.);
查詢還沒有教師的學院資訊
select
*from department where
department_id notin(
select
distinct department_id from teacher)
;查詢教師表中所有的學院id,然後對比部門表中所有的id,即可得到沒有教師的學院資訊
select
*from department
where
notexists
(select
distinct department_id from teacher where department.department_id=teacher.department_id)
;
在create
table命令中,使用select查詢可以把現有表的結構和資料複製到新錶,但不複製索引。
。只複製結構
create
table newtable [as]
select..
.from..
.limit
0。複製結構和資料
create
table newtable [as]
select..
.from..
.limit
offset
, count
示例
create
table newteacher as
select
*from teacher limit0,
0只複製teacher表的結構到新錶
create
table newdepartment as
select
*from department;
複製department表的結構與資料
create
table student2017 as
select
*from student where
left
(student_id,4)
='2017'
;將學生表中所有2017級的學生資訊複製到新錶
在insert、delete和update語句中使用select查詢,可實現資料的新增、刪除和更新。
❖ insert
into tablea select
from tableb where..
;❖ delete
from
table
where (select子查詢);
❖ update tablea set fileda =
(select fieldb from tableb where..
.)where……;
示例
insert
into newteacher
select
*from teacher where professional=
'教授'
;將教師表中所有職稱為教授的教師資訊複製到新錶。
update newdepartment set department_name =
'繼續教育學院'
where department_id=
'102'
;修改指定id的部門名稱
SQL資料查詢 子查詢 多表查詢
user info表 user info表 create table user info id int 2 primary key,user name varchar 12 unique password varchar 15 not null real name varchar 8 not nul...
MySQL資料查詢
1.基本查詢語句 select語句是最常用的查詢語句,它的使用方式有些複雜,但功能卻相當強大。select selection list 要查詢的內容,選擇哪些列 from資料表名 制定資料表 where primary constraint 查詢時需要滿足的條件,行必須滿足條件 2.單錶查詢 單錶...
mysql資料查詢之子查詢
子查詢概念 sub query select select 1 標量子查詢 where 之後寫 確定某乙個值 select from student where c id select idfrom class where grade pm3.1 2 列子查詢 where 之後 寫 in,是一列的所...