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
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
相关文章推荐
- MySQL学习记录(子查询+演示分析)八 DML
- MySQL学习记录(索引+演示分析)九 DML
- MySQL学习记录(插入+删除+演示分析)四 DML
- MySQL学习记录(视图+演示分析)十 DML
- MySQL学习记录(简介+语法+演示分析)一
- MySQL学习记录(约束+语法+演示分析)三
- MySQl学习记录3 :查询笔记
- php学习笔记(二)php与mysql连接与用php发送SQL查询
- MYSQL学习笔记 (六)explain分析查询
- mysql学习记录:单表查询(补充1)
- php入门学习知识点一 PHP与MYSql连接与查询
- MySQL学习足迹记录12--使用子查询
- python 2.7.11 + windows 10 连接 mysql学习记录
- 2017.6.29 学习记录 MySql的运用查询
- Mysql学习总结(25)——MySQL外连接查询
- MySQL学习笔记 3:子查询、连接、运算符和函数
- Mysql学习总结(25)——MySQL外连接查询
- mysql中左连接后,最终的记录数大于左边表的记录分析
- [MySQL]学习笔记- 用户行为表中,查询每个人的一条最新行为(分组 排序 取时间最大的一条记录)
- mysql 将查询到的记录,按一行,按元祖,将字段用逗号连接起来。