table:student
s_no(學號) |s_name(名字) |s_age(年紀)
------------- | -------------
A1 | JOHN | 16
A2 | JOE | 16
A3 | TONY | 17
table name:subjects
s_no(學號) |subject(科目) |score(分數)
------------- | -------------
A1 | Math | 58
A1 | History | 70
A2 | English | 49
A2 | History | 90
A3 | Math | 35
A3 | English | 77
要求是 查詢出JOE的名字、年紀、及格科目
試著寫了
SELECT student.s_name,student.s_age,subjects.subject
FROM student,subjects
WHERE student.s_no='A2'AND subjects.score>='60';
而顯示出的結果是這樣
s_name(名字) |s_age(年紀)|subject(科目)
------------- | -------------
JOE |16 |History
JOE |16| History
JOE |16| English
不知道是哪邊語法出錯了 請各位不吝指教
感謝回答 另外再問一個問題
如果要將JOHN的數學改成及格 我的寫法是
update subjects set score='60' where s_no='A1' and subject='Math'
有個疑惑的地方就是 如果只有一個表單 是否可以直接寫 欄位名稱 還是都要 表單名稱.欄位名稱 請各位不吝指教
如上圖 cross join 沒有加上關聯欄位
的原因,改成以下sql就可以
select student.s_name,student.s_age,subjects.subject
from subjects
left join student on subjects.s_no = student.s_no
where subjects.s_no='A2' and subjects.score>='60'
有student才會有成績,因此
from student left join subjects
會不會比較好一點?
paicheng0111 個人建議left join用在 明細 left join 主表
,不建議用在主表 left join 明細
先看你寫的SQL
/*查詢 table:student的s_name、table:student的s_age、table:subjects的subject*/
SELECT student.s_name,student.s_age,subjects.subject
/*從table:student和table:subjects*/
FROM student,subjects
/*當table:student的s_no是A2,並且table:subjects的score大於等於60*/
WHERE student.s_no='A2'AND subjects.score>='60';
SQL會從限制開始找尋WHERE student.s_no='A2'AND subjects.score>='60';
滿足上面這些限制的有
table:student
s_no(學號) | s_name(名字) | s_age(年紀) |
---|---|---|
A2 | JOE | 16 |
以及
table:subjects
s_no(學號) | subject(科目) | score(分數) |
---|---|---|
A1 | History | 70 |
A2 | History | 90 |
A3 | English | 77 |
依照滿足的部分再往您的select去看SELECT student.s_name,student.s_age,subjects.subject
理所當然會得出這個結果
s_name(名字) | s_age(年紀) | subject(科目) |
---|---|---|
JOE | 16 | History |
JOE | 16 | History |
JOE | 16 | English |
再看回來您原本想得出結果的問題
要求是 查詢出JOE的名字、年紀、及格科目
題目的限制是人員是JOE
以及JOE的及格科目
table:subjects裡面並沒有人員的名字
人員的名字(s_name)是記錄在table:student
兩個有共通的地方是在學號(s_no)
於是要先告訴它
student.s_no = subjects.s_no
這樣才能知道student的A2是subjects的A2
然後要求s_name是JOE,而JOE所在的表格是table:student
因此
student.s_name='JOE'
最後才是及格科目
subjects.subject >= '60'
整個where就完成了
WHERE student.s_no = subjects.s_no AND student.s_name='JOE' AND subjects.subject >= '60'
如果回答或理解有誤,再麻煩前輩們輕鞭:D