1.1. 子查询
1.1.1. 在房屋类型中,如何找出比双人间贵的所有房屋类型?
- 找到双人间的价格
- 根据第一步找到的价格作为查询条件去查满足条件的房屋类型,利用Where字句
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询
子查询在WHERE语句中的一般用法:
将子查询和比较运算符联合使用
注意:子查询返回的数据列有且仅能有一列;若判断条件不为in的时候,则子查询只能返回有且只有一行数据,若是in的话子查询可以返回多行数据。
子查询的执行过程是:
首先,执行小括号中的子查询,返回的结果是所有来自子查询的结果
其次,才开始执行外围的父查询,返回查询的最终结果
1.1.2. 查出价格在100-300的房间有哪些?
第一步:查出价格在100到300之间的房屋类型
第二部:依据第一步得到的结果作为条件,在房间表中查出这些房间类型的房屋有哪些?
1.2. 连接查询
在数据库应用中,若需要从多张表中通过某一些组合条件查询出我们需要的结果,此时就需要表连接查询。
在MySQL中,连接查询包括:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- 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
推荐使用左连接代替右连接