表連線查詢
一、交叉連線 - 笛卡爾積
查詢teacher和course表中所有的資料
select * from teacher,course;
select name,courseid,course.id,cname from teacher,course where teacher.courseid=course.id;
二、內連線
在關聯的兩張表中,把滿足條件的資料篩選出來
select 字段,... ...
from 表1
inner join 表2
on 條件
inner join 表3
on 條件
--使用內連線查詢teacher和course 表中的資料(姓名,年齡,課程名稱,課時)
selectt.name,t.age,c.cname,c.cdurationfrom teacher astinner join course ascon t.course_id=c.id;--查詢學員的姓名,年齡,所在班級名稱,專業名稱 並篩選出1902的學員
selects.name,s.age,c.classname,m.m_namefrom student assinner join classinfo ascon s.class_id=c.idinner join major asmon s.major_id=m.idwhere c.classname='1902';--查詢學員的姓名,畢業院校,所在班級,考試科目,考試成績
selects.name,s.school,c.classname,course.cname,sc.scorefrom student assinner join classinfo ascon s.class_id=c.idinner join score asscon s.id=sc.stu_idinner joincourseon sc.course_id = course.id;
三、外鏈結
1.左外鏈結
作用:(1)左表中所有的資料都會查詢出來(即便不滿足條件)
(2)將右表中滿足關聯條件的資料查詢出來
(3)關鍵不上的資料關聯欄位將以null作為填充(查詢哪些課程沒有老師去講 就用左外鏈)
語法:select 字
from a left join b
on 關聯條件
--左外鏈結,左表:course 右表:teacher--關聯條件:teacher.course_id=course.id--以左表為主 左表的id都顯示出來 查詢右表關聯資訊,未關聯到的資訊顯示為null,一般用來查詢null的值
select * fromcourseleft jointeacheron teacher.course_id =course.idwhere teacher.id is null;
2.右外鏈結
作用:1.右表中所有的資料都會查詢出來(即便不滿足條件)
2.將左表中滿足關聯條件的資料查詢出來
3.關鍵不上的資料關聯欄位將以null作為填充
語法:select 字段
from a right join b
on 關鍵條件
select * fromteacherright joincourseon teacher.course_id =course.idwhere teacher.id is null;
--練習:查詢沒有參加考試的學生
select student.name,score.score fromstudentleft joinscoreon student.id=score.stu_idwhere score.score is null;
四、子查詢
1.什麼是子查詢:將乙個查詢的結果作為外側操作的乙個條件出現
2.語法:select ... from 表名 where 條件=(select ...);
--查詢student表中比『李四』年齡大的學員的資訊
select * fromstudentwhere age>(select age from student where name='李四');
1 --練習:1、查詢考過『王老師』老師所教課程的學校的資訊
2 --方法1
3 select * from student where id in(4 select stu_id from score where course_id=(5 select course_id from teacher where name='王老師'
6 )7 );8 --方法2
9 selects.name,s.school10 from student ass11 inner join score assc12 on s.id =sc.stu_id13 inner join teacher ast14 on t.course_id=sc.course_id15 where t.name='王老師';16
17 --練習:2、查詢在score表中有成績的學員的資訊
18 select * from student where id in(select stu_id fromscore);19
20 --練習:3、查詢'python基礎'課程並且分數在80分以上的學員的姓名和學校
21 --方法1
22 select student.name,student.school from
23 student left joinscore24 on student.id =score.stu_id25 left joincourse26 on score.course_id =course.id27 where score>80 and cname='python基礎';28 --方法2
29 select name,school from student where id in(30 select stu_id from score where score>80 and course_id =(31 select id from course where cname='python基礎'
32 )33 );34
35 --練習:4、查詢和『張三』相同班級以及相同專業的同學的資訊
36 --方法1
37 select student.name,classinfo.classname,major.m_name from
38 student left joinclassinfo39 on student.class_id=classinfo.id40 left joinmajor41 on student.major_id=major.id42 where class_id=(select class_id from student where name='張三')43 and major_id=(select major_id from student where name='張三')44 and student.name!='張三';45 --方法2
46 selectstudent.name,classinfo.classname,major.m_name47 fromstudent48 inner joinclassinfo49 on student.class_id=classinfo.id50 inner joinmajor51 on student.major_id=major.id52 where class_id=(select class_id from student where name='張三')53 and major_id=(select major_id from student where name='張三')54 and student.name!='張三';
練習題
mysql表連線自己本身 mysql連線表本身
我遇到了這個問題,我希望它是可能的.我有乙個來自wordpress的表,用於儲存後元資料,因此無法更改列和字段資料 輕鬆 因此,表結構 post id meta key meta value 元鍵儲存欄位名稱和meta value,即該字段的值.我需要根據帖子id對這些進行分組,這樣我就可以在兩個字...
SQL表交叉連線
mssql文件中也叫交叉聯接.好比 a表裡面的a,b,c 查詢符合a x 條件的.b表裡面 d,e,f 查詢符合 d 1 語句 select a.a,a.b,a.c,b.d,b.e b.f from a,b where a.a x b.d 1 這個是錯的.錯在 怎麼改?把 where裡面的,改為an...
sql語句 連線表
cartesian join 笛卡爾連線 表1的每一行同表2的每一行結合做為一條記錄。這樣的查詢將返回 表1行數 x 表2行數 條記錄。這樣的連線沒有什麼使用者只是說明了所有連線是把表進行組合的。equi join 相等連線 一般用在表間有相同屬性的列。如有員工表和員工工資表,兩個表中都有員工號這一...