美文网首页
【SQL】(提升篇)单表查询:简单查询、条件查询以及高级查询

【SQL】(提升篇)单表查询:简单查询、条件查询以及高级查询

作者: Alcazar | 来源:发表于2019-07-26 17:35 被阅读0次

【插播】:【SQL】(基础篇):https://www.jianshu.com/p/b0d275039f72

关于单表查询

单表查询分为简单查询、条件查询以及高级查询三种,我将在下文中分别介绍一下。


简单查询

简单查询主要介绍以下三种。

(1)SELECT 语句的使用
SELECT
     [DISTINCT] *|{字段 名 1, 字段 名 2, 字段 名 3,…}
FROM 表 名
[WHERE 条件 表达式 1]
[GROUP BY 字段 名 [HAVING 条件 表达式 2]]
[ORDER BY 字段 名 [ASC| DESC]][LIMIT [OFFSET] 记录 数]
(2)查询所有字段

1、【结构】:

SELECT 字段 名 1,… 
FROM 表 名;

2、【结构】:

SELECT * 
FROM 表 名;
(3)查询指定字段

【结构】:

SELECT 字段 名 1, 字段 名 2,… 
FROM 表 名;

以下实例均基于此表数据


按条件查询

条件查询主要分为以下八种。

SELECT 字段 名 1, 字段 名 2,… 
FROM 表名 WHERE 条件 表达式

【实例】

SELECT stu_name FROM tb_student WHERE stu_no='20162154';
SELECT * FROM tb_student WHERE stu_no='20162154';
SELECT * FROM tb_student WHERE gender = 0;
 SELECT * FROM tb_student WHERE gender = 0 And class_no=2;
 SELECT * FROM tb_student WHERE class_no=1 or (class_no = 2 AND gender = 0);
SELECT * FROM tb_student WHERE class_no=1 and stu_name !='李白';
SELECT * FROM tb_student WHERE class_no=1 and stu_name <>'李白';

SELECT * FROM tb_student WHERE stu_name = "李白"or stu_name = "杜甫";

(1)带关系运算符的的查询
  • 【结构】:
select 字段1,字段2,....,字段n 
from 表名 where 条件表达式
  • 【结构】:
SELECT id, name FROM student WHERE id= 4;
(2)带IN的关键字
  • 【结构】:
SELECT *|字段 名 1, 字段 名 2,… 
FROM 表 名 
WHERE 字段 名 [NOT] IN (元素 1, 元素 2,…)
  • 【结构】:
SELECT id, grade, name, gender 
FROM student 
WHERE id NOT IN( 1, 2, 3);
SELECT
    *
FROM
    tb_student
WHERE
    stu_name IN (
        '李白',
        '杜甫',
        '孙悟空'
    );
SELECT
    *
FROM
    tb_student
WHERE
    stu_name NOT IN (
        '李白',
        '杜甫',
        '孙悟空'
    );
结果展示
(3)带between...and 的关键字
  • 【结构】:
SELECT *|{字段 名 1, 字段 名 2,…} 
FROM 表 名 WHERE 字段 名 [NOT] 
BETWEEN 值 1 AND 值 2
  • 【结构】:
SELECT id, name 
FROM student WHERE id NOT 
BETWEEN 2 AND 5;
SELECT
    *
FROM
    tb_student
WHERE
    stu_no BETWEEN "20162154"
AND "20162156";

【结果展示】


带between...and
(4)空值查询

在SQL中 NULL 与任何值(包括自己)做相等比较时,都是** false**。
【结构】:

SELECT *|字段 名 1, 字段 名 2,… 
FROM 表 名 WHERE 字段 名 IS [NOT] NULL
UPDATE tb_student
SET birth_day = NULL
WHERE
    stu_name = "武则天";
-- 注释 SQL NULL 与任何值,包括自己
-- 做相等比较时,都是 false;
SELECT
    *
FROM
    tb_student
WHERE
    birth_day IS NULL;

(5)带distinct关键字的查询

