MySQL入门实践(三)
来源:互联网 发布:js字符串去空格转数组 编辑:程序博客网 时间:2024/06/08 01:32
MySQL入门实践(三)
复杂查询
多表查询
常常我们需要从多个表中提取信息,这时候FROM
一个表已经无法满足要求。MySQL为此允许FROM
来源于多个表,格式如下:
SELECT 列名 FROM 表1,表2;
子查询嵌套
为了满足复杂的查询操作,MySQL允许SELECT
中嵌套SELECT
查询语句进行查询。
例如从employee表和和project表中查询name
为“Tom”的员工所在部门和所做过的项目数:
SELECT of_dpt,COUNT(proj_names) AS count_project FROM project WHERE of_dpt IN (SELECT in_dpt FROM employee WHERE name="Tom");
结果:
连接查询
MySQL中有INNER JOIN
,LEFT JOIN
,RIGHT JOIN
,UNION
四种常用的连接操作。
内连接(INNER JOIN)
我们以数学上的集合来示意,INNER JOIN
类似于集合的交运算,将两个表都具有的部分进行连接:
例如从表employee和表department,查询employee.in_dpt
等于department.dpt_name
的员工的id
,name
,people_num
属性,并以id
从小到大排序:
SELECT id,name,people_num FROM employee INNER JOIN department ON employee.in_dpt = department.dpt_name ORDER BY id;
结果:
左连接(LEFT JOIN)和右连接(RIGHT JOIN)
LEFT JOIN
与RIGHT JOIN
的形式和意义基本类似,都是以某一个表为基准(左边或者右边)然后进行匹配,对于没有匹配成功的,填充NULL
。
例如:
SELECT id,name,people_num FROM employee RIGHT JOIN department ON employee.in_dpt = department.dpt_name ORDER BY id;
结果:
从结果上可以看到id
和name
都出现了两行结果为NULL
,这是因为department.dpt_name
中存在dpt_5
和 dpt_6
两个值在employee.in_dpt
中未出现。
交叉连接(CROSS JOIN)
CROSS JOIN
是交叉连接,得到两个表的笛卡尔积
笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。
在MySQL中实际上CROSS JOIN
和INNER JOIN
的结果是一样的。
并连接(UNION)
这里仍然以数学上的集合来示意,UNION
类似于集合的并运算,将两个表按照一定的列合并,例如从表empolyee和表user中按照id
来合并属性name
,age
,id
:
SELECT id,name,age FROM employee UNION (SELECT id,name,age FROM user);
参考资料
http://www.cnblogs.com/chiangchou/p/mysql-3.html
http://www.cnblogs.com/BeginMan/p/3754322.html
https://www.shiyanlou.com/courses/9/labs/2414/document
- MySQL入门实践(三)
- MySQL入门(三)
- mysql入门(三)
- 项目管理实践入门初探(三)
- 项目管理实践入门初探(三)
- MySQL入门学习(三)
- MySQL入门学习(三)
- MySQL入门学习(三)
- MySQL入门学习(三)
- MySQL入门学习(三)
- node入门(三)-- mysql
- MySQL入门实践(一)
- MySQL入门实践(二)
- MySQL 学习实践笔记(三)
- docker实践入门之三
- 分布式计算开源框架Hadoop入门实践(三)
- 分布式计算开源框架Hadoop入门实践(三)
- 分布式计算开源框架Hadoop入门实践(三)
- 【计算机视觉】opencv姿态解算5 OpenGL与OpenCV实现增强现实
- Android dex分包
- Dijkstra算法一个人的旅行 杭电oj
- JavaScript之函数与作用域
- 初识信号与槽
- MySQL入门实践(三)
- eclipse连接hadoop集群
- 同步图计算框架GraphLite编程之图着色
- JavaScript数据图表库推荐--百度ECharts
- 深入理解vector的拷贝构造
- github
- 1
- 组合数学常用内容——基础内容+莫比乌斯反演
- 对于socket的理解