使用as给字段起别名,例如:select name as 姓名 from student;

模糊匹配(like
  "_":一个占位符。例子:select * from student where name like "_ack"; // 表示匹配name以"ack"结尾,且为四个字符的值。
  "%":匹配0个或多个任意字符。
关于null的查询:
  null在数据库中不代表没有,而是代表不知道。
  select name from student where name=null; // 这句是错误的,理解起来就是:从student中查询name等于"不知道的值",这就无法查了
  select name from student where name<>null;  // 这句也是错误的。理解起来是:从student中查询name不等于"不知道的值"。这也无法查。
  select name from student where name is null;  // 这句话是正确的,理解起来是:从student中查询name是"不知道的值"
范围选取(between...and...)
  select age from student where age between 10 and 20;
  等价于:
  select age from student where age>=10 and age<=20;
聚合函数:
  AVG():求平均值。
  Count():计算总数。
  All():默认值,表示全部。
  Max():最大值。
  ...
分组Group By
  select age,Count(*) from student Group By age; // 根据年龄进行分组,并统计各个年龄的人数。
  //
  // 值得注意的是,聚合函数不能出现在where子句中
  select age,Count(*) from student where Count(*)>1 Group By age;
  // 如果需要筛选,可以使用Having来进行过滤。
  select age,Count(*) from student Group By age Having Count(*)>1;
  //
  //
  // where不等价于group by,因为group by是对选出来的结果进行过滤的。下面进行列子说明
  select age from student where Score>90 Group By age; // 理解为:从student表中选择Score>90的age,再将age进行分组
查找前几行(top):
  select top 3 * from name order by age DESC; // 根据age进行降序排序查找前3行
不重复(distinct):
  select distinct name from student; // 选取student表中不重复的name
合并显示(union),默认将重复的结果去除:
  (select name from student) union (select name from teacher);  // 表示将两个表的结果合并显示。
  // union all 可以将两个或者两个以上的表的结果合并显示,默认不会将重复结果去除,也就是查询全部的意思。
  // 使用union进行关联时,关联的结果字段数量要相同,字段类型要相同。
数字函数
  ABS():求绝对值。
  CEILING():舍入到最大整数。
  FLOOR():舍入到最小整数。
  ROUND():四舍五入。
字符串函数
  len():计算字符串长度。
  lower():转换为小写。
  upper():转换为大写。
  ltrim():去除左边空格。
  rtrim():去除右边空格。
  substring():字符串截取。substring(被截取的字符串,字符串起始位置,字符串长度)
日期函数
  getdate():获取日期
  dateadd():增加以后的日期。例子:DATEADD(year,8,getdate()),表示在参数getdate()的基础上增加8年(在当前时间加上8年)。单位可以用year/month/day/hh(小时)/...等。
  datediff():计算两个日期之间的差额。dateiff(单位,开始日期,结束日期),单位同上有yaer等
  datepart():返回日期的部分。datepart(单位,日期参数)。单位同上;日期参数,如当前日期参数:getdate()

案列:

--select dateadd(dd,-day(getdate())+1,getdate()); -- 获取本月第一天
--select dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))

--select getdate() -- 获取当前时间
--select day(getdate()) -- 获取是当前月的第几天
select dateadd(dd,-day(getdate())+1,getdate()) -- 获取本月第一天
---------------------------------

--select datediff(m,0,getdate()) -- 第二个0表示1900-01-01。计算与1900年相差的月份,月份向下取整。例如今天是2019-03-05 13:50:45,那么获取到的值为:2019-03-01那一天以前的月份(也就是不包含3月份)
--select dateadd(mm,datediff(m,0,getdate())+1,0) -- 第三个参数的0表示1900-01-01.表示相差月份加上1900-01-01得到的日期,往往是下个月的第一天,如今天是2019-03-05 13:50:45,那么获取到的值为:2019-04-01 00:00:00.000
select dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0)) -- 在上面的基础上减去3毫秒。表示取当前月的最后一天。

day(dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0)))  -- 当前月天数

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

select datediff(mm,'2018-2-15','2018-3-14');  -- 获取相差月份,这里显示1

 
类型转换
  cast():例子 cast('123' as int) // str转int
  convert():例子 convert(datetime, '2019-2-3') // str转datetime
空值处理函数(isnull):
  select isnull(name,'jr') from student; // 表示从student表中选取name字段,如果字段为空,那么用'jr'代替。
case函数用法:
  select name, (
  case age
  when 10 then '少年'
  when 25 then '青年'
  when 50 then '中年'
  else '不在检查年龄'
  end
  ) as 年纪类型 from student;
//
// 上面看起来并不完整,应该进行年龄段的判断。
  select name, (
  case
  when age<=10 then '少年'
  when age>10 and age<=25 then '青年'
  when age>25 and age<=50 then '中年'
  else '不在检查年龄'
  end
  ) as 年纪类型 from student;
