zoukankan      html  css  js  c++  java
  • 连接查询 小强斋

    连接查询

    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);
    		}
    	}
    	
    }
    
  • 相关阅读:
    Solr部署准备
    linux 安装SVN
    构建高性能web站点--读书大纲
    webapi请求
    搭建git服务器
    git常用知识整理
    Ruby on Rail 开发入门
    Ruby on rail 开发准备
    PHP模拟请求雅虎竞标商品加价
    JAVA httpURLConnection curl
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5429460.html
Copyright © 2011-2022 走看看