分享编程~
 

常用sql语句操作数据库表字段查询笔记

常用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

查询所有子级示例:

WITH RECURSIVE sub_tree AS (

  SELECT

    id,

    parent_id,

type,

    name

  FROM

    agency

  WHERE

    parent_id=116

  UNION ALL

  SELECT

    c.id,

    c.parent_id,

c.type,

    c.name

  FROM

    agency c

  INNER JOIN sub_tree st ON c.parent_id = st.id

)

SELECT * FROM sub_tree where type=1


上一篇:PHP加减乘除精确计算函数bcadd,bcsub,bcmul,bcdiv,bcmod,bccomp下一篇:PHP报错cURL error: SSL certificate problem: unable to get local issuer certificate (60)
赞(2) 踩(0)
您说多少就多少,您的支持是我最大的动力
赏金
微 信
赏金
支付宝
本文连接: https://www.yj521.com/article/214.html
版权声明: 本文为原创文章,版权归《越加网》所有,分享转载请注明出处!