MySQL-查询数据操作(DQL)

  • SELECT查询格式说明
SELECT select_expr [,select_expr...]
[
FROM tnl_name
[WHERE 条件]
[GROUP BY {col_name|position} [ASC|DESC], ... 分组]
[HAVING 条件 对分组结果进行二次筛选]
[ORDER BY {col_name|position} [ASC|DESC], ... 排序]
[LIMIT 限制条数]
]

数据库:cms
数据表:cms_admin cms_cate cms_news cms_user provinces

  • –查询全部
SELECT * FROM user;
SELECT user.* FROM user;	#查询表user的所有数据
  • –查询字段
SELECT id,username FROM cms_admin;
  • –给表名起别名
SELECT id,username FROM cms_admin AS a;
SELECT id,username FROM cms_admin;

SELECT a.id,a.username,a.email,a.role FROM cms_admin AS a;
  • –给字段起别名
SELECT a.id AS '编号',username AS '用户名',email AS '邮箱',role AS '角色' FROM cms_admin;
  • –表别名和字段别名结合起来
SELECT a.id AS i,a.username AS u,a.email AS e,a.role AS r FROM cms_admin AS a;
  • –WHERE条件
  • –指定范围 BETWEEN AND NOT BETWEEN AND
  • –查询编号3~10之前的记录
SELECT * FROM cms_user WHERE id BETWEEB 3 AND 10;
SELECT * FROM cms_user WHERE id NOT BETWEEB 3 AND 10;
  • –指定集合 查询编号为1,3,5,7,9,11,100的记录
SELECT * FROM cms_user WHERE id IN(1,3,5,7,9,11,100);
SLEECT * FROM cms_user WHERE proId IN(1,5);
SELECT * FROM cms_user WHERE username IN('zhao','qian','sun');
  • –匹配字符

–模糊查询:
%:代表0个一个或者多个任意字符;
_:代表1个任意字符;

SELECT * FROM cms_user WHERE username LIKE '%天%';
SELECT * FROM cms_user WHERE username LIKE '张%';
  • –查询用户名为3位的记录
SELECT * FROM cms_user WHERE username LIKE '___';

SELECT * FROM cms_user WHERE username LIKE '_I%';
  • –查询用户名为wang并且密码为tian的用户
SELECT * FROM cms_user WHERE username='wang' AND password='tian';
  • –查询编号大于等于3并且年龄不为NULL的用户
SELECT * FROM cms_user WHERE id>=3 AND age IS NOT NULL;
  • –查询编号大于等于3并且年龄不为NULL的用户并且proId等于3
SELECT * FROM cms_user WHERE id>=3 AND age IS NOT NULL AND proId=3;
  • –查询编号在5~10且用户名为4位的用户
SELECT * FROM cms_user WHERE id BETWEEN 5 AND 10 AND username LIKE '____';
  • –查询用户名以张开头,或者是用户所在省份为2,4的记录
SELECT * FROM cms_user WHERE username LIKE '张%' OR proId IN(2,4);
  • –分组 GROUP BY
SELECT * FROM cms_user GROUP BY proId;
SELECT * FROM cms_user GROUP BY sex;
  • –按照多个字段分组;先按照proId分,在组内按照sex分
SELECT * FROM cms_user GROUP BY proId,sex;
  • –GROUP BY配合GROUP_CONCAT()得到分组详情
  • –查询id,sex,用户名详情,按照性别分组
SELECT id,sex,GROUP_CONCAT(username) FROM cms_user GROUP BY sex;
  • –查询proId,性别详情,注册时间详情,用户名详情,按照proId分组
SELECT proId,GROUP_CONCAT(username),GROUP_CONCAT(sex),GROUP_CONCAT(regTime) FROM cms_user GROUP BY proId;
  • –GROUP BY配合聚合函数COUNT() MAX() MIN() AVG() SUM()
  • –查询编号,sex,用户名详情以及组中总人数按照sex分组
SELECT id,sex,GROUP_CONCAT(username) AS users,COUNT(*) AS totalUsers FROM cms_user GROUP BY sex;
  • –统计表中所有记录
SEELCT COUNT(*) AS totalUsers FROM cms_user;
SEELCT COUNT(id) AS totalUsers FROM cms_user;
  • –COUNT()函数不统计NULL值
SELECT COUNT(age) AS totalUser FROM cms_user;
  • –查询编号,性别,用户名详情,组中总人数,组中最大年龄,组中最小年龄,平均年龄,以及年龄总和按照性别分组
SELECT id,sex,
GROUP_CONCAT(username),
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS ave_age,
SUM(age) AS sum_age
FROM cms_user
GROUP BY sex;
  • –GROUP BY配合 WITH ROLLUP 记录上面所有记录的总和
SELECT id,sex,
GROUP_CONCAT(username),
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS ave_age,
SUM(age) AS sum_age
FROM cms_user
GROUP BY sex WITH ROLLUP;
  • –HAVING 子句对分组结果进行二次筛选
  • –查询性别,用户名详情组中总人数,最大年龄,年龄总和,按照性别分组
SELECT sex,
GROUP_CONCAT(username) AS users,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
SUM(age) AS sum_age
FROM cms_user
GROUP BY sex;
  • –查询组中人数大于2的;对上一条sql结果进行二次筛选
SELECT sex,
GROUP_CONCAT(username) AS users,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
SUM(age) AS sum_age
FROM cms_user
GROUP BY sex
HAVING COUNT(*) > 2;

SELECT sex,
GROUP_CONCAT(username) AS users,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
SUM(age) AS sum_age
FROM cms_user
GROUP BY sex
HAVING COUNT(*) > 2 AND MAX(age) > 60;

SELECT sex,
GROUP_CONCAT(username) AS users,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
SUM(age) AS sum_age
FROM cms_user
WHERE id >= 2
GROUP BY sex
HAVING COUNT(*) > 2 AND MAX(age) > 60;
  • –ORDER BY 对查询结果进行排序

    DESC 降序,ASC 升序

SELECT * FROM cms_user ORDER BY id DESC;
SELECT * FROM cms_user ORDER BY age ASC;
  • –按照年龄升序,id降序排列
SELECT * FROM cms_user ORDER BY age ASC,id DESC;
  • –取随机数
SELECT * FROM cms_user ORDER BY RAND();
  • –LIMIT 限制查询结果显示条数

    LIMIT 显示条数
    LIMIT 偏移量,显示条数 #实现分页显示

SELECT * FROM cms_user LIMIT 5;

SELECT * FROM cms_user LIMIT 1;
SELECT * FROM cms_user LIMIT 0,1;
  • –总结查询sql
SELECT id,sex,age,GROUP_CONCAT(username),
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVE(age) AS ave_age,
SUM(age) AS sum_age
FROM cms_user
WHERE id >= 1
GROUP BY sex
HAVING COUNT(*) >= 2
ORDER BY age DESC
LIMIT 0,3;

猜你喜欢

转载自blog.csdn.net/DMcomming/article/details/86037042