【数据库】SQL语句

article/2025/8/19 18:06:15

第三章 SQL

SQL(structured Query Language)

SQL概述

SQL特点

  1. 综合统一。
  2. 高度非过程化。
  3. 面向集合的操作方式。
  4. 以同一种语法结构提供多种使用方式。
  5. 语言简洁易学易用。

主要版本

  • SQL-89
  • SQL-92 ,SQL2
  • SQL-99 ,SQL3

数据库结构

SQL语言是集DDL、DML和DCL于一体的数据库语言

在这里插入图片描述

基本表是独立存在的表,一个关系对应一个表

存储文件由一个或多个基本表和表的一个或若干索引组成,它的逻辑结构组成了关系数据库的内模式,物理结构对用户是屏蔽的

视图是虚表,真实的数据仍存放在基表中,数据库只存放视图的定义

分号问题

关于SQL语句句末加不加分号的问题_

  • 在sql标准中是加分号
    * 在程序中不加分号
    * 在SQL Server中可以加,也可以不加

数据类型

常用的数据类型:

  • varchar(n) 可变长度的字符串
  • char(n) 固定长度的字符串
  • int 整型数字,也可以写作integer

视图View

在这里插入图片描述

视图就是基本表的一个虚拟子表

创建视图

在这里插入图片描述

-- 创建一个男生视图
Create View Male as (select * from Student where Ssex='男');
--
select * from Male;

在这里插入图片描述

视图的更新

本质是更新基本表

SQL视图更新的可执行性

  • 如果视图的select目标列包含聚集函数,则不能更新
  • 如果视图的select子句使用了unique或distinct,则不能更新
  • 如果视图中包括了groupby子句,则不能更新
  • 如果视图中包括经算术表达式计算出来的列,则不能更新
  • 如果视图是由单个表的列构成,但并没有包括主键,则不能更新

也就是说,如果当前更新视图的操作与更新基本表的操作有冲突则不能更新

对于由单一Table子集构成的视图,即如果视图是从单个基本表使用选 择、投影操作导出的,并且包含了基本表的主键,则可以更新

DDL语句

引导词:

  • Create(建立)
  • Alter(修改)
  • Drop(撤消)

模式的定义和删除,包括定义Database,Table,View,Index,完整性约束 条件等,也包括定义对象(RowType行对象,Type列对象)

DDL通常由DBA来使用,也有经DBA授权后,由应用程序员来使用

在这里插入图片描述

创建Create table

创建数据库
create database 数据库名;

数据库中的Schema和database区别是什么?_

取决于数据库供应商

(1)MySQL的文档中指出,在物理上,模式与数据库是同义的,所以模式和数据库是一回事。

(2)但是,Oracle的文档却指出,某些对象可以存储在数据库中,但不能存储在schema中。 因此,模式和数据库不是一回事。

(3)而根据这篇SQL Server技术文章SQLServer technical article,schema是数据库SQL Server内部的一个独立的实体。 所以,他们也不是一回事。

创建表
CREATE TABLE <表名>(<列名> <数据类型>[ <列级完整性约束条件> ][,<列名> <数据类型>[ <列级完整性约束条件>] ][,<表级完整性约束条件> ] );

<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件

如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

修正alter table

在这里插入图片描述

撤销表 drop table

drop table tablename #撤销表
drop database 数据库名

数据库的指定与关闭

指定当前数据库
use 数据库名
关闭档期那数据库
close 数据库名

DML语句

引导词:

  • Insert

  • Delete

  • Update

  • Select

    各种方式的更新与检索操作,如直接输入记录,从其他Table(由SubQuery 建立)输入

    各种复杂条件的检索,如连接查找,模糊查找,分组查找,嵌套查找等

    各种聚集操作,求平均、求和、…等,分组聚集,分组过滤等 

查询Select from

在这里插入图片描述

逻辑运算符用 and , or, not 来表示,

结果去重Distinct

在关系模型中要求元组不重复,但现实可以重复,也可以不重复

