SQL中多条件查询括号的用途

界面:

 

复制代码
ExpandedBlockStart.gif 代码
select  id,routeName,routeCharacteristic,routeIntroductions,costDetail,participate,click,routeCategory,dineMenu,weather,isEnable,addPerson,addDate,competitiveProducts,luxury,onVacation,characteristic,hotRecommend,referencesPrice,specialPreference,imgShow,imgName,imgUrl,newProduct,overflow,season,priority  from  Tab_TouristTrack
where  (addDate >= @beginDate   or   @beginDate = '' and  (addDate <= @endDate   or   @endDate = '' )
and  (routeName  like   @routeName   or   @routeName = '' )
and  (newProduct = 1   or  competitiveProducts = 1   or  luxury = 1   or  onVacation = 1   or  characteristic = 1
or  specialPreference = 1   or  hotRecommend = 1   or  overflow = 1   or  season = 1 )
and  (priority = 0   or  priority  is   null )
复制代码

 

 

以上语句是一个多条件查询语句,假如没有用括号分开的话,那么只有所有条件都为真才会查出数据库中所满足条件的行,但是这不是我所想要的,所以才需要用括号如:(addDate>=@beginDate or @beginDate=''),意思是当用户输入数据时,则根据addDate>=@beginDate的条件来查询数据库中满足条件的数据,如果用户不输入任何数据,那么这个时候文本框所得到的值则为:""-->空的字符串,使用@beginDate='' (变成sql语句:' '=' ' )也能使这个where子句满足条件,否则的话很难实现像这样的多条件语句查询.

 

在来看下这条子句:

(newProduct=1 or competitiveProducts=1 or luxury=1 or onVacation=1 or characteristic=1
or specialPreference=1 or hotRecommend=1 or overflow=1 or season=1)

这里加括号的意思是当满足前面子句所有条件的情况下并且还要满足括号内这些字段至少有一个为1的数据.

 

(priority=0 or priority is null)

这里加括号的意思是当满足前面子句所有条件的情况下并且还要满足括号priority=0或者priority为空的数据

 

如果在子句:

(priority=0 or priority is null)

中不加括号的话,那么priority前满足所有的条件下,在使用or priority is null这样就不是我们要的数据了.

这条子句加括号也是和上面子句同一个意思

(newProduct=1 or competitiveProducts=1 or luxury=1 or onVacation=1 or characteristic=1
or specialPreference=1 or hotRecommend=1 or overflow=1 or season=1)

 

使用括号的目的就是将一小段sql子句作为一个整体来使用.

简单的说就是在满足前面所有子句的情况下还要满足(priority=0 or priority is null)返回为ture的数据.

 

 

复制代码
ExpandedBlockStart.gif 得到文本中输入的值调用后台数据库代码
   private   void  PriorityBinds()
    {
        gvPriority.DataKeyNames 
=   new  String[] {  " id "  };
        gvPriority.DataSource 
=  tts.PriorityQuery(ddlType.SelectedValue,txtBeginDate.Text,txtEndDate.Text
            ,txtTouristTrackName.Text,rblPriority.SelectedValue);
        gvPriority.DataBind();
    }
复制代码

 

 

 

复制代码
ExpandedBlockStart.gif 代码
  public  DataTable PriorityQuery(String MenuType, String beginDate, String endDate, String routeName, String priority)
        {
            StringBuilder strSql 
=   new  StringBuilder();

            strSql.Append(
"  select id,routeName,routeCharacteristic,routeIntroductions,costDetail,participate,click,routeCategory,dineMenu,weather,isEnable,addPerson,addDate,competitiveProducts,luxury,onVacation,characteristic,hotRecommend,referencesPrice,specialPreference,imgShow,imgName,imgUrl,newProduct,overflow,season,priority  " );
            strSql.Append(
"  from Tab_TouristTrack  " );
            strSql.Append(
"  where (addDate>=@beginDate or @beginDate='') and (addDate<=dateadd(dd,1,@endDate) or @endDate='') " );
            strSql.Append(
"  and (routeName like @routeName or @routeName='') " );

            
if  (MenuType  !=   " all " )
            {
                    strSql.Append(
"  and  " + MenuType  +   " =1 " );
            }
            
else
            {
                strSql.Append(
"  and (newProduct=1 or competitiveProducts=1 or luxury=1 or onVacation=1 or characteristic=1 " );
                strSql.Append(
"  or specialPreference=1 or hotRecommend=1 or overflow=1 or season=1) " );
            }

            
if  (priority != " all " )
            {
                
if  (priority == " 1 " )
                {
                    strSql.Append(
"  and priority=1 " );
                }
                
else
                {
                    strSql.Append(
"  and (priority=0 or priority is null) " );
                }
            }

            strSql.Append(
"  order by priority desc " );

            SqlParameter[] param 
=   new  SqlParameter[] 
            { 
                
new  SqlParameter( " @beginDate " ,beginDate),
                
new  SqlParameter( " @endDate " ,endDate),
                
new  SqlParameter( " @routeName " , " % " + routeName + " % " )
            };

            
return  SQLLinkDatabase.Query(strSql.ToString(),param).Tables[ 0 ];
        }
复制代码

 

 

分类: MSSQL, Asp.net
1
0
posted @ 2009-12-15 13:28 唔愛吃蘋果 阅读( 8640) 评论( 0)   编辑 收藏

转载于:https://www.cnblogs.com/jpfss/p/6944295.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值