【MySQL】DQL数据查询语言(非常适合MySQL初学者学习)

‍作者名称:DaenCode
作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
人生感悟:尝尽人生百味,方知世间冷暖。
所属专栏:重温MySQL


【MySQL】DQL数据查询语言(非常适合MySQL初学者学习)_第1张图片


文章目录

  • Where条件查询
    • 简单查询
    • 精确条件查询
    • 范围查询
    • 离散查询
    • 模糊条件查询
    • 聚合查询
    • 去重查询
  • group by分组查询
  • having筛选查询
  • order by排序查询
  • limit限制查询
  • exists子查询
  • 左连接与右连接查询
    • 左连接
    • 右连接
  • 内连接与Union查询
    • 内连接
    • Union查询
  • 写在最后


Where条件查询

简单查询

例1:查询用户表中的所有数据

select * from sys_user;

例2:查询用户表中的userid,username

select user_id,user_name from sys_user;

精确条件查询

例1:查询用户表中user_name为‘李学生’的数据。

select * from sys_user WHERE user_name='李学生';

例2:查询用户表中user_id不为102的数据。

select * from sys_user where user_id!=102;
select * from sys_user where user_id<>102;

范围查询

例:查询用户表中age在10~30岁之间的用户。

select * from sys_user where age between 10 and 30;

离散查询

例:查询用户表中age在11,23,20,18这些中的用户数据。

select * from sys_user where age in(11,23,20,18);

模糊条件查询

例:查询用户表中user_name中包好‘王’的数据。

select * from sys_user where user_name like '王%';

聚合查询

  • 查询数据条数:count(*)、count(1)、count(列名)
select count(*) from sys_user;
select count(1) from sys_user;
select count(id) from sys_user;
  • 查询总和:sum(列名)
//查询成绩总和
select sum(grade) from score;
  • 查询平均数:avg(列名)
//查询成绩平均数
select avg(grade) from score;
  • 查询最大值:max(列名)
//查询成绩最大值
select max(grade) from score;
  • 查询最小值:min(列名)
//查询成绩最小值
select min(grade) from score;
  • 拼接字符串、列名:concat(字符串1/列名1,字符串2/列名2)
--连接两个字符串,并将name最为列名
SELECT concat('ab', 'cd') as name;
--连接sys_user表中user_id,user_name两个列值,
--并将id_name作为新列名
select concat(user_id,user_name) as id_name from sys_user
--连接字符串和列值
SELECT CONCAT('userID为: ', user_id) AS id FROM sys_user;

去重查询

例:查询角色表中的角色名称,并去重。

select distinct(role_name) from role;

group by分组查询

  • 将行按字段分组,常用于统计场合
//统计男女性别的人数
select count(*),sex from sys_user group by sex;

having筛选查询

  • 对查询结果进行筛选,位于group by之后。
--统计出用户表中性别人数大于4的性别
SELECT count(*),sex FROM sys_user group by sex 
having count(*)>4

order by排序查询

  • 对查询最终结果排序,位于having之后。
--从角色表中统计角色名称数量大于2的角色并升序排序
select id,role_name,count(*) as 总数 
from role group by id,role_name having 总数>=2
order by id asc;

limit限制查询

  • 位于order by之后,语法格式为limit m,n。m为起始索引0,n为条数。
select * from sys_user limit 4,5;

exists子查询

  • exists后的子查询若查询到数据则返回true,否则返回false。
--查询出公司有员工的部门的详细信息
select * from dept a where exists (select 1 from employee b where a.deptnu=b.deptnu);
select * from dept a where not exists (select 1 from employee b where a.deptnu=b.deptnu);

左连接与右连接查询

左连接

  • 左连接又称为左外连接,left join 是left outer join的简写。左表的记录将会全部表示出来, 而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
  • 语法格式:left join 表名 on 条件 / left outer 表名 join on 条件
---:列出部门名称和这些部门的员工信息,同时列出那些没有的员工的部门
select a.dname,b.* from dept a left join employee b on a.deptnu=b.deptnu;

右连接

  • 右连接又称为右外连接,right join 是right outer join的简写。右表的记录将会全部表示出来, 而左表只会显示符合搜索条件的记录。左表记录不足的地方均为NULL。
---:列出部门名称和这些部门的员工信息,同时列出那些没有的员工的部门
select b.dname,a.* from employee a right join dept b on b.deptnu=a.deptnu;

内连接与Union查询

内连接

  • 获取两个表中字段互相匹配的记录。
  • 语法格式:INNER JOIN 表名 ON 条件
---查出员工张三的所在部门的地址
select a.addr from dept a inner join employee b on a.deptnu=b.deptnu and b.ename='张
三';

Union查询

  • 查询语句的查询结果结合在一起。
  • 语法格式:… UNION … (去除重复) /… UNION ALL …(不去重复)。
  • 注意事项1:select语句的查询结果的“字段数”必须一致并且字段类型也要一致。
  • 注意事项2:用到order by排序时,需要加上limit(最大条数),需要子句用括号括起来。

写在最后

最后感谢大家的阅读,欢迎大家在评论区讨论mysql相关知识点。最后您的点赞、收藏是我更新优质好文的最大动力。


【MySQL】DQL数据查询语言(非常适合MySQL初学者学习)_第2张图片

你可能感兴趣的:(重温MySQL,mysql,数据库)