一、union联合查询
要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时。
特点:
1、要求多条查询语句的查询列数是一致的
2、要求多条查询语句查询的每一列的类型和顺序最好一致
3、union关键字默认去重,如果使用union all 可以包含重复项
两张表进行联合查询(逻辑上不正确,仅做示例进行展示以便理解):
SELECT
age,
gender
FROM
info
UNION
SELECT
'name',
phone
FROM
teacher;
二、inner join
内连接查询
需要有一个公共字段
已有 studnet 表中数据:
新建一个 socre 表:
插入数据:
内连接查询姓名对应成绩:
SELECT
name,
score
FROM
student
INNER JOIN score ON
student.id = score.stuid;
三、inner join注意事项
连接字段时一定要指定表
三张表的话再加一个inner join就行,依此类推
四、left join
(左连接)
以左表为基准,右表为辅
将左表指定字段全部取出,
对照左表,右表指定字段取出对应值
(未在右表找到对应实体属性时取NULL)
SELECT name,score
FROM
student LEFT JOIN score ON
student.id = score.stuid;
五、right join
(右连接)
以右表为基准,左表为辅
将右表指定字段全部取出,
对照右表,左表指定字段取出对应值
(未在左表找到对应实体属性时取NULL)
SELECT name,score
FROM
student RIGHT JOIN score ON
student.id = score.stuid;
六、cross join
(交叉连接)
建立两个表:
笛卡儿积:
SELECT
*
FROM
t1 CROSS JOIN t3;
内连接:
SELECT
*
FROM
t1 CROSS JOIN t3
WHERE
t1.id=t3.id;
七、natural join
(自然连接)
当保证公共字段字段名一致时,
不需要给定公共字段就能进行连接。
SELECT
*
FROM
t1 NATURAL JOIN t3;
自然左连接:
SELECT
*
FROM
t1 NATURAL LEFT JOIN t3;
自然右连接:
SELECT
*
FROM
t1 NATURAL RIGHT JOIN t3;
八、无公共字段的自然连接返回笛卡儿积
九、using
当两张表中有两个公共字段时
使用自然连接:
SELECT
*
FROM
t1 NATURAL JOIN t3;
使用using进行字段指定:
SELECT * FROM t1 INNER JOIN t3 USING(id);
十、实用的连接方式
写全左右两张表的公共字段
例如:student.id = score.stuid
这样可以增强可读性