SELECT id, name,description,img_url,sort,is_display
from bbs_brand ORDER BY id DESC
limit startRow,pageSize ( limit 开始行,每页大小。)
**
SQL 左外连接,右外连接,全连接,内连接
**
内连接 : (查询的是两个表共有的数据)
左连接 :(以左表为主表【a】,查询展示的时候以左表的信息为主,相对应的右表如果没有信息会显示null)
右连接 :(以右表为主表【b】,查询展示的时候以右表的信息为主,相对应的左表如果没有信息会显示null)
完全连接 :(查询的是两个表的和,和左表对应的右表如果没有信息,会显示null。和右表对应的左表没有信息会显示null)
内连接。
(典型的连接运算,使用像 = 或 <> 之类的比较运算符)。包括相等连接和自然连接。
内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。
外连接
。外连接可以是左向外连接、右向外连接或完整外部连接*。*
在FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:
LEFT JOIN 或 LEFT OUTER JOIN。
左向外连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
FULL JOIN 或 FULL OUTER JOIN。
完整外部连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
例子:
a表 : id name b表: id job parent_id
1 张3 1 23 1
2 李四 2 34 2
3 王武 3 34 4
a.id同parent_id 存在主外键关系
内连接
:
(查询的是两个表共有的数据)
INNER JOIN:只显示多表之间与关联条件相匹配的列.
select a.*,b.* from a inner join b on a.id=b.parent_id
结果是:
1 张3 1 23 1
2 李四 2 34 2
左连接
:****(以左表为主表【a】,查询展示的时候以左表的信息为主,相对应的右表如果没有信息会显示null)
select a.*,b.* from a left join b on a.id=b.parent_id
结果是 :
1 张3 1 23 1
2 李四 2 34 2
3 王武 null
右连接
:****(以右表为主表【b】,查询展示的时候以右表的信息为主,相对应的左表如果没有信息会显示null)
select a.*,b.* from a right join b on a.id=b.parent_id
结果是:
1 张3 1 23 1
2 李四 2 34 2
null 3 34 4
完全连接
:****(查询的是两个表的和,和左表对应的右表如果没有信息,会显示null。和右表对应的左表没有信息会显示null)
select a.*,b.* from a full join b on a.id=b.parent_id
结果是:
1 张3 1 23 1
2 李四 2 34 2
null 3 34 4
3 王武 null
内连接:
INNER JOIN:只显示多表之间与关联条件相匹配的列.
外连接:
LEFT JOIN :以左表为基础,显示左表中的所有列,不管是否与关联条件相匹配,而右表中的数据只显示与关联条件相匹配的列,不匹配的列以NULL字符填充.
RIGHT JOIN:以右表为基础,显示右表中的所有列,不管是否与关联条件相匹配,而左表中的数据只显示与关联条件相匹配的列,不匹配的列以NULL字符填充.
FULL JOIN :显示多个表中的所有的列,不匹配关联条件的列以NULL字符填充.
hibernate 的left join fetch可以取出lazy对象
当你在one-to-many的时候,设置lazy=true时,取对象的时候会使用延迟加载。
但是你可以使用left join fetch强制取出lazy对象
一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的外联接 与延迟声明(lazy declarations).
一个fetch连接通常不需要被指定别名, 因为相关联的对象不应当被用在 where 子句 (或其它任何子句)中。
同时,相关联的对象 并不在查询的结果中直接返回,但可以通过他们的父对象来访问到他们。
最后注意,使用full join fetch 与 right join fetch是没有意义的。
如果你使用属性级别的延迟获取(lazy fetching)(这是通过重新编写字节码实现的),
可以使用 fetch all properties 来强制Hibernate立即取得那些原本需要延迟加载的属性(在第一个查询中)。
你可以在lazy="true"的情况下把fetch去掉,就会报异常. 当然,如果lazy="false"就不需要fetch了