栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

第三章 关系数据库标准语言 SQL

Java 更新时间:发布时间: 百科书网 趣学号
第三章 关系数据库标准语言 SQL

文章目录
  • 第三章 关系数据库标准语言 SQL
    • 3.1 SQL 概述
      • 3.1.1 SQL 的特点
    • 3.2 学生-课程数据库
    • 3.3 数据定义
      • 3.3.2 基本表的创建、删除与修改
        • 1. 基本表的创建
        • 2. 数据类型
        • 3. 插入数据
        • 4. 修改数据
          • (1) 修改某一个元组的值
          • (2) 修改多个元组的值
          • (3) 带子查询的修改语句(后面就讲子查询)
        • 5. 删除数据
      • (1)删除某一个元组的值
      • (2) 删除多个元组的值
      • (3) 带子查询的删除语句(后面就讲子查询)
    • 3.4 数据查询
      • 3.4.1 单表查询
        • 1. 选中表中的若干列
          • (1)查询指定列(属性)
          • (2)查询全部列—— *
          • (3)重命名列名(属性)
        • 2. 选择表中的若干元组
          • (1)去重关键字—— DISTINCT
          • (2)比较
          • (3)确定范围
          • (4) 确定集合
          • (5) 字符匹配
          • (6)涉及空值的查询
          • (7) 多重条件查询
        • 3. ORDERB子句
        • 4. 聚变函数
        • 5. GROUP BY 语句
      • 3.4.2 连接查询——多表查询
        • 1. 等值与非等值连接
        • 2. 自身连接——给自己取别名,代表各自信息
        • 3. 外连接
        • 4. 多表连接
      • 3.4.3 嵌套查询
        • 1. 带有IN谓词的子查询
        • 2. 带有比较运算守甘子查询
        • 3. 带有ANY(SOME)或ALL谓词的子查询
        • 4. 带有EXISTS谓词的子查询
    • 3.5 视图
      • 3.5.1 视图的作用
      • 3.5.2 视图的用法

概述:了解数据库表单的查找、删除、添加、修改

3.1 SQL 概述 3.1.1 SQL 的特点
1. 综合统一
1. 高度非过程化
1. 面向集合的操作方式
1. 以同一种语法结构提供多种使用方式
1. 语言简洁. 易学易用

了解即可

3.2 学生-课程数据库

这里给出navicat的三个表:Student、Course、Sc

Student表

