文档章节

连接查询

小强斋太
 小强斋太
发布于 2016/11/09 20:08
字数 732
阅读 4
收藏 0
点赞 0
评论 0

连接查询

1、内连=join=inner join
2、外连接(左连接/右连接)

left join(左联接)返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

---------------------------------------------------------------------------------------------------------------------------------------------------------

一、例子1:结果以红色表示

表A记录如下:

A_PersonID

PersonName

1

张三

2

李四

3

王五

4

赵六

5

周七

表B记录如下:

B_PersonID

Love_Fruit

1

香蕉

2

苹果

3

橘子

4

8

--------------------------------------------
1.left join

select A.PersonName , B.Love_Fruit from A left join B  on A.A_PersonID= B.B_PersonID

A_PersonID

PersonName 

B_PersonID

Love_Fruit

1

张三

1

香蕉

2

李四

2

苹果

3

王五

3

橘子

4

赵六

4

5

周七

null

null

(所影响的行数为 5行)结果说明:left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.A_PersonID= B.B_PersonID).B表记录不足的地方均为NULL.
2.right join

select A.PersonName , B.Love_Fruit from A right join B  on A.A_PersonID= B.B_PersonID

结果如下:(所影响的行数为 5行)

A_PersonID

PersonName

B_PersonID

Love_Fruit

1

张三

1

香蕉

2

李四

2

苹果

3

王五

3

橘子

4

赵六

4

null

null

8

结果说明:仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
3.inner join

select A.PersonName , B.Love_Fruit from A inner join B  on A.A_PersonID= B.B_PersonID

A_PersonID

PersonName

B_PersonID

Love_Fruit

1

张三

1

香蕉

2

李四

2

苹果

3

王五

3

橘子

4

赵六

4

 结果说明:很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

-------------------------------------------------------------------------------------------------------------------------------------------

例子2:

以下一hibernate为例子,搜索条件就没有了,hibernate的映射文件做了这项工作

左连接: select c.name, s.name from Student s left join c.students s

右连接: select c.name, s.name from Student s left join c.students


JoinQueryTest.java

package com.ncepu.hibernate;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;

import junit.framework.TestCase;

/**
 * 连接查询
 * @author Administrator
 *
 */
public class JoinQueryTest extends TestCase {

	public void testQuery1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			//List students = session.createQuery("select c.name, s.name from Student s join s.classes c").list();
			List students = session.createQuery("select c.name, s.name from Student s inner join s.classes c").list();
			for (Iterator iter=students.iterator(); iter.hasNext();) {
				Object[] obj = (Object[])iter.next();
				System.out.println(obj[0] + "," + obj[1]);
			}
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}

	public void testQuery2() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();

			List students = session.createQuery("select c.name, s.name from Classes c left join c.students s").list();
			for (Iterator iter=students.iterator(); iter.hasNext();) {
				Object[] obj = (Object[])iter.next();
				System.out.println(obj[0] + "," + obj[1]);
			}
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}
	
	public void testQuery3() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();

			List students = session.createQuery("select c.name, s.name from Classes c right join c.students s").list();
			for (Iterator iter=students.iterator(); iter.hasNext();) {
				Object[] obj = (Object[])iter.next();
				System.out.println(obj[0] + "," + obj[1]);
			}
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}
	
}

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2012/09/06/5637185.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
Hibernate HQL

4、HQL 1、基本查询 1、不带条件的查询 2、带条件的查询 3、通过参数进行查询 4、通过命名参数进行查询 5、查询空(null)元素 2、常用查询 1、列表查询(in ()) 2、投影查询 3、投影一个元...

pmos ⋅ 2016/10/20 ⋅ 0

MYSQL学习笔记(四)查询数据

某个班级学生信息表t_grade结构和数据如下: 一、单表查询 1.查询所有字段 2.查询特定字段 3.where条件查询 4.带in关键字查询 5 .带between and关键字查询 6.带like的模糊查询 7.空值查询 8....

iborder ⋅ 2016/09/05 ⋅ 0

【SQL】—多表查询的几种连接方式

前言 最近在项目中用到连接查询,连接查询是关系数据中最主要的查询,包括内连接、外连接等。通过连接运算符可以实现多个表查询。下面来复习一下。 正文 连接查询主要分为三种:内连接、外连...

