关于MySQL92和99 等值连接、非等值连接、自连接、外连接及多表查询的代码示例总结!

一. MySQL92语法

*1. 内连接 没有关联关系的数据是不在查询范围之内的
*
1)等值连接

– 查询出101的班级信息(并带上该班级的所有学生信息)

SELECT *FROM class,student          WHERE class.`id`=student.`clazz_id`          AND class.`name`='101'; 

– 查询出rose的所有信息(包括班级信息)

SELECT *FROM class,student          WHERE class.`id`=student.`clazz_id`         AND student.`name`='rose';   

2)三表查询(多对多)

– 查询出rose的个人信息(包括其选修课程信息)

SELECT *FROM student,course,course_student          WHERE student.`id`=course_student.`stu_id`         AND course.`id`=course_student.`cou_id`         AND student.`name`='rose'; 

– 查询出java这门课的信息(包括选该门课的学生)

SELECT * FROM student,course,course_student         WHERE student.`id`=course_student.`stu_id`         AND course.`id`=course_student.`cou_id`         AND course.`name`='hadoop'; 

3)一对一

– 查询出孙俪的个人信息(包括其丈夫的信息)

SELECT * FROM husband,wife           WHERE wife.`wife_id`=husband.`wife_id`           AND wife.`wife_name`='孙俪'; 

– 查询出所有班级的信息(包括其学生的信息)

SELECT * FROM class,student           WHERE class.`id`=student.`clazz_id`; 

4)非等值连接

– 查询出所有学生的信息(包括他的年龄级别)

SELECT *FROM student,age_tb          WHERE student.`age`>=age_tb.`min`         AND student.`age`<age_tb.`max`; 

5)自连接

– 查询出北京市的信息(包括其区的信息)

SELECT *FROM city c1,city c2          WHERE c1.`id` =c2.`parent_id`         AND c1.`name`='北京市';  

2.外连接(不支持)

二. MySQL99语法

1.内连接
1)等值连接(对比)

 -- 查询出101的班级信息(并带上该班级的所有学生信息) SELECT *FROM class,student          WHERE class.`id`=student.`clazz_id`          AND class.`name`='101';          SELECT *FROM class I        NNER JOIN student         ON class.`id`=student.`clazz_id`         WHERE class.`name`='101'         -- 查询出rose的所有信息(包括班级信息) SELECT *FROM class,student          WHERE class.`id`=student.`clazz_id`         AND student.`name`='rose';           SELECT *FROM class          INNER JOIN student ON class.`id`=student.`clazz_id`WHERE student.`name`='rose' 

2)非等值连接

-- 查询出所有学生的信息(包括他的年龄级别) SELECT *FROM student,age_tb          WHERE student.`age`>=age_tb.`min`         AND student.`age`<age_tb.`max`;          SELECT *FROM student          INNER JOIN age_tb          ON student.`age`>=age_tb.`min`         AND student.`age`<age_tb.`max`; 

3)自连接

-- 查询出北京市的信息(包括其区的信息) SELECT *FROM city c1,city c2          WHERE c1.`id` =c2.`parent_id`         AND c1.`name`='北京市';          SELECT *FROM city c1          INNER JOIN city c2          ON  c1.`id` =c2.`parent_id`         AND c1.`name`='北京市'; 

4)三表连接

-- 查询出rose的个人信息(包括其选修课程信息) SELECT *FROM student,course,course_student          WHERE student.`id`=course_student.`stu_id`         AND course.`id`=course_student.`cou_id`         AND student.`name`='rose';          SELECT *FROM student          INNER JOIN course          JOIN course_student         ON student.`id`=course_student.`stu_id`         AND course.`id`=course_student.`cou_id`         WHERE student.`name`='rose' 

5)一对一

-- 查询出孙俪的个人信息(包括其丈夫的信息) SELECT * FROM husband,wife           WHERE wife.`wife_id`=husband.`wife_id`           AND wife.`wife_name`='孙俪';           SELECT *FROM husband INNER JOIN wife         ON wife.`wife_id`=husband.`wife_id`          WHERE wife.`wife_name`='孙俪' 
-- 查询出所有班级的信息(包括其学生的信息) SELECT * FROM class,student           WHERE class.`id`=student.`clazz_id`;           SELECT *FROM class           INNER JOIN student           ON class.`id`=student.`clazz_id`;  

2.外连接
1)左外连接

-- 查询出所有班级的信息(包括其学生的信息) SELECT *FROM class         LEFT JOIN student          ON class.`id`=student.`clazz_id`;          -- 查询出所有学生的信息(包括其班级的信息) SELECT *FROM student          LEFT JOIN class          ON class.`id`=student.`clazz_id`; 

2)右外连接

-- 查询出所有学生的信息(包括其班级的信息) SELECT *FROM class          RIGHT JOIN student          ON class.`id`=student.`clazz_id`; -- 查询出所有班级的信息(包括其学生的信息) SELECT *FROM student          RIGHT JOIN class          ON class.`id`=student.`clazz_id`; 

3)全外连接(sql不支持)
左外和右外拼接

-- 查询学生和班级的所有数据 SELECT *FROM class          LEFT JOIN student          ON class.`id`=student.`clazz_id`  #(结尾处不要写分号) UNION SELECT *FROM class          RIGHT JOIN student          ON class.`id`=student.`clazz_id`;