1.日期差

DATEDIFF(a.recordDate,b.recordDate)  a-b
或
TIMESTAMPDIFF
TIMESTAMPDIFF能干什么,可以计算相差天数、小时、分钟和秒,相比于datediff函数要灵活很多。
格式是时间小的前,时间大的放在后面。 计算相差天数:
select w1.Id
from Weather as w1, Weather as w2
where TIMESTAMPDIFF(DAY, w2.RecordDate, w1.RecordDate) = 1
AND w1.Temperature > w2.Temperature统计不重复数据个数
count(distinct user_id)

2.条件语句

IF(条件表达式,值1,值2)--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END--Case搜索函数
CASE WHEN sex = '1' THEN '男'WHEN sex = '2' THEN '女'
ELSE '其他' END例
UPDATE Salary SET sex =
CASE sex
WHEN 'm' THEN 'f'
WHEN 'f' THEN 'm'
ELSE sex END

3.IFNULL.

IFNULL(b.num, 0)
如果b.num为null,返回0,否则返回b.null自身的值

4.group_concat()

SELECT
dept_id,
GROUP_CONCAT(name ORDER BY age DESC SEPARATOR '*') -- 分组中的name中的多行数据将按照age降序进行连接,分隔符为 *
FROM employee2
GROUP BY dept_id;
得到
1 | 小肖*小玉*张山*小张*李四*小肖
2 | 小东*小肖*小胡*王武*小林*猪小屁
3 | 小非
4 | 晓飞 例
select sell_date,
count(distinct product) as num_sold,
GROUP_CONCAT( distinct product ORDER BY product separator ',') as products
注意若需要合并的数据有重复 要加 distinct

5.like

写一条 SQL 语句,查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。I 类糖尿病的代码总是包含前缀 DIAB1

select *
from Patients
where conditions like 'DIAB1%' or conditions LIKE '% DIAB1%'like模糊查询,支持%和下划线匹配,%匹配多个字符,_下划线:任意一个字符
示例:1、查询名字中含有张的学生信息
select * from student where sname like ‘%张%’;
2、查询名字以张开头的学生信息
select * from student where sname like ‘张%’;
3、查询名字以人结尾的学生信息
select * from student where sname like ‘%人’;
4、查询名字中第二个字为心的学生信息
select * from student where sname like ‘_心%’;
5、查询名字中第三个字为心的学生信息
select * from student where sname like ‘__心%’;因为下划线在sql中有特殊含义,所以当查询姓名中有下划线的学生信息时需要转义
示例:
select * from student where sname like ‘%_%’;

6. 顺序问题

一般,WHERE在前,GROUP BY在后,即先进行筛选,然后进行分组;
HAVING只能跟在GROUP BY之后,对分组后的聚合结果进行筛选;
HAVING的前提是分组;WHERE在最前,最先对原始数据进行一遍筛选;
WHERE的条件里只能用已有的列进行条件判断,不允许使用聚合函数。
HAVING之后可以允许使用聚合函数;
聚合函数包括count(),sum(),avg(),max(),min()SELECT A.name,COUNT(order_number) AS count_sum
FROM orders A, customer B
WHERE A.coustomer_id=B.id
GROUP BY customer_id
HAVING COUNT(order_number)>5
ORDER BY count_sum DESC
LIMIT 5;

7. 字符串相关操作

length(a)-------获取字符串a的长度
concat(a,b..)---组合a,b..等参数
upper(a)-------将字符串a转成大写
lower(a)-------将字符串a转成小写----------------取左边count个字符,比如left(a,2), 则取左边两个字符
left(a, count)--取左边count个字符,比如left(a,2), 则取左边两个字符
right(a,n) -----取右边长度为n的字符串,
比如right(a, length(a) - 2),则取从左边第三个字符串开始的字符串substring(a, start)-------------截取从start开始的右边的字符串
substring(a, start, length)-----截取从start开始长度为length的字符串注意
substring(a, 1, 1) 等效于 left(a, 1)