在Table中要求无重复元组是通过定义Primary key或Unique来保证的;

而在 检索结果中要求无重复元组, 是通过DISTINCT保留字的使用来实现的。

select distinct Cnum from SC;

结果排序order by

在这里插入图片描述

默认升序asc

select  Score from SC order by Score desc;

结果计算

在这里插入图片描述

表达式

-- 查询非同龄人的年龄差
select S1.Sname as S1N , S2.Sname as S2N,S1.Sage-S2.Sage as '年龄差 '
from Student S1 ,Student S2 where S1.Sage>S2.Sage;
聚集函数

在这里插入图片描述

select count(*) from Student;
select max(Sage) from Student;

模糊查询 like

在这里插入图片描述

select * from Student where Sname like '%张%';
select * from Student where Sname like '张_';

多表联合查询 ,

在这里插入图片描述

如果重名可以用as来设置别名,as可省略

Select Select 列名 as 列别名 [ [, 列名 as 列别名]] From 表名1 as 表别名1, 表名2 as 表别名2,Where Where 检索条件 ;

子查询

在这里插入图片描述

  • 相关查询:主查询的表不影响子查询
  • 非相关查询:主查询的表影响子查询
in

在这里插入图片描述

select * From Student Where Sname in ('张三','李宁');
Select Snum, Sname From Student Where Snum in ( Select Snum From SC Where Cnum = '001' ) ;
some all

在这里插入图片描述

-- 找出年纪最大的
Select Sname,Sage from Student where Sage >= all(Select Sage from Student);
-- 找出年纪不是最小的
Select Sname,Sage from Student where Sage > some(Select Sage from Student);

在这里插入图片描述
在这里插入图片描述

exists

存在返回true,在找到行后立即终止查询处理,因此,可以利用EXISTS运算符的此功能来提高查询性能。

在这里插入图片描述

对于主表中的每一行,子查询检查其他表中是否存在对应的行,如果有返回true

-- 找出学过数据库课程的同学的名字
select Sname from Student where exists(
select * from Course,SC where Course.Cnum=SC.Cnum and Course.Cname='数据库' and Student.Snum=SC.Snum
);

分组查询

在这里插入图片描述

-- 求每个学生的平均成绩
select SC.Snum,Avg(Score) as '平均分' from Student,SC where Student.Snum=SC.Snum Group by SC.Snum;

没有包含在聚合函数或 GROUP BY 子句中的属性不能查询或在having中使用

分组过滤

在这里插入图片描述

   select SC.Snum,Avg(Score) as '平均分' from Student,SC where Student.Snum=SC.Snum Group by SC.Snum having avg(SC.Score)>60;

select into

SELECT *
INTO Persons_backup
FROM Person

添加insert into

在这里插入图片描述

删除delete from

Delete From 表名 [ Where 条件表达式] ;

更新update

在这里插入图片描述

DCL语句

引导词:

  • Grant
  • Revoke

安全性控制:授权和撤消授权

关系代数

交并差

有的DBMS不支持

在这里插入图片描述

-- 求学过002 或003 的学号,默认去重
select Snum from SC where Cnum='002'
UNION 
select Snum from SC where Cnum='003';select Snum from SC where Cnum='002'
UNION all
select Snum from SC where Cnum='003';-- 求学过002和003 的学号
select Snum from SC where Cnum='002'
INTERSECT 
select Snum from SC where Cnum='003';-- 求没学过002学生的学号
select distinct Snum from SC 
except
select Snum from SC where Cnum='002';

空值

空值的处理

在这里插入图片描述

现行DBMS的空值处理小结

  • 除is[not]null之外,空值不满足任何查找条件
  • 如果null参与算术运算,则该算术表达式的值为null
  • 如果null参与比较运算,则结果可视为false。在SQL-92中可看成 unknown
  • 如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null

连接

在这里插入图片描述

连接类型(四选一)

  • inner join 内连接
    • 即关系代数中的θ-连接
  • left outer join 左外连接
    • 保留左表的全部元组
  • right outer join 右外连接
  • full outer join 全连接

