mysql的dql_MySQL_DQL操作

DQL(Data Query Language)简单的来说就是数据的查询语言。

1.最简单的查询(显示表中的所有信息)

语法: select * from 表名;

1a62fcef277cd69a6740ee4eef1566be.png

2.普通查询

语法: select 字段列表 from 表名列表 where 条件列表;

注意:这些列表是可以有多个的意思,用逗号隔开,最后一项不加逗号。

这是表的最初始状态

3afc7e3be8b841c5fb171caec6dd143c.png

如果想查询11岁的男生,则输入 SELECT age FROM tb1 WHERE sex='男';

23b18229380156b45e2367b6cf15e545.png

创建一个新表

ebb1952d23bbf4f599d005e35d5a3c9d.png

3.基础查询

语法 select 列名1,列名2 from 表名;

注意:查询所有的用*(不推荐),或者在select后面写下全部列名;

0390abee047d19592720326266d018c7.png

再次查询地址

4d6ee689b910a54c0d2a127b9af105d0.png

发现有一点问题,如果只显示地址,那么重复的地址被多次显示出来,那么就可以用去重查询。

4.去重查询

语法: select distinct 列名 from 表名;

6d26769fa5042d1b99df67e94a91e188.png

发现重复的地址全部只留下来了一个;

注意:在向表中插入数据的时候可能会遇到空字符,这样就会导致多个相同的地址存在,这是检查一下自己的代码。

5.利用表中的数据进行计算查询

如果想知道上表的数学英语成绩的和

语法: select 列名1,列名2,列名3  【想要利用列名计算的表达式(支持普通的四则运算)】 from 表名;

a1c21c734453597474807f42d43f40f9.png

发现可以算出来成绩的和,但是列名不合适,并且当英语为NULL的时候,总分也是NULL,本应该是,数学成绩,下面这两个问题一一解决,

(1)算出数据改名

语法:select select 列名1,列名2,列名3  【想要利用列名计算的表达式(支持普通的四则运算)】 as 新表名 from 表名;

注意:as可有可无;

329f990343e6dff67d9fecb40c9ee950.png

(2)关于NULL的问题

分析,正常情况下,如果英语旷考,那么成绩应该为0

语法:select select 列名1,列名2,列名3  【想要利用列名计算的表达式(支持普通的四则运算)】 as 新表名 from 表名;只需要在表达式里加上ifnull方法;

注意:ifnull方法有两个参数前面是可能会出现NULL值得列名,后面是如果遇到NULL则把他的值改为什么,例如下面例子 SELECT NAME,math,english, math+IFNULL(english,0) AS 总分 FROM tb2;

735c87991b254a69a1e69d3de61a7111.png

发现完美的解决了上面的两个问题。

6.条件查询,其中关键字分别由,<=,>=,=,<>,between and,in,like,is NULL,&&(and),||(or),!。

(1)想要查询年龄等于23的人

语法:SELECT * FROM 数据库 WHERE 条件;

注意:在java中如果用iF判断相等需要用==,而在sql中只需要一个=;

dbc88bc5b61414b60227878d068ec635.png

(2)想要查询年龄不为23 的人SELECT * FROM tb2 WHERE age !=23;

be5ec426fba1e38f58833f390a0501a6.png

可见没有年龄等于23的人,还有一种方法,用到MySQL专有的不等号<>;

6d7d3798effb95f085b5af016199bad2.png

可见结果一模一样

(3)查询一个范围内的人

e461e49e9cb062b5e4699c28924f8437.png

当然可以用and这两个是一个意思,还可以用另一种方法,那就是between and

注意:两个边界都包含及大于等于和小于等于

d70f5f672991b27306b333460913a4b7.png

结果一模一样。

(4)想查询年龄为23,48,45的,人都比较懒,不想写三行,于是还有一种简便方法。那就是in();

77f3e9060607fc14b595c9fcff7e03c4.png

(5)想要查询英语旷考的人,正常的想法就是判断english=null;那么对不对呢?

b9901b8e416114809e2fd9dddb96d691.png

发现查询不到,也就是不能用等号判断是否为NULL,那就要用is;

43ea6e4d35513fcf1a78d902f69a9676.png

发现查到了英语缺考的人。

(6)想要模糊查询;

语法like 条件用''括起,然后有两种字符:%任意个字符,_一个字符,想查,第二个字为三的人,

e0f45017ebbc8268fda4ccbcdaf0165d.png

如愿以偿;

7.排序查询

语法 select * from 表名 order by 排序字段1 排序条件1,排序字段2 排序条件2;

注意:如果有多个条件,当前面的值一样,才会判断后面的条件,并且排除了非空的情况,即不算NULL值;如果不写递增递减,则默认递增(ASC),递减(DESC)。

cf85733a353af8ced4f7ba05660bcc7c.png

发现,已经按我们的想法排序出来了

8.聚合函数:将一列数据作为一个整体计算

语法 select 聚合函数 from 表名;结果会呈单行单列的方式显示,其中聚合函数有五个,分别为count()计算个数,max()求最大值,min()求最小值,sum()求和,avg()求平均值,在括号里面写要计算你的列名。仅用算英语总分为例

90f12d7bc504ffefd0ef989ac66507ff.png

另外还有一个count方法需要特殊强调,如果用count(*),在所有列中,只要有一个列没有NULL那么就会成为一条记录

662ec638d72d115efd48dfa93fcbaefa.png

9.分组查询

语法: SELECT 列名或者聚合函数 from 表名 group by 列名。

注意:分组之后查询字段为分组字段 或者聚合函数,其他无意义

aaa53ec90ec27d880011c02c10bba38b.png

(1)低分不参与分组,限定分组条件。

注意:分组之后人数要大于两个人,即count(*)的值大于2

cb73e2862901ca0fe8c92f9f389f8538.png

c1d664a5d36da85ddb5ef686b127858e.png

注意:having和where 的区别:

(1)作用位置不同:where是分组之前限定,不参与分组。而having是分组之后限定,如果不满足条件,则不会被查询出来

(2)where后不可以跟聚合函数,而having后面可以跟聚合函数。

10.分页查询

语法:开始的索引,每页查询的条数。select * from 表名 limit 开始的索引,每页查询条数。

注意:开始的索引=(当前页码-1)*每页显示条数。分页操作是一种"方言",也就是说只能在MySQL中使用,别的数据库就不可以用limit关键字。

6d9c511d17052d52dfebc71c41c69bfb.png

ece0c628311fb12db0e521d3b27f5a4d.png

可以发现,数据每页四个在页面中呈现出来,当然最后一页最多有四个数据,最少一个数据。

来源:oschina

链接:https://my.oschina.net/u/4265634/blog/4116631

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值