1:需求:查询学过“叶平”老师所教的所有课的同学的学号、姓名;

 List<Map<String,Object>> selectYepingAllCourse(@Param("name") String name);

List<Map<String,Object>>来接收从数据库查询的数据
 <!--学叶平老师教的所有课的学生的学号,姓名-->
<select id="selectYepingAllCourse" resultMap="Base_ResultMap">
SELECT
a.s_id,
a.sname
FROM
a_student a
WHERE
a.s_id IN (
SELECT
a.s_id
FROM
a_sc a
INNER JOIN a_course b ON a.c_id = b.c_id
INNER JOIN a_teacher c ON c.t_id = b.t_id
WHERE
c.tname = #{name}
GROUP BY
a.s_id
HAVING
count(a.c_id) = (
SELECT
count(a_course.c_id)
FROM
a_course
INNER JOIN a_teacher ON a_teacher.t_id = a_course.t_id
WHERE
a_teacher.tname = #{name}
)
);
</select>

分析一下这个sql。

:都有哪些学生学习了叶平老师的课。
SELECT
a.s_id,count(a.c_id)
FROM
a_sc a
INNER JOIN a_course b ON a.c_id = b.c_id
INNER JOIN a_teacher c ON c.t_id = b.t_id
WHERE
c.tname = '叶平'
GROUP BY
a.s_id
:叶平老师教了几门课。
SELECT
count(a_course.c_id)
FROM
a_course
INNER JOIN a_teacher ON a_teacher.t_id = a_course.t_id
WHERE
a_teacher.tname = '叶平'
)
:学叶平老师课和叶平老师教的课一样的学生的信息。
SELECT
a.s_id
FROM
a_sc a
INNER JOIN a_course b ON a.c_id = b.c_id
INNER JOIN a_teacher c ON c.t_id = b.t_id
WHERE
c.tname = '叶平'
GROUP BY
a.s_id
HAVING
count(a.c_id) = (
SELECT
count(a_course.c_id)
FROM
a_course
INNER JOIN a_teacher ON a_teacher.t_id = a_course.t_id
WHERE
a_teacher.tname = '叶平'
)

测试:

/**
* 查询学过“叶平”老师所教的所有课的同学的学号、姓名;
*/
@Test
public void testSelectYepingAllCourse(){
List<Map<String, Object>> list = ascMapper.selectYepingAllCourse("李一");
for (Map<String,Object> i:list){
System.out.println(i);
}
}

输出的结果:

得到List集合中Map集合的值。

 for(int i=0;i<list.size();i++){
Map map=list.get(i);
//是用set来接收的。不能重复。无顺序
Set set = map.keySet();
System.out.println("set的值 "+set);
Object sId = map.get("sId");
System.out.println("得到sId的值 "+sId);
}

输出结果:这个只有一条结果。

下面看下多个结果的。

在使用mybatis中指定字段查询的更多相关文章

  1. Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)

    应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create ...

  2. 【mybatis】mybatis自定义动态字段查询,mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段

    mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段 先看一下 怎么实现动态的自定义字段查询: 例如: 而field 就是数据表中的某一个字段 String f ...

  3. sql 筛选表中指定字段包含26某个小写字母

    SELECT *from 表名WHERE 字段 COLLATE Chinese_PRC_CS_AS LIKE '%[abcdefghijklmnopqrstuvwxyz]%'筛选表中指定字段包含26某 ...

  4. mybatis中的高级查询

    Mybatis作为一个ORM框架,肯定是支持sql高级查询的. 下面的一个案例来为大家详细讲解mybatis中的高级查询. 案例说明: 此案例的业务关系是用户,订单,订单详情与商品之间的关系. 以订单 ...

  5. MySQL select 语句指定字段查询

    指定字段查询 SELECT 语法 SELECT [ALL | DISTINCT] {* | table.* | [table.field1[as alias1][,table.field2[as al ...

  6. mybatis中xml字段空判断及模糊查询

    由于业务特殊的查询需求,需要下面的这种查询,一直感觉模糊不清,本地测试一下顺便做个总结 贴一段xml代码,如下: <if test="receivedName != null and ...

  7. mybatis中sql语句查询操作

    动态sql where if where可以自动处理第一个and. <!-- 根据id查询用户信息 --> <!-- public User findUserById(int id) ...

  8. Mybatis中的in查询和foreach标签

    Mybatis中的foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separato ...

  9. MySQL中 指定字段排序函数field()的用法

    MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序. 函数使用格式如下: order by (str,str1,str2,str3,str4……),str与str1,str ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_4_Map集合遍历键找值方式

    键找值的方式 增强for 增强for的简化方式

  2. SharpBrowser

    SharpBrowser is the fastest open source C# web browser there is! Slightly faster than Google Chrome ...

  3. Mysql 免安装版本配置

    1. 安装命令 (制定安装目录的my.ini文件) mysqld --install MySQL --defaults-file="C:\mysql-5.7.26-winx64\bin\my ...

  4. docker--docker版本以及安装

    3 docker 版本以及安装 3.1 docker 版本介绍 https://www.docker.com/ Docker CE 在 17.03 版本之前叫 Docker Engine, Docke ...

  5. python 更快地判断数字的奇数还是偶数

    使用 按位与运算符(&) 将能更加快速地判断一个整数是奇数还是偶数 使用举例如下: def check_number(n): if n & 1: return '奇数' else: r ...

  6. 进程通信(multiprocessing.Queue)

    from multiprocessing import Queue Queue([maxsize]) 创建共享的进程队列.maxsize是队列中允许的最大项数.如果省略此参数,则无大小限制.底层队列使 ...

  7. Kotlin学习(3)类

    声明类和接口: //类 class A{ } //接口,接口中的方法可以有默认实现 interface B{ fun show(){ print("i'm B") } } //用冒 ...

  8. Vue源码解读之Dep,Observer和Watcher

    在解读Dep,Observer和Watcher之前,首先我去了解了一下Vue的数据双向绑定,即MVVM,学习于:https://blog.csdn.net/u013321...以及关于Observer ...

  9. python 简易小爬虫

    此脚本用于爬站点的下载链接,最终输出到txt文档中. 如果是没有防盗链设置的站点,也可以使用脚本中的下载函数尝试直接下载. 本脚本是为了短期特定目标设计的,如果使用它爬其它特征的资源链接需自行修改配置 ...

  10. layui在当前页面弹出一个iframe层,并改变这个iframe层里的一些内容

    layer.open({ type: 2, title: "专家信息", area: ['100%', '100%'], content: '/ZhuanJiaKu/AddZhua ...