DQL 查询表中的数据:查询语句(最复杂的语句)不会对数据库中的数据进行修改,只是一种显示数据的方式

语法格式:

select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定

一、基础查询

  1、查询表所有行和列的数据,使用*表示所有列

select * from 表名;

  2、查询指定列

select 字段名1,字段名2,字段名3,...  from 表名;

  3、指定列的别名进行查询

    使用别名的好处:显示的时候使用新的名字,并不修改表的结构

    ① 对列指定别名

SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名;

    ② 对列和表同时指定别名

SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;

    表使用别名的原因,用于多表查询操作。

     注意:as 关键字可以省略,省略后用空格分隔即可。

  3、清除重复值

     查询指定列并且结果不出现重复数据

SELECT DISTINCT 字段名 FROM  表名;

  4、查询结果参与运算

    ① 某列数据和固定值运算

SELECT 列名 1 + 固定值 FROM 表名;

    ② 某列数据和其他列数据参与运算

SELECT 列名 1 + 列名 2 FROM 表名;

           注意:

      •  参与运算的必须是数值类型
      • 如果两列中有一列为null,null参与的运算,计算结果为null,所以需要用到 ifnull()函数。
      • ifnull(表达式1,表达式2) 表达式1:哪个字段需要判断是否为 null;表达式2:如果该字段为 null 后的替换值。

    Demo:

select math+ifnull(english,0) as 总成绩 from student;

  

二、条件查询

  条件查询是对记录指定查询条件,对记录进行过滤。

  语法格式:

SELECT 字段名 FROM 表名 WHERE 条件;

  1、使用比较运算符

    比较运算符:>、<、<=、>=、=、<> (<>在 SQL 中表示不等于,在MySQL中可以使用 != 来表示)

    Demo:

select * from student3 where age <> 20;
select * from student3 where age != 20; // 查询 age 不等于20岁的学生

  2、使用范围查询

    关键字:between... and...(包含边界值)

    Demo:

select * from student where age between 20 and 23;
select * from student where ange >= 20 and age<=23; // 两者相等

  3、使用 in(集合)

    in 里面的每个数据都会作为一次条件,只要满足条件的就会显示。

SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2...);

    Demo:

select * from student where age [not] in(18,20,23);     // not 为可选值

  4、使用模糊查询(Like 关键字)

    Like 表示模糊查询,其中有两个通配符:"%" 匹配任意多个字符串;"_" 匹配任意一个字符。

SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';

    Demo :

select * from student where name like '%枫%';        // 查询姓名中包含"枫"字的学生

  5、使用逻辑运算符

    逻辑运算符:

    

逻辑运算符 说明
and 或 && 与,SQL中建议使用前者,后者并不通用
or 或 || 或,
not 或 ! 非

     Demo:

select * from student where age>18 or sex='男';

  6、查询某一列为 Null 的值

     Demo :

SELECT * FROM student WHERE english IS (NOT) NULL;    // 判断英语成绩不为 null的学生

    注意:对 null 的值不能使用 = (!=)进行判断。

三、排序查询

  通过 order by 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)

  语法格式:

SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];

   ASC:升序,默认值;

  DESC:降序

  1、单列排序

    单列排序是只按某一个字段进行排序。

    Demo:

select * from student order by age desc;

  2、组合排序

    组合排序是同时对多个字段进行排序,如果第一个字段相等,则按第二个字段排序,依次类推。

SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];

          Demo:

select * from student order by age desc, math asc;  // 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序

四、聚合函数

  使用聚合函数可以进行纵向查询,可以对一列的值进行计算,然后返回一个结果值,聚合函数会忽略空值 null。

  1、五个聚合函数

      

SQL 中的聚合函数 作用
max(列名) 求这一列的最大值
min(列名) 求这一列的最小值
avg(列名) 求这一列的平均值
count(列名) 统计这一列有多少条记录
sum(列名) 对这一列求总和

  2、语法格式

SELECT 聚合函数(列名) FROM 表名;

  Demo:

select count(*) as 总人数 from student;

    注意:聚合函数对于 NULL 的记录不会统计,如果统计个数则不要使用有可能为 null 的列,如果需要把 null 也统计进去需要使用 IFNull() 函数。

  语法格式:

IFNULL(列名,默认值) 如果列名不为空,返回这列的值。如果为 NULL,则返回默认值

  Demo:

select count(ifnull(id,0)) from student;

  

五、分组查询

  分组查询是指使用 Group By 语句对查询信息进行分组,相同数据作为一组。

  语法格式:

SELECT 字段 1,字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];

    group by 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处,分组的目的就是为了统计,一般分组会和聚合函数一起使用。

  注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的。

  Demo:

select sex, count(*) from student group by sex;     // 对学生表按照性别分组,并统计每组人数

  having 和 where 的区别

子名 作用
where 子句 1) 对查询结果进行分组前, 将不符合 where 条件的行去掉, 即在分组之前过滤数据, 即先过滤再分组。
2) where 后面不可以使用聚合函数
having 子句 1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。
2) having 后面可以使用聚合函数

  

