当前位置: 首页 > news >正文

wordpress页面教程视频教程seo查询百科

wordpress页面教程视频教程,seo查询百科,学seo需要多久,网站icp备案信息查询必须知道的SQL编写技巧,多条件查询不拼字符串的写法 原文:必须知道的SQL编写技巧,多条件查询不拼字符串的写法在做项目中,我们经常遇到复杂的查询方法,要根据用户的输入,判断某个参数是否合法,合法的话才能…
必须知道的SQL编写技巧,多条件查询不拼字符串的写法
原文:必须知道的SQL编写技巧,多条件查询不拼字符串的写法

  在做项目中,我们经常遇到复杂的查询方法,要根据用户的输入,判断某个参数是否合法,合法的话才能当作过滤条件,我们通常的做法是把查询SQL赋值给一个字符串变量,然后根据判断条件动态的拼接where条件进行查询。下面来简单说一下写SQL中遇到的问题和解决办法。

 

一、不确定字段名,而产生的SQL字符串拼接                                                                                                            

   比如,有个公司要做一个系统,要支持多语言,这个时候我们就要将语音信息存储在数据库中。然后,根据客户选择查询对应的语言字段,进行显示。下面我们来模拟这个场景,打开SQL Server,新建SysLanguage表,添加一些语言字段,如English,Chinese,French,这里French不知道是什么,就都设置为Empty。

 

建表的SQL和插入一些简单的数据,SQL如下:

CREATE TABLE SysLanguage(Id INT PRIMARY KEY,English NVARCHAR(100),Chinese NVARCHAR(100),French NVARCHAR(100)
)INSERT INTO SysLanguage VALUES (1, 'Hello', '你好', 'Empty')
INSERT INTO SysLanguage VALUES (2, 'world', '世界', 'Empty')
INSERT INTO SysLanguage VALUES (3, 'Book', '', 'Empty')
INSERT INTO SysLanguage VALUES (4, 'Open', '打开', 'Empty')
INSERT INTO SysLanguage VALUES (5, 'Save', '保存', 'Empty')
INSERT INTO SysLanguage VALUES (6, 'New', '新建', 'Empty')

 那么,考虑到系统性能,我们可能会使用存储过程,来减少网络通信量和提高响应速度。那么,在存储过程中,我们会传入一个参数,然后根据参数来查询指定的语言字段,那么SQL该怎么写呢?

这个时候,我们会想到在C#代码中,我们都是把SQL拼好,然后传给SQL Server执行,我们可以拼接字符串啊,然后有了下面的写法:

DECLARE @sql NVARCHAR(100);
DECLARE @para NVARCHAR(20);
SET @para = 'Chinese';
SET @sql = 'select ID, ' + @para + ' from SysLanguage'
print @sql
exec(@sql)

当然这样写没有任何问题,但是当SQL很复杂的时候,很多的引号和字符转义,还有拼接字符串带来的缺少空格的问题,会令人崩溃!下面来说一种不拼接字符串的写法,代码如下:

DECLARE @para NVARCHAR(20);
SET @para = 'Chinese';
SELECT ID, 
CASE @para 
WHEN 'English' THEN English
WHEN 'Chinese' THEN Chinese 
ELSE
French
END
AS [Language]
FROM
SysLanguage

这里使用了CASE WHEN语句来进行判断,当判断条件太多时,写起来也很累,我们可以写一个Function来进行封装,当然,具体用那种方法,要看具体情况了。

这里说道了CASE WHEN,就不得不提另外一种查询了。先来看下需求:从学生表中查询出男生的人数,女生的人数和学生总人数

看到这个,我们首先想到了SUM函数,但是,然后呢?好像哪里不对?那么,到底该怎么写呢,当然还是用CASE WHEN,来看下代码吧

SELECT SUM(CASE StuSex WHEN 1 THEN 1 ELSE 0 END) AS Boys,
SUM(CASE StuSex WHEN 1 THEN 0 ELSE 1 END) AS Girls,  
SUM(StuID) AS Total
FROM Student

看到代码,感觉是不是很简单啊,就是当时没想到,呵呵!

 

二、不定查询条件产生的SQL字符串拼接                                                                                                                         

  习惯了C#代码,突然写起SQL来,感觉还是有点那么不顺手!下面来看看,当有多个查询条件,但是又不确定几个查询条件时,SQL该怎么写?我们经常遇到这种需求,页面上很多控件,要根据用户的输入进行查询,这个时候我们就要判断传入的控件的值是否符合指定条件,符合条件了才能被作为查询条件,否则就忽略这个条件。

拼接字符串的写法相信大家都经常用,这里就不写了,我们之接来看布拼接SQL怎么查询!

比如现在要查询指定条件的学生,用户可能查询所有,或查询男生,或查询指定Id的学生,或……等待,可能很多种情况。下面我们来写布拼接字符串的SQL,代码如下:

DECLARE @ID INT;
DECLARE @Sex BIT;
DECLARE @Name NVARCHAR(50);SET @ID = -1;
SET @Sex = NULL;
SET @Name = 'Ja';SELECT * FROM Student
WHERE (@ID = -1 OR StuID = @ID)
AND (@Sex IS NULL OR StuSex = @Sex)
AND (@Name IS NULL OR StuName LIKE '%' + @Name + '%')

这里声明三个变量,当做传入的参数,传入的参数都有默认值,或者为NULL,我们在where添加里面用了OR添加判断,首先判断@ID = -1,如果条件成立了,OR就不会再判断OR后面的条件,到这里就(@ID = -1 OR StuID = @ID)就返回一个TRUE,相当于WHERE TRUE AND ……,所以就会忽略这个查询条件继续走下面的过滤判断。这样写,比拼接字符串好的多吧!

 

最后来说一下数据库中N字符的作用,说白了就是将后面的字符串内容,转换成Unicode编码,来写段SQL测试一下吧

DECLARE @a NVARCHAR(20)
DECLARE @b NVARCHAR(20)
SET @a = N'中文'
SET @b = '中文'
IF(@a = @b)
PRINT '数值相等'
ELSE
PRINT '不相等'

输出结果如下:

在中文版的系统中,是相等的,在英文版的系统中,@b会显示乱码。大家可以测试一下!

 

 作者:雲霏霏

 博客地址:http://www.cnblogs.com/yunfeifei/

 声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

 

posted on 2014-11-14 13:21 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4097044.html

http://www.lbrq.cn/news/2763559.html

相关文章:

  • 时间管理系统 网站开发深圳网络营销模式
  • 威海高新园区建设运营有限公司网站百度广告位价格
  • 丽水网站建设专业的公司沈阳seo网站推广
  • 建设银行普卡申请网站在线网页制作系统搭建
  • 深圳做网站建设公司企业网站建设
  • 兰州网站建设百度官网首页登录入口
  • 建设银行手机短信网站怎么开通短视频推广渠道有哪些
  • 知名网站建设定制英雄联盟最新赛事
  • 潍坊建立企业网站公司爱站seo
  • 长春网站外包运营推广怎么做
  • 郑州网站建设幸巴网址查询
  • 外贸用什么平台自建站较好长沙网站推广排名优化
  • 可以用足球做的游戏视频网站nba最新新闻消息
  • 域名绑定网站百度客服怎么联系
  • 大连网站开发选领超科技宁德市人力资源和社会保障局
  • 手机网站制作代码与web有什么不同竞价托管代运营
  • 怎么做套版网站代运营一个月多少钱
  • 福州外贸建站江苏企业网站建设
  • 网站建设深圳亿联时代太原seo快速排名
  • 制作一个购物网站需要多少钱今天有哪些新闻
  • 手机投资理财网站建设网络营销的优势与不足
  • 消防网站建设的风格找客户的软件有哪些
  • 小门户网站模版百度网盘搜索入口
  • 互联网广告推广是做什么的合肥seo排名优化公司
  • 中山商城型网站建设关键词上首页软件
  • 泉州做网站河南智能seo快速排名软件
  • 网站自定义title西安seo霸屏
  • 国家信息企业公示系统全国怎么给网站做优化
  • 分销是什么意思资源网站优化排名优化
  • 柳州住建局官网百度推广优化方案
  • 数据结构(03)——线性表(顺序存储和链式存储)
  • 机器学习(决策树)
  • 决策树学习报告
  • LeetCode:无重复字符的最长子串
  • 块体不锈钢上的光栅耦合表面等离子体共振的复现
  • 反向代理、负载均衡器与API网关选型决策