Course表
![请添加图片描述](https://img-blog.csdnimg.cn/fb82f46e342c41e09788c9aeb12c996a.png)
Sc表
3.3 数据定义 3.3.2 基本表的创建、删除与修改 1. 基本表的创建

基本格式:CREATE TABLE <表名> (<列名><数据类型> [列级完整性约束条件]

[,<列名><数据类型> [列级完整性约束条件]]

[,<表级完整性约束条件>])

简而言之:CREATE TABLE + 表名 + 列名(也就是属性) + 列级完整性约束条件

CREATE TABLE student (
	Sno CHAr ( 9 ) PRIMARY KEY,
	Sname CHAr ( 20 ) UNIQUE,
	Ssex CHAr ( 2 ),
	Sage SMALLINT,
	Sdept CHAr ( 20 ) 
);
CREATE TABLE Course (
	Cno CHAr ( 4 ) PRIMARY KEY,
	Cname CHAr ( 40 ) NOT NULL,
	Cpno CHAr ( 4 ) Ccredit SMALLINT,
	FOREIGN KEY ( Cpno ) REFERENCES Course ( Cno ) 
);
CREATE TABLE SC ( 
	Sno CHAr ( 9 ),
	Cno CHAr ( 4 ),
	Grade SMALLINT,
	PRIMARY KEY ( Sno, Cno ),
	FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
	FOREIGN KEY ( Cno ) REFERENCES Course ( Cno ) 
);
2. 数据类型


数据类型
3. 插入数据

基本格式:INSERT

lNTO<表名> [(<属性列 I>[,<属性列 2>] ···)]

VALUES(<常量l>[,<常量>]…);

简而言之:INSERT + lNTO + 表名 + VALUES()

这里就把上述三个表的数据插入

INSERT INTO `student` VALUES('201215121','李勇','男','20','CS');
INSERT INTO `student` VALUES('201215123','王敏','女','18','MA');
INSERT INTO `student` VALUES('201215122','刘晨','女','19','CS');
INSERT INTO `student` VALUES('202115125','张立','男','19','IS');


INSERT INTO `course` VALUES ('1','数据库', '5', '4');
INSERT INTO `course` VALUES ('2', '数学', NULL, '2');
INSERT INTO `course` VALUES ('3', '信息系统','1', '4');
INSERT INTO `course` VALUES ('4', '操作系统', '6', '3');
INSERT INTO `course` VALUES ('5', '数据结构', '7', '4');
INSERT INTO `course` VALUES ('6', '数据处理', NULL, '2');
INSERT INTO `course` VALUES ('7', 'PASCAL语言', '6', '4');


INSERT INTO `sc`(Sno,Cno, Grade) VALUES ('201215121', '1', '92');
INSERT INTO `sc` VALUES ('201215121', '2', '85');
INSERT INTO `sc` VALUES ('201215121', '3', '88');
INSERT INTO `sc` VALUES ('201215122', '2', '90');
INSERT INTO `sc` VALUES ('201215122', '3', '80');

这里先给出外键的定义,帮助大家理解为什么,插入是这个顺序。后续会精讲

外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

简而言之:只要只要被作为外键的数据,一定要先存在再能插入

4. 修改数据

基本格式:UPDATe<表名>
SET<列名>=<表达式>[,<列名>=<表达式>]…

[WHERe<条件>];

(1) 修改某一个元组的值
UPDATE student
SET Sage=22
WHERe Sno='201215121';
(2) 修改多个元组的值
UPDATE student
SET Sage=Sage+1;
(3) 带子查询的修改语句(后面就讲子查询)
UPDATE sc
SET Grade=0
WHERe Sno IN(SELECT Sno
					FROM student
					WHERe Sdept='CS';);
5. 删除数据

基本格式:DELETe
FROM<表名>
[WHERe<条件>]

(1)删除某一个元组的值 (2) 删除多个元组的值 (3) 带子查询的删除语句(后面就讲子查询) 3.4 数据查询

基本格式: SELECt [ALL I DISTINCT]<目标列表达式>[,<目标列表达式>J…

FROM<表名或视图名>[,<表名或视图名>···] I (

[WHERe<条件表达式>]

[GROUP BY<列名I>[HAVINg<条件表达式>]]

[ORDER BY<列名2>[ASC I DESC]]

简而言之:SELECT + FROM + WHERe + GROUP BY (聚合函数)+ ORDER BY (排序方式)

3.4.1 单表查询 1. 选中表中的若干列 (1)查询指定列(属性)
SELECt Sno,Sname
FROM student;
(2)查询全部列—— *
SELECt * 
FROM student;
(3)重命名列名(属性)
SELECt Sname NAME, 'year of birth' BIRTH,2014-Sage BIRTHDAY,LOWER(Sdept)
FROM student;

简而言之: 选出目标列(属性)

2. 选择表中的若干元组

常用的查询条件
(1)去重关键字—— DISTINCT

DISTINCT:该查询结果里包含了许多重复的行。如想去掉结果表中的重复行,必须指定 DISTINCT:

SELECt DISTINCT Sno
FROM sc;
(2)比较
SELECt Sname, Sdept
FROM student
WHERe Sdept = 'CS';
(3)确定范围
SELECt Sname, Sdept, Sage
FROM student
WHERe Sage BETWEEN 20 and 23;

(4) 确定集合
SELECt Sname, Ssex, Sdept
FROM student
WHERe Sdept IN('CS', 'MA', 'IS');
(5) 字符匹配

谓词 LIKE:

基本语法:[NOT] LIKE’<匹配串>' [ESCAPE '<换码字符>' ]

  • % (百分号)代表任意长度(长度可以为0) 的字符串。

    例如 a%b 表示以 a 开头, 以b 结尾的任意长度 的字符串。如 acb 、addgb 、 ab 等都满足该匹配串。

  • -(下横线)代表任意单个字符。
    例如 a_b 表示以 a 开头, 以 b 结尾的长度 为3的任意字符串。如 acb 、 afb 等都满足该匹配串。

SELECt Sname,Sno,Ssex
FROM student
WHERe Sname LIKE '刘%';
SELECt Sname,Sno,Ssex
FROM student
WHERe Sname LIKE '张_';
(6)涉及空值的查询
SELECt Sno,Cno
FROM sc
WHERe Grade IS NULL;
(7) 多重条件查询
SELECt Sname,Sno,Ssex
FROM student
WHERe Sdept = 'CS' AND Sage < 20;
SELECt Sname,Sno,Ssex
FROM student
WHERe Sdept = 'CS' OR Sage < 20;
3. ORDERB子句
SELECt Sno,Grade
FROM sc
WHERe cno='3'
ORDER BY Grade ASC;
SELECt Sno,Grade
FROM sc
WHERe cno='3'
ORDER BY Grade DESC;
4. 聚变函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0VgyGrkb-1666405040528)(D:大学四年经历数据库图片质料聚变函数.png)]

SELECt COUNT(Sno)
FROM sc;

注: WHERe子句中是不能用聚集函数作为条件表达式的。 聚集函数只能用于SELECt子句和GROUP BY中的HAVINg子句。

5. GROUP BY 语句

定义:对查询结果分组的目的是为了细化聚集函数的作用对象。 分组后聚集函数将作用千每个组,即每 组都有 个函数值。

SELECT Cno,COUNT(Sno)
from sc
GROUP BY Cno;

简而言之:GROUP BY 语句是对选中的列(属性)每一个元组,用聚变函数。不用GROUP BY 语句是对选中的列(属性)用聚变函数。

SELECt Cno,COUNT(Sno)
from sc
GROUP BY Cno
HAVINg AVG(Grade) >= 90;
3.4.2 连接查询——多表查询 1. 等值与非等值连接

连接查询的WERE子句中用来连接两个表的条件称为连接条件或连接谓词, 其一般格式为

[<表名I>.]<列名1><比较运符符> [<表名2>]<列名2>
其中比较运算符主要有= 、 > 、 <、 >=、 <=、!= (或<>)等。

SELECt student.*,sc.*
FROM student,sc
WHERe student.Sno=sc.Sno;
2. 自身连接——给自己取别名,代表各自信息
SELECtF FIRST.Cno,SECOND.Cpno
FROM Course FIRST,Course SECOND 
WHERe FIRST.Cpno=SECOND.Cno; 
3. 外连接
SELECt student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM student left outer JOIN sc on (student.Sno=sc.Sno)

这个概念在前面讲过,不多赘述。简而言之,左外——不包含右边集合独有的部分

4. 多表连接

连接操作除了可以是两表连接、 一个表与其自身连接外, 还可以是两个以上的表进行 连接, 后者通常称为多表连接。

3.4.3 嵌套查询

定义:在SQL语言中, 一个SELECt-FROM-WHERe语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERe子句或HAVINg短语的条件中的查询称为嵌套查询(nested query)。

SELECt Sname
FROM student
WHERe Sno IN 
            (SELECt Sno
             FROM sc	
             WHERe Cno='2');
1. 带有IN谓词的子查询
SELECt Sno,Sname,Sdept
FROM student
WHERe Sdept IN(SELECt Sdept
               FROM student
               WHERe Sname='刘晨');
2. 带有比较运算守甘子查询 3. 带有ANY(SOME)或ALL谓词的子查询 4. 带有EXISTS谓词的子查询

EXISTS 代表存在量词,带有 EXISTS 谓词的了查询不返回任何数据, 只产生逻辑真“ true ” 或逻辑假值 “ false”。

子查询为真执行父查询,否则不执行

SELECt Sname
FROM student
WHERe NOT EXISTS
			(SELECt*
			FROM sc
			WHERe sno=student.sno AND Cno='1');
3.5 视图

基本格式:CREATE VIEW<视图名> [(<列名> [,<列名>]…)J

AS<子查询>
[WITH CHECK OPTION]

3.5.1 视图的作用
  • 视图能够件简化用户的操作
  • 视图使用户能够以多种角度看待同一数据
  • 视图对重构数据库提供了一定程度的逻辑性
3.5.2 视图的用法

与查询无异,不多赘述

在我看来,视图就是用来,装查询结果的。

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1076692.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号