MySql操作进阶

目录

1.多表联查

1.1内连接

1.2左连接和右连接

1.3自连接

2.子查询

3.合并查询

1.多表联查

多表联查实际上就是对多张表中的数据合并在一起进行查询,具体合并多张表中的数据方式为:取笛卡尔积的方式进行合并。

但仅是以笛卡尔积的方式合并表较为单薄,且很多时候无法做更进一步操作,例如对两个较大表合并后的结果进行查询。这些情况是我们不愿意看到的,因此对于多表联合的方式,我们存在内连接,左连接和右连接,以及全连接的方式。

1.1内连接

内连接的关键字是inner join,用于返回两个表中匹配的行。只有在连接条件成立的情况下,才会返回数据;若是连接无法建立,则会直接丢弃这些数据。

我们先创建两张表格t1和t2,并向里面插入数据据内容,效果如下:

MySql操作进阶_第1张图片 MySql操作进阶_第2张图片

然后使用内连接将二者连接,得到结果如下:

MySql操作进阶_第3张图片

我们会发现只有但二者id相同时,才会将其连接在一起,这也正是内连接的具体效果。

1.2左连接和右连接

左连接的关键字是left join,用于返回左表中的所有行,并返回右表中匹配的行。如果没有匹配的行,右表中的列将包含NULL值。

MySql操作进阶_第4张图片

左表作为基表,会将左表中的内容全部包含,然后合并和右表相同的内容,若不存在则填充NULL内容。

右连接的关键字是right join,作用与左连接相反,用于返回右表中的所有行,并返回左表中匹配的行。如果没有匹配的行,左表中的列将包含NULL值。

MySql操作进阶_第5张图片

右连接则是相反。因为左右连接具有相反的特性,所以我们将其统称为外连接。

1.3自连接

自连接是一种特殊的SQL查询技术,用于将同一张表中的不同行进行关联。自连接通常用于解决与同一表中的数据相关的查询问。自连接一般是用的连接方式是内连接,也就是使用inner join关键字将自己和自己重新连接。

具体的自连接效果如下:

MySql操作进阶_第6张图片

自连接会将本身内容进行复用,其中需要注意的内容是:在使用自连接过程中,必须对同一张表使用as关键字起别名,这样才可以在实现自连接。因为从本质上而言,连接仍是两表及以上的操作,所以需要以起别名的方式来将一张表当作两张表来看待。

2.子查询

在MySQL当中,子查询是指select嵌套使用的情况,具体作用是一个sql语句的查询过滤条件,是基于另一条查询语句的结果进行的。

我们给出实例,查询“不想毕业”同学的同班同学,其具体的sql语句应如下:

select * from student where class_id=(select id from student where name='不想毕业');

先查询到不想毕业同学的具体学号id结果,再将其作为过滤条件,查询得到存在该id的班级同学内容。 

不过,需要注意的是,当子查询语句只有一条结果的时候,可以使用=进行判定,将结果当作条件来进行使用。但如果子查询结果具有多个的时候,则需要使用in(exists)来进行集合判断,判断指定字段是否在集合中。

3.合并查询

合并查询实际上是将两条语句的查询结果合并到一起进行返回,并且要求两条语句的查询结果字段需要保持一致,才可以进行合并。

MySQL的合并查询包括UNION、UNION ALL、INTERSECT和EXCEPT(或MINUS)这四个操作符。

UNION:将两个或多个SELECT语句的结果集合并成一个结果集,去除重复的行。

例如:

SELECT name FROM customers WHERE city = 'New York'
UNION
SELECT name FROM customers WHERE city = 'Los Angeles'

这个查询将返回城市为“New York”或“Los Angeles”的客户名字列表,去除重复的行。

UNION ALL:将两个或多个SELECT语句的结果集合并成一个结果集,不去除重复的行。

例如:

SELECT name FROM customers WHERE city = 'New York'
UNION ALL
SELECT name FROM customers WHERE city = 'Los Angeles'

这个查询将返回城市为“New York”或“Los Angeles”的客户名字列表,不去除重复的行。

你可能感兴趣的:(MySql基础,mysql,数据库)