连接条件(三选一)

  • natural
    • 所有的公共属性相等
  • on <连接条件>
    • 所有的公共属性满足一定的条件
  • using (Col1,Col2,···Coln)
    • 部分属性
select * from Student left outer join SC on Student.Snum=SC.Snum;

select总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/8SoE6uPH.shtml

相关文章

java awt 显示图片_Java开发笔记(一百二十三)AWT图像视图

前面介绍了AWT的几种基础控件,从按钮到文本标签,从输入框到选择框,无一例外都能显示文字,唯独无法显示某张图片文件。本以为AWT会提供专门的控件来显示图片,然而偏偏没有意料之中的图像控件,这可真是弱爆了,居然不能显示姹紫嫣红的图片,让程序员情何以堪呀。不过咱程序…

[AWT] 常用组件

目录 基本组件 牛刀小试 大家好我是Nick,这篇笔记给大家带来的是AWT中常用的一些组件&#xff0c;来跟着我一起看看把~ AWT基本组件 API Button&#xff1a;按钮&#xff0c;可接受单击操作。Canvas&#xff1a;用于绘图的画布。Checkbox&#xff1a;复选框组件&#xff08;…

Java事件处理 java.awt.event

事件&#xff1a;程序对某些操作的响应 例子&#xff1a;点击按钮&#xff0c;打印“Hello” Step1&#xff1a;事件响应类必须能够听到相应的命令 点击按钮如果要响应&#xff0c;必须让响应类实现java.awt.event.ActionListener 接口 Step2&#xff1a;将事件响应的代码&am…

import java.awt 无法_java awt教程import java.awt.*

java awt教程import java.awt.* java.awt.* 这里的java是包名,包对应的就是你磁盘当中的目录,你可以看成文件夹,awt是这个包当中的子包, 连起来也就是这个java包当中的awt子包.中间用"."来连接. "import"是导入包中的类的意思 ,java程序当中,除了java.lo…

Java基础_15 | Java中的图形用户界面包AWT使用详解

1. Java中的AWT包 在Java中&#xff0c; AWT&#xff08;Abstract Window Toolkit&#xff09;是用来处理图形最基本的方式&#xff0c;它可以用来创建Java的图形用户界面程序&#xff0c; AWT包提供&#xff1a; 图形界面组件&#xff1a;如&#xff1a;窗口、按钮、菜单等…

Java AWT布局

java.awt库提供5种基本布局。 每种布局都有其自身的意义,并且它们是完全不同的。 在本文的此处,我们将讨论如何将任何布局应用于框架或面板,并简要讨论每种布局。 java.awt库中可用的5种布局是: 边框布局 网格布局 GridBag布局 卡布局 流程布局 1.边框布局 BorderLayout…

swing java awt_java中AWT和SWing的区别与联系

AWT和Swing都是java中的包。 AWT(Abstract Window Toolkit)&#xff1a;抽象窗口工具包&#xff0c;早期编写图形界面应用程序的包。 Swing &#xff1a;为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。 AWT和Swing的实现原理不同&#xff1a; AWT的图…

java awt 教程,Java AWT教程

Java AWT教程 Java AWT(抽象窗口工具包)是一种API&#xff0c;用于使用Java开发GUI或基于窗口的应用程序。 Java AWT组件是平台相关的&#xff0c;即&#xff0c;组件是根据操作系统视图显示的。 AWT是重量级的&#xff0c;即其组件正在使用OS的资源。 java.awt包为AWT api提供…

swing java awt_Java awt和Swing的区别

Java awt是Java中早期用于编写图形图形应用程序的开发包&#xff0c;Swing是在awt的基础上构建的一套新的图形图像界面系统。简单来说&#xff0c;Swing是awt的扩展以及改良。那么我们来说一下关于Java中awt和swing的关系以及区别。 AWT awt是Abstract Window ToolKit (抽象窗口…

java awt 教程,Java AWT教程介绍

