數據庫學習 - select(多表聯查)

多表聯合查詢

多表聯合查詢可以通過連接運算實現,而連接運算又可以通過廣義笛卡爾積後在進行選擇運算來實現。

 

Select 多表聯合查詢語句

Select 列名 [[,列名]...] from 表名1,表名2,,... Where 查詢條件;

 

可以使用as爲表或者字段(屬性)取別名;

 

Select 列名 [[,列名]...] from 表名1 [as] 別名1,表名2 [as} 別名2,,... Where 查詢條件;

Select 列名1 [as] 列別名1 [[,列名2 [as] 列別名2]...] from 表名1 [as] 表別名1,表名2 [as] 表別名2,,... Where 查詢條件;

[]”表示其中的內容可以省略;

 

查詢條件中要包含連接條件,通過不同的連接條件可以實現等值連接、不等值連接等各種連接。

 

示例:

原表數據:

學生表 student

 

老師表 teacher:

 

課程表 course:

 

選課表 student_course:

 

1 按“0001”號課程成績由高到低順序顯示所有學生學號、姓名、成績(二表連接);

SELECT
	student.student_id,
	student.student_name,
	student_course.score
FROM
	student,
	student_course
WHERE
	student.student_id = student_course.student_id
AND student_course.course_id = '0001'
ORDER BY
	student_course.score DESC;

當兩個(多個)表中有相同的字段(屬性,列名)時,使用表名(或表別名).列名的形式對查詢內容和條件內容進行區分。

運行結果:

 

2 按“高等數學”課程成績由高到低順序顯示所有學生姓名、學號、分數、課程名(三表連接);

SELECT
	st.student_id,
	st.student_name,
	sc.score,
	co.course_name
FROM
	student AS st,
	student_course AS sc,
	course AS co
WHERE
	st.student_id = sc.student_id
AND sc.course_id = co.course_id
AND co.course_name = '高等數學'
ORDER BY
	sc.score DESC;

運行結果:

 

3 查詢有薪水差額的任意兩位教師(單表連接查詢);

SELECT
	t1.teacher_id AS '教工號1',
	t1.teacher_name AS '教師姓名1',
	t2.teacher_id AS '教工號2',
	t2.teacher_name AS '教師姓名2'
FROM
	teacher t1,
	teacher t2
WHERE
	t1.teacher_salary > t2.teacher_salary;

運行結果:

 

(數據較多,這裏只顯示一部分)

4 查詢既學過“0001”又學過“0002”號課程的所有學生學號;

SELECT
	sc1.student_id '學號'
FROM
	student_course sc1,
	student_course sc2
WHERE
	sc1.student_id = sc2.student_id
AND sc1.course_id = '0001'
AND sc2.course_id = '0002';

運行結果:

 

5 查詢“0001”號課程比“0002”號課程成績低的所有學生學號姓名;

SELECT
	st.student_id '學號',
	st.student_name '姓名'
FROM
	student_course sc1,
	student_course sc2,
	student st
WHERE
	sc1.student_id = sc2.student_id
AND sc1.student_id = st.student_id
AND sc1.course_id = '0001'
AND sc2.course_id = '0002'
AND sc1.score < sc2.score;

運行結果:

 

發佈了47 篇原創文章 · 獲贊 25 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章