MySQL_DQL操作

Posted 宋泊然

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL_DQL操作相关的知识,希望对你有一定的参考价值。

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

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

语法: select * from 表名;

 

     2.普通查询

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

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

这是表的最初始状态

 

 

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

 

 创建一个新表

 

     3.基础查询

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

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

 

 再次查询地址

 

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

    4.去重查询

语法: select distinct 列名 from 表名;

 

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

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

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

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

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

 

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

(1)算出数据改名

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

注意:as可有可无;

 

 (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;

 

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

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

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

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

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

 

 

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

 

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

 

 可见结果一模一样

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

 

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

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

 

 结果一模一样。

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

 

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

 

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

 

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

(6)想要模糊查询;

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

 

 如愿以偿;

    7.排序查询

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

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

 

 

 

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

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

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

 

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

     9.分组查询

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

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

 

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

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

 

 

 

 注意:having和where 的区别:

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

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

 

    10.分页查询

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

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

 

 

 

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

 

以上是关于MySQL_DQL操作的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 协程Flow 操作符 ② ( 末端操作符 | collect 操作符 | reduce 操作符 | single 操作符 | first 操作符 | toList 操作符 )

jQuery操作元素属性操作样式操作样式类操作HTML代码以及其他操作 [学完你还不会吗]

Kotlin 协程Flow 操作符 ① ( 过渡操作符 | map 操作符 | transform 操作符 | 限长操作符 | take 操作符 )

Kotlin 协程Flow 操作符 ① ( 过渡操作符 | map 操作符 | transform 操作符 | 限长操作符 | take 操作符 )

C 语言结构体 ( 结构体变量内存操作 | 通过 “ . “ 操作符操作结构体内存空间 | 通过 “ -> “ 操作符操作结构体内存空间 )

赋值操作符比较操作符算术操作符逻辑操作符位域操作符