学生上机信息统计——对两张表的联合查询

 

   在学生上机信息统计中,

  此处,因为要查询两张表,而且两张表查询的先后有时要严格表明,所以,在查询时,有两种思路:

 

   1,定义两个Recordset对象,并根据字段,判断是先查询学生信息表,还是先查询学生上机表

 

   2,两张表有一个共同的字段:卡号,所以,可以根据卡号将两张表连起来查询,这样比较方便。

   因为第一种方式比较复杂,容易出错,所以,我选择了第二种方式,将两张表联合起来。

 

   下面是对两张表联合起来的查询的语句:

 

查询结果如下:

 

但是,,实际的时候,用户进行的查询都是有条件的查询,所以,在SQL 语句中还应加上条件。

 

但是卡号因为在两张表中都存在,所以在查询时,如果不指定是哪张表,会出现不明确的问题,导致查询无法进行。所以,在用卡号作为条件时,应该在卡号前面指定表明,以表明是对哪张表的卡号进行查询。。

 

另外,在查询时,因为并不是所有列的信息我们都要显示给用户,所以,可以指定返回的列:

select Stubaseinfo.卡号,姓名,上机日期,上机时间,下机日期,下机时间,消费金额,金额 from StuBaseInfo ,StuShangJi where StuBaseInfo .卡号=StuShangJi.卡号 and 姓名='刘慧超'

 

 

组合查询的过程:

   1,输入值的非空和完整性验证

   2,将查询时输入的条件字符转换成数据库的字段名

   3,分别对一个字段,两个字段,三个字段,这三种情况编写SQL语句

 

下面是我的部分代码:

 '查询之前先清空表格结构
    myFlexGrid.ClearStructure

    '如果第一个与或没有选择,下面的文本框都不可用
    '同理,如果第二个文本框没有选择的话,下面的文本框也都不可用
    '这一检查放在了两个change事件里面
    '只有一个查询条件时,只能用第一条;如果有两个查询条件时,只能用前两条;

    ' 查询前,先进行非空判断
    '先判断有三个查询条件的情况
    If Testtxt(Cmb1.Text) = True And Testtxt(Cmb2.Text) = True Then
        If Testtxt(CmbZiDuan1.Text) = False Or Testtxt(CmbZiDuan2.Text) = False Or Testtxt(CmbZiDuan3.Text) = False Then '如果三个字段名中有一个为空的话,提示字段名为空
                MsgBox "字段名不能为空!", vbOKOnly + vbExclamation, "警告"      '提示字段名不能为空
                Exit Sub
            ElseIf Testtxt(CmbCaoZuo1.Text) = False Or Testtxt(CmbCaoZuo2.Text) = False Or Testtxt(CmbCaoZuo3.Text) = False Then '如果操作符为空
                MsgBox "操作符不能为空!", vbOKOnly + vbExclamation, "警告"   '如果操作符为空
                Exit Sub
            Else
                If Testtxt(txtCheck1.Text) = False Or Testtxt(txtCheck2.Text) = False Or Testtxt(txtCheck3.Text) = False Then   '如果要查询的内容有一个为空的话
                    MsgBox "查询内容不能为空!", vbOKOnly + vbExclamation, "警告"    '如果查询内容为空
                    Exit Sub
                End If
        End If

        '将组合关系转换成数据库可识别的字符
        If Trim(Cmb1.Text) = "与" Then  '转换组合关系1的字符
            ZuHe1 = "and"
        Else
            ZuHe1 = "or"
        End If

        If Trim(Cmb2.Text) = "与" Then   '转换组合关系2的字符
            ZuHe2 = "and"
        Else
            ZuHe2 = "or"
        End If

        '将操作符转换为数据库可识别内容,,嘿嘿,不知道大家看不看得出金额和余额......
        If CmbZiDuan1.Text = "余额" Then
            CmbZiDuan1.Text = "金额"
        End If

        If CmbZiDuan2.Text = "余额" Then
            CmbZiDuan2.Text = "金额"
        End If

        If CmbZiDuan3.Text = "余额" Then
            CmbZiDuan3.Text = "金额"
        End If

        '查询前先判断字段是否是卡号,然后根据卡号分情况执行SQL语句
        If CmbZiDuan1.Text = "卡号" Then   '为卡号指定一个表名
            KaHao1 = "stushangji.卡号"
        Else
            KaHao1 = CmbZiDuan1.Text
        End If

        If CmbZiDuan2.Text = "卡号" Then   '如果查询的字段为卡号,则必须为卡号指定一个表名
            KaHao2 = "stushangji.卡号"
        Else
            KaHao2 = CmbZiDuan2.Text
        End If

        If CmbZiDuan3.Text = "卡号" Then   '如果查询的字段为卡号,则必须为卡号指定一个表名
            KaHao3 = "stushangji.卡号"
        Else
            KaHao3 = CmbZiDuan3.Text
        End If

        '执行查询
        SQL = "select Stushangji.卡号,姓名,上机日期,上机时间,下机日期,下机时间,消费金额,金额 from stubaseinfo,stushangji where (StuBaseInfo.卡号=StuShangJi.卡号) and (" & KaHao1 & Trim(CmbCaoZuo1.Text) & "'" & Trim(txtCheck1.Text) & "'" & " " & ZuHe1 & " " & KaHao2 & Trim(CmbCaoZuo2.Text) & "'" & Trim(txtCheck2.Text) & "'" & " " & ZuHe2 & " " & KaHao3 & Trim(CmbCaoZuo3.Text) & "'" & Trim(txtCheck3.Text) & "')"
        Set Rst = ExecuteSQL(SQL, strMsg)     '执行查询

    End If

