result = executeQuery(“ SELECT FName, FSalary FROM T_Employee ”); for(i=0;i<result.count;i++) { salary = result[i].get(“ FSalary ”); if(salary<5000) { name = result[i].get(“ FName ”); print(name+”的工资少于 5000 元,为:”+salary); } }

SQL 中提供了聚合函数来完成计算统 计结果集条数、某个字段的最大值、某个字段的最小值、某个字段的平均值以及某个字段的合计 值等数据统计的功能,SQL 标准中规定了下面几种聚合函数:

函数名  说明 MAX 计算字段最大值 MIN 计算字段最小值 AVG 计算字段平均值 SUM 计算字段合计值 COUNT 统计数据条数

SELECT COUNT(*),COUNT(FNumber) FROM T_Employee

可以看到COUNT(*)、COUNT(FNumber)两个表达式的计算结果都是9,而COUNT(FName) 的计算结果是 8。也就反应出了两种使用方式的区别:COUNT(*)统计的是结果集的总条数,而 COUNT(FName)统计的则是除了结果集中 FName 不为空值(也就是不等于 NULL)的记录的总

SELECT * FROM T_Employee WHERE FName LIKE '_erry'  like的匹配字符 第一个任意字符

进行多字符匹配的通配符为半角百分号“%”,它匹配任意次数(零或多个)出现的 任意字符。比如通配符表达式“k%”匹配以“k”开头、任意长度的字符串,“k”、“kerry”、 “kb” 都能匹配这个表达式,

b%t”匹配以“b”开头、以“t”结尾

集合匹配 集合匹配只在 MSSQLServer 上提供支持,在 MYSQL、Oracle、DB2 等数据库中不支持, 必须采用变通的手段来实现。

[bt]%”匹配第一个字符为 b 或者 t、长度不限的 字符串,“bed”、“token”、“t”都能匹配这个表达式,而“at”、“lab”、“lot”等则不能匹配 这个表达式。

;例子 SELECT * FROM T_Employee WHERE FName LIKE '[SJ]%'

比如通配符表达式“[^bt]%”匹配第一个字符不为 b 或者 t、长度不限的字符串, 相反匹配

其他sql上要集合匹配  需要这样写 很字符的匹配 SELECT * FROM T_Employee WHERE FName LIKE 'S%' OR FName LIKE 'J%'

sql上查询NULL 不能直接使用NULL   需要使用关键字 IS NOT SELECT * FROM T_Employee WHERE FNAME IS NULL

不为空 SELECT * FROM T_Employee WHERE FNAME IS NOT NULL

不含字符的匹配 SELECT * FROM T_Employee WHERE NOT(FName LIKE 'S%') AND NOT(FName LIKE 'J%')

SELECT * FROM T_Employee WHERE FNAME IS NOT NULL AND FSalary <5000

反义运算符就是关键字  “!< !> !=”

NOT(表达去翻 相同于!)

SELECT * FROM T_Employee WHERE NOT(FAge=22) AND NOT(FSALARY<2000)

在数据库上需要注意一个词 不大于”表示成“<”, 而忘记了“不大于”是包含“小于”和“等于”这两个意思的,这样就会造成检索数据的错误 这时候使用NOT就可以很好的排除BUG

不等于”的运算符“<>”

使用!运算符 智能在MSSQL上使用  其他sql不能使用 所以需要使用NOT

多值检测 SELECT FAge,FNumber,FName FROM T_Employee WHERE FAge=23 OR FAge=25 OR FAge=28

SQL提供了IN语句,使用IN我们只要指定要匹配的数据集 合就可以了,使用方法为“IN (值1,值2,值3……)” 使用IN 是为了解决 多个OR 区间的值

SELECT FAge,FNumber,FName FROM T_Employee WHERE FAge IN (23,25,28)

范围值检测

检索所有年龄介于20岁到60 岁之间的员工信息”就要列出20到60之间的每一个值,这个工作量是非常大的。 IN就不好实现 SELECT * FROM T_Employee WHERE FAGE>=23 AND FAGE <=27 不过SQL提供了一个专门用语范围值检 测的语句“BETTWEEN AND”,它可以用来检测一个值是否处于某个范围中(包括范围的边界 值,也就是闭区间)。 SELECT * FROM T_Employee WHERE FAGE BETWEEN 23 AND 27

