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. Intellij IDEA创建Maven Web项目

    1前言 在创建项目中,IDEA提供了非常多项目模板,比方Spring MVC模板,能够直接创建一个基于Maven的Spring MVC的demo,各种配置都已经设定好了,直接编译部署就能够使用. 最開 ...

  2. Connection for controluser as defined in your configuration failed.

    在mysql中使用事件调度器(计划任务), 语句写好了,运行也ok,可是却没有预期的结果.网上总结了非常多计划任务失效的原因.没有一种适合我. 在phpmyadmin中打开事件表,发现以下一串红色的提 ...

  3. 五毛的cocos2d-x学习笔记01-创建项目

    终于准备开始学习cocos2d-x了.因为想和同学一起做游戏参加比赛,所以打算学习很热的Cocos2d-x.因为已经学习了C++,所以我想入门应该不是很困难.再加上官网有中文教程以及多不胜数的游戏开发 ...

  4. C++对C语言的非面向对象特性扩充(3)

    今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(refer ...

  5. Python Extension Packages下载链接

    一.http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载后可使用pip包管理器进行安装,在命令行中输入: pip install 安装包的路径

  6. VPN各种方案

    http://www.maimiaovpn.com 大家都是用什么方法FQ的?我原来用的XskyWalker浏览器 但我用的电信网现在不行了.大家用的什么方法可否告诉我一下我用yes-vpn,10元一 ...

  7. perl学习(5) 输入和输出

    1.1. 从标准输入设备输入 <STDIN> 行输入操作在到达文件的结尾时将返回undef,在while循环的条件中不能使用chomp: while (defined($line = &l ...

  8. Linux和windows下的shutdown命令

    Linux下的shutdown命令 shutdown [options] [time] [wall] options: --help 获取帮助 -h 关机 -r 重启 -c 取消 -k 仅显示警告信息 ...

  9. Spring (一) IOC ( Inversion Of Control )

    前序 现在小米手机很火就还拿小米手机来举例子,上一篇写的关于SSH框架搭建是从小米手机公司内个整个流程方面来考虑,如何提高效率生产效率,这篇博客主要从公司外部环境说明如何提高生产效率,那么怎么才能提高 ...

  10. nginx学习六 高级数据结构之双向链表ngx_queue_t

    1 ngx_queue_t简单介绍 ngx_queue_t是nginx提供的一个轻量级的双向链表容器,它不负责存储数据,既不提供数据的内存分配.它仅仅有两个指针负责把数据链入链表.它跟stl提供的qu ...