本文概述 Java AWT(抽象窗口工具包)是一种API, 用于使用Java开发GUI或基于窗口的应用程序。 Java AWT组件是依赖于平台的, 即, 根据操作系统的视图显示组件。 AWT是重量级的, 即其组件正在使用OS的资源。 java.awt包为AWT api提供了一些类, 例如TextField, Label, TextArea, Ra…

java awt类_JAVA中AWT编程

JAVA使用AWT和Swing 类完成图形用户界面编程&#xff0c;AWT全称是抽象窗口工具集(Abstract Window Toolkit),它是最早的sun提供的GUI库(Graphics User Interface)图形用户界面。 AWT是窗口框架&#xff0c;它从不同平台的窗口系统中抽取共同组件&#xff0c;当使用AWT编写图形…

AWT介绍

推荐阅读&#xff1a;Java图形界面详解(AWT、Swing) 专栏 文章目录 概述AWT继承体系 概述 Java使用AWT和Swing相关的类可以完成图形化界面编程&#xff0c;其中AWT的全称是抽象窗口工具集(Abstract Window Toolkit),它是sun公司最早提供的GUI库&#xff0c;这个GUI库提供了一些…

AWT概述

目录 AWT继承关系 window Panel 布局管理器 FlowLayout&#xff08;流式布局管理器&#xff09; BorderLayout&#xff08;边界布局管理器&#xff09; GridLayout&#xff08;网格布局管理器&#xff09; GridBagLayout(网格包布局管理器) CardLayout(卡片布局管理器)…

Java基础--awt详解以及简单应用

GUI 图形用户界面 CLI 命令行用户接口 Java为GUI提供的对象存在java.Awt和Javax.Swing两个包中. Java当中如何完成图形化界面的制作呢? AWT:abstract Window ToolKit.需要调用本地系统实现功能.属于重量级控件.依赖于平台.跨平台性不是特别好. Javax.Swing:在AWT基础上.建立一…

【Java基础】之AWT,一篇文章搞懂awt(包含绘图)

&#x1f308;博客主页&#xff1a;屠一乐的博客 &#x1f4c5; 发文时间&#xff1a;2022.3.15 &#x1f388; 一定存在只有你才能做成的事 &#x1f339; 博主水平有限&#xff0c;如有错误&#xff0c;欢迎指正 欢迎给位&#x1f44d;收藏&#x1f48e;评论✉ Java awt &…

JavaGUI界面—窗口、按钮、文本框,及其解决按钮的中文乱码

一. Java图形化界面开发概述 通常情况下&#xff0c;java语言一般是用来开发后台程序的&#xff0c;所谓的后台程序就是部署在服务器端的程序&#xff0c;默默的工作&#xff0c;用户是看不到任何界面的。 事实上&#xff0c;我们使用java语言同样可以完成图形化界面程序的开…

Java GUI编程1---AWT简介

图形用户界面特征 图形用户界面(GUI)编程主要有以下几个特征&#xff1a; 图形界面对象及其框架(图形界面对象之间的包含关系)图形界面对象的布局(图形界面对象之间的位置关系)图形界面对象上的事件响应(图形界面对象上的动作) 在Java图形界面开发中有两种可使用的技术&…

Java图形化界面编程之——AWT

目录 1、AWT简介 2、AWT继承体系 3、Container容器 3.1、Container继承体系 3.2、常用API 3.2.1、Component的常用方法 3.2.2、Container的常用方法 3.3、容器演示 3.3.1、Window 3.3.2、Panel 3.3.3、ScrollPane 4、LayoutManager布局管理器 4.1、FlowLayout&…

Putty的使用及登录

Putty的使用及登录 Putty作为一个很方便并且免费的工具&#xff0c;下面就教大家如何下载并且进行免密登录 下载 https://www.putty.org/ 安装完成后会有如下几个选项&#xff0c;这里简单做一下介绍&#xff0c;第一个是秘钥生产工具&#xff0c;第二个是连接工具&#xff0c…

使用putty连接Linux

修改显示行数&#xff1a; 修改字体&#xff1a; 修改中文显示&#xff1a;