多个范围检测 SELECT * FROM T_Employee WHERE (FSalary BETWEEN 2000 AND 3000) OR (FSalary BETWEEN 5000 AND 8000)

低效的“WHERE 1=1”

这个事动态显示SQL  跟随用户的选择而查询sql SELECT * FROM T_Employee WHERE FNumber BETWEEN 'DEV001' AND 'DEV008' AND FName LIKE '%J%' AND FSalary BETWEEN 3000 AND 6000 而如果不选中姓名和年龄前的复选框的时候就要使用下面的SQL语句: SELECT * FROM T_Employee WHERE FNumber BETWEEN 'DEV001' AND 'DEV008' AND FSalary BETWEEN 3000 AND 6000

判断复选框是否被选择 String sql = " SELECT * FROM T_Employee WHERE 1=1"; if(工号复选框选中) { sql.appendLine("AND FNumber BETWEEN '"+工号文本框1内容+"' AND '"+工号 文本框2内容+"'"); } if(姓名复选框选中) { sql.appendLine("AND FName LIKE '%"+姓名文本框内容+"%'"); } if(年龄复选框选中) { sql.appendLine("AND FAge BETWEEN "+年龄文本框1内容+" AND "+年龄文本框2 内容); } executeSQL(sql); 上面,I这种方法由于使用where 条件  会限制条件查询, 不高效

----------------------------------

所以使用另一种方法 private void doQuery() { Bool hasWhere = false; StringBuilder sql = new StringBuilder(" SELECT * FROM T_Employee"); if(工号复选框选中) { hasWhere = appendWhereIfNeed(sql, hasWhere); sql.appendLine("FNumber BETWEEN '"+工号文本框1内容+"' AND '"+工号 文本框2内容+"'"); } if(姓名复选框选中) { hasWhere = appendWhereIfNeed(sql, hasWhere); sql.appendLine("FName LIKE '%"+姓名文本框内容+"%'"); } if(年龄复选框选中) { hasWhere = appendWhereIfNeed(sql, hasWhere); sql.appendLine("FAge BETWEEN "+年龄文本框1内容+" AND "+年龄文本框2 内容); } executeSQL(sql); }

private Bool appendWhereIfNeed(StringBuilder sql,Bool hasWhere) { if(hasWhere==false) { sql. appendLine("WHERE"); } else { sql. appendLine("AND"); } }

分组语句  必须和聚合一起使用 GROUP BY子句必须放到WHERE语句的之后

SELECT FAge FROM T_Employee WHERE FSubCompany = 'Beijing' GROUP BY FAge

使用聚合函数,下面的SQL语句是正确的: SELECT FAge,AVG(FSalary) FROM T_Employee GROUP BY FAge

SELECT FSubCompany,FDepartment FROM T_Employee GROUP BY FSubCompany,FDepartment

分数 和聚合函数一起使用实现查询每个年龄段的人数 SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge

SELECT FDepartment,MIN(FAge) AS FAgeMIN,MAX(FAge) AS FAgeMAX FROM T_Employee GROUP BY FDepartment

SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge WHERE COUNT(*)>1 可以在数据库系统中执行下面的SQL的时候,数据库系统会提示语法错误,这是因为聚合函 数不能在WHERE语句中使用,必须使用HAVING子句来代替,比如: SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING COUNT(*)>1 执行完毕我们就能在输出结果中看到下面的执行结果:

HAVING使用 SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING COUNT(*) =1 OR COUNT(*) =3

SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING COUNT(*) IN (1,3)

需要注意 不过使用WHERE的时候GROUP BY

限制结果行数查询 MYSQL中提供了LIMIT关键字用来限制返回的结果集,LIMIT放在SELECT语句的最后位置, 语法为“LIMIT 首行行号,要返回的结果集的最大数目”。 SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 2,5  第二行开始 最多5条数据

MSSQLServer2000中提供了TOP关键字用来返回结果集中的前N条记录

select top 5 * from T_Employee order by FSalary Desc

top使用 子查询方式 比如要实现检索按照工资从高到低排序检索从第六名开始一共 三个人的信息,那么就可以首先将前五名的主键取出来,在检索的时候检索排除了这五名员 工的前三个人,SQL如下: SELECT top 3 * FROM T_Employee WHERE FNumber NOT IN (SELECT TOP 5 FNumber FROM T_Employee ORDER BY FSalary DESC) ORDER BY FSalary DESC MYSQL中提供了LIMIT关键字用来限制返回的结果集,LIMIT放在SELECT语句的最后位置, 语法为“LIMIT 首行行号,要返回的结果集的最大数目”。 子句要位于WHERE子句之后,而使用HAVING子句的时候GROUP BY子句要位于HAVING子句之 后,

