Mysql多表操作/查询

常用术语
冗余(Redundancy):存储两次数据,以便使系统更快速。
主键(Primary Key):主键是唯一的。同一张表中不允许出现同样两个键值。一个键值只对应着一行。
外键(Foreign Key):用于连接两张表。
表连接的方式:无论是内连接还是外连接,在查询的时候最好使用【表名.列名】的方式指定需要查询的列名,否则一旦两个表中出现了列名一致的数据时,可能会报错,养成良好的习惯很重要,我们接下来将对这三种连接进行详细的介绍
内连接:就是表间的主键与外键相连,只取得键值一致的,可以获取双方表中的数据连接方式。内连接是抽取两表间键值一致的数据,而外连接(左连接,右连接)时,是以其中一个表的全部记录作为基准进行检索语法如下:

  SELECT 列名1,列名2... FROM 表1 INNER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

外连接:与取得双方表中数据的内连接相比,外连接只能取得其中一方存在的数据,外连接又分为左连接和右连接两种情况。左连接和右连接只有数据基准的区别,本质上是一样的,具体使用哪一种连接,根据实际的需求所决定

接下来,我们将介绍这两种连接方式。

  左连接  是以左表为标准,只查询在左边表中存在的数据,当然需要两个表中的键值一致,他会以左连接中的左表的全部数据作为基准进行查询。语法如下:

  SELECT 列名1 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

  右连接  将会以右边作为基准,进行检索。语法如下:

  SELECT 列名1 FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

表的别名:其实我们在查询的过程中,如果遇到了特别复杂的数据表名,我们可以通过取别名的方式来实现,使用的是我们以前使用过的【AS】语句,例如,我们的内连接就可以化简为下面的语句

  SELECT s.name,c.collegeName FROM student AS s INNER JOIN college AS c ON s.collegeId = c.collegeId;

自连接: 

| studentId | name | phone | collegeId | studentId | name | phone | collegeId | 

  mysql> SELECT * FROM student s ,student a where a.collegeId=s.collegeId AND a.name <> s.name ORDER BY a.collegeId; 

  • 【student s】和【student a】的含义就是分别给我们的【student】表取了两个不同的别名;
  • 【a.collegeId = s.collegeId AND a.name <> s.name 】的含义是找出【collegeId】相同,但是【name】不同的人;
  • 【ORDER BY a.collegeId;】将结果顺序输出;

 

子查询:

通常我们在查询的SQL中嵌套查询,称为子查询。子查询通常会使复杂的查询变得简单,但是相关的子查询要对基础表的每一条数据都进行子查询的动作,所以当表单中数据过大时,一定要慎重选择。基本语法如下

  SELECT 列名1 ...FROM 表名 WHERE 列名 比较运算符 (SELECT 命令)

  mysql> SELECT * FROM (SELECT student.name,college.collegeName FROM student INNER JOIN college ON student.collegeId = college.collegeId)b WHERE b.collegeName = ‘清华’;

  mysql> SELECT * FROM (SELECT student.name,college.collegeName FROM student INNER JOIN college ON student.collegeId = college.collegeId)b WHERE b.collegeName = ‘清华’;
---------------------

 

posted @ 2018-12-07 19:28  傍风无意  阅读(207)  评论(0)    收藏  举报