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


相关文章
|
2天前
|
SQL 存储 关系型数据库
sql数据库的相关概念与底层介绍
sql数据库的相关概念与底层介绍
25 0
|
13天前
|
SQL 安全 关系型数据库
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
22 0
|
13天前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
31 0
|
18天前
|
SQL 人工智能 运维
数据库基础入门 — SQL排序与分页
数据库基础入门 — SQL排序与分页
15 0
|
18天前
|
SQL 人工智能 运维
数据库基础入门 — SQL运算符
数据库基础入门 — SQL运算符
15 0
|
18天前
|
SQL 人工智能 运维
数据库基础入门 — SQL
数据库基础入门 — SQL
26 0
|
19天前
|
SQL 存储 数据库
【数据库SQL server】自学终极笔记
【数据库SQL server】自学终极笔记
72 0
|
19天前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据更新
【数据库SQL server】关系数据库标准语言SQL之数据更新
20 0
|
19天前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据查询
【数据库SQL server】关系数据库标准语言SQL之数据查询
44 0
|
19天前
|
SQL 数据库 数据库管理
【数据库SQL server】关系数据库标准语言SQL的基本知识
【数据库SQL server】关系数据库标准语言SQL的基本知识
33 0