【数据库系统概论】第3章 关系数据库标准语言SQL(二)数据查询(超详细)

目录

一、单表查询

1. 简单的数据查询

(1)选择表中若干列

(2)选择表中若干行(元祖)

2. 聚合函数与分组查询

聚集函数

GROUP BY分组查询

二、联接查询

1、连接概述

2. 内联接(INNER JOIN)

3. 左外联接(LEFT JOIN 或 LEFT OUTER JOIN)

4. 右外联接(RIGHT JOIN 或 RIGHT OUTER JOIN)

5. 全外联接(FULL JOIN 或 FULL OUTER JOIN)

6. 连接两个以上的表

7.交叉连接(Cross Join)

8. 自联接(Self-Join)

三、集合查询

并集(UNION)

交集(INTERSECT)

差集(EXCEPT)

四、子查询

1.子查询介绍

2. 嵌套子查询

(1) 返回单个值

(2) 返回一个值列表

3.把子查询作为派生表

4. 相关子查询

5. 使用EXISTS操作符

带有EXISTS谓词的子查询

不同形式的查询间的替换

用EXISTS/NOT EXISTS实现全称量词∀(难点)

用EXISTS/NOT EXISTS实现逻辑蕴涵(难点) 

五、在查询的基础上创建新表

  数据查询操作select语句的格式【总结】


数据查询的语句格式(先大概知道一下要学的整体内容)

SELECT [ALL|DISTINCT] <目标列表达式> [别名], -- 选择列,ALL 所有,DISTINCT 返回唯一记录
       [, <目标列表达式> [别名]] …              -- 可以选择多个列,并可为每列指定别名

FROM <表名或视图名> [别名],                     -- 指定数据来源的表或视图,给表/视图起别名
      [, <表名或视图名> [别名]] …              -- 可从多个表/视图中选择数据,使用逗号分隔
     | (<SELECT语句>) [AS] <别名>   -- 在 FROM 子句中嵌套其他 SELECT 查询,并为其指定别名

[WHERE <条件表达式>]
                             -- 可选,用于筛选符合特定条件的记录
[GROUP BY <列名1> [HAVING <条件表达式>]]       -- 可选,按指定列进行分组,HAVING 用于对分组后的结果进行筛选

[ORDER BY <列名2> [ASC|DESC]]   -- 可选,用于对结果进行排序,ASC 表示升序,DESC 表示降序

LIMIT <行数1> [OFFSET <行数2>];       -- 限制返回的记录数量,OFFSET 指定从哪条记录开始返回

SELECT语句:指定要显示的属性列

FROM子句:指定查询对象基本表或视图

WHERE子句:指定查询条件

GROUP BY子句:结果按照<列名1>的值进行分组,该属性列值相等的元组为一个组,通常在每组中作用聚集函数。

HAVING短语:只有满足指定条件的组才予以输出

ORDER BY子句:对查询结果表按<列名1>的值的升序或降序排序

LIMIT子句:限制SELECT语句查询结果的数量为<行数1>行,OFFSET <行数2>,表示在计算<行数1>行前忽略<行数2>

上面内容会在后文详细讲解

一、单表查询

1. 简单的数据查询

(1)选择表中若干列

检索表中的指定列

SELECT 列名1, 列名2, 列名3  -- 选择指定的列
FROM 表名;                  -- 从指定的表中查询

检索表中的所有列

SELECT * FROM 表名;

星号(*)表示选择所有字段

使用计算列

SELECT 列名, 计算表达式 AS 别名 FROM 表名;

在SELECT语句中进行计算并为结果指定一个别名

SELECT子句中,目标列表达式不仅限于列名,还可以是:

  • 算术表达式:比如列名1 + 列名2,可以用来进行简单的数学计算。

  • 字符串常量:例如,你可以使用字符串直接显示特定信息,如SELECT 'Hello, World!' AS 问候;

  • 函数:例如聚合函数COUNT(), SUM(), AVG()等,可以用于数据汇总。

    • LOWER():字符串函数,接受一个字符串参数并返回该字符串的全部小写形式

    • GetDate() 获取当前日期和时间的函数

(2)选择表中若干行(元祖)

DISTINCT消除重复行

SELECT DISTINCT 列名1, 列名2, ... 
FROM 表名;

如果指定了多个列,只有所有列的组合都是相同的,才会被视为重复。DISTINCT 确保查询结果的唯一性。

  • SELECT ALL:这是SQL查询的默认行为,表示查询结果将包括所有行,不会去除重复的记录。

  • SELECT DISTINCT:明确要求去除结果中的重复行

TOP n/ TOP n percent限制返回的行数

返回结果集中n数据

SELECT TOP n 列名1, 列名2, ...
FROM 表名;

返回结果集中n 百分比的行数据

SELECT TOP n PERCENT 列名1, 列名2, ...
FROM 表名;

TOP 关键字是能够快速限制结果集的大小,根据需要灵活地获取数据。

ORDER BY 对查询结果排序

SELECT 列名1, 列名2, ...
FROM 表名
ORDER BY 列名1 [ASC|DESC], 列名2 [ASC|DESC], ...;
  • ASC:按升序排序(默认)

  • DESC:按降序排序

ORDER BY 子句必须在 SELECT 查询的最后部分

查询满足条件的行

WHERE 子句:用于指定条件,从而筛选出符合条件的行

SELECT 列名1, 列名2, ... 
FROM 表名 
WHERE 条件;

常用的查询条件 

查询条件

谓词

比较

=><>=<=!=<>!>!<NOT+上述比较运算符

确定范围

BETWEEN ANDNOT BETWEEN AND

确定集合

INNOT IN

字符匹配

LIKENOT LIKE

空值

IS NULLIS NOT NULL

多重条件

(逻辑运算)

ANDORNOT

比较条件

示例:查询工资大于5000的员工

SELECT * 
FROM Employee 
WHERE Salary > 5000;

筛选数值范围【BETWEEN ... AND .../NOT BETWEEN ... AND ...】

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 列名 (NOT) BETWEEN 值1 AND 值2;

 选择在 (不在)指定范围内的记录,包括边界值  

确定集合【IN /NOT IN】

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 列名 (NOT) IN (值1, 值2, ...);

模式匹配【LIKE/NOT LIKE】

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 列名 (NOT) LIKE '匹配串';

 匹配串:用于定义搜索模式的字符串,可以是固定字符串,也可以包含通配符

  • 固定字符串:如 DB_Design,表示完全匹配这个字符串。

  • 含通配符的字符串:如 DB%DB_,表示匹配以 DB 开头的任意字符串,或者是 DB 后面有一个任意字符的字符串。

通配符

使用换码字符转义通配符

当匹配串中需要包含通配符(如 %_)作为普通字符时,可以使用换码字符(ESCAPE)进行转义

示例 :查询以 DB_ 开头,且倒数第三个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识快到我脑里来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值