在SELECT语句中,可以通过Where子句构造记录的筛选条件,选择出符合条件的记录集。比如,我想在上机表中,查询卡号为101的学生的上机记录。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><span style="font-family:KaiTi_GB2312;font-size:18px;">SELECT* From Line_Info where cardno=101</span></strong></span>
这是简单查询,条件查询还包括模糊查询和复合条件查询。下面我就来详细的介绍一下这个复合条件查询。开始我以为这个是学生信息管理系统中没有出现的内容,后来操作了半天,研究了半天,才发现,这东西!我用过啊!
下面这两个图中的红对勾是对应的,只是在机房收费系统中逻辑表达式相对比较自由,字段随意、操作符随意、连接符随意。本质都是一样的——复合条件查询。
所谓复合条件查询,通过Where子句中使用逻辑运算符将两个或者两个以上的条件表达式组合起来,构成综合检索条件。完成更为复杂的查询任务。复合条件中可以使用和逻辑运算符包括:And,Or,Not。
And——连接两个条件表达式,完成逻辑运算符与运算。
Or——连接两个条件表达式,完成逻辑运算符或运算。
Not——对一个条件表达式进行逻辑非运算。
在机房收费系统中,就是层层递进的关系,SQL语句通过And和Or进行连接,构成一个,两个,三个条件的查询。
下面就先来挑出学生信息管理系统中的Keyword:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong> TxtSQL = "SELECT * From result_Info where "
If ChkSID(0).Value Then
'按学号的复选框选中
TxtSQL = TxtSQL & "student_ID = '" & Trim(txtSID) & "'"
End If
If ChkSName(1).Value Then
'按姓名查询的复选框选中
TxtSQL = TxtSQL & "and student_name = '" & txtName & "'"
End If
If ChKCourse(2).Value Then
'按课程查询复选框选中
TxtSQL = TxtSQL & "and course_name = '" & txtCourse & "'"
End If
TxtSQL = TxtSQL & " order by student_ID "
'按照学生的学号排序
Set mrc = ExecuteSQL(TxtSQL, MsgText)
</strong></span>
发现规律了么?它先写好一个半成品的SQL语句存入txtSQL变量中,根据选中情况,一步步的完善SQL语句。照着我的学生信息管理系统,我也编出了机房的Keyword:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong> Dim TxtSQL As String
Dim MsgText As String
Dim mrc As ADODB.Recordset
TxtSQL = "SELECT * From Line_Info Where (" & ComF1.Tag & ComE1.Text & "'" & Text1.Text & "'"
'一个条件的查询
If ComG1.Text <> "" Then
'添加第二个查询
TxtSQL = TxtSQL & " " & ComG1.Tag & " " & ComF2.Tag & ComE2.Text & "'" & Text2.Text & "'"
End If
If ComG2.Text <> "" Then
'添加第三个查询
TxtSQL = TxtSQL & " " & ComG2.Tag & " " & ComF3.Tag & ComE3.Text & "'" & Text3.Text & "'"
End If
TxtSQL = TxtSQL & ")"
Set mrc = ExecuteSQL(TxtSQL, MsgText)
</strong></span>
稍微需要动些小脑筋的地方就是SQL的and和or的用法。上边其实就是在一句话上面做了改动。让这句话中的字段,操作符和查询内容都可以自定义。彻底的了解了下面这句话的意思,那么复合条件查询就不成问题了。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>SELECT * FROM Line_Info WHERE (cardno='101' OR studentno='111')
AND studentname='azz'</strong></span>
开始认为复合查询挺难的,所以把它放在了后边敲。现在才明白了对于一个功能块,只要可以找到它的Keyword,慢慢的都可以理解的。只要你不放弃不停的调试,就会达到你想要的效果。