掌握sql,轻松面对工作中的各种数据操作
# MySQL基本语法:
# 查询所有
select *
from h_user;
# 条件查询
select *
from h_user where u_id = '1391967758906535937' and info_source = 'PC端注册';
# 新增单条数据
insert into h_order (o_id, trade_number, u_id)
value ('DD1235648794','4561325784165156','1391967758906535937');
# 新增多条数据
insert into h_order (o_id, trade_number, u_id)
values ('DD1235648794','4561325784165156','1391967758906535937'),
('DD1235648794','4561325784165156','1391967758906535937'),
('DD1235648794','4561325784165156','1391967758906535937');
# 修改数据
update h_user
set user_name = '政府',country_code = '+86'
where u_id = '1391967758906535937';
# 删除指定数据数据
delete from h_order where o_id = 'DD20210729182535632904';
# 左连接查询 left join
select u.u_id,u.user_name,o.o_id,o.order_price,o.payment_method
from h_order as o left join h_user as u on o.u_id = u.u_id where u.u_id =
'1391967758906535937';
# 右连接查询 right join
select u.u_id,u.user_name,o.o_id,o.order_price,o.payment_method
from h_order as o right join h_user as u on o.u_id = u.u_id where u.u_id =
'1391967758906535937';
# 交叉连接查询 cross join
select u.u_id,u.user_name,o.o_id,o.order_price,o.payment_method
from h_order as o cross join h_user as u where o.u_id = u.u_id and u.u_id =
'1391967758906535937';
# 子查询
select u_id,user_name
from h_user where u_id = (
select u_id
from h_order where o_id = 'DD20210531142244345580'
);
# MySQL 函数使用:
# 数学函数
# count()、sum()
select count(*)
from h_order;
select sum(order_price)
from h_order;
# ABS(X) -返回X的绝对值
select ABS(-32);
# MOD(N,M) -或% 返回N被M除的余数
select 15 / 7;
select 15 % 7;
select MOD(15,7);
# FLOOR(X) -返回不大于X的最大整数值
select FLOOR(1.23);
select FLOOR(-1.23);
# CEILING(X) -返回不小于X的最小整数值
select CEILING(1.23);
select CEILING(-1.23);
# ROUND(X) -返回参数X的四舍五入的一个整数
select ROUND(1.58);
select ROUND(-1.58);
# 字符串函数
# ASCII(str) -返回字符串str的最左面字符的ASCII代码值 如果str是空字符串返回0 如果str是
NULL返回NULL。
select ASCII('2');
select ASCII(2);
select ASCII('dx');
# CONCAT(str1,str2,...) -返回来自于参数连结的字符串 如果任何参数是NULL返回NULL 可以有
超过2个的参数 一个数字参数被变换为等价的字符串形式
select CONCAT('My', 'S', 'QL');
select CONCAT('My', NULL, 'QL');
select CONCAT(14.3);
# LENGTH(str) -返回字符串str的长度
select LENGTH('text');
# LOCATE(substr,str) 返回子串substr在字符串str第一个出现的位置 如果substr不是在str里
面返回0
select LOCATE('bar', 'foobarbar');
select LOCATE('xar', 'foobar');
# INSTR(str,substr) -返回子串substr在字符串str中的第一个出现的位置
select INSTR('foobarbar', 'bar');
select INSTR('xfoobarfoobar', 'foobar');
select INSTR('xbar', 'foobar');
# LEFT(str,n) -返回字符串str的最左面n个字符
select LEFT('foobarbar', 5);
# RIGHT(str,n) -返回字符串str的最右面n个字符
select RIGHT('foobarbar', 4);
# SUBSTRING(str,pos) -从字符串str的起始位置pos返回一个子串
select SUBSTRING('foobarbar',5);
# TRIM(str) -返回字符串str 所有前缀或后缀被删除了
select TRIM(' bar ');
# LTRIM(str) -返回删除了其前置空格字符的字符串str
select LTRIM(' barbar');
# RTRIM(str) -返回删除了其拖后空格字符的字符串str
select RTRIM('barbar ');
# REPLACE(str,from_str,to_str) -返回字符串str 其字符串from_str的所有出现由字符串
to_str代替
select REPLACE('www.mysql.com', 'w', 'Ww');
# REPEAT(str,count) -返回由重复count次的字符串str组成的一个字符串 如果count <= 0返回
一个空字符串 如果str或count是NULL返回NULL
select REPEAT('MySQL', 3);
# REVERSE(str) -返回颠倒字符顺序的字符串str
select REVERSE('abc');
# INSERT(str,pos,len,newstr) -返回字符串str 在位置pos起始的子串且len个字符长的子串由
字符串newstr代替
select INSERT('whatareyou', 5, 3, 'is');
select INSERT('whatareyou', 5, 0, 'is');
# 获取日期时间函数
# now() yyyy-MM-dd HH:mm:ss
select now();
# curdate() yyyy-MM-dd
select curdate();
# curtime() HH:mm:ss
select curtime();
# 定义日期
set @dt = now();
# Extract() 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒
# yyyy
select extract(year from @dt);
# MM
select extract(month from @dt);
# dd
select extract(day from @dt);
# HH
select extract(hour from @dt);
# mm
select extract(minute from @dt);
# ss
select extract(second from @dt);
# sss
select extract(microsecond from @dt);
# yyyy-MM
select extract(year_month from @dt);
#..........
# 季度
select extract(quarter from @dt);
# 周,星期
select extract(week from @dt);
# last_day()
# 取当月最后一天 dd
select day(last_day(now())) as days;
# 取当月最后一天 yyyy-MM-dd
select last_day(now());
# Mysql日期时间计算函数
# date_add()
# yyyy +-
select date_add(@dt, interval 1 year);
select date_add(@dt, interval -1 year);
# MM +-
select date_add(@dt, interval 1 month);
select date_add(@dt, interval -1 month);
# dd +-
select date_add(@dt, interval 1 day);
select date_add(@dt, interval -1 day);
# HH +-
select date_add(@dt, interval 1 hour);
select date_add(@dt, interval -1 hour);
# mm +-
select date_add(@dt, interval 1 minute);
select date_add(@dt, interval -1 minute);
# ........
# date_sub() 与 date_add() 用法一致
select date_sub(now(), interval '-1' day);
# datediff() dd -两个日期相减
select datediff('2008-08-08', '2008-08-01');
select datediff('2008-08-01', '2008-08-08');
# timediff() HH:mm:ss -两个日期相减
select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00');
select timediff('08:08:08', '00:00:00');
# str_to_date(str, format) 字符串转换为日期
select str_to_date('08/09/2021', '%m/%d/%Y');
select str_to_date('08/09/08' , '%m/%d/%y');
select str_to_date('08.09.2021', '%m.%d.%Y');
select str_to_date('08:09:30', '%h:%i:%s');
select str_to_date('08.09.2021 08:09:30', '%m.%d.%Y %h:%i:%s');
# date_format() -日期转换为字符串
select date_format(now(), '%Y-%m-%d %H:%i:%s');
select date_format(now(), '%Y-%m-%d');
select date_format(now(), '%H:%i:%s');
# time_format() -时间转换为字符串
select time_format(now(), '%H:%i:%s');
# convert_tz(dt,from_tz,to_tz) 时区转换 from_tz目标时区,to_tz当前时区
select convert_tz(now(), '+08:00', '+07:00');
# 控制流程函数
# if函数
select if(100%2=0,'偶数','奇数');
select if(100%2=0,'偶数','奇数');
select u_id,user_name,if(sex=1,'男','女')
from h_user;
# ifnull函数 -判断【表达式1】的值是否为空,如果不为空,就返回【表达式1】的值,否则返回
【表达式2】的值
select u.u_id,u.user_name,o.o_id,o.order_price,ifnull(o.payment_method,'未支付')
from h_order as o left join h_user as u on o.u_id = u.u_id;
# case函数
# 语法一:case 表达式 when [value1] then 表达式1 [when [value2] then 表达式2
...] [else 表达式n] end
select case child_sex when 1 then '男' when 0 then '女' else '其它' end from
h_user_child;
# 语法二:case when [逻辑表达式1] then 表达式1 [when [逻辑表达式2] then 表达式2
...] [else 表达式n] end
select case when child_sex=1 then '男' when child_sex=0 then '女' else '其它'
end from h_user_child;
# Strcmp(str1,str2) -如果str1>str2返回1 str1=str2反回0 str1<str2返回-1
select STRCMP('text', 'text2');
select STRCMP('text2', 'text');
select STRCMP('text', 'text');
# 系统信息函数
# VERSION() -函数返回数据库的版本号
select version();
# CONNECTION_ID() -函数返回服务器的连接数 也就是到现在为止MySQL服务的连接次数
select connection_id();
# DATABASE()和SCHEMA() -返回当前数据库名
select database();
select schema();
# USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER() -这几个函数可以返回当前用户
的名称
select user();
select system_user();
select session_user();
select current_user();