【介绍】:DISTINCT 去重;
【结构】:

SELECT DISTINCT 字段名 
FROM 表 名;

【结构】:

SELECT DISTINCT 字段名1, 字段名2,… 
FROM 表 名;
-- DISTINCT 去重;
SELECT DISTINCT
    stu_name
FROM
    tb_student;

(6)带LIKE 关键字的查询

【介绍】 like: 模糊查询,%:代表0个或多个字符;
【结构】:

SELECT *|{字段 名 1, 字段 名 2,…}
 FROM 表 名 WHERE 字段名 
[NOT] LIKE '匹配 字符串';

【代码】:

-- like: 模糊查询,%:代表0个或多个字符;
SELECT * FROM
    tb_student
WHERE
    stu_name NOT LIKE '李%';
SELECT * FROM
    tb_student
WHERE
    stu_name LIKE '上_婉_';

【结果展示】


结果展示

【NOT 关键字可选】
通配符有:

  • 1、 % 用于匹配多个字符

  • 2、_ 用于匹配单个字符

  • 3、要匹配 %或 _ 用 "\"来进行转义,如果要更改默认的转义字符,可以使用 escape 关键字指定
    例如:

 where product_name
 like '{_三' escape '{';

(7)带AND 关键字的多条件查询

【结构】:

SELECT *|{字段 名 1, 字段 名 2,…} 
FROM 表 名 WHERE 条件 表达式 1 AND 条件 表达式 2 [… AND 条件 表达式 n];
SELECT * FROM
    tb_student
WHERE
    class_no = 2
AND gender = 0;
SELECT
    COUNT(*) AS 'p_num'
FROM
    tb_student t
WHERE
    t.class_no = 2
AND t.gender = 0;
(8)带or关键字的条件查询

【结构】:

SELECT *|{字段 名 1, 字段 名 2,…} 
FROM 表 名 
WHERE 条件 表达式 1 
OR 条件 表达式 2 [… 
OR 条件 表达式 n];

高级查询

高级查询是单表查询的重点查询方式,能够完成许多较为复杂的查询方式。主要有以下四种查询方式。

(1)聚合查询
函数名称 作用
COUNT() 返会某列行数
SUM() 返会某列值总和
AVG() 返会某列值的平均值
MAX() 返会某列值的最大值
MIN() 返会某列值的最小值
  • 1、count 函数

【用途】:用来统计表中记录数。
【结构】:

SELECT COUNT(*) FROM 表 名
  • 2、sum()函数

【用途】:SUM() 是 求和 函数, 用于 求出 表中 某个 字段 所有 值 的 总和。
【结构】:

SELECT SUM( 字段 名) FROM 表 名;
  • 3、AVG() 函数

【用途】:AVG() 函数 用于 求出 某个 字段 所有 值 的 平均值。
【结构】:

SELECT AVG( 字段 名) 
FROM student(表名);
  • 4、MAX()函数

【用途】:MAX() 函数 是 求 最大值 的 函数, 用于 求出 某个 字段 的 最大值。
【结构】:

SELECT MAX( grade) FROM student;
  • 5.MIN()函数

【用途】:MIN() 函数 是 求 最小值 的 函数, 用于 求出 某个 字段 的 最小值。
【结构】:

SELECT MIN( grade) FROM student;
-- 分数分析 
SELECT MAX(score),subject_no FROM tb_score WHERE subject_no = 1;
SELECT MIN(score),subject_no FROM tb_score WHERE subject_no = 1;
SELECT avg(score),subject_no FROM tb_score WHERE subject_no = 1;
SELECT stu_no,SUM(score) FROM tb_score WHERE stu_no = '20162155';

(2)查询结果排序
SELECT 字段名 1, 字段名 2,…
 FROM 表  ORDER BY 字段名 1 
[ASC | DESC], 字段 名 2
 [ASC | DESC]…

【提示】默认的话,是升序排列。

【实例如下】:

SELECT * FROM
    tb_score
