MySQL-外链接

发表于 MySQL 分类,标签: MySQL
-- 2.外连接
-- 语法
SELECT ... FROM join_table (LEFT|RIGHT|FULL) [OUTER] JOIN join_table2 ON join_condtion WHERE where_definition
-- 不仅列出与连接条件想匹配的行,还列出左表(左外连接)、右表(右外连接)或两个表(全外连接)中所有符合where过滤条件的数据行。

-- 外连接分类
-- 左外连接(left[outer]join)
-- 右外连接(LEFT[OUTER]JOIN)
-- 全外连接(FULL[OUTER]JOIN)

-- 5.1版本MySql暂时还不支持全外连接

-- 左外连接
SELECT * FROM emp LEFT OUTER JOIN dept ON emp.dept_id=dept.id;
SELECT * FROM emp LEFT JOIN dept ON emp.dept_id=dept.id;

-- 右外连接
SELECT * FROM emp RIGHT OUTER JOIN dept ON emp.dept_id=dept.id;
SELECT * FROM emp RIGHT JOIN dept ON emp.dept_id=dept.id;

-- 交叉连接
-- 语法
SELECT ... FROM join_table CROSS JOIN join_table2;
-- 没有on自居和where自居,它返回连接表中所有数据行的笛卡尔积(全交叉集合)
-- 其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
-- 相当于 select * from table1,table2; 
SELECT * FROM emp CROSS JOIN dept;
SELECT * FROM emp CROSS JOIN dept CROSS JOIN test_table;
SELECT COUNT(*) FROM emp CROSS JOIN dept CROSS JOIN test_table;
SELECT * FROM emp,dept; 



-- 自连接,参与连接的表都是同一张表。(通过给表取别名虚拟表名)
SELECT e1.ren_name 员工姓名,e2.ren_name 经理姓名 FROM emp e1 LEFT JOIN emp e2 ON e1.gmr = e2.id;
-- 查询出员工姓名和其经理的姓名


SELECT e1.ren_name 经理姓名 FROM emp e1 RIGHT JOIN emp e2 ON e1.id = e2.gmr; -- 查询出所有经理的名字
SELECT e1.ren_name 经理姓名 FROM emp e1 RIGHT JOIN emp e2 ON e1.id = e2.gmr GROUP BY e1.ren_name;  -- 查询出所有经理的名字,并分组去掉重复。
SELECT e1.ren_name 经理姓名 FROM emp e1 RIGHT JOIN emp e2 ON e1.id = e2.gmr WHERE e1.ren_name IS NOT NULL GROUP BY e1.ren_name;  -- 去除重复,并且去掉空值


0 篇评论

发表我的评论