MySQL数据库中SQL语句的基本使用(三)

本次主要讲解的是SQL语句的DQL(数据查询语言)操作,该操作不会该表数据表的数据和结构,而是返回客户端要求的数据集。查询数据的关键字为select。

1.SELECT(查询操作)的基本介绍

select的基本语法为:

SELECT
    [ALL | DISTINCT | DISTINCTROW ]
      [HIGH_PRIORITY]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr, ...
    [INTO OUTFILE 'file_name' export_options
      | INTO DUMPFILE 'file_name']
    [FROM table_references
    [WHERE where_definition]
    [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]
    [HAVING where_definition]
    [ORDER BY {col_name | expr | position}
      [ASC | DESC] , ...]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    [PROCEDURE procedure_name(argument_list)]
    [FOR UPDATE | LOCK IN SHARE MODE]]
  • select_expr为要查询的列名称
  • table_references 为要查询的表名
  • WHERE子句 条件语句
  • GROUP BY子句 对结果集进行分组
  • HAVING子句 对分组后执行的条件
  • ORDER BY子句 一般是对某项字段进行比较,对结果集进行排序 。默认升序ASC,降序DESC。
  • LIMIT 对结果进行限定
2. 基础查询
  • 查询所有列
以student表为例:

select * from student;

注:* 代表所有列

  • 指定列查询
查询name字段这一列的数据

select name from student;
3. 条件查询
  • 条件查询 在查询时需要添加 where子句,下面是where子句用到的关键字和运算符
=、!=、<>、<、<=、>、>=

BETWEEN...AND

IN(set)

IS NULL    IS NOT NULL

AND

OR

NOT

下面我将举例来说明这些关键字和运算符的用法:

这里写图片描述

上图为student表。

查找student表中id=1的记录,SQL语句如下:


select * from student where id = 1;

查找student表中年龄10-20之间的记录,SQL语句如下:

select * from student where age between 10 and 20;
或者
select * from student where age>=10 and age<=20;

查找student表中id为1、2、3的记录,SQL语句如下:

select * from student where id in(1,2,3);

查找student表中resume字段为null的记录,SQL语句如下:

select * from student where resume is null;

查找student表中name=’lee’并且age=18的记录,SQL语句如下:

select * from student where name = 'lee' and age = 18;

查找student表中name = lee或者age=18的记录,SQL语句如下:

select * from student where name = 'lee' or age = 18;

查找student表中resume字段值不为null的记录,SQL语句如下:

select * from student where resume is not null;
或者
select * from student where resume != null;
或者
select * from student where resume <> null;
或者
select * from student where not resume is null;
4.模糊查询

如果想要查询姓名中包含字母‘n’的记录时,需要使用LIKE关键字。字符匹配有两种方式:

  • % 匹配任何数目的字符,甚至包含零字符
  • _ 只能匹配任意一个字符

下面举例说明模糊查询的用法。

查找字段name 中包含字母‘n’的记录, SQL语句如下:


select * from student where name like '%n%';

查找name字段值为2个字符的记录(2个下划线),SQL语句如下:

select * from student where name like '__'; 
5.排序

看过之前的查询出的结果,显示是没有任何特定顺序显示的。如果需要某种特定的显示顺序,就要使用ORDER BY子句。下面我会举例说明:

查询所有学生记录,按照age的大小进行升序排序:

select * from student order by age asc;

asc 为升序也可以不加,默认为升序。降序为desc;

查询所有student的记录,按照id的大小进行降序排序:

select * from student order by id desc;

查询所有student的记录,age进行降序排序,如果age相同就按id的升序排序:

select * from student order by age desc ,id asc;
6.聚合函数

聚合函数是用来做纵向运算的函数:

  • COUNT():统计指定列不为null的记录函;
  • MAX():计算指定的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
  • MIN():计算指定的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
  • SUM():计算指定列的数值和,如果指定列的类型不是数值类型,那么计算结果为0;
  • AVG():计算指定列的平均值,如果指定列的类型不是数值类型,那么计算结果为0;

下面举一些简单的例子,来说明这些聚合函数的基本用法:

统计student表中的记录数:


select count(*) from student;

COUNT(*)比较特殊 ,会忽略每条记录是否存在NULL值。

统计student表中的记录中所用age值的总和:

select sum(age) from student;

统计student表所有记录中age的最大值:

select max(age) from student;

统计student表所有记录中age的最小值:

select min(age) from student;

统计student表所有记录中age的平均值:

select avg(age) from student;
7.分组查询

当需要分组查询时,需要使用GROUP BY子句。注:凡是和聚合函数同时出现的列名,都要求放在GROUP BY子句的后面。

student表中age>13通过学生id进行分组查询:

select * from student where age > 13 group by id;
8.HAVING子句

在SQL语句中添加HAVING子句是因为WHERE子句无法使用聚合函数。通过having子句对分组信息进行数据过滤。
having 和 where 子句的区别:

  1. having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
  2. having后面可以使用聚合函数,where后面不可以使用聚合函数。
9.LIMIT 方言

LIMIT 用来限定查询结果的起始行,以及总行数。

查询student表显示5条记录:


select * from student limit 5;

查询student表显示从3开始显示4条记录:

select * from student limit 3,4; 
10.查询书写顺序和执行顺序

查询语句书写顺序:

select - from - where - group by - having - order by - limit

查询语句执行顺序:

from - where - group by - having - select - order by - limit

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值