8. UNION运算符

UNION运算符用于组合两个或更多SELECT语句的结果集,而不返回任何重复的行。1.UNION中的每个SELECT语句必须具有相同的列数
2.这些列也必须具有相似的数据类型
3.每个SELECT语句中的列也必须以相同的顺序排列
4.每个SELECT语句必须有相同数目的列表达式
5.但是每个SELECT语句的长度不必相同
注释:默认情况下,UNION运算符选择一个不同的值。如果允许重复值,请使用UNION ALL。-----例:
select name,population,area from World
where population > 25000000 or area > 3000000
-----等效于
select name,population,area from World
where population > 25000000
union
select name,population,area from World
where area > 3000000----------例如:----------
输入:
Products table:
+------------+--------+--------+--------+
| product_id | store1 | store2 | store3 |
+------------+--------+--------+--------+
| 0          | 95     | 100    | 105    |
| 1          | 70     | null   | 80     |
+------------+--------+--------+--------+
输出:
+------------+--------+-------+
| product_id | store  | price |
+------------+--------+-------+
| 0          | store1 | 95    |
| 0          | store2 | 100   |
| 0          | store3 | 105   |
| 1          | store1 | 70    |
| 1          | store3 | 80    |
+------------+--------+-------+
解释:
产品0在store1,store2,store3的价格分别为95,100,105。
产品1在store1,store3的价格分别为70,80。在store2无法买到。select product_id, 'store1' as store, store1 as price
from Products
where store1 is not null
union
select product_id, 'store2' as store, store2 as price
from Products
where store2 is not null
union
select product_id, 'store3' as store, store3 as price
from Products
where store3 is not null

9. LIMIT

1、当 limit后面跟一个参数的时候,该参数表示要取的数据的数量例如 select* from user limit 3 表示直接取前三条数据2、当limit后面跟两个参数的时候,第一个数表示要跳过的数量,后一位表示要取的数量,例如select * from user limit 1,3;就是跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据3、当 limit和offset组合使用的时候,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量 。例如select * from user limit 3 offset 1;表示跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据

10. 排名

  1. rank() over
    作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。
    说明:例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。即:1 1 3 4 5 5 7

  2. dense_rank() over
    作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。
    说明:和rank() over 的作用相同,区别在于dense_rank() over 排名是密集连续的。例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学接着下一个名次。即:1 1 2 3 4 5 5 6

  3. row_number() over
    作用:查出指定条件后的进行排名,条件相同排名也不相同,排名间断不连续。
    说明:这个函数不需要考虑是否并列,即使根据条件查询出来的数值相同也会进行连续排序。即:1 2 3 4 5 6

使用小提示
dense_rank() over 后面跟排序的依据的列,下面是用了一个排序好的列(order by score desc)。
注意:如果select中有一列是用rank()这类函数,其他的列都会按着他这列规定好的顺序排。

select score,
dense_rank() over (order by score desc) as 'rank'
#这个rank之所以要加引号,因为rank本身是个函数,直接写rank会报错
from scores;

<窗口函数> over (partition by <用于分组的列名>order by <用于排序的列名>)

11. 前后函数:LAG(expr,n)、LEAD(expr,n)

用途:返回位于当前行的前n行(LAG(expr,n))或后n行(LEAD(expr,n))的expr的值(以当前行为原点)

