您的位置:首页 > 数据库 > MySQL

MySQL学习记录(多表连接查询+演示分析)七 DML

2013-06-15 17:08 621 查看
这章关键字:

CROSS JOIN   交叉连接

INNER JOIN   ON 内连接

LEFT JOIN     ON 左连接

RIGHT JOIN   ON 右连接

#先建一个表 用以测试下面语法

CREATE TABLE tb_course(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(18),

pid INT

)

#插入表数据

INSERT INTO tb_course(NAME,pid) VALUES('java',NULL);

INSERT INTO tb_course(NAME,pid) VALUES('javaSE',1);

INSERT INTO tb_course(NAME,pid) VALUES('javaEE',2);

INSERT INTO tb_course(NAME,pid) VALUES('openSource',NULL);

4000
INSERT INTO tb_course(NAME,pid) VALUES('struts',4);

INSERT INTO tb_course(NAME,pid) VALUES('hibernate',4);

INSERT INTO tb_course(NAME,pid) VALUES('spring',4);

INSERT INTO tb_course(NAME,pid) VALUES('webwork',4);

INSERT INTO tb_course(NAME,pid) VALUES('database',NULL);

INSERT INTO tb_course(NAME,pid) VALUES('oracle',9);

INSERT INTO tb_course(NAME,pid) VALUES('db2',9);

INSERT INTO tb_course(NAME,pid) VALUES('mysql',9);

INSERT INTO tb_course(NAME,pid) VALUES('SQLServer',9);

#交叉连接

SELECT COUNT(*) FROM tb_emp;  #16

SELECT COUNT(*) FROM tb_dept; #4

SELECT * FROM tb_emp,tb_dept #64=16*4

SELECT * FROM tb_emp CROSS JOIN tb_dept; #标准交叉连接写法

#内连接 连接条件就是主外键关联

SELECT * FROM tb_emp e,tb_dept d WHERE e.DEPTNO = d.DEPTNO

SELECT * FROM tb_dept INNER JOIN tb_emp     #标准内连接写法

ON tb_dept.DEPTNO = tb_emp.DEPTNO

#在外连接中,某些不满足条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行

#左外连接   

#tb_dept做主表,左边的表为主表,左边的表记录全部显示,如果没找到记录则补null.

SELECT * FROM tb_dept LEFT JOIN tb_emp

ON tb_dept.DEPTNO = tb_emp.DEPTNO

#oracle语法,左连接加号在右边

SELECT * FROM tb_emp e,tb_dept d WHERE e.DEPTNO = d.DEPTNO(+)

#右外连接  (右表做主表)

SELECT * FROM tb_dept RIGHT JOIN tb_emp

ON tb_dept.DEPTNO = tb_emp.DEPTNO

#自连接

SELECT c.name '类别名',c2.name '父亲别名'

FROM tb_course c LEFT JOIN tb_course c2

ON c.pid=c2.id

SELECT c.name '类别名',c2.name '父亲别名'

FROM tb_course c, tb_course c2

WHERE c.pid=c2.id

www.java1234.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: