连接查询
- 交叉查询
- 等值连接
- 内连接
交叉查询
格式
SELECT * FROM TABLE_A CROSS JOIN TABLE_B [WHERE 条件]
SELECT * FROM TABLE_A JOIN TABLE_B[WHERE 条件]
SELECT * FROM TABLE_A, TABLE_B[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;
内连接
内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行
SELECT <列名>
FROM 表1 INNER JOIN 表2
ON 表1.列名 条件运算符 表2.列名
[WHERE 条件]
[ORDER BY 排序列]
查询李四所考科目的平均成绩,显示姓名,平均成绩。
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。