常用sql语句,常用sql操作数据库、表、字段、查询等语句
把两个字段合并使用以下sql的时候 注意{变量}整个“{变量}”替换你要值,根据实际业务部分语句where条件换成自己的。
【数据库】
判断数据库是否存在:
select * from information_schema.SCHEMATA where SCHEMA_NAME = '{需要查找的数据库名}';
模糊查询 数据库是否存在
select * from information_schema.SCHEMATA where SCHEMA_NAME like '%{需要查询的数据库名的部分名称}%';
【数据表】
判断数据表是否存在:
select * from information_schema.TABLES where TABLE_NAME = '{需要查询的数据表名}';
模糊查询 数据表是否存在:
select * from information_schema.TABLES where TABLE_NAME like '%{需要查询的数据表名的部分名称}%';
查询表字段
show columns from `{表名}`
显示表字段结构详细信息
创建数据表示例:
CREATE TABLE `zhl_article` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`fid` int unsigned NOT NULL COMMENT '父级ID',
`title` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标题',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `fid` (`fid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='文章表';
删除数据表:
drop {表名}
表中添加字段
alter table {表名} add {字段名} {字段类型} default '{默认值}' COMMENT '{备注}';
修改字段(not null是否可以为空)
alter table {表名} modify column {字段名} {字段类型} not null default '{默认值}' COMMENT '{备注}';
刪除字段
alter table {表名} drop {字段名};
【添加】
普通插入
insert into {表名} ({字段1},{字段2}) values ('值1','值2')
一次插入多条
insert into {表名} ({字段1},{字段2}) values ('值1','值2'),('值a','值b')
插入的数据来自另一个表
insert into {表名} ({字段1},{字段2}) (select {字段1},{可以指定固定值比如'1'} from {表名} where {条件})
一次插入多条数据来自另一个表
insert into {表名}({字段1},{字段2}) select {字段1},'3' from {表名} where id in('901','825','822');
【修改】
普通修改
update {表名} set {字段1}={值} where id=1
一条sql修改多条数据
update {表名} set {要修改的字段1} = case {条件字段} when {条件字段值1} then {要修改的字段1的值}
when {条件字段值2} then {要修改的字段2的值} end where id in (35,37,38,39)
修改表中字段值来自另一个表中
update 表A as a,表B as b set a.字段1=b.字段 where a.字段C=b.字段C;
例如:
update product as a,devices as b set a.device_type=b.device_type
where a.device_code = b.device_code and a.device_type!=b.device_type
【删除】
普通删除
delete from {table} where id=1
清空表数据
truncate table {表名}
【查询】
把两个字段合并
1.使用CONCAT函数来合并两个字段:
SELECT CONCAT(field1, field2) AS new_field FROM table_name;
2.使用“+”号来连接两个字段:
SELECT field1 + field2 AS new_field FROM table_name;
注意:在使用“+”号连接两个字段时,需要确保这两个字段都是数字类型的。
3.使用CONCAT_WS函数来合并两个字段,并添加分隔符:
SELECT CONCAT_WS('-', field1, field2) AS new_field FROM table_name;
在上面的示例中,我们使用“-”作为分隔符来连接字段1和字段2。
4.使用UNION操作符来合并两个SELECT语句的结果:
SELECT field1 AS new_field FROM table1 UNION SELECT field2 AS new_field FROM table2;
在上面的示例中,我们使用UNION操作符来合并两个SELECT语句的结果,其中第一个SELECT语句选择了table1表中的field1字段,第二个SELECT语句选择了table2表中的field2字段。
示例:根据班级查询班级信息把班级下的所有学生id和名字拼接一起放到一个字段内
select s.id,s.cname,count(u.id) uid_num,
GROUP_CONCAT(
DISTINCT CONCAT(CONCAT_WS('(',u.id,u.uname),')') ORDER BY u.id DESC SEPARATOR ','
) student_info
from classs s
left join student u on u.id=s.uid
where s.status=1
group by s.id
order by s.create_time desc
mysql按年,月,日分组(group by)统计
日期时间格式(“{你的时间字段名}”里边存的值必须是日期格式):
select date_format({你的时间字段名},'%y%m%d') days,count(id) count from {表名} group by days;
select date_format({你的时间字段名},'%y%u') weeks,count(id) count from {表名} group by weeks;
select date_format({你的时间字段名},'%y%m') months,count(id) count from {表名} group by months
时间戳格式:(“{你的时间字段名}”里边存的值必须是时间戳格式):
select from_unixtime({你的时间字段名},'%y%m%d') days,count(id) count from {表名} group by days;
select from_unixtime({你的时间字段名},'%y%u') weeks,count(id) count from {表名} group by weeks;
select from_unixtime({你的时间字段名},'%y%m') months,count(id) count from {表名} group by months
当天内的数据
select * from {表名} where date({你的时间字段名})=date(now())
select * from {表名} where to_days({你的时间字段名}) = to_days(now());
最近N天内的数据
select * from {表名} WHERE to_days(now()) - to_days({你的时间字段名}) <= N
当然也可以使用 date_sub()函数,即
select * from {表名} WHERE DATE_SUB(NOW(), INTERVAL N DAY) <= date({你的时间字段名})
查询最近一周数据
select * from {表名} where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date({你的时间字段名});
同理,查询 N 天内数据,只需将 7 换为 N,查询一月内换为 MONTH,一年内换为 YEAR.
查询 01-01 日至 02-02 日内的数据
select * from {表名} where DATE_FORMAT({时间字段名},'%m-%d') >= '01-01' and DATE_FORMAT({时间字段名},'%m-%d') <= '02-02';
mysql根据json字段内容作为查询条件(包括json数组)检索数据
json格式(注意查询的值类型,整形没有引号,json一般都是双引号)
where data->'$.{字段名}' = {字段值};
json数组格式(注意查询的值类型,整形没有引号,json一般都是双引号)
select * from {表名} where JSON_CONTAINS(data,JSON_OBJECT('{字段名}', "{字段值}"))
两个表字段相同 同时查询两个表的数据 (连表查询用union链接)
select * from {表1} union select * from {表2}
多个表合并结果集查询
select * from (
select
o.id,
o.remark
from erp_warehouse_table_extend o union
select
s.id,
s.remark
from erp_workorder_remark s
) as c order by id desc;
查询所有父级:
select t2.id,t2.menuname from (
select @r as _id,
(select @r := fid from zhl_sysmenu where id = _id) as fid,
@l := @l + 1 as lvl
from (select @r := 11, @l := 0) vars, zhl_sysmenu h
where @r <> 0 and fid > 0
) t1
join zhl_sysmenu t2 on t1._id = t2.id
order by t1.lvl desc