SQL - 学习笔记2
9、数据过滤 - WHERE
(1) 根据指定条件,过滤结果数据。不能单独使用,非必须子句。
SELECT * FROM * WHERE …;
(2) 过滤条件:
• 常规运算符 =、<>(不等于)、!=、<、<=、>、>=
• 计算表达式 列与常数,列与列
• FROM之后,ORDER之前
• NULL的处理(IFNULL(*, *))
(3) 数值过滤 - BETWEEN … AND …
适合数值在某两个值之间:WHERE [列] BETWEEN [前端值] AND [后端值];
适合场景:① 简化取值范围的书写,②两端均包含。
(4) 空值过滤 - IS NULL
判断列为空值:WHERE [列] IS NULL
适合场景:异常值处理
(5) 非空值过滤 - IS NOT NULL
判断列不为空值:WHERE [列] IS NOT NULL;
适合场景:异常值处理
(6) 模糊查询 - LIKE (非已知,不明确)
① 通配符 - 下划线( _ )
单个、任何字符:WHERE [列] LIKE ‘…_…’
适合场景:知道字符位置;知道字符数目。
② 通配符 - 百分号 ( % )
任意数目(包括0个)、任何字符: WHERE [列] LIKE ‘…%…’;
适合场景:不知道字符数目;知道字符位置。
(7) 且 - AND(WHERE [条件1] AND [条件2] AND …;)
或 - OR(WHERE [条件1] OR [条件2] OR …;)
组合操作 - AND … OR …(WHERE [条件1] AND [条件2] OR [条件3] …;)
尽量使用 ( )
(8) 取值限制 - IN
明确而不连续的取值:WHERE [字段] IN (值1,值2,…);
适合场景:过滤值明确;不是连续范围。
(9) 否定条件 - NOT
否定过滤条件:WHERE NOT [条件1];
适合场景:否定一个或多个过滤条件;不能单独使用;类似补集的概念。
只否定紧跟着的条件
10、数据处理 - 数据类型
① 数值型
(1) INTEGER
定义:整数型、整型。只能存储整数。
用法:INTEGER, INTEGER(10) [10为显示宽度]
(2) DECIMAL
定义:定点型。储存固定位数的小数
用法:DECIMAL(2, 2), DECIMAL(4, 2) [DECIMAL(总长度,小数点后长度)]
用于精确计算,比如金额;多出位数四舍五入;默认参数为DECIMAL(10, 0).
(3) FLOAT/DOUBLE/REAL
定义:浮点型。存储不固定位数的小数。
用法:FLOAT/DOUBLE/REAL、FLOAT(5, 3)
多出位数五舍六入
②文本型
(1) CHAR
定义:定长字符串
用法:CHAR(10) [不足位自动补空位] (查找方便)
(2) VARCHAR
定义:可变长字符串
用法:VARCHAR(100) [动态分配,不存在不足位] (省空间)
SQL中字符长度即为字符个数。
UTF-8中一个中文字符占3个字节,1个数字或英文占1个字节
GBK中一个中文字符占2个字节
③日期型(会自动调整格式,可插入文本或数字)
(1)DATE
定义:日期型 Y-m-d 例: ‘2018-09-01’
用法:DATE
(2)TIME
定义:时间型 H:i:s 例: ‘23:37:01’
用法:TIME
(3)DATETIME
定义:日期型 Y-m-d H:i:s 例: ‘2018-09-01 23:37:01’
用法:DATETIME
11、数据处理 - 函数使用
(1) 函数表达式 = 函数名(参数(输入列))
(2) 数值处理函数
绝对值函数 ABS ABS(-3) = 3
平方根函数 SQRT SQRT(4) = 2
指数函数 EXP EXP(4) = e^4
四舍五入函数 ROUND ROUND(1.234, 2) = 1.23
圆周率函数 PI PI() = π
(3) 文本处理函数(不同DBMS中有所不同)
CHAR_LENGTH 字符长度 CHAR_LENGTH(‘数据’) = 2
LENGTH 字节数 LENGTH(‘数据’) = 6
RTRIM 去除右边空值 RTRIM(‘home ‘) = ‘home’
LTRIM 去除左边空值 LTRIM(’ home’) = ‘home’
UPPER 大写字母转换 UPPER(‘home’) = ‘HOME’
LOWER 小写字母转换 LOWER(‘HOME’) = ‘home’
(4) 日期处理函数(函数可嵌套)
获取具体日期段 YEAR/MONTH/DAY YEAR(‘2019-1-2’)=‘2019’
获取具体时间段 HOUR/MINUTE/S HOUR(‘14:01:24’)=‘14’
获取月份名称 MONTHNAME MONTHNAME(‘2019-1-2’)=‘JAN’
获取当前日期时间 NOW NOW() = systime
获取当前日期 CURDATE CURDATE()=‘20190501’
获取当前时间 CURTIME CURTIME() = ‘15:10:39’
时间增加 DATE_ADD DATE_ADD(‘20190501’, INTERVAL 1 MONTH)
时间减少 DATE_SUB DATE_SUB(‘20190501’, INTERVAL 1 YEAR)