设为首页 加入收藏

TOP

mysql SELECT查询(五)
2015-11-21 01:28:04 来源: 作者: 【 】 浏览:3
Tags:mysql SELECT 查询
MariaDB [hellodb]> SELECT * FROM students,coc,classes;
?
自然联结:?
?
又叫内联结或等值联结,两张表要有相同的字段可以建立联结。用WHERE 联结条件。一般情况下都是使用自然联结。
?
举例子先,上面的students表中有学生信息,而classes表中有班级的名称。现在想显示学生的名子和所对应的班级名称。
?
那么就需要student和classes建立结结。正好它们都有classID班级编号。所以:
?
MariaDB [hellodb]> SELECT students.Name,classes.Class FROM students,classes WHERE students.ClassID = classes.ClassID;
+---------------+----------------+
| Name ? ? ? ? ?| Class ? ? ? ? ?|
+---------------+----------------+
| Shi Zhongyu ? | Emei Pai ? ? ? |
| Shi Potian ? ?| Shaolin Pai ? ?|
| Xie Yanke ? ? | Emei Pai ? ? ? |
| Ding Dian ? ? | Wudang Pai ? ? |
*
*
23 rows in set (0.00 sec)
?
中间省略了,不然太多。 ?上面用WHERE来做两个表的等值条件。
?
把字段全部显示出来看看:
?
MariaDB [hellodb]> SELECT * FROM students,classes WHERE students.ClassID = classes.ClassID;
+-------+---------------+-----+--------+---------+-----------+---------+----------------+----------+
| StuID | Name ? ? ? ? ?| Age | Gender | ClassID | TeacherID | ClassID | Class ? ? ? ? ?| NumOfStu |
+-------+---------------+-----+--------+---------+-----------+---------+----------------+----------+
| ? ? 1 | Shi Zhongyu ? | ?22 | M ? ? ?| ? ? ? 2 | ? ? ? ? 3 | ? ? ? 2 | Emei Pai ? ? ? | ? ? ? ?7 |
| ? ? 2 | Shi Potian ? ?| ?22 | M ? ? ?| ? ? ? 1 | ? ? ? ? 7 | ? ? ? 1 | Shaolin Pai ? ?| ? ? ? 10 |
| ? ? 3 | Xie Yanke ? ? | ?53 | M ? ? ?| ? ? ? 2 | ? ? ? ?16 | ? ? ? 2 | Emei Pai ? ? ? | ? ? ? ?7 |
| ? ? 4 | Ding Dian ? ? | ?32 | M ? ? ?| ? ? ? 4 | ? ? ? ? 4 | ? ? ? 4 | Wudang Pai ? ? | ? ? ? 12 |
| ? ? 5 | Yu Yutong ? ? | ?26 | M ? ? ?| ? ? ? 3 | ? ? ? ? 1 | ? ? ? 3 | QingCheng Pai ?| ? ? ? 11 |
| ? ? 6 | Shi Qing ? ? ?| ?46 | M ? ? ?| ? ? ? 5 | ? ? ?NULL | ? ? ? 5 | Riyue Shenjiao | ? ? ? 31 |
| ? ? 7 | Xi Ren ? ? ? ?| ?19 | F ? ? ?| ? ? ? 3 | ? ? ?NULL | ? ? ? 3 | QingCheng Pai ?| ? ? ? 11 |
?
ClassID都是相等的。这里还有一个问题就是,在多表连结的时候会有多个字段一样的,所以在写的时候要把表名也给写上,就是这种格式students.ClassID之类的。但是有的表名又很长,这个时候就可以用别名了。在FROM后面的表名后面使用AS。FROM 表名 AS 别名
?
MariaDB [hellodb]> SELECT * FROM students AS STU,classes AS CLA WHERE STU.ClassID = CLA.ClassID;
+-------+---------------+-----+--------+---------+-----------+---------+----------------+----------+
| StuID | Name ? ? ? ? ?| Age | Gender | ClassID | TeacherID | ClassID | Class ? ? ? ? ?| NumOfStu |
+-------+---------------+-----+--------+---------+-----------+---------+----------------+----------+
| ? ? 1 | Shi Zhongyu ? | ?22 | M ? ? ?| ? ? ? 2 | ? ? ? ? 3 | ? ? ? 2 | Emei Pai ? ? ? | ? ? ? ?7 |
| ? ? 2 | Shi Potian ? ?| ?22 | M ? ? ?| ? ? ? 1 | ? ? ? ? 7 | ? ? ? 1 | Shaolin Pai ? ?| ? ? ? 10 |
| ? ? 3 | Xie Yanke ? ? | ?53 | M ? ? ?| ? ? ? 2 | ? ? ? ?16 | ? ? ? 2 | Emei Pai ? ? ? | ? ? ? ?7 |
| ? ? 4 | Ding Dian ? ? | ?32 | M ? ? ?| ? ? ? 4 | ? ? ? ? 4 | ? ? ? 4 | Wudang Pai ? ? | ? ? ? 12 |
| ? ? 5 | Yu Yutong ? ? | ?26 | M ? ? ?| ? ? ? 3 | ? ? ? ? 1 | ? ? ? 3 | QingCheng Pai ?| ? ? ? 11 |
| ? ? 6 | Shi Qing ? ? ?| ?46 | M ? ? ?| ? ? ? 5 | ? ? ?NULL | ? ? ? 5 | Riyue Shenjiao | ? ? ? 31 |
?
多表连结也简单,就是表多了以后会晕乎。所以主要问题就是要熟悉自己的各种表。
?
有内连结,自然就有外连结。内连结把表的字段的数值与另一张表连接起来,但是并不是所有记录都可以连接起来,比如上面的students表中还有两个人没有显示出来,因为他们没有班级。
?
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name ? ? ? ? ?| Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
| ? ?24 | Xu Xian ? ? ? | ?27 | M ? ? ?| ? ?NULL | ? ? ?NULL |
| ? ?25 | Sun Dasheng ? | 100 | M ? ? ?| ? ?NULL | ? ? ?NULL |
+-------+---------------+-----+--------+---------+-----------+
如这两位仁兄。那么如果我也想把这两个显示出来。就要用到外连接了。
?
外联结:外联结又分为“左外连结和右外连结”。其实意思都一样,就是以哪个为主,主表所有的都显示出来,别一张表如果对不上就为NULL。
?
左外联结 ? ?以左表为基准,右表没有的为NULL.
?left_tb LEFT JOIN right
首页 上一页 2 3 4 5 6 7 8 下一页 尾页 5/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇后端分布式系列:分布式存储-MyS.. 下一篇mysql学习记录(二十二)--mysql..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: