本次讲到where字句中经常用到的集中较为复杂的搜索条件,包括组合的查询条件、IN运算符、NOT运算符、LIKE运算符和相关通配符。

  学习本节需要用到一下两张表:

CREATE TABLE TEACHER
(TNO INT NOT NULL, --教工号TNAME CHAR(10) NOT NULL, --教师姓名CNO INT NOT NULL, --课程号SAL INT, --工资DNAME CHAR(10) NOT NULL, --所在系TSEX CHAR(2) NOT NULL, --性别AGE INT NOT NULL --年龄
)
alter table TEACHER alter column SAL INT null
INSERT INTO
dbo.TEACHER( TNO, TNAME, CNO, SAL, DNAME, TSEX, AGE )
VALUES  ( 0, -- TNO - int'', -- TNAME - char(10)0, -- CNO - int0, -- SAL - int'', -- DNAME - char(10)'', -- TSEX - char(2)0  -- AGE - int)SELECT * FROM dbo.TEACHER
INSERT INTO dbo.TEACHER VALUES( 3,'王永军',1,1000,'计算机','女',45)
INSERT INTO dbo.TEACHER VALUES( 4,'刘晓婧',2,8000,'计算机','女',23)
INSERT INTO dbo.TEACHER VALUES( 5,'高维',8,6000,'电子工程','男',54)
INSERT INTO dbo.TEACHER VALUES( 6,'李伟',7,230,'机械工程','女',23)
INSERT INTO dbo.TEACHER VALUES( 7,'刘辉',3,0,'生物','女',65)
INSERT INTO dbo.TEACHER VALUES( 8,'刘伟',9,500,'计算机','男',23)
INSERT INTO dbo.TEACHER VALUES( 9,'刘静',12,0,'经济管理','男',45)
INSERT INTO dbo.TEACHER VALUES( 10,'刘奕锴',13,70000,'计算机','女',65)
INSERT INTO dbo.TEACHER VALUES( 11,'高维',14,70000,'经济管理','男',61)CREATE TABLE COURSE
(CNO INT NOT NULL, --课程号CNAME CHAR(30) NOT NULL, --课程名称CTIME INT NOT NULL, --学时SCOUNT INT NOT NULL, --容纳人数CTEST SMALLDATETIME NOT NULL, --考试时间
)
SELECT * FROM dbo.COURSE
INSERT INTO dbo.COURSE VALUES( 4,'应用数学基础',48,120,'2006-7-10')
INSERT INTO dbo.COURSE VALUES( 5,'生物工程概论',32,80,'2006-7-8')
INSERT INTO dbo.COURSE VALUES( 1,'计算机软件基础',32,70,'2006-7-8')
INSERT INTO dbo.COURSE VALUES( 2,'计算机软件基础',24,80,'2006-6-28')
INSERT INTO dbo.COURSE VALUES( 8,'模拟电路设计',28,90,'2006-7-10')
INSERT INTO dbo.COURSE VALUES( 7,'机械设计实践',48,68,'2006-7-14')
INSERT INTO dbo.COURSE VALUES( 3,'生物化学',32,40,'2006-7-2')
INSERT INTO dbo.COURSE VALUES( 9,'数据库设计',16,80,'2006-7-1')
INSERT INTO dbo.COURSE VALUES( 6,'设计理论',28,45,'2006-6-30')
INSERT INTO dbo.COURSE VALUES( 10,'计算机入门',25,150,'2006-6-29')
INSERT INTO dbo.COURSE VALUES( 11,'数字电路设计基础',30,125,'2006-6-20')
DROP TABLE dbo.COURSE

数据表

  

  以下是各复杂条件的查询:

------组合查询条件--1、and运算符 查询年龄大于30的女老师SELECT * FROM dbo.TEACHER WHERE AGE>30 AND TSEX='女'--2、多个and运算符 查询年龄大于30的计算机系女老师SELECT * FROM dbo.TEACHER WHERE AGE>30 AND TSEX='女' AND DNAME='计算机'--3、or运算符 查询计算机系和生物系女老师的姓名和工资SELECT TNAME,SAL,DNAME FROM dbo.TEACHER WHERE DNAME='计算机' OR DNAME='生物'--4、or and运算符混合使用 查询计算机系和生物系老师的姓名和工资SELECT TNAME,SAL,DNAME FROM dbo.TEACHER WHERE DNAME='计算机' OR DNAME='生物' AND TSEX='女' ORDER BY SALSELECT TNAME,SAL,DNAME FROM dbo.TEACHER WHERE (DNAME='计算机' OR DNAME='生物') AND TSEX='女' ORDER BY SAL--AND OR 一起使用的时候,要注意运算符的优先级。AND要高于OR,所以第一条线执行AND,加上括号后才是正确的结果--5、IN和NOT IN运算符使用 查询计算机系和生物系的所有信息SELECT * FROM dbo.TEACHER WHERE DNAME IN('计算机','生物')SELECT * FROM dbo.TEACHER WHERE DNAME NOT IN('计算机','生物')--使用IN有以下优点--1、当选择条件很多时,采用IN运算符就显得很便捷,只需要在括号内用逗号间隔依次罗列即可,运行效率比OR运算符要高--2、使用IN运算符,其后面所列的条件可以使另一条SELECT语句,即子查询,如下:SELECT * FROM dbo.TEACHER WHERE DNAME IN(SELECT DNAME FROM dbo.TEACHER WHERE AGE>65)--6、NOT BETWEEN运算符混合使用 查询年龄不在40~50岁的教师姓名,年龄,系,性别SELECT TNAME,AGE,DNAME,TSEX FROM dbo.TEACHER WHERE AGE NOT BETWEEN 40 AND 50 ORDER BY AGE--我们在用OR来得到相同的数据,相比之下,似乎OR更简洁,注意,MySQL不支持NOT运算符SELECT TNAME,AGE,DNAME,TSEX FROM dbo.TEACHER WHERE AGE<40 OR age>50 ORDER BY AGE--7、使用LIKE运算符查询SELECT * FROM dbo.TEACHER WHERE DNAME LIKE '计算机'--%通配符,表示任意字符匹配不计较字符的多少,可以在''中间任意位置使用,以XX开头或结尾或中间SELECT * FROM dbo.COURSE WHERE CNAME LIKE '%电路%' --中间有"电路"的SELECT * FROM dbo.COURSE WHERE CNAME LIKE '%基础'  --以“基础”结尾的SELECT * FROM dbo.COURSE WHERE CNAME LIKE '计算机%'  --以“计算机”开头的SELECT * FROM dbo.COURSE WHERE CNAME LIKE '计算机%基础'  --_通配符,表示任意一个字符匹配,可以在''中间任意位置使用,以XX开头或结尾或中间--   _代表一个字符,__代表两个字符SELECT * FROM dbo.COURSE WHERE CNAME LIKE '__电路__'  --中间带有“电路”的SELECT * FROM dbo.COURSE WHERE CNAME LIKE '____基础'  --以“基础”结尾,且前面是四个字的SELECT * FROM dbo.COURSE WHERE CNAME LIKE '计算机__'  --以“计算机”开头,两个字结尾的SELECT * FROM dbo.COURSE WHERE CNAME LIKE '计算机__基础'  --中间两个字的SELECT * FROM dbo.COURSE WHERE CNAME LIKE '____'  --查询四个字的系--"[]"通配符用于指定一系列的字符,只要满足这些字符其中之一且位置出现在"[]"通配符的位置,字符串就满足查询条件SELECT * FROM dbo.COURSE WHERE CNAME LIKE '[模]%'  --以“模“开头的SELECT * FROM dbo.COURSE WHERE CNAME LIKE '[^模]%'  --加上"^"表示不以"模拟"开头的------以上三种通配符是可以自由组合使用的  ------以上所有的运算符和条件查询都是可以组合使用的,根据实际情况选择适合的查询方法才是明智的选择

  

  我们再讲一个ESCAPE定义转义符:

    在使用LIKE关键字进行模糊查询的时候,“%”,“_”,“[]”,单独出现则会被认为是通配符。为了在字符数据类型的列中查询是否存在百分号(%),下划线(_),方括号([])字符,我们就需要一种方法告诉DBMS,将LIKE表达式中的这些字符看作实际值,而不是通配符。关键字ESCAPE允许确定一个转义字符,告诉DBMS,紧跟ESCAPE之后的字符是实际值。

    --增加两条数据INSERT INTO dbo.COURSE VALUES( 11,'数字电路设计基础%',30,125,'2006-6-20')INSERT INTO dbo.COURSE VALUES( 6,'_设计理论',28,45,'2006-6-30')----以下是将"M"后面的"%"作为实际值,也就是说查询的是以"%"结尾的数据SELECT * FROM dbo.COURSE WHERE CNAME LIKE '%M%' ESCAPE 'M' ----以下是将"M"后面的"_"作为实际值,也就是说查询的是以"_"开头的数据SELECT * FROM dbo.COURSE WHERE CNAME LIKE 'M_%' ESCAPE 'M'  

    

