连接查询

  1. 交叉查询
  2. 等值连接
  3. 内连接

交叉查询

格式
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

内外连接区别
MySql基础(多表查询)-LMLPHP
内连接时,得到的结果是公有数据集C。
左外连接时,得到的是A1+C。
右外连接时,得到的是B1+C。

11-23 02:57