//
// 那么如果要计算年龄类型的数量呢?

  select sex, SUM(
  case
  when age<=10 then 1
  else 0
  end
  ) as 少年, SUM(
  case
  when age>10 and age<=25 then 1
  else 0
  end
  ) as 青年, SUM(
  case
  when age>25 and age<=50 then 1
  else 0
  end
  ) as 中年
  from student group by sex;

关联查询:
  select stu.name,tea.name from student as stu join teacher as tea on stu.id=tea.sid; // 使用join
  select student.name, teacher.name from student, teacher where student.id=teacher.sid;
 

select 查询的更多相关文章

  1. 关于SubSonic3.0插件使用SqlQuery或Select查询时产生的System.NullReferenceException异常修复

    早上在编写执行用例时,突然爆异常System.NullReferenceException: 未将对象引用设置到对象的实例 执行代码:

  2. 为什么忘记commit也会造成select查询的性能问题

    今天遇到一个很有意思的问题,一个开发人员反馈在测试服务器ORACLE数据库执行的一条简单SQL语句非常缓慢,他写的一个SQL没有返回任何数据,但是耗费了几分钟的时间.让我检查分析一下原因,分析解决过后 ...

  3. [NHibernate]N+1 Select查询问题分析

    目录 写在前面 文档与系列文章 N+1 Select查询问题分析 总结 写在前面 在前面的文章(延迟加载,立即加载)中都提到了N+1 Select的问题,总觉得理解的很不到位,也请大家原谅,这也是为什 ...

  4. access数据库select查询top时无效的解决办法

    access数据库select查询top时有时无效,原因就是在使用Order by时,且排序的条件中数据有重复的. 比如:select top 10 * from table1 order by cd ...

  5. MySQL之select查询、function函数

    一.select查询 //查询某张表所有数据 select * from temp; //查询指定列和条件的数据 //查询name和age这两列,age等于22的数据 ; //as对列重命名 //as ...

  6. select查询的性能

    为什么忘记commit也会造成select查询的性能问题 今天遇到一个很有意思的问题,一个开发人员反馈在测试服务器ORACLE数据库执行的一条简单SQL语句非常缓慢,他写的一个SQL没有返回任何数据, ...

  7. 把一个select查询结果插入到一个表(可选指定字段和值实例)

    把一个select查询结果插入到一个表(可选指定字段和值实例) insert into  bak (cc,yf) select cc,9 from ket insert into bak (cc,yf ...

  8. Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)

    Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...

  9. select查询原理

    原文:select查询原理 我并非专业DBA,但做为B/S架构的开发人员,总是离不开数据库,一般开发员只会应用SQL的四条经典语句:select ,insert,delete,update.但是我从来 ...

  10. mybatis mapper.xml 写关联查询 运用 resultmap 结果集中 用 association 关联其他表 并且 用 association 的 select 查询值 报错 java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for mybatis.map

    用mybaits 写一个关联查询 查询商品表关联商品规格表,并查询规格表中的数量.价格等,为了sql重用性,利用 association 节点 查询 结果并赋值报错 商品表的mapper文件为Gooo ...

随机推荐

  1. BZOJ 2423 (求LCS的长度和种类数)

    Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ...

  2. 第 8 章 容器网络 - 064 - Weave 网络结构分析

    Weave 网络结构分析 在 host1 中运行容器 bbox1: eval $(weave env) docker run --name bbox1 -itd busybox 首先执行 eval $ ...

  3. Redis入门指南之三(入门)

    本节主要介绍Redis的5种数据类型,同时使用Python API来操作Redis,其中python版本为3.5, redis版本为4.0.2. redis-py 的API的使用可以分类为: (1)连 ...

  4. 《HTTP 权威指南》笔记:第十四章 安全 HTTP

     HTTPS 与 HTTP 不同,其在传输层与应用层之间添加了一个 SSL/TLS 的安全层.机制:所有的 HTTP 请求与响应都要通过 SSL/TLS 先进行加密,再进行传输. 基础知识 密码 c ...

  5. LeetCode--018--四数之和(java)

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满 ...

  6. poj3613

    注意最短路转移的单位元是对角线为0,其它为INF. #include <iostream> #include <cstdio> #include <cmath> # ...

  7. 精确率、准确率、召回率和F1值

    当我们训练一个分类模型,总要有一些指标来衡量这个模型的优劣.一般可以用如题的指标来对预测数据做评估,同时对模型进行评估. 首先先理解一下混淆矩阵,混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用 ...

  8. debug makefile 及 lint 软件质量软件

    make -d should give you more than enough information to debug your makefile. Be warned: it will take ...

  9. jQ如何选中被选中的单选按钮的值

    alert($("label input[name=logintpye]:checked").val());

  10. 使用RTL-SDR打开车门

    在最近几年,入侵汽车在当代社会的黑客圈中成为热点,很多文章表明汽车产业还有很多东西等待完善,在本篇文章中,我会让你熟悉我一直研究的一些概念,以及如何在网状网络中使用一些便宜的部件渗透远程开门系统. 软 ...