六、分页查询

     limit 是限制的意思,所以 limit 的作用就是限制查询记录的条数。

   语法格式:

SELECT *|字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子句][LIMIT 子句];

    LIMIT 语法格式:

LIMIT offset,length;

     offset:起始行数,从 0 开始计数,如果省略,默认就是0

   length:返回的行数

   Demo:

select * from student3 limit 10,5;

    注意:

    ① 如果第一个参数是 0 可以省略写

    ② 如果最后一页不够显示的条数,有多少显示多少

    ③ 显示记录公式:开始的索引 = (当前的页码 - 1)* 每页显示的条数

    ④ limit 是一个“MySQL”的方言(只适用于MySQL中)

七、DOS 命令窗口操作数据乱码问题的解决

  1、使用 DOS 命令进行 SQL 语句操作可能会出现中文乱码现象

    

  2、乱码产生的原因

    

  3、查看 MySQL 内部设置的编码

    查看包含 character 开头的全局变量

show variables like 'character%';

     执行效果:

  4、解决方法

    修改 client、connection、results 的编码为 GBK,保证和 DOS 命令行编码保存一致。

单独设置 说明
set character_set_client=gbk; 修改客户端的字符集为 GBK
set character_set_connection=gbk; 修改连接的字符集为 GBK
set character_set_results=gbk; 修改查询的结果字符集为 GBK

     同时设置三项

set names gbk;

    注意:退出 DOS 命令行就失效了,需要每次都配置

DQL 查询表中的数据的更多相关文章

  1. (笔记)Mysql命令select from:查询表中的数据(记录)

    select from命令用来查询表中的数据. 1) 查询所有行命令格式: select <字段1, 字段2, ...> from < 表名 > where < 表达式 ...

  2. oracle 查询表中重复数据

    select * from tablename where id in (select id from tablename group by id having count(id) > 1)

  3. sql查询表中重复数据个数

    select train_code,count(1) from tb_ask_trainbodyroadtrain group by train_code having count(1) >1

  4. mysql数据库查询表中相邻数据的差值

    select a.time ,a.sum - b.sum sum,a.time,b.time from ( rownum,) t order by time) a, ( rownum ,) t ORD ...

  5. 查询和删除表中重复数据sql语句

      1.查询表中重复数据.select * from peoplewhere peopleId in (select   peopleId   from   people   group   by   ...

  6. 针对Oracle数据库表中的数据的常见操作

    1.查询表中所有数据 select * from 表名; 例:select * from stu; 2.查询的同时修改表中数据 select * from 表名  for update; 例:sele ...

  7. oracle 查询及删除表中重复数据

    create table test1( id number, name varchar2(20) ); ,'jack'); ,'jack'); ,'peter'); ,'red'); insert i ...

  8. 查询和删除数据表中反复数据的sql

    1.查询表中反复数据. select * from people where peopleId in (select   peopleId   from   people   group   by   ...

  9. DQL:查询表中数据

    1. 基础查询 (1) 查询整表 SELECT * FROM 表名; -- 不推荐使用"*",不方便阅读 (2) 选择性查询 SELECT 列名,列名,列名 FROM 表名; (3 ...

随机推荐

  1. 第09组 Alpha冲刺(4/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...

  2. IDEA将指定package(指定文件)打成jar包

    写在前面 真的是好记性不如烂笔头 需求 将项目中包名为org的package打成jar包 步骤 1.选择Artifacts>绿色+号>JAR>Empty name自定义, 我这里命名 ...

  3. Android 解读Event和Main Log

    1 Android P EventLogTags文件 Android P 9.0.0 所有EventLogTags文件List: system/bt/EventLogTags.logtags syst ...

  4. ROS tf-深入Time和TF

    博客转载自:https://www.ncnynl.com/archives/201702/1313.html ROS与C++入门教程-tf-深入Time和TF 说明: 介绍使用waitForTrans ...

  5. apicloud打包成apk

    前言:本文是打包vue项目,其他项目也是这样打包 页面的开发过程跟我们平时开发一样,利用vue把页面全部完成,最后进行npm run build将项目打包. 接下来就是apicloud打包的过程,首先 ...

  6. JMeter 使用 http长连接的方法

    前言 如果需要在JMeter通过http长连接发送请求,首先需要选择了Use KeepAlive 长连接协议,虽然默认是勾选的,但也需要确认一下. 除了选择了Use KeepAlive 长连接协议,还 ...

  7. linux查找文件利器

    查找文件 比如:找nginx.conf配置文件 locate nginx.conf /usr/local/etc/nginx/nginx.conf /usr/local/etc/nginx/nginx ...

  8. sonar:默认的扫描规则

    https://blog.csdn.net/liumiaocn/article/details/83550309 https://note.youdao.com/ynoteshare1/index.h ...

  9. Procedural Mesh Component in C++:Getting Started

    转自:https://wiki.unrealengine.com/Procedural_Mesh_Component_in_C++:Getting_Started I create a simple ...

  10. Python和Java、PHP、C、C#、C++等其他语言的对比?

    1111 1.C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素.C++在这方面做了 ...