下面是一个运行时的SQL 语句:

 

虽然看起来有点复杂,但是基本东西都是一样的。

 

 

 

 

 

 

 

 

 

 

时间: 2024-11-05 12:17:16

学生上机信息统计——对两张表的联合查询的相关文章

信息-mysql中有关两张表关联的查询语句

问题描述 mysql中有关两张表关联的查询语句 宝宝信息表中存的是已经接种过疫苗的信息,is_vaccined为1,另外一张表中,存的是所有疫苗的详细信息.现在,我想通过获取宝宝id来查询该宝宝所有的疫苗的状态(包括已经接种的和未接种的),改怎么写查询语句?? 解决方案 select t1.*, t2.* from t_baby_info t1 left outer join t_vaccine t2 on t1.vaccine_id= t2.vaccine_id 解决方案二: @caozhy

sql-如何将数据库表的两张表进行合并查询

问题描述 如何将数据库表的两张表进行合并查询 有两张表,数据列均不一样,要将两张表的数据合并到一起,想应的sql怎么拼接呢?求大神解答,不胜感激! 解决方案 你想怎么合并? 如果是按照关系合并,可以这么写 select a.*, b.* from a join b on a.id = b.aid 如果是数据合并(假设两个表都有 相同列1 相同列2 两个字段),那么可以这样 select a.相同列1, a.相同列2 from a union select b.相同列1, b.相同列2 from

多张表的联合分页显示——在线求解

问题描述 有两张表tableA:item-id,counttableB:item-id,name,info现在想在页面上实现如下形式的页面显示:(count)nameinfo......(count)nameinfo......(count)nameinfo...................<<<>>>最下面实现的是一个分页.因为涉及到两个表.count需要根据tableB中的item-id在tableA中找到count这样的情况怎么处理?直接用listview+D

sqlserver-数据库方面的问题,两张表有一个关联表

问题描述 数据库方面的问题,两张表有一个关联表 怎么才能通过关联表的信息找到其他两张表的基本信息呢? 一个是学生的基本信息表(uid,uname...) 一个是课程的基本信息表(tid,tname,ttype) 一个是中间表,使用外键进行连接(id,uid,tid) 现在想通过中间表中的tid找到uname和tname,ttype,一条sql语句不太懂怎么写,谢谢各位啊 解决方案 select * from T_student s inner join T_MID m on s.uid=m.ui

hibernate查询两张表问题,求解答?

问题描述 hibernate查询两张表问题,求解答? 我有 user表 : 有name,age,等等 course表: coursename,score,teachername,user_ID(user主键) 现在我需要前台展示一个数据表 学生姓名 课程 分数 应该怎么实现啊?使用链表吗? ?? 解决方案 最好是在数据库把这几张表做一个视图,然后写一个model类对应这个视图,这样更简单方便点 解决方案二: 如果这2张表有关联的话,,hibernate会自动级联的,查user就会把course查

sql语句-如何用SQL语句实现两张表(无关联)查询后,分别将各自的一个字段,插入一个新表。

问题描述 如何用SQL语句实现两张表(无关联)查询后,分别将各自的一个字段,插入一个新表. 有A.B.C三张表如下, 表 A 表B 学生ID(主键) 学生名称 课程ID(主键)| 课程名称 表 C 学生ID 课程ID (联合主键) 那么,通过SQL语句操作如何用学生姓名和课程名(只能获取学生姓名和课程名)将课程ID和学生ID插入到C表(C表中有课程ID和学生ID并且是联合主键),感激不尽. 解决方案 你可以定义2个变量,分别从表A表B用名称查询到ID.在表C的新增语句中使用这2个变量. 不过你这

数据库两张表多对多关系为什么用中间表而不用相互外建

问题描述 数据库两张表多对多关系为什么用中间表而不用相互外建 数据库两张表多对多关系为什么用中间表而不用相互外建,菜鸟求指点 解决方案 如果用外键去做,你想想你的SQL语句查询会乱成什么样,还有就是查询结果a表包括b表的数据,b表包含a表的数据, 数据库一层一层查询下去可能出现死循环当机的,而通过外键,你每次查询都是一个对应两个表的两个list集合.而不是无穷无尽的查询 解决方案二: 不要光看着书在那空想,你试一下就知道想只用两个表来表达多对多关系根本是办不到的事情,除非你连范式都不要了.因为多

MySQL实现两张表数据的同步方法总结

有两张表A和B,要求往A里面插入一条记录的同时要向B里面也插入一条记录,向B里面插入一条记录的同时也向A插入一条记录.两张表的结构不同,需要将其中几个字段对应起来.可以用下面的触发器实现. 表A的触发器: begin set @disable=1; if @disable=1 and NOT EXISTS(SELECT 1 FROM tableB where ID=new.ID) then   insert into tableB (ID,对应字段1) values(new.ID,new.对应字

关联到两张表,如何写触发器

问题描述 关联到两张表,如何写触发器 要求:数据在insert 到表A前(一笔一笔Insert),如果表A的字段1的值存在于表B中的字段2中,则报错,数据无法insert到表A中.这个触发器要怎么写呢.高人指点下.. 解决方案 已经找到方法了.如下,其中定义的变量为m一开始定义成connt还不行... create or replace trigger INSERT_AA before insert on aa For Each Rowdeclare -- local variables her