SQL语言初步认识

1. SQL简介

2. 基本的数据定义

2.1 创建基本表

CREATE TABLE <表名>

<列名><数据类型>[<默认值>|<标识列设置>][<该列的完整性约束>]

`完整性约束:

①NOT NULL :该列值不能为空

②NULL :该列值可以为空

③UNIQUE :该列值不能有相同者

2.2 表结构的修改

ALTER TABLE <表名>

        ADD <列名><数据类型>[列的完整性约束]  为表添加一个新列

        ADD <表级完整性约束> 为表添加一个表级完整性约束

        ALTER COLUMN<列名><新的数据类型> 修改表中原有列的数据类型

        DROP COLUNM <列名>  删除表中原有的一个列

        DROP CONSTRAINT<表级完整性约束>  删除原有的表级完整性约束

2.3 删除基本表

DROP TABLE <表名1>[,<表名2>];

2.4 创建索引

CREATE [UNIQUE][CLUSTERED][NONCLUSTERED] INDEX <索引名>

ON <表名|视图名>(<列名清单>)

 <列名清单> 中,每个列名后面都要指定 ASC(升序)、DESC(降序),不指定默认升序

2.5 删除索引

DROP INDEX <索引名1>[,<索引名2>];

3. 基本的数据操纵

3.1 表中增加元组

INSERT INTO <表名>[(<属性名清单>)]

VALUES(<常量清单>);

 <常量清单>中,字符串常量和日期型常量要用单引号(英文符号)括起来

3.2 修改表中数据的基本方法

UPDATE <表名>

SET <列名>=<表达式>,[,<列名>=<表达式>]

[WHERE<条件>];

3.3 删除记录

DELETE FROM <表名>

[WHERE<条件>];

3.4 更新操作与数据库的一致性

4. 数据查询

4.1 无条件单关系查询

SELECT [DISTINCT / ALL] < 目标列表达式 [[AS] 别名] 清单 >

FROM <关系名>

DISTINCT : 每组重复元组只输出一条元组

默认ALL

4.1.1 查询关系中的所有信息

SELECT *

FROM <关系名>; 

4.1.2 指定要查询的列

SELECT Title

FROM Employee;

4.1.3 取消结果集中的重复行 

SELECT DITINCT Title

FROM Employee;

ps: DISTINCT 关键字必须放在列名前

4.1.4 查询经过计算的列

 SELECT Ename , 2024-Age AS [Year of Birth] , Title

FROM Employee;

4.1.5 查询汇总数据
函数功能
COUNT(DISTINCT / ALL]*)统计结果中元组个数
COUNT(DISTINCT / ALL]<列名>)统计结果中某列值的个数
MAX(<列名>)给出一列上的最大值
MIN(<列名>)给出一列上的最小值
SUM(DISTINCT / ALL]<列名>)给出一列上值的总和
AVG(DISTINCT / ALL]<列名>)给出一列上值的平均值

4.2 带条件单关系查询

SELECT [DISTINCT / ALL] < 目标列表达式 [[AS] 别名] 清单 >

FROM <关系名>

WHERE <查询条件表达式>

4.2.1 使用比较运算符

= 、 < 、 >、<=、>=、<>

4.2.2 使用特殊运算符
运算符号含义
IN、NOT IN检查属性值是否属于一组值之一

BETWEEN...AND..、

NOT BETWEEN...AND...

检查属性值是否属于某个范围
IS NULL、IS NOT NULL检查属性值是否为空
LIKE 、NOT LIKE字符串匹配

通配符:%表示任意长度的字符串(长度可以为0 

                _表示任意单个字符

4.2.3 多条件单关系查询

NOT 、 AND 、 OR

4.3 分组查询

SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单 >

FROM <关系名>

[WHERE<查询条件表达式>]

GROUP BY <列名清单>[HAVING<条件表达式>];

根据GRUOP BY 中的列名清单 的值进行分组

SELECT语句中有 集函数 COUNT、SUM等

HAVING语句条件作用于结果组

4.4 排序查询结果

SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单 >

FROM <关系名>

[WHERE<查询条件表达式>]

[GROPUP BY <列名清单>[HAVING<条件表达式>]]

ORDER BY < 列名[ASC / DESC ]清单>;

ORDER BY 语句只作用于最终查询结果 

4.5 多关系连接查询

4.5.1 交叉连接

SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单>

FROM <关系名[别名] 清单>

例如

SELECT e.Ename , e.Title , e.Dno , d.Dno , d.Name

FROM Employee e , Department d;

4.5.2 内部连接

SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单>

FROM <关系名[别名] 清单>

WHERE <连接条件表达式>

 SELECT e.Ename , e.Title , e.Dno , d.Dno , d.Name

FROM Employee e INNER JOIN Department d

ON e.Dno = d.Dno;

 例如

SELECT e.Ename , e.Title , e.Dno , d.Dno , d.Name

FROM Employee e , Department d

WHERE e.Dno = d.Dno;

上面的语句先将Employee表和Department表做交叉连接,检索出的行数是Employee表的行数乘以Deprtment表的行数,然后WHERE语句将Employee表的Dno列与Department表的Dno列进行匹配,相等的行检索出来予以返回。 

ps:连接的属性名不一定要相同,但是数据类型要兼容

4.5.3 外部连接

1.左外连接:除了返回两表中满足连接条件的元组以外,还返回左侧表中不匹配的元组,右侧表中的空值则以空值(NULL)表示

2.右外连接

3.全外连接

LEFT JOIN、 RIGHT JOIN、 FULL JOIN

4.5.4 自身连接

使用关系的别名

例如,Eno(职工号)、Ename(职工姓名)、Emgr(负责人)

SELECT emp1.Eno ,emp2.Emgr

FROM Employee emp1,Employee emp2

WHERE emp1.Emgr = emp2.Eno

 自身连接,找到间接负责人

4.6 嵌套查询

1.使用IN进行子查询

IN、NOT IN

2.使用比较运算符的嵌套查询

可以和ANY、ALL一起使用

3.使用BETWEEN的嵌套查询

4.相关子查询

例如

SELECT Ename

FROM Employee emp1

WHERE Age > 

        (SELECT AVG(Age)

         FROM Employee emp2

         WHERE emp2.Dno = emp1.Dno);

在相关子查询中,可以使用EXISTS ,测试子查询是否存在返回值

查询参加了项目的职工号、姓名

SELECT Eno,Ename

FROM Employee e

WHERE EXISTS

                (SELECT *

                 FEOM Item_Emp

                 WHERE Eno = e.Eno); 

子查询只返回逻辑值 

4.7 多个SELECT语句的集合操作

集合操作:UNION(并操作、INTERSECT(交操作、EXCEPT(差操作

例如

SELECT *

FROM Item_Emp

WHERE Ino = '201801'

UNION

SELECT *

FROM Item_Emp

WHERE Ino = '202001'

查询项目号为‘201801’和‘202001’项目的职工参与信息

ps:参加UNION的记录结果集必须有相同的列数 

5. 含有子查询的数据更新

5.1 INSERT 与子查询的结合

INSERT INTO Employee_01

SELECT *

FROM Employee

WHERE Dno = '01'

5.2 UPDATE 与子查询的结合

UPDATE Salary

SET Rest = Rest + 200

WHERE Eno IN

                (SELECT Eno

                 FROM Item_Emp

                 WHERE Ino = '201802');

使参加‘201802’项目的职工,工资表中津贴的值都增加200 

5.3 DELETE 与子查询的结合

DELETE FROM Item_Emp

WHERE Eno = 

                (SELECT Eno

                 FROM Employee

                 WHERE Ename = '丁过’);

删除项目参加人中包含‘丁过’的所有元组 

6. 视图

视图是从一个或多个关系(基本表或者已有的视图)导出的关系

视图是虚表,视图不建立索引

6.1 定义视图

CREATE VIEW <视图名>[<列名清单>]

        AS <子查询>

        [WITH CHECK OPTION]

  [WITH CHECK OPTION]:之后对视图进行插入、修改、删除操作,会加上子查询中的条件,如果条件判断成立,则进行插入、修改和删除的操作

6.2 删除试图

DROP VIEW <视图名>

6.3 视图的查询

6.4 视图的更新

不是所有的视图都是可以更新的

6.5 视图的作用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于ERA5气压和温度垂直补偿公式的对比情况

1. 气压和温度垂直补偿对比 「谨代表给个人观点&#xff0c;杠精请自测&#xff0c;对对对&#xff0c;好好好&#xff0c;你说啥都对」。 使用2020-2022陆态网GNSS与探空站并址的48个站点实验&#xff0c;以探空站为真值&#xff0c;验证ERA5精度。怎么确定并址请看前面文章…

C++感受6-Hello World 交互版

变量、常量输入、输出、流getline() 函数读入整行输入Hello() 函数复习新定义函数 Input() 实现友好的人机交互还有 “痘痘” 为什么挤不到的分析…… 1. DRY 原则简介 上一节课&#xff0c;我们写了两版“问候”程序。第一版的最大问题是重复的内容比较多&#xff0c;每一次问…

webAssembly学习及使用rust

学习理解 webAssembly 概念知识&#xff0c;使用 API 进行 web 前端开发。 概念 是一种运行在现代网络浏览器中的新型代码&#xff0c;并且提供新的性能特性和效果。它有一种紧凑的二进制格式&#xff0c;使其能够以接近原生性能的速度运行。C/C、 C#、Rust等语言可以编译为 …

LeetCode题练习与总结:简化路径--71

一、题目描述 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff0c;一个点&#xff08;.&#xff09;表示当前目录本身&a…

RIP小实验配置及缺省路由下发

配置如下&#xff1a; IP配置&#xff1a; IP配置完先查看RIP协议学习到的路由表&#xff0c;没有内容则代表没有开启RIP 启用RIP&#xff1a;这里的rip后跟的ID只具有本地意义&#xff0c;可以在1-65535之间随便取&#xff0c;不同路由器之间都可以取用不同的&#xff0c;为了…

上网行为管理系统功能介绍_上网行为管理实现的功能

上网行为管理系统是一种集成了网络监控、行为分析、策略管理和安全控制等功能的综合性软件解决方案。 它通过对企业内部网络的全面监控和深度分析&#xff0c;帮助管理者了解员工的网络使用习惯、识别潜在风险、优化网络资源配置&#xff0c;并最终实现网络安全和效率的双重提…

hyperf统一请求响应

2024年4月18日08:48:45 以下是两个方案&#xff1a; 1&#xff0c;使用注解&#xff0c;直接返回 <?phpnamespace App\Utils;use App\Utils\GlobalCode; use App\Utils\GlobalMsg; use Hyperf\Contract\ContainerInterface; use Hyperf\Di\Annotation\Inject; use Hyper…

对接浦发银行支付(三)-- QR扫码付

一、使用场景 扫码付&#xff0c;指的是支付平台&#xff0c;给每个用户的具体订单生成一个QR二维码&#xff0c;用户本人或者他人扫码付款。 付款用户可以直接识别二维码&#xff0c;或者下载到本地&#xff0c;通过微信或支付宝扫一扫识别&#xff0c;第二步将跳转至对应的支…

php 笔记 01

01 常见的一些交互概念 什么是交互: 就是前端页面从服务器后台请求数据来渲染 前端页面把获取到的数据发送给后台 服务器: 谁提供数据 谁就是服务器 后台程序(php) 客户端: 谁请求数据 谁就是客户端 前端页面(html页面) 一个网址的访问包括的内容: 协议: 规定了交互双方遵循的…

详细分析Java中的AuthRequest类(附Demo)

目录 前言1. 基本知识2. Demo3. 实战 前言 公共接口&#xff0c;定义了对第三方平台进行授权、登录、撤销授权和刷新 token 的操作 1. 基本知识 先看源码基本API接口&#xff1a; import me.zhyd.oauth.enums.AuthResponseStatus; import me.zhyd.oauth.exception.AuthExce…

SSDReporter for Mac:全面检测SSD健康,预防数据丢失,让您的Mac运行更稳定

SSDReporter for Mac是一款专为Mac用户设计的固态硬盘&#xff08;SSD&#xff09;健康状况检测工具&#xff0c;旨在帮助用户全面了解并监控其Mac设备中SSD的工作状态&#xff0c;从而确保数据的完整性和设备的稳定性。 这款软件具有多种强大的功能。首先&#xff0c;它能够定…

09-ARM开发板的HelloWorld

在ARM开发板上运行x86_64平台程序 前面在Ubuntu系统编译生成了X86_64平台的HelloWorld程序&#xff0c;通过NFS服务器&#xff0c;尝试在开发板上直接运行。 如图所示&#xff0c;程序无法正常运行&#xff0c;终端提示ARM开发板在执行x86架构&#xff08;Intel或AMD&#xff…

笔记:Python猴子吃桃

文章目录 前言一、分析题目二、编写代码1.代码2.优化代码 总结 前言 笔记&#xff1a;猴子吃桃:猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;不过瘾就多吃了一个&#xff0c; 第二天又将剩下的桃子吃了一半&#xff0c;不过瘾又多吃了一个&#xff0c;以后每…

c++使用googletest进行单元测试

googletest进行单元测试 使用Google test进行测试一、单元测试二、使用gmock测试 使用Google test进行测试 使用场景&#xff1a; 在平时写代码中&#xff0c;我们需要测试某个函数是否正确时可以使用Google test使用&#xff0c;当然&#xff0c;我们也可以自己写函数进行验证…

SpringMVC中,/和/*和/**分别表示什么

根路径 "/" 用途 / 是最基本的路径映射&#xff0c;在Spring MVC中它表示应用程序的根路径。当你在浏览器中访问 http://domain.com/ 时&#xff0c;就会匹配到根路径。 特点 这种映射方式主要用于默认的欢迎页或者一些针对根路径的特定处理。例如&#xff0c;你可能…

Docker 停止及删除容器和镜像(单个和所有)

Docker 停止及删除容器和镜像&#xff08;单个和所有&#xff09; 文章目录 Docker 停止及删除容器和镜像&#xff08;单个和所有&#xff09;1. docker其它相关命令2. 停止及删除容器和镜像&#xff08;单个和所有&#xff09;2.1. 停止及删除单个容器2.2. 停止及删除所有容器…

Python数字三角形

在数学中&#xff0c;数字三角形通常指的是由数字组成的三角形结构&#xff0c;其中每个数字是其正上方数字之和。一个经典的例子是帕斯卡三角形&#xff08;Pascals Triangle&#xff09;&#xff0c;它与组合数学中的二项式系数紧密相关。 在Python中&#xff0c;我们可以通…

旅游陪同翻译难吗, 旅游翻译英译中哪家好?

近来&#xff0c;随着中国旅游业的蓬勃发展&#xff0c;旅游陪同翻译的需求也水涨船高&#xff0c;这些专业的翻译服务者为中外游客搭建起友谊的桥梁&#xff0c;引领他们共同探索中国这片古老而神秘的土地 。那么&#xff0c;旅游陪同翻译英译中难吗&#xff1f;我们如何在众多…

混合A*算法

混合A算法是一种路径规划算法,它结合了A搜索和采样优化技术。其原理可以简要概括如下: A*搜索:A*算法是一种启发式搜索算法,用于解决图或者网络中的路径规划问题。它通过维护两个列表(开放列表和封闭列表),根据启发式函数(估计函数)和已走过路径的成本来选择下一个状态…

mysql数据库连接工具(mysql数据库连接工具怎么备份数据不备份表结构)

MySQLWorkbench连接,导入和导出数据库? 1、导出&#xff1a;使用MySQL Workbench连接到MySQL服务器&#xff0c;选择要导出的数据库&#xff0c;右键单击数据库并选择“导出”。选择要导出的表和数据&#xff0c;将导出文件保存为.sql文件。 2、打开MySQL Workbench&#xf…