数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL( 3.4 数据查询 )(一)

简介: 数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL( 3.4 数据查询 )

使用的数据库为MySQL,与书本使用的不同

3.4 数据查询

数据查询是数据库的核心操作

SQL提供了SELECT语句进行数据查询,其一般格式为:

SELECT [ALL|DISTINCT] <目标列表达式> [别名] [, <目标列表达式> [别名]] ...
FROM <表名或视图名> [别名] [, <表名或视图名> [别名]] ...
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING  <条件表达式>]]
[ORDER BY <列名2> [ASC| DESC]]; 

整个SELECT语句的含义:

  • FROM字句指定的基本表、视图或派生表中进行数据的查询,查询满足WHERE字句条件的元组,从选出来的元组中选出SELECT字句中指定属性对应的各元组的属性值形成结果表。
  • 如果有GROUP BY字句,将结果按照指定的列进行分组,如果有HAVING 字句从分组完成的数据中选出满足条件的结果输出
  • 如果有ORDER BY字句,将结果按照指定的列和指定的排序方式进行排序。

后面查询需要用到的表和数据:

学生表:

create table Student (
    Sno char(9) primary key ,
    Sname varchar(10) ,
    Ssex char(1) ,
    Sage int ,
    Sdept varchar(20)
) comment '学生表';
insert into Student
values ('201215121', '李勇', '男', 20, 'CS'),
       ('201215122', '刘晨', '女', 19, 'CS'),
       ('201215123', '王敏', '女', 18, 'MA'),
       ('201215125', '张立', '男', 19, 'IS');

课程表:

create table Course (
    Con int primary key ,
    Cname varchar(20) ,
    Cpno int comment '先行课' ,
    Ccredit int comment '学分'
);
insert into Course
values (1, '数据库', 5, 4),
       (2, '数学', null, 2),
       (3, '信息系统', 1, 4),
       (4, '操作系统', 6, 3),
       (5, '数据结构', 7, 4),
       (6, '数据处理', null, 2),
       (7, 'PASCAL语言', 6, 4);

学生选课表:

create table SC (
  Sno varchar(9) ,
  Cno int ,
  primary key (Sno, Cno),
  Grade int
);
insert into SC
values ('201215121', 1, 92),
       ('201215121', 2, 85),
       ('201215121', 3, 88),
       ('201215122', 2, 90),
       ('201215122', 3, 80);

3.4.1 单表查询

单表查询仅仅涉及一个表的查询

1. 选择表中的若干列

选择表中的全部或部分列,对应关系代数的投影运算

(1)查询指定的列

[ 例 3.16 ] 查询全体学生的学号与姓名

SELECT Sno, Sname
FROM Student;

(2)查询全部列

* 代表所有的列

[ 例 3.18 ] 查询全体学生的详细记录

SELECT * 
FROM Student;

等价于

SELECT Sno, Sname, Ssex, Sage, Sdept
FROM Student;

(3)查询进过计算的值

SELECT字句中的目标列表达式不仅可以是表的属性列,也可以是表达式

[ 例 3.19 ] 查询学生的姓名及其出生年份

SELECT Sname, (2022-Sage)
FROM Student;

目标列表达式不仅可以是算术表达式还可以是字符串常量、函数等

[ 例 3.20 ] 查询全体学生的姓名、出生年份、所在院系,要求用小写字母表示系名。

# lower 函数将所有字母转为小写
SELECT Sname, 'Year of Birth: ', Sage, lower(Sdept)
FROM Student;

可以给列指定别名来改变查询结果的列标题,使用关键字AS,也可以省略,列名与属性名之间用空格间隔。

SELECT
    Sname AS '学生姓名',
    'Year of Birth: ' AS 'Birth',
    Sage Birthday,
    lower(Sdept) Department
FROM Student;

2. 选择表中的若干元组

(1)消除取值重复的行

在查询时候,可以指定是否去除重复数据。

查询中如果不想去除重复数据,可以使用关键字ALL,如果想去除重复数据可以使用关键字DISTINCT,默认为ALL

[ 例 3.21 ] 查询选修了课程的学号

SELECT Sno
FROM Student;
# 等价于
SELECT ALL Sno
FROM Student;

去除重复的学号

SELECT DISTINCT Sno
FROM Student;

(2)查询满足条件的元组

查询满足条件的元组可以使用 WHERE 字句实现。

WHERE字句常用的查询条件

比较大小

同于比较的运算符:

运算符 含义
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
!= 不等于
!> 不大于(mysql没有)
!< 不小于(mysql没有)

[ 例 3.22 ] 查询计算机科学系的全体学生名单

SELECT Sname
FROM Student
WHERE Sdept = 'CS';

[ 例 3.24 ] 查询考试成绩及格的学生的学号

SELECT DISTINCT Sno
# 我的表建立在mydb这个数据库中
FROM mydb.SC
WHERE Grade>=60;


相关文章
|
3天前
|
SQL 数据库 Python
数据库 SQL常用语句
这篇文章是数据库SQL的常用语句指南,涵盖了查询格式、WHERE子句查询条件、多表连接查询、嵌套查询、字符匹配查询以及其他指令如排序、聚集函数、GROUP BY分组、EXIST子查询和外连接等知识点。
|
7天前
|
SQL 数据库
Microsoft SQL Server 2014如何来备份数据库
Microsoft SQL Server 2014如何来备份数据库
10 3
|
7天前
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
34 1
|
11天前
|
Linux 数据库 数据安全/隐私保护
|
15天前
|
SQL 存储 关系型数据库
数据库SQL入门指南
数据库SQL入门指南
|
13天前
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。
|
15天前
|
SQL 关系型数据库 数据库
数据库空间之谜:彻底解决RDS for SQL Server的空间难题
【8月更文挑战第16天】在管理阿里云RDS for SQL Server时,合理排查与解决空间问题是确保数据库性能稳定的关键。常见问题包括数据文件增长、日志文件膨胀及索引碎片累积。利用SQL Server的动态管理视图(DMV)可有效监测文件使用情况、日志空间及索引碎片化程度。例如,使用`sp_spaceused`检查文件使用量,`sys.dm_db_log_space_usage`监控日志空间,`sys.dm_db_index_physical_stats`识别索引碎片。同时,合理的备份策略和文件组设置也有助于优化空间使用,确保数据库高效运行。
30 2
|
28天前
|
SQL 安全 关系型数据库
关系型数据库SQL server DELETE 语句
【8月更文挑战第3天】
58 10
|
28天前
|
SQL 关系型数据库 数据库
关系型数据库SQL server UPDATE 语句
【8月更文挑战第3天】
45 10
|
28天前
|
SQL 关系型数据库 BI
关系型数据库SQL server INSERT 语句
【8月更文挑战第3天】
42 9

热门文章

最新文章

下一篇
云函数