转载于:https://www.cnblogs.com/liuchenxing/p/8259440.html

Sql Server的艺术(二) SQL复杂条件搜索相关推荐

  1. asp教程连接sql server数据库教程二种方法

    asp教程连接sql server数据库教程二种方法  ,sql server ole db连接方法:,本人链接sql2012已经成功,想可以帮助大家 本教程主要是讲了asp与mssql server ...

  2. 开箱即用的 SQL Server Docker 之二

    Docker 与 SQL Server 之一,讲的还只是 Docker 的一些基础概念,这篇将 Docker 应用在 SQL Server 上,包括这些主题: 在 Docker 上制作 SQL Ser ...

  3. SQL Server高可用性部署实施 SQL server 群集

    SQL Server高可用性部署实施 SQL server 群集 2010-09-27 11:15:23|  分类: 数据库 |  标签:无 |字号大中小 订阅 SQL Server高可用性部署实施 ...

  4. 【SQL Server 学习系列】-- sql 随机生成中文名字

    [SQL Server 学习系列]-- sql 随机生成中文名字 原文:[SQL Server 学习系列]-- sql 随机生成中文名字 1 DECLARE @fName TABLE(Id INT I ...

  5. SQL Server中的空间SQL数据类型

    空间数据类型 (Spatial data type) SQL server furnishes us with the geometry and geography SQL data types fo ...

  6. sql server 循环_学习SQL:SQL Server循环简介

    sql server 循环 Loops are one of the most basic, still very powerful concepts in programming – the sam ...

  7. 使用SQL Server数据工具进行SQL单元测试

    This article on SQL Unit Testing is the second part on the series about SSDT and database developmen ...

  8. SQL Server整合–在单个SQL Server实例上托管多个数据库

    介绍 (Introduction) Consolidating SQL Server databases and instances is a practice which, under certai ...

  9. sql server服务器 性能,初涉SQL Server性能问题(1/4):服务器概况

    当你作为DBA时,很多人会向你抱怨:"这个程序数据加载和蜗牛一样,你看看是不是服务器出问题了?"造成这个问题的原因有很多.可能是程序应用服务器问题,网络问题,程序实现方式问题,数据 ...

  10. SQL Server是什么?SQL Server详细介绍

    一.SQL Server数据库简介 SQL Server数据库是Microsoft开发设计的一个关系数据库智能管理系统(RDBMS),现在是全世界主流数据库之一: SQL Server数据库具备方便使 ...

最新文章

  1. PAT(甲级)2021年春季考试 7-1 Arithmetic Progression of Primes
  2. PowerShell_9_零基础自学课程_9_高级主题:静态类和类的操作
  3. Java基础---循环结构+例题
  4. jquery之DataTables的使用
  5. windows WEB 服务器安全策略
  6. LINUX awk操作
  7. Vue-计算属性与事件监听
  8. python获取快手无水印demo
  9. 免费下载380套大型商业源码
  10. cmd命令行中文显示乱码
  11. linux下声卡配置文件,Linux设备配置之声卡配置
  12. MySQL数据库维护手册
  13. java修改mtu值_windows XP系统怎么通过 CMD 系统修改 MTU 值?
  14. 每周更新 | 在线面试「对话窗口」功能上线,公共题库题型等更新
  15. 页面运行时“无法显示XML页”的解决办法
  16. win7虚拟计算机名,电脑高手必会技能:VMware虚拟机安装win7教程
  17. 贝叶斯公式的对数似然函数_最大似然法与似然函数
  18. 转行程序员日记--2020-08-12
  19. 互联网行业遇寒,转行IT该如何应对?这四点建议你一定要知道!
  20. 第6章第9节:幻灯片背景:使用纹理和图像作为幻灯片的背景 [PowerPoint精美幻灯片实战教程]

热门文章

  1. EXCEL同列多个重复数值去重保留一个
  2. VB获取系统目录的简单方法
  3. 做VB的,经常注册和反注册OCX控件和DLL链
  4. VB:常用内部函数大全,你会了几个呢?
  5. ASCII码表 0-255完整版 附详细注释
  6. 蔚来2018年平均每天亏掉2641万,车辆交付预期环比腰斩
  7. 跟着李开复去硅谷,你有疑惑我帮问 | 互动一则
  8. 独家 | 滴滴的无人车野心
  9. 雷林鹏分享:使用Yaf Codes Generator工具构建YAF测试环境
  10. 企业生产环境数据库备份锁表问题