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. pm升级到最新版本、指定版本

    npm 升级到最新版本 //linux下 npm install -g npm npm升级到指定版本 //比如升级到5.6.0 npm install -g npm@5.6.0

  2. Java_jdbc 基础笔记之十四 数据库连接(元数据)数据库信息及连接信息

    public class MetaDatatest { /** * DatabaseMetaData 是描述 数据库的元数据对象 可以由Connection得到 */ @Test public voi ...

  3. ukulele弹奏模拟器v1.0(待完善)

    写在前面 最近听beyond乐队的<灰色轨迹>听上瘾了,300多遍,震惊!!尤其喜欢最后一分半钟的吉他solo,真可谓吉他没有酒,依然让我醉如老狗.. 翻了翻网上的视频,瞬间觉得单身20年 ...

  4. android -------- SHA 加密算法

    安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法.能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的 ...

  5. TypeScript 菜鸟教程

    非常好的Js教程,web api,canvas API教程 https://wangdoc.com/ 语法基础 https://www.runoob.com/typescript/ts-install ...

  6. matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象

    一起来学matlab-matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matl ...

  7. RSA 系统找不到指定的文件

    未测试 System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 改为 C ...

  8. Legacy和UEFI,MBR和GPT的区别

    Legacy(历史的,遗留的,传统的)和UEFI指的是系统引导方式(Legacy为传统BIOS,UEFI为新式BIOS),MBR和GPT指的是磁盘分区表类型. 一般情况下都是Legacy+MBR, U ...

  9. ObjectARX创建带文字的线型实例代码

    AcDbLinetypeTable* pLinetypeTable=NULL; Acad::ErrorStatus es = acdbHostApplicationServices()->wor ...

  10. DotNetty是微软的Azure团队,使用C#实现的Netty的版本发布

    DotNetty是微软的Azure团队,使用C#实现的Netty的版本发布 Netty(DotNetty)原理解析 一.背景介绍 DotNetty是微软的Azure团队,使用C#实现的Netty的版本 ...