0


【数据库】SQL语句

第三章 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

在这里插入图片描述

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

创建视图

在这里插入图片描述

-- 创建一个男生视图CreateView 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

创建数据库
createdatabase 数据库名;

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

取决于数据库供应商

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

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

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

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

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

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

修正alter table

在这里插入图片描述

撤销表 drop table

droptable tablename #撤销表dropdatabase 数据库名

数据库的指定与关闭

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

DML语句

引导词:

  • Insert
  • Delete
  • Update
  • Select> 各种方式的更新与检索操作,如直接输入记录,从其他Table(由SubQuery 建立)输入> > 各种复杂条件的检索,如连接查找,模糊查找,分组查找,嵌套查找等> > 各种聚集操作,求平均、求和、…等,分组聚集,分组过滤等 

查询Select from

在这里插入图片描述

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

结果去重Distinct

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

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

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

selectdistinct Cnum from SC;

结果排序order by

在这里插入图片描述

默认升序asc

select  Score from SC orderby 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;
聚集函数

在这里插入图片描述

selectcount(*)from Student;selectmax(Sage)from Student;

模糊查询 like

在这里插入图片描述

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

多表联合查询 ,

在这里插入图片描述

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

SelectSelect 列名 as 列别名 [[, 列名 as 列别名] … ]From 表名1as 表别名1, 表名2as 表别名2, … WhereWhere 检索条件 ;

子查询

在这里插入图片描述

  • 相关查询:主查询的表不影响子查询
  • 非相关查询:主查询的表影响子查询
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 whereexists(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 
   Groupby SC.Snum;

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

分组过滤

在这里插入图片描述

select SC.Snum,Avg(Score)as'平均分'from Student,SC where Student.Snum=SC.Snum 
   Groupby SC.Snum havingavg(SC.Score)>60;

select into

SELECT*INTO Persons_backup
FROM Person

添加insert into

在这里插入图片描述

删除delete from

DeleteFrom 表名 [Where 条件表达式];

更新update

在这里插入图片描述

DCL语句

引导词:

  • Grant
  • Revoke

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

关系代数

交并差

有的DBMS不支持

在这里插入图片描述

-- 求学过002 或003 的学号,默认去重select Snum from SC where Cnum='002'UNIONselect Snum from SC where Cnum='003';select Snum from SC where Cnum='002'UNIONallselect Snum from SC where Cnum='003';-- 求学过002和003 的学号select Snum from SC where Cnum='002'INTERSECTselect Snum from SC where Cnum='003';-- 求没学过002学生的学号selectdistinct Snum from SC 
exceptselect 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 leftouterjoin SC on Student.Snum=SC.Snum;

select总结

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

标签: 数据库 sql mysql

本文转载自: https://blog.csdn.net/weixin_50799082/article/details/129220736
版权归原作者 橙子1111 所有, 如有侵权,请联系我们删除。

“【数据库】SQL语句”的评论:

还没有评论