数字函数:
为了防止丢失精度,可以把SQL写成 SELECT 1.0/100;
强制要求数据库按浮点数进行计算。
AND 和OR
1)SELECT * FROM movies WHERE year=1998 AND title like 'car%';
要求两个算式结果同时为真
2)SELECT * FROM movies WHERE year=1998 OR title like 'car%';
只要有一个为真就能成立。
字符串连接
字符串的连接用||完成
SELECT 'a' || 'b' 结果是生成字符串'ab'
SELECT a||b ,与上面的区别:此处a是字段a,上面'a'是字符串
SUBSTR字符串截取
SUBSTR (string string,num start,num length)
用法:string为字符串;
start为起始位置;
字符串的第一个字符的位置为1,不是0;
length为长度
例:SELECT SUBSTR ('abcdef',1,2)
结果为字符串'ab'
length函数:
语法:length(str);取字符串的长度
例:SELECT length('abc');
SELECT length('金哥数据’);
怎么取最后一个字符?
思路:用length函数取得字符串的长度,然后再从长度的位置取最后一个
SELECT SUBSTR ('abc', length('abc'), 1);
字符串为'abc',起始位置为字符串'abc'的长度3,取一个长度。
UPPER函数
UPPER函数可以把小写字母转成大写字母,比如
SELECT UPPER('abc')
输出结果为'ABC'
INSTR函数
非常重要的函数!功能是查找字符串里的字符位置。
假如我们要取出'John Lasseter'这样一个人名的 姓和名:
第一步,先找到字符空格的位置:
SELECT INSTR ('John Lasseter', ' ');
第二步,SUBSTR:
SELECT SUBSTR( 'John Lasseter', 0 , INSTR('John Lasseter', ' '));
LIEK语法
% 和 _ 的区别:
%可以代表字符串里的任意字符(0个或多个)
SELECT name LIKE ‘张%’;可以匹配到张开头的所有人,包括只有一个‘张’字的人
但是,如果想匹配姓张的人,但是名字是2个字或3个字的,就不能用%了,此时用 _ 即可
SELECT name LIKE ‘张_’;表示姓张,且名字是一个字的人;
SELECT name LIKE ‘张__';表示姓张,且名字是两个字的人。
统计函数
count计数函数,也就是统计行数
注意:用count(字段),这个字段是NULL的不会被计数;
而用count(*)则全部计数。
sum求和
avg求平均
max/min
%表示求余数
分别统计
使用GROUP BY
如:分别统计不同供应商制造的产品量
GROUP BY Vend_id
UNION语法
SELECT * FROM movies WHERE year=1998
UNION
SELECT * FROM movies WHERE year=1999
结果是把这两条结果的行加到一起再输出。
时间函数
SELECT data('now') AS now;当前日期
SELECT datetime('now') AS now;当前时间
SELECT strftime('%Y-%m-%d %H:%M:%S','now') AS now;格式化时间
SELECT strftime('%s','now') AS now;当前时间戳
SELECT strftime('%s','2023-03-29') AS now;某天时间戳
SELECT DATE('2023-03-29','+1day','+1year);日期加减计算
SELECT DATETIME('2023-03-29 10:32:00','+1hour','-20minute');时间加减计算
CASE函数
例:写一个逻辑来将year这个字段转化成80前、80后、90后、00后这样的描述
SELECT
CASE WHEN year < 1980 THEN '80前'
WHEN year>=1980 AND year<1990 THEN '80后'
WHEN year>=1990 AND year<2000 THEN '90后'
ELSE '00后'
END
AS new_year, year, title
FROM movies
自联结
SELECT * FROM Customers AS c1,Customers AS c2;
语法上,两个表连接用join,而自联结不用join,直接用表as别名两次,就可以自联结。
如果Customers表有n条数据,那么自联结结果就有n*n条数据。
UNION联结
语法:
SELECT xx 查询1
UNION
SELECT yy 查询2
UNION
SELECT zz 查询3
……
注意:这些查询的字段个数必须相同
假设:
查询1的数据是
1 a
2 b
查询2的数据是
1 xx
2 yy
那么UNION联结之后的数据是
1 a
2 b
1 xx
2 yy