MySQL使用总结-未完待续

一、mysql在指定的一个字段后面添加一个字段

alter table user add address varchar(50) after user_id;


二、mysql中insert into select from的使用

如何在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现。具体情形是:有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。对于这种情况,我们可以使用如下的语句来实现:
1. INSERT INTO db1_name (field1 ,field2 ) SELECT field1 ,field2 FROM db2_name
      当然,上面的语句比较适合两个表的数据互插,如果多个表就不适应了。对于多个表,我们可以先将需要查询的字段join起来,然后组成一个视图后再select from就可以了:
2. INSERT INTO a (field1 ,field2 ) SELECT * FROM ( SELECT f1 ,f2 FROM b JOIN c ) AS tb
      其中f1是表b的字段,f2是表c的字段,通过join查询就将分别来自表b和表c的字段进行了组合,然后再通过select嵌套查询插入到表a中,这样就满足了我们这个场景了,如果需要不止2个表,那么可以多个join的形式来组合字段。需要注意的是嵌套查询部分最后一定要有设置表别名,如下:
3. SELECT * FROM ( SELECT f1 ,f2 FROM b JOIN c ) AS tb
      即最后的 as tb是必须的(当然tb这个名称可以随意取),即指定一个别名,否则在mysql中会报如下错误:
 ERROR 1248 ( 42000 ): Every derived TABLE must have its own alias
 即每个派生出来的新表都必须指定别名才可以的。


三、Mysql按字段分组取最大值记录




要求:获得 按table1_id分组,并且age最大的记录信息,即2、3、5条

方法1:
select * from (select * from table2 order by age desc) as a group by a.table1_id

方法2:
select a.* from table2 as a where age = (select max(age) from table2 where a.table1_id=table1_id)

方法3:
select a.* from table2 as a where not exists (select * from table2 where table1_id=a.table1_id and age>a.age)

方法4:
select a.* from table2 as a where exists (select count(*) from table2 where table1_id=a.table1_id and age>a.age having count(*)=0)

四、mysql字符串截取

1.从左开始截取字符串 
left(str, length) 
说明:left(被截取字段,截取长度) 
例:select left(content,200) as abstract from my_content_t 
2.从右开始截取字符串 
right(str, length) 
说明:right(被截取字段,截取长度) 
例:select right(content,200) as abstract from my_content_t 
3.截取字符串 
substring(str, pos) 
substring(str, pos, length) 
说明:substring(被截取字段,从第几位开始截取) 
substring(被截取字段,从第几位开始截取,截取长度) 
例:select substring(content,5) as abstract from my_content_t 
select substring(content,5,200) as abstract from my_content_t 
(注:如果位数是负数 如-5 则是从后倒数位数,到字符串结束或截取的长度) 
4.按关键字截取字符串 
substring_index(str,delim,count) 
说明:substring_index(被截取字段,关键字,关键字出现的次数) 
例:select substring_index("blog.jb51.net","。",2) as abstract from my_content_t 
结果:blog.jb51 
(注:如果关键字出现的次数是负数 如-2 则是从后倒数,到字符串结束) 


五、mysql计算时间差

MySql计算两个日期的时间差函数TIMESTAMPDIFF用法: 
语法: 
TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)   
说明: 
返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的
单位由interval 参数给出。interval 的法定值同TIMESTAMPADD()函数说明中所列出的相同。

SELECT TIMESTAMPDIFF(MONTH,'2009-10-01','2009-09-01'); 
interval可是: 
SECOND 秒 SECONDS 
MINUTE 分钟 MINUTES 
HOUR 时间 HOURS 
DAY 天 DAYS 
MONTH 月 MONTHS 
YEAR 年 YEARS



猜你喜欢

转载自blog.csdn.net/hui008/article/details/80986417