ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
> #### *MySQL一些常用查询技巧* 查询每个班有多少人,如果没有人的班级显示无 ``` SELECT IF (COUNT(u.class_id),COUNT(u.class_id),'无') AS num,c.cname FROM `class` AS c LEFT JOIN `user` AS u ON u.class_id=c.id GROUP BY c.id; ``` order by可以进行多次排序,如 ``` select * from `user` order by class, order by score desc; ``` 查出每个班的及格人数与不及格人数,格式为:class、及格人数、不及格人数 对于这种矛盾体来说(也就是即要不格又要及格),主要用到的是if, 向表中添加一个字段 ``` alter table 表名 add 字段名 varchar(20) not null ``` 修改 ``` ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型定义 ``` 删除 ``` alter table 表名 drop column 字段名 ``` 清空表数据 ``` truncate 表名 ``` 复制表结构 ``` 1、CREATE TABLE 要复制的表名 SELECT * FROM 被复制的表名 WHERE 0;#结构与数据同时复制 2、create table 表名 like 要复制表名;#只复制表结构 insert into 表名 select * from 要复制的表名; #复制表内容 ``` > #分组后一般查询的字段只能是分组的字段 > #where中不能用聚合函数 > #在聚合函数中要用having代替where,having是在进行分组后筛选 ### **删除表中的重复记录,同时保留最小id的记录** ``` DELETE FROM tableName WHERE id IN ( SELECT b.id FROM ( SELECT max(id) AS id,title,count(*) AS repeat_num FROM tableName as a GROUP BY title HAVING repeat_num > 1 ) AS b ) ``` 查看慢查询日志(超过10秒的才会被记录) `show variables like '%quer%'` 查看一个数据库中是否有慢查询 `show status like '%quer%'` #查出文章表中所有的文章并显示属于哪个分类下的文章,如果有图片将图片显示出业,如果没有,则不显示 ``` SELECT b.id, b.title, a.cat_name, ifnull(c.file,'无图片') as image FROM article_category AS a LEFT OUTER JOINarticle AS b ON a.cat_id = b.cat_id LEFT OUTER JOIN file AS c ON b.image = c.number ``` ***** > 获取上一篇与下一篇实现思路 ##### 当前文章 `select * from dou_article where id = 232 limit 0,1; ` ##### 上一篇:原理:查出比当前文章id小于的所有文章id,然后再将查出来的所有id求出最大值 `select max(id) from dou_article where id < 232 limit 0,1; ` ##### 下一篇:原理:查出比当前文章id大于的所有文章的id,然后再将查出来的所有id求出最小值 `select min(id) from dou_article where id > 232 limit 1;` ***** >发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email) `select username from members order by posts desc limit 0,10` ***** > 根据分组选择所有分组下面的数据 在mysql中如果用group by进行分组,选择的数据只包含了第一条,如果选择所有的数据,可以用mysql的一个函数来选取,group_concat() `select username from members order by posts desc limit 0,10`