MYSQL中的高级查询

1.1.  子查询

1.1.1. 在房屋类型中,如何找出比双人间贵的所有房屋类型?

 

  1. 找到双人间的价格
  2. 根据第一步找到的价格作为查询条件去查满足条件的房屋类型,利用Where字句

 

子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询

子查询在WHERE语句中的一般用法:

将子查询和比较运算符联合使用

注意:子查询返回的数据列有且仅能有一列;若判断条件不为in的时候,则子查询只能返回有且只有一行数据,若是in的话子查询可以返回多行数据。

子查询的执行过程是:

首先,执行小括号中的子查询,返回的结果是所有来自子查询的结果

其次,才开始执行外围的父查询,返回查询的最终结果

 

1.1.2.   查出价格在100-300的房间有哪些?

第一步:查出价格在100到300之间的房屋类型

第二部:依据第一步得到的结果作为条件,在房间表中查出这些房间类型的房屋有哪些?

1.2.  连接查询

在数据库应用中,若需要从多张表中通过某一些组合条件查询出我们需要的结果,此时就需要表连接查询。

在MySQL中,连接查询包括:

  1. INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  2. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  3. RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

1.1.3. 内连接:

查询结果是左右连接的交集,【即左右连接的结果去除null项后的并集(去除了重复项)】

语法为:SELECT 字段1,字段2 from 表1

                 Inner join 表2  on 表1.字段1  =  表2.字段2  where 条件

等价于:

Select 字段1,字段2 from 表1 , 表2

Where表1.字段1  =  表2.字段2  and  条件

其中on之后的条件为表1和表2关联的条件。

问题1:查询所有状态为正常可用的房屋(房屋号、类型名称、状态名称,床位,价格)

问题2:查询出所有状态为正常可用且价格低于500的房屋

1.1.4. 左连接

以左表为准,去右表找数据,如果没有匹配的数据,则以null补空位,所以输出结果数>=左表原数据数

左右表区分:在语句前面的为左表,后面的为右表。

语法:select n1,n2,n3 from ta left join tb on ta.n1= ta.n2 [这里on后面的表达式,不一定为=,也可以>,<等算术、逻辑运算符]【连接完成后,可以当成一张新表来看待,运用where等查询】

问题:列出所有房屋的完整信息,信息包括:房屋信息和该房屋目前住的人的信息。

1.1.5. 右连接

 a left join b 等价于 b right join a

推荐使用左连接代替右连接

原文地址:https://www.cnblogs.com/dengcl/p/7568371.html