zt15732625878 ⋅ 01/16 ⋅ 0

MySQL学习笔记-子查询和连接

MySQL学习笔记-子查询和连接 使客户端进入gbk编码方式显示: mysql> SET NAMES gbk; 1.子查询 子查询的定义: 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。 例如: SELECT * FRO...

谢育政 ⋅ 2017/05/24 ⋅ 0

MySQL数据表中的数据操作

1、插入数据 以下方式必须写出所有的字段 可以通过 insert into xxx select xxx 插入已有表中的数据 2、简单查询 select * from 表名 查询条件 select * from 表名 where 条件 3、更新 upda...

pmos ⋅ 2016/08/04 ⋅ 0

逻辑查询优化

1、逻辑查询优化 基于关系代数理论,启发式规则,对查询进行等价重写。 2、查询重写规则 (1)子查询优化 (2)视图重写 (3)等价谓词重写 (4)条件化简 (5)外连接消除 (6)嵌套连接消除...

xixicat ⋅ 2014/07/19 ⋅ 0

【02】查询优化的技术范围

0、技术类型 (1)逻辑查询优化技术 A、语法级 基于语法进行优化 B、代数级 使用形式逻辑进行优化,运用关系代数的优化 C、语义级 根据完整性约束,对查询语句进行语义理解,推知一些可优化的...

xixicat ⋅ 2014/07/19 ⋅ 0

SQL查询的高级应用

一、 简单查询 简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为“张三”的...

长平狐 ⋅ 2013/01/06 ⋅ 0

六、MySQL查询数据

6.1、基本查询语句 MySQL从数据表中查询数据的基本语句为SELECT语句,其基本格式为: SELECT {* | } [ FROM ,... [WHERE 表达式 [GROUP BY ] [HAVING [{ }...]] [ORDER BY...

运维菜鸟丶 ⋅ 2017/08/02 ⋅ 0

T-SQL查询语句

SQL语言中最主要、最核心的部分是它的查询功能。查询语句用来对已经存在于数据库的数据按照特定的组合、条件表达式或次序进行检索,使用SELECT语句来完成。 使用SELECT查询数据 1. SELECT语法...

杨书凡 ⋅ 2017/11/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Netweaver和SAP云平台的quota管理

Netweaver 以需要为一个用户上下文(User Context)能够在SAP extended memory区域中分配内存尺寸创建quota为例。 对于Dialog工作进程,使用事务码修改参数 ztta/roll_extension_dia. 对于非D...

JerryWang_SAP ⋅ 18分钟前 ⋅ 0

IDEA提示编码速度

焦点移动 将焦点冲代码编辑窗口移动到菜单栏:Alt+菜单栏带下划线字母 将焦点从工具窗口移动到代码编辑窗口 Esc或Shift+Esc 将焦点从代码编辑移动到最近使用的工具窗口 F12 模板提示 Ctrl+J...

bithup ⋅ 27分钟前 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 51分钟前 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 57分钟前 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

python3.6 安装pyhook_3

我的是在win下的,忙了半天老是安装不了, pip install 也不行。 那么可以看出自己的版本是32bit 一脸懵逼 没办法 只好下载32版本的来安装 我一直以为 是 对应32 位的 。 下面是 小例子 http...

之渊 ⋅ 今天 ⋅ 0

004、location正则表达式

1、location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。 2、location的语法 = 开头表示精确匹配 ^~...

北岩 ⋅ 今天 ⋅ 0

CentOS7 静默安装 Oracle 12c

环境 CentOS7.5 最小安装 数据库软件 linuxx64_12201_database.zip 操作系统配置 关闭 SELinux sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config 关闭防火墙 systemctl disable ......

Colben ⋅ 今天 ⋅ 0

Yii2中findAll()的正确使用姿势/返回为空的处理办法

从一次错误的操作开始 $buildingObject = Building::findAll("status=1"); 1 这个调用看着没有任何毛病,但是在使用时返回的结果却是一个空数组。再回过头来看看数据表中: 按照套路来讲,查...

dragon_tech ⋅ 今天 ⋅ 0

如何优雅的编程——C语言界面的一点小建议

我们鼓励在编程时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以...

柳猫 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部