1樓:
關鍵:我理解的SQL有乙個很重要的一點,是找出不同表的關係,及它們之間的連線路徑。你提供的兩張表你自己應該明確知道,student表中的ID對應的是score表中的ID,如果你能明確這點在SQL語言的中的意義就好寫了。
關於你的題,自己想下簡單關係,然後寫成SQL:
兩個表靠ID進行關聯,關係是student-->score為1:N
兩個表你都有要獲取的字段
SQL 語句:
selectst.
id,sc.
id,sc.
course,sc
.score
from
student
stjoin
score
sconst.
id=sc.
idwherest.
name
="cyh"
這段SQL的幾點小建議(我的個人習慣哈):
資料表要帶庫名,比如student更應該寫成db.student,避免在不同庫下執行出錯
使用別名,獲取表的字段前帶著別名,避免重複字段衝突,也更清晰
join寫全,不要用逗號來替代join,可讀性不好
用on來表示兩表之間的連線關係,雖然放在where條件中也可以,但這樣可讀性更好,也便於以後遇到left/right join時增加條件在on後面方便。
關於你的解決方案:
第1種:
你的SQL表達的意思是,先從student表中取出id,然後根據id從score表中取出對應id資料,這是一種過程化的思維,更適用於程式開發,寫SQL要多用集合思維,想想把每個表看做集合,然後用乙個字段關聯起來,獲得乙個總體集合之後,再通過where條件進行篩選。
所以,你的第一種方案,只能取到score表的資料,是取不到想要的名字的。
第2,3種:
這兩種犯的是同乙個錯誤,就是你join了student和score兩張表,但是他們之間卻沒有連線關係。以第二種為列,你把你的SQL轉成自然語言來讀就是「從student中取出名字為chy的id,然後在student和score笛卡爾積集合中,選取出score.id等於chy的id的結果。
」,由於兩表之間沒有join條件所以會做笛卡爾積,如果不懂可以去google下哈。
tip:笛卡爾積是形成慢SQL的重要原因,平時多理解對以後會很有幫助的
2樓:史秀全
select a.id,a.name,b.course,b.score from student a
inner join score b on a.id=b.id
where id='2'
3樓:chen
輸出結果是cyh的三門課程的成績
student 和 score 表關聯一下就好了
select id,name,course,score from score s,student t where s.id = t.id and s.id = 2;
通過mysql做乙個家族關係的表(id,pid,name),通過乙個id怎麼判斷是否某個節點的子節點?
Kaciras 如果你的表一定要是 id,pid,name 這種結構,那只能遞迴。如果你可以自定義表結構那還有以下選擇 如果只有判斷後代這乙個需求,那就使用並查集。如果還有其它查詢需求,比如查x是y的第幾代啊 x到y之間的所有節點啊,可以參考我做過的乙個類似的功能 在資料庫中儲存一棵樹,實現無限級分...
Python2 中如何將乙個結果中的Unicode編碼轉換為中文?
首先 其實我沒太看懂你的dict1為什麼能decode?你是直接賦值了字串還是json.dumps 解決辦法的話看下面 單獨轉換 u73bb u7483 格式的編碼並不難 string u73bb u7483 print string.decode unicode escape 如果你的dict1已...
關於機器學習中L2範數作為正則化損失的疑問? 有關強凸strong convexity
大野人007 如果原問題僅僅是凸的而不是強凸,試想加上L2 norm是不是把原問題變為了強凸?而求解強凸問題和廣義凸的問題,是不是求解強凸的擁有更快的收斂率?是不是也就加速了呢?至於第二個問題,如果你的L2 norm前面的引數lambda是不變的,那可能確實會有偏移,但如果lambda隨著迭代而變化...