- 为查询结果中添加自定义的一列
SELECT id, title, 'haha' mark FROM course;
- 通过子查询出来的数据,作为一张表也可以join,多用于中间表,使用left join,这样把关联的和未关联的都查询出来了,比如
SELECT * FROM (
SELECT * FROM relation
) temp LEFT JOIN audio audio ON audio.id = temp.audio_id
ORDER BY temp.id DESC
批量更新条件查询出来的数据:
UPDATE audio SET is_delete = 1
WHERE id IN (SELECT * FROM (SELECT id FROM audio ORDER BY create_time DESC LIMIT 0,10) temp)
- 关于MySQL update 语句中concat 和 substring的应用:
substring(column_name,n) // 截取某一字段从第n个字符开始到结尾的字符串;
substring(column_name,m,n) // 截取某一字段从第m个到n个字符的字符串;
update table set column = concat(column, 'hahaha') // 把column中的数据后面加上'hahaha';
concat 起到连接字符串的作用,不过如果有一个为null,那么结果也为null;
- concat_ws 和group_concat
concat_ws(separator, str1, str2, column1, column2...) // 起到用指定分隔符分隔字符串/column的功能;
group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator '分隔符'] )
group_concat可以把同一列数据查询出为一行,并可以指定分隔符和排序,去重;
- mysql 查询中union 和 order by的使用
如果希望对整个查询出来的结果进行统一排序,那么可以不使用括号,只需要给后面的SQL语句添加排序
SELECT create_time, update_time FROM c2_course
UNION
SELECT create_time, update_time FROM c2_lesson ORDER BY create_time;
如果使用union去结合两个SQL语句查询出来的数据,如果两个SQL语句需要分别进行排序,那么必须使用括号
(SELECT * FROM table1 WHERE mem_id = 111725 ORDER BY lesson_id)
UNION
(SELECT * FROM table1 WHERE mem_id = 23507 ORDER BY lesson_id);
// 这种方式是不管用的,union语句中的order by 是不生效的,需要使用如下方式:
SELECT * FROM (SELECT * FROM table1 WHERE mem_id = 111725 ORDER BY lesson_id) a
UNION
SELECT * FROM (SELECT * FROM table1 WHERE mem_id = 23507 ORDER BY lesson_id) b;