目錄
子查詢
1.準備工作
2--創建表格
3--插入數據
2.where?子查詢單列單個數據
格式
查詢
3.where?子查詢單列多個數據(in)
格式
查詢
使用子查詢
4.from?多行多數據
格式
查詢
子查詢
將select的查詢的返回結果?當成另外一個selet語句的內容去使用。
子查詢放在()里面
注意:把select當成一個函數,一個可以返回結果的函數。只是我們可以給他傳遞不同參數,獲取不同的結果。
1.準備工作
2--創建表格
-- 創建表格CREATE table class (class_id INT PRIMARY KEY AUTO_INCREMENT,class_name VARCHAR(20) ); create table student (id INT PRIMARY KEY AUTO_INCREMENT;student_name VARCHAR(30),student_sex char(1),student_info VARCHAR(500),student_class_id int,-- 添加主鍵約束CONSTRAINT student_class_fk FOREIGN KEY(student_class_id) REFERENCES class(class_id) );
![]()
3--插入數據
-- 插入數據 insert into class VALUES (null, '一班'), (null, '二班'), (null, '三班') ;INSERT into student VALUES (null, '偷走晚霞的人', '男', '一個學生', 1), (null, '惜.己', '男', '一個學生', 2), (null, '小玖', '女', '一個學生', 1), (null, '張三', '男', '一個學生', 3), (null, '莉莉', '男', '一個學生', 1), (null, '雪夜', '男', '一個學生', 2), (null, '小明', '女', '一個學生', 1), (null, '小新', '男', '一個學生', 3) ;
2.where?子查詢單列單個數據
前提返回的數據是?單列單個
格式
這里不一定是等號,還可以是其他的邏輯運算符號
select * from?表名2?where? 表名2.需要對比的字段? = (select?字段?from?表名2?where?條件);?
查詢
假設我們不知道一班的id ,但是又想查詢一班的學生信息.先通過class_name?查詢?一班的id
# 通過名字查詢 一班的id =1 select class_id from class where class_name = '一班';
最后通過?id去獲取?一班的信息
# 通過名字查詢 一班的id =1 select class_id from class where class_name = '一班';
這里可以使用內查詢==》可以看到查詢結果是一樣的
只是替換了?第二條sql語句中?為 1?的地方。去掉第一sql中的;
-- 整合兩個sqlSELECT * from student WHERE student_class_id = (select class_id from class where class_name = '一班') ;
3.where?子查詢單列多個數據(in)
格式
select * from?表名2?where? 表名2.需要對比的字段? in (select?字段?from?表名2?where?條件);?
查詢
假設我們不知道一班,三班的id ,但是又想查詢一班,三班的學生信息.先通過class_name?查詢?一班的id和三班的id
-- 查詢一班三班的信息 select class.class_id FROM class where class_name in ('一班', '三班'); -- 獲取到id 為1 , 3
通過id去查詢
-- 使用id 去查詢二班三班的學生 SELECT * from student where student_class_id in (1,3)
使用子查詢
SELECT * from student where student_class_id in(select class.class_id FROM class where class_name in ('一班', '三班'));
可以看到只是替換了 1,3的部分。
感覺跟套娃差不多,只是使用一個select的語句的查詢結果供另外一個select使用。
4.from?多行多數據
這個需要注意起別名
格式
# 查詢學生表信息 SELECT * from (select * From student ) s where s.student_sex = '女';
查詢
查詢一班的女生子查詢版
注:這個是使用當前表的查詢的結果再次進行查詢。(這個個人感覺不到意義)
# 查詢學生表信息 SELECT * from (select * From student ) s where s.student_sex = '女';
查詢一班二班男生的信息以及班級的信息
-- 查詢 一班,二班,三班 男生的信息select * from class ? LEFT JOIN ?(SELECT * from student where student_sex = '男') bs on class.class_id = ?bs.student_class_id;