--寻找连续出现三行的值
select distinct num as ConsecutiveNums
from (select num, lag(num, 1, null) over (order by id) lag_num, //取前一行的numlead(num, 1, null) over (order by id) lead_num//取后一行的numfrom logs) l
where l.Num = l.lag_num     // 条件:三行值相同and l.Num = l.lead_num

SQL基础知识整理(自用)相关推荐

  1. SQL基础知识整理—数据库相关基本概念

    一.数据建模 1.理解和分析业务需求.数据建模中最重要的一步. 2.构建业务的概念模型.包括识别业务中的实体.事物或概念以及它们之间的关系. 3.构建逻辑模型.独立于数据技术的抽象数据模型. 4.构建 ...

  2. 数据库基础与SQL基础知识看这篇就够了!

    一.数据库简介 1. DBMS(DataBaseManagement System,数据库管理系统)和数据库数据库Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完 ...

  3. centos7创建asm磁盘_Oracle ASM 磁盘组基础知识整理(收藏版)

    为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的,前两周里因一套生产环境数据库磁盘不足无法对其进行表空间扩容,需要向存储岗申请存储资源,当存储岗划好资源加完存 ...

  4. Web前端基础知识整理

    1. 前端基础知识 文件分类 XML(扩展标记语言) 装载有格式的数据信息,用于各个框架和技术的配置文件描述 特点: 扩展名为.xml 内容区分大小写 标签要成对出现,形成容器,只能有一个 标签按正确 ...

  5. HTML5的基础知识整理

    HTML5 概述:HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定. HTML5的设计目的是为了在移动设备上支持多媒体. 文章目录 HTML5 前言 一.HTMl ...

  6. 大数据系列sql基础知识(史上最全,收藏起来)

    大数据系列文章,从技术能力.业务基础.分析思维三大板块来呈现,你将收获: 1. 提升自信心,自如应对面试,顺利拿到实习岗位或offer: 2.掌握大数据的基础知识,与其他同事沟通无障碍: 3. 具备一 ...

  7. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

  8. 计算机二级c语基础知识,计算机二级C语基础知识整理.doc

    计算机二级C语基础知识整理 1.1 算法 算法:是一组有穷指令集,是解题方案的准确而完整的描述.通俗地说,算法就是计算机解题的过程.算法不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计. ...

  9. 使用Aspose.Cells的基础知识整理

    使用Aspose.Cells的基础知识整理 转自 http://www.cnblogs.com/kenblove/archive/2009/01/07/1371104.html 这两天用Aspose. ...

最新文章

  1. php 一秒操作一次_php守护进程 加linux命令nohup实现任务每秒执行一次
  2. VLC搭建RTSP服务器的过程 -测试通过
  3. UVa1374 Power Calculus(IDDFS)
  4. Elasticsearch 使用过程中有哪些坑?教你避开这些坑
  5. 108. 奇数码问题【思维 / 逆序对】
  6. SAP采购中形成的差异
  7. linux 自动配置 mysql数据库,Linux下配置mysql数据库主从自动备份
  8. 万字长文教你看懂java G1垃圾回收日志
  9. 经典卷积神经网络--AlexNet的详解
  10. BZOJ2535 [Noi2010]Plane 航空管制 【贪心 + 堆】
  11. a letter and a number(一封信和一个数字)
  12. html背景无法载入gif图像,background-image:url(XXXX.gif)为何不显示背景图片_html/css_WEB-ITnose...
  13. HDU.1005 Number Sequence
  14. Cradle CFD—专业热流场分析工具
  15. Linux Deploy 2.0 中文,Linux Deploy:在Android上部署Linux
  16. SQL Server 触发器
  17. [题]走廊泼水节——#最小生成树kru
  18. Java5、8、9章复习
  19. 二、springBoot 整合 mybatis 项目实战
  20. 19、弱电工程综合布线报价多少钱一个点位?弱电入门学习

热门文章

  1. java-极光短信以及通知回调整合
  2. “辶”“廴”偏旁的字五笔拆字
  3. JavaScript 学习笔记 超详细(b站pink老师)
  4. 图标(Icon)和图标按钮(IconButton)
  5. MySQL基础与navicat使用
  6. ThinkPHPdayo01学习笔记(体系化,系统化笔记)
  7. “科林明伦杯”哈尔滨理工大学暑假训练赛 B吃雪糕 (异或思维题)(补题)
  8. RRPP和smart link 综合实验
  9. 激光雷达错位拼接技术
  10. 什么是编程?什么是编程语言?