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

【插播】:【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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 1. SQL 简介 SQL 的目标 理想情况下,数据库语言应允许用户: 建立数据库和关系结构 完成基本数据管理任务...
    板蓝根plank阅读 2,330评论 0 11
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,084评论 1 32
  • 前言 读《sql必知必会 第四版》随手做的笔记,写的比较乱,可读性并不好,读的是中文版,翻译过来的感觉有点怪怪的。...
    _老徐_阅读 620评论 0 0
  • 第三课: 排序检索数据 distinct关键字:distinct 列名1,列名2,列名3DISTINCT 关键字会...
    VictorBXv阅读 1,465评论 0 8
  • 七,今天接到你的电话,我很难过,我心疼你生活的不顺遂,心疼你,我想对你说 对酒当歌,人生几何,一切都是...
    巧琳的世界阅读 182评论 0 2