数据库系统概论 ---- 第三章 -- 关系数据库标准语言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;


相关文章
|
1天前
|
存储 SQL 数据库
数据库sql语句-----游标和存储过程
数据库sql语句-----游标和存储过程
12 1
|
1天前
|
SQL 关系型数据库 数据管理
Microsoft SQL Server 是微软公司开发的一款关系型数据库管理系统
【5月更文挑战第14天】Microsoft SQL Server 是微软公司开发的一款关系型数据库管理系统
13 2
|
1天前
|
SQL 数据库
数据库SQL语言实战(六)
本次实战的重点就在于对表格本身的一些处理,包括复制表格、修改表格结构、修改表格数据
|
1天前
|
SQL Oracle 关系型数据库
数据库SQL语言实战(五)(数据库系统概念第三章练习题)
本文的SQL语言适用的是Oracle数据库与mySQL可能存在略微不同
|
1天前
|
SQL Oracle 关系型数据库
数据库SQL语言实战(四)(数据库系统概念第三章练习题)
本文的SQL语言适用的是Oracle数据库与mySQL可能存在略微不同
数据库SQL语言实战(四)(数据库系统概念第三章练习题)
|
1天前
|
SQL XML Linux
SQL Server的版本
【5月更文挑战第14天】SQL Server的版本
17 3
|
1天前
|
SQL 存储 数据库连接
LabVIEW与SQL Server 2919 Express通讯
LabVIEW与SQL Server 2919 Express通讯
|
1天前
|
SQL Windows
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
14 4
|
1天前
|
SQL 数据可视化 Oracle
这篇文章教会你:从 SQL Server 移植到 DM(上)
这篇文章教会你:从 SQL Server 移植到 DM(上)
|
1天前
|
SQL 关系型数据库 数据库
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通