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

来源:互联网 发布:淘宝最新搜索排名规则 编辑:程序博客网 时间:2024/06/11 04:15

这章关键字:

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);
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


原创粉丝点击