在MSSQL使用 ROW_NUMBER()。 来查询行数

ROW_NUMBER()函数可以计算每一行数据在结果集中的行号(从1开始计数),其使用语法 如下: ROW_NUMBER OVER(排序规则) 比如我们执行下面的SQL语句: SELECT ROW_NUMBER() OVER(ORDER BY FSalary),FNumber,FName,FSalary,FAge FROM T_Employee

ROW_NUMBER()不能用在WHERE语句中。我们可以用子查询来解决这个问题, 要用下面 的SQL语句用来返回第3行到第5行的数据: SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY FSalary DESC) AS rownum, FNumber,FName,FSalary,FAge FROM T_Employee ) AS a WHERE a.rownum>=3 AND a.rownum<=5

数据库分页处理

SELECT DISTINCT FDepartment FROM T_Employee 查询结果排除相同

SQL基础使用的更多相关文章

  1. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  2. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  3. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  4. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  5. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  6. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

  7. Oracle SQL 基础学习

    oracel sql 基础学习 CREATE TABLE USERINFO ( ID ,) PRIMARY KEY, USERNAME ), USERPWD ), EMAIL ), REDATE DA ...

  8. 第一章 SQL基础

    第一部分:SQL基础1. 为什么学习SQL自人类社会形成之日起,社会的运转就在不断地产生和使用各种信息(文献.档案.资料.数据等):在如今所谓的信息时代,由于计算机和互联网的作用,信息的产生和使用达到 ...

  9. SQL基础--&gt; 约束(CONSTRAINT)

    --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...

  10. SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)[转]

    --====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY ...

随机推荐

  1. TMT行业分析师

    诚聘英才 - 传媒梦工场 TMT行业分析师 工作经验:  2年以上 发布日期:  2013-01-04 最低学历:  本科 管理经验:  否 工作性质:  全职 招聘人数:  1人 职位类别:  金融 ...

  2. CCPC A(模拟)

    Secrete Master Plan Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Othe ...

  3. Android多线程断点续传下载

    这个月接到一个项目.要写一个像360助手一样的对于软件管理的APP:当中.遇到了一个问题:多线程断点下载 这个 ,因为之前没有写过这方面的应用功能.所以.不免要自学了. 然后就在各个昂站上收索并整理了 ...

  4. block 解析 - 局部变量

    局部变量 block内使用局部变量,一般都是截获变量(只读),截获离block初始化最近的一次的值. 引用官方文档: Stack (non-static) variables local to the ...

  5. 打造自己的sublime text

    博主今天正在了解学习LESS,在找相关资源的过程中,发现自己的sublime text和别人差别有点大,突然脑海中一股逼格的气息油然而生,于是查找了相关资料,并打造了一下风格. 下面开始正文. 首先是 ...

  6. NetBeans文件被锁,无法修改

    今天用NetBeans写有关Dojo的一个样例时,出现文件被锁,无法修改的情况.找了半天,但是就是不知道是什么原因,我就写在博客上记录下来

  7. [置顶] android 心跳包的分析

    android 心跳的分析 最近在做一个项目中用到了心跳包的机制,其实就是传统的长连接.或许有的人知道消息推送的机制,消息推送也是一种长连接 ,是将数据有服务器端推送到客户端这边从而改变传统的“拉”的 ...

  8. div+css 布局下兼容IE6 IE7 FF常见问题

    div+css 布局下兼容IE6 IE7 FF常见问题 收藏 所有浏览器 通用 (市面上主要用到的IE6 IE7 FF)height: 100px; IE6 专用 _height: 100px; IE ...

  9. GIT简易使用流程

    git是目前世界上最先进的分布式版本控制系统(摘自廖雪峰官网) 首先需要在系统上安装git: Windows系统在这下载: RHEL/Centos/Fedora用户可以用以下命令安装:yum -y i ...

  10. [Python]小笔记-queue

    queue的作用: 队列最大的作用就是先进先出(First in First Out).队列对于解决最短路的时候特别好用. python 2.7: 要使用队列,那么要加载头文件Queue,也就是imp ...