MySql基礎(多表查詢)
阿新 • • 發佈:2018-12-21
連線查詢
- 交叉查詢
- 等值連線
- 內連線
交叉查詢
格式
SELECT * FROM TABLE_A CROSS JOIN TABLE_B [WHERE 條件]
SELECT * FROM TABLE_A JOIN TABLE_B[WHERE 條件]
SELECT * FROM TABLE_A, TABLE_B[WHERE 條件]
笛卡爾集:
省略連線條件
連線條件無效
所有表中的所有行互相連線** 為了避免笛卡爾集, 可以在 WHERE 加入有效的連線條件
格式: SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2; 在 WHERE 子句中寫入連線條件 在表中有相同列時,在列名之前加上表名字首 例:查詢每個學生的所在班級,顯示學生編號,姓名,班級名稱 SELECT stuid,name,cname FROM student,classinfo WHERE student.cid=classinfo.cid;
**注意:**使用表名字首在多個表中區分相同的列
在不同表中具有相同列名的列可以用表的別名加以區分
連線 n個表,至少需要 n-1個連線條件。 例如:連線三個表,至少需要兩個連線條件。
內連線
內連線: 合併具有同一列的兩個以上的表的行, 結果集中不包含一個表與另一個表不匹配的行
SELECT <列名>
FROM 表1 INNER JOIN 表2
ON 表1.列名 條件運算子 表2.列名
[WHERE 條件]
[ORDER BY 排序列]
其中“ON 表1.列名 條件運算子 表2.列名” 中,條件運算子常用的是:=、<>,>,<,>=,<=。
表1.列名和表2.列名,分別是兩個表的公共列。
查詢李四所考科目的平均成績,顯示姓名,平均成績。
SELECT name,avg(socre) FROM score
INNER JOIN student -- 要連線的表
ON score.stuid =student.stuid -- 連線條件
WHERE name='李四';
外連線
外連線
——左外聯結 (LEFT JOIN)
——右外聯結 (RIGHT JOIN)
外連線與普通連線的區別
普通連線操作只輸出滿足連線條件的元素
外連線操作以指定表為連線主體,將主體表中不滿足連線條件的元組一併輸出
左外連線:左外連線使用LEFT JOIN連線兩表,連線時左表為主表,左表中的每條記錄必定出現在結果集中,而在右表中沒有對應的記錄,將以NULL值進行填充。
SELECT * FROM TABLE_A
LEFT JOIN TABLE_B
ON 連線條件
[WHERE 條件]
算符常用的是:=、<>,>,<,>=,<=。
查詢所有學生課程的考試成績,
查詢結果保留學生ID、姓名、性別、課程ID、成績
SELECT student.stuid, `name`, sex, subid, socre
FROM student LEFT JOIN score
ON student.stuid = score.stuid
右外連線與左外連線相似,不同的是右表為主表,右表中的每條記錄必定出現在結果集中,而在左表中沒有對應的記錄,將以NULL值進行填充。
SELECT * FROM TABLE_A
RIGHT JOIN TABLE_B
ON 連線條件
[WHERE 條件]
算符常用的是:=、<>,>,<,>=,<=。
查詢所有學生課程的考試成績,
查詢結果保留學生ID、姓名、性別、課程ID、成績
SELECT student.stuid, `name`, sex, subid, socre
FROM student RIGHT JOIN score
ON student.stuid = score.stuid
內外連線區別
內連線時,得到的結果是公有資料集C。
左外連線時,得到的是A1+C。
右外連線時,得到的是B1+C。