MySql数据库_DQL

格式:

        select 列名*N from 表名 where 查询条件1 and/or 查询条件2 group by 列 having 分组条件 Order by 排序

规则:

        sql除查询条件外,大小写都可以

        从始至终,要保持大小写风格

        “--”属于SQL语句的注释

        所有查询条件为字符串时,需要用"进行修饰,否则就会当作列名进行解析

查询列

-- 查询表中的一列信息
select name from user

-- 查询表中的多列信息
select name , age from user

-- 查询表中的所有列信息
select * from user

为列取别名查询

--别名可以使用 '' 括起来,也可以不使用 '' 括起来

-- 查询时,为列取别名
select name 姓名 from user

-- 查询时,为多列分别取别名
select name 姓名 , age 年龄 from user

拼接查询

-- 查询多列信息进行拼接
select CONCAT(name,'的年龄:',age) 学员年龄 from user;

条件查询

普通条件查询:

        = 、> 、<、!=、<>、>=、<=、between  num1 and num2



-- 单一条件查询 1
select * from user where id = 100;

-- 单一条件查询 2
select * from user where job = 'monitor';

-- 

范围内查询

        IN/NOT IN

-- 属于范围内的查询
select * from user where id IN (10,20,30,40);

-- 不属于范围内的查询
select * from user where id NOT IN (50,100,200);

空值查询

-- 空值查询
select * from user where favorite is null;

-- 非空查询
select * from user where favorite is not null;

模糊查询

         like

-- % 代表任意位置的任意数量字符
select * from where name like '%g';

-- _ 代表任意字符的一次
select * from where name like '_o';

多条件连接查询

        AND / OR

-- and / or
-- 即满足name,又满足id
select * from user where name = 'LNB' and id = 100;

--只要name或id满足一个
select * from user where name='wc' or id = 300;

结果排序

        asc是升序排列(默认),使用desc可以降序排列

        默认以 “主键” 进行排序

单列:

-- 指定以某个列 升/降排序
select * from user order by age 

多列:

-- 指定多列进行排序
-- 先安装最先列进行排序后,在按照后续列进行排序
select * from user order by job,age;

-- 指定列数进行排序
-- 列数必须小于等于 所查询除的列
-- 按照第一列进行排序,即按照name进行排序
select name , age from user order by 1;

分页查询

        控制一页显示的数据

-- 指定每次查询前  n  行
select * from user LIMIT 4;

-- 查询第 M 页 , 每页显示 N 个
select * from user LIMIT 0,4;    -- 查询第一页,每页显示4行
select * from user LIMIT 4,4;    -- 查询第二页,每页显示4行

分组

        按照某一个条件进行分组,每一组返回对应的结果

        group by 可以对指定的列进行分组,列尽量有相同的

        having 可以对分组之后的数据进行过滤,所以能出现在having中的比较项一定是被分组的列或是组函数

        底层

                where称之为行级过滤,处理的是表中每一行数据的过滤

                having称之为组级过滤,处理的是分组之后的每一组数据

                能使用where的,尽量不要使用having

-- 按照cname进行班级分组,在每个组中列出分数最高的分值
select cname,max(grade) from class group by cname;

-- 按照cid进行分组后,并按照cname进行分组,选出平均值大于70的班级
select cid cname from class group by cid, cname having avg(grade)>70;


-- 查询哪个班级的平均分超过80
select cname,avg(grade) from class group by cname having avg(grade)>80;

-- 查询cid为10,20的平均成绩(行级过滤  优于  组级过滤)
-- 行级过滤
select cid, avg(grade) from class where cid in(10,20) group by cid;

-- 组级过滤
select cid, avg(grade) from class group by cid having cid in(10,20);

单表关键字执行顺序

select:查看哪些列的数据

from:表中获取数据

where:获取数据时进行行级过滤

group by:对数据进行分组处理,一组获取对应的结果

having:组级过滤,必须时分组条件或是组函数

order by:排序(asc、desc)

执行顺序:frome - where - group by - having - select - order by

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值