mysql技巧

1.sql 批量更新某个字段的值

UPDATE Tabel1 t1 set t1.col1= 
( SELECT  col2  from Tabel2 t2 WHERE  t1.col1=t2.col2) 
where exists
( SELECT  col2  from Tabel2 t2 WHERE  t1.col1=t2.col2) 

更新Table1 和Table1 匹配的值 中 表Table1 中col1 列的值

2.insert into select 语句 select into from 语句 两张表复制语句

Insert INTO table(field1,field2,...) values(value1,value2,...)

但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。
1.INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,…) select value1,value2,… from Table1
要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:
INSERT INTO SELECT语句复制表数据
Insert into Table2(a, c, d) select a,c,5 from Table1

2.SELECT INTO FROM语句
语句形式为:SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下:
SELECT INTO FROM语句创建表Table2并复制数据
select a,c INTO Table2 from Table1

3.sql时间处理
select sysdate,add_months(sysdate,12) from dual; –加1年
select sysdate,add_months(sysdate,1) from dual; –加1月
select sysdate,to_char(sysdate+7,’yyyy-mm-dd HH24:MI:SS’) from dual; –加1星期
select sysdate,to_char(sysdate+1,’yyyy-mm-dd HH24:MI:SS’) from dual; –加1天
select sysdate,to_char(sysdate+1/24,’yyyy-mm-dd HH24:MI:SS’) from dual; –加1小时
select sysdate,to_char(sysdate+1/24/60,’yyyy-mm-dd HH24:MI:SS’) from dual; –加1分钟
select sysdate,to_char(sysdate+1/24/60/60,’yyyy-mm-dd HH24:MI:SS’) from dual; –加1秒

1.当时间字段是字符类型时,如cssendtime,做法:加1小时
select to_char(to_date(cssendtime,’yyyy-mm-dd hh24:mi:ss’)+1/24,’yyyy-mm-dd hh24:mi:ss’) from cssf_flow_order order by time_stamp desc;
2当时间字段是Date类型时,如sysdate,做法:加1小时
select to_char(sysdate + 1/24,’yyyy-mm-dd hh24:mi:ss’) from dual
加一分钟
select to_char(sysdate + 1/(24*60),’yyyy-mm-dd hh24:mi:ss’) from dual

4.case when 和 select case when

CASE sex
WHEN ‘1’ THEN ‘男’
WHEN ‘2’ THEN ‘女’
ELSE ‘其他’ END

–Case搜索函数
CASE WHEN sex = ‘1’ THEN ‘男’
WHEN sex = ‘2’ THEN ‘女’
ELSE ‘其他’ END

mysql中group by和order by同时使用无效的替代方案
group_concat(
union all

5.sql中自连接的使用
作用: 解决了列与列之间的逻辑关系问题,准确的讲是列与列之间的层次关系。
SELECT FIRST.CNumber, SECOND.PCNumber
FROM Course FIRST, Course SECOND
WHERE FIRST.PCNumber=SECOND.CNumber;
查询的结果,就应该是FIRST表中的课程号CNumber和该课程号所对应的间接先修课课程号。
。当所要查询的信息都出于同一个表,而又不能直接通过该表的各个列的直接层次关系得到最终结果的时候,那么应该考虑使用表的自连接查询。
一、对公交线路表route进行自连接。
SELECT * FROM route R1, route R2
WHERE R1.num=R2.num AND R1.company=R2.company
我们route表用字段(num, company)来进行自连接. 结果是什么意思呢?
你可以知道每条公交线路的任意两个可联通的车站。
二、用stop字段来对route(公交线路表)进行自连接。
SELECT * FROM route R1, route R2
WHERE R1.stop=R2.stop;

例如,任意两个站点之间如何换乘。
SELECT R1.company, R1.num
FROM route R1, route R2, stops S1, stops S2
WHERE R1.num=R2.num AND R1.company=R2.company
AND R1.stop=S1.id AND R2.stop=S2.id
AND S1.name=’Craiglockhart’
AND S2.name=’Tollcross’

猜你喜欢

转载自blog.csdn.net/beyondxiaohu15/article/details/80881954