SQL基础知识整理(自用)
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. 排名
rank() over
作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。
说明:例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。即:1 1 3 4 5 5 7dense_rank() over
作用:查出指定条件后的进行排名,条件相同排名相同,排名间断不连续。
说明:和rank() over 的作用相同,区别在于dense_rank() over 排名是密集连续的。例如学生排名,使用这个函数,成绩相同的两名是并列,下一位同学接着下一个名次。即:1 1 2 3 4 5 5 6row_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基础知识整理(自用)相关推荐
- SQL基础知识整理—数据库相关基本概念
一.数据建模 1.理解和分析业务需求.数据建模中最重要的一步. 2.构建业务的概念模型.包括识别业务中的实体.事物或概念以及它们之间的关系. 3.构建逻辑模型.独立于数据技术的抽象数据模型. 4.构建 ...
- 数据库基础与SQL基础知识看这篇就够了!
一.数据库简介 1. DBMS(DataBaseManagement System,数据库管理系统)和数据库数据库Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完 ...
- centos7创建asm磁盘_Oracle ASM 磁盘组基础知识整理(收藏版)
为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的,前两周里因一套生产环境数据库磁盘不足无法对其进行表空间扩容,需要向存储岗申请存储资源,当存储岗划好资源加完存 ...
- Web前端基础知识整理
1. 前端基础知识 文件分类 XML(扩展标记语言) 装载有格式的数据信息,用于各个框架和技术的配置文件描述 特点: 扩展名为.xml 内容区分大小写 标签要成对出现,形成容器,只能有一个 标签按正确 ...
- HTML5的基础知识整理
HTML5 概述:HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定. HTML5的设计目的是为了在移动设备上支持多媒体. 文章目录 HTML5 前言 一.HTMl ...
- 大数据系列sql基础知识(史上最全,收藏起来)
大数据系列文章,从技术能力.业务基础.分析思维三大板块来呈现,你将收获: 1. 提升自信心,自如应对面试,顺利拿到实习岗位或offer: 2.掌握大数据的基础知识,与其他同事沟通无障碍: 3. 具备一 ...
- python常用变量名_python基础知识整理
Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...
- 计算机二级c语基础知识,计算机二级C语基础知识整理.doc
计算机二级C语基础知识整理 1.1 算法 算法:是一组有穷指令集,是解题方案的准确而完整的描述.通俗地说,算法就是计算机解题的过程.算法不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计. ...
- 使用Aspose.Cells的基础知识整理
使用Aspose.Cells的基础知识整理 转自 http://www.cnblogs.com/kenblove/archive/2009/01/07/1371104.html 这两天用Aspose. ...
最新文章
- php 一秒操作一次_php守护进程 加linux命令nohup实现任务每秒执行一次
- VLC搭建RTSP服务器的过程 -测试通过
- UVa1374 Power Calculus(IDDFS)
- Elasticsearch 使用过程中有哪些坑?教你避开这些坑
- 108. 奇数码问题【思维 / 逆序对】
- SAP采购中形成的差异
- linux 自动配置 mysql数据库,Linux下配置mysql数据库主从自动备份
- 万字长文教你看懂java G1垃圾回收日志
- 经典卷积神经网络--AlexNet的详解
- BZOJ2535 [Noi2010]Plane 航空管制 【贪心 + 堆】
- a letter and a number(一封信和一个数字)
- html背景无法载入gif图像,background-image:url(XXXX.gif)为何不显示背景图片_html/css_WEB-ITnose...
- HDU.1005 Number Sequence
- Cradle CFD—专业热流场分析工具
- Linux Deploy 2.0 中文,Linux Deploy:在Android上部署Linux
- SQL Server 触发器
- [题]走廊泼水节——#最小生成树kru
- Java5、8、9章复习
- 二、springBoot 整合 mybatis 项目实战
- 19、弱电工程综合布线报价多少钱一个点位?弱电入门学习
热门文章
- java-极光短信以及通知回调整合
- “辶”“廴”偏旁的字五笔拆字
- JavaScript 学习笔记 超详细(b站pink老师)
- 图标(Icon)和图标按钮(IconButton)
- MySQL基础与navicat使用
- ThinkPHPdayo01学习笔记(体系化,系统化笔记)
- “科林明伦杯”哈尔滨理工大学暑假训练赛 B吃雪糕 (异或思维题)(补题)
- RRPP和smart link 综合实验
- 激光雷达错位拼接技术
- 什么是编程?什么是编程语言?