WHERE
    subject_no = 1
ORDER BY
    score DESC;

-- 分数相同,按学号高到低排序 
SELECT * FROM
    tb_score
WHERE
    subject_no = 1
ORDER BY
    score DESC,
    stu_no DESC;

【结果展示】:


排序结果
(3)分组查询
SELECT 字段 名 1, 字段 名 2,…
 FROM 表 名 
GROUP BY 字段 名 1, 字段 名 2,…
[ HAVING 条件 表达式];

【特别 强调】:

  • 1、 GROUP BY 一般 和 聚合函数一起 使用,如果查询的字段出现在GROUP BY后,却没有包含在聚合函数中,该字段显示的是分组后的第一条记录的值。
  • 2、GROUP BY 和 HAVING 关键字 一起 使用时

HAVING 关键字 和 WHERE 关键字 的 作用 相同, 都用 于 设置 条件 表达式 对 查询 结果 进行 过滤, 两者 的 区别 在于, HAVING 关键 字后 可以 跟 聚合 函数, 而 WHERE 关键字不能。
使用limit限制查询结果的数量

SELECT
    AVG(score) avg_score,
    subject_no
FROM
    tb_score
GROUP BY
    subject_no;

对比-分析

SELECT
    AVG(score) avg_score,
    subject_no
FROM
    tb_score
WHERE
    score >= 60
GROUP BY
    subject_no
HAVING
    avg_score > 80;

【提示】关于HAVING和where 的区别:

  • having:用于过滤组。使用于group by 后面。
  • where:用于过滤记录;

(4)使用LIMIT限制查询结果数量

【介绍】LIMIT: 用于分页;

SELECT 字段 名 1, 字段 名 2,…
FROM 表 名 LIMIT [OFFSET,] 记录数

【备注】: OFFSET 若不设置,默认为0;

SELECT * FROM tb_student LIMIT 0, 3;
SELECT * FROM tb_student LIMIT 2, 3;
SELECT * FROM tb_student LIMIT 5, 3;

相关文章

  • 【SQL】(提升篇)单表查询:简单查询、条件查询以及高级查询

    【插播】:【SQL】(基础篇):https://www.jianshu.com/p/b0d275039f72 关于...

  • SQL查询_高级查询

    SQL查询_高级查询 一、子查询 子查询出现的位置一般为条件语句,oracle会先执行子查询,再执行父查询,子查询...

  • 2019-01-14mysql查插改删

    1,插入insert 2,更新update 3,删除 delete 4,查询 1单表查询 1,简单查询 2,条件查...

  • sql学习笔记

    sql教程 1基本查询 基本查询 SELECT * FROM <表名>以查询到一张表的所有记录 2条件查询 条件查...

  • hibernate中的查询

    HQL 查询所有 条件查询 分页查询 Criteria 查询所有 条件查询 分页查询 查询总记录 原生SQL

  • 数据库(十一)-单表查询(2)模糊查询

    模糊查询 上篇文章我们简单介绍了单表查询中的条件查询,里面介绍了一些精确查询和范围查询的基本方法,但当我们想要查询...

  • MySQL查询数据

    [toc] 单表查询: 查询条件列表 查询所有字段 查询指定字段: 查询指定记录: 带 in关键字的查询 如果us...

  • oracle 多表查询优化

    ORACLE中的高速缓冲用于保存查询过的sql语句,单只对单表查询起作用 单表查询优化:写查询语句时尽量统一规范,...

  • mysql表格查询命令

    全表查询 语法: Select * from 表名称; 描述: 查询指定表中的所有数据 案例: 单条件查询 语法:...

  • SQL之更删改查

    查询 单表查询 查询所有字段 查询指定字段 WHERE条件查询 下面的运算符可在 WHERE 子句中使用: 去重复...

网友评论

      本文标题:【SQL】(提升篇)单表查询:简单查询、条件查询以及高级查询

      本文链接:https://www.haomeiwen.com/subject/ezlkrctx.html