数据库系统概述之关系数据库标准语言SQL

一、SQL概述

结构化查询语言(Structured Query Language
)SQL是关系数据库的标准语言,也是一个通用的功能极强的关系数据库语言,其功能不仅仅是查询,而是包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。

二、SQL特点

1. 综合统一

非关系模型(层次模型,网状模型)的数据语言
(1)模式数据定义语言(Schema Data Defintion Language 模式DDL)
(2)外模式数据定义语句(Subschema Data Defintion Language 外模式DDL)
(3)数据存储有关的描述语言(Data Definition Language)
  (4) 数据操纵语言(Data Manipulation Language DML)

SQL集数据定义语言、数据操纵语言、数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括以下一系列操作要求:

  • 定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库。对数据库中的数据进行查询和更新。
  • 数据库重构和维护。
  • 数据库安全性、完整性控制,以及事务控制。
  • 嵌入式SQL和动态SQL定义。

这就为数据库应用系统的开发提供了良好的环境。特别是用户在数据库系统投入运行后还可根据需要随时地、逐步地修改模式,并不影响数据库的运行,从而使系统具有良好的可扩展性。

:另外,在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一性,查找、插入、删除、更新等每一种操作都只需一种操作符,从而克服了非关系系统由于信息表示方式的多样性带来的操作复杂性。例如,在DBTG网状数据库系统中,需要两种插入操作符:STORE用来把记录存入数据库,CONNECT用来把记录插入系值(系值是网状数据库中记录之间的一种联系方式)以建立数据之间的联系。

2. 高度非过程化

非关系数据模型的数据操纵语言是“面向过程”的语言,用“过程化”语言完成某项请求必须指定存取路径。而用SQL进行数据操作时,只要提出“做什么”,而无须指明“怎么做”,因此无须了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。

3. 面向集合的操作方式

非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。例如查询所有平均成绩在80分以上的学生姓名,用户必须一条一条地把满足条件的学生记录找出来(通常要说明具体处理过程,即按照哪条跻径,如何循环等)。而SQL采用合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。

4. 以同一种语法结构提供多种使用方式

SQL既是独立的语言,又是嵌入式语言。作为独立的语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到高级语言(例如
C、C++、Java)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供多种不同使用方式的做法,提供了极大的灵活性与方便性。

5. 语言简洁,易学易用

SQL 功能极强,由于设计巧妙,语言十分简洁,完成核心功能只用了9个动词,如表3.2所示。SQL接近英语口语,因此易于学习和使用。

三、SQL基本概念

四、查询数据语句

1. 在SQL语言中,用来对数据库进行查询的语句

2. SELECT语句。语法如下:

SELECT 字段列表
    FROM  数据源
    [ WHERE 筛选条件]
    [ GROUP BY 分组表达式]
    [ HAVING  搜索表达式]
   [ ORDER BY  排序表达式 [ASC | DESC ] ]

3. 语法说明

SELECT 子句用来指示查询所要显示的字段名,字段名之间用逗号分隔。
FROM子句用来指示查询所涉及的数据源,即从哪儿查找数据。数据源可以是基本表名,或者是查询名。
WHERE子句用来指示查询的筛选条件, 使WHERE后的逻辑表达式为“真”的记录是查询所要的记录。
GROUP BY子句用来对查询结果集进行分组,分组表达式可以是列或引用列的非聚合表达式,在选择列表内定义的列的别名不能用于指定分组列,text、ntext 和 image 类型的列不能用于分组。
HAVING子句用来对分组进行筛选。此子句必须与GROUP BY一起使用,不能单独使用。
ORDER BY子句用来对查询结果进行排序,排序字段必须是有序的数据类型。ASC表示升序(由小到大),DESC表示降序(由大到小),ASC为默认值。
⑦ 中括号括起来的内容,表示此项内容可以省略。
⑧ SQL语言中所有的标点符号必须是英文的。
在这里插入图片描述

4. 关运算符:

① Like运算符
Like运算符的功能是判断一个文本类型数据是否与给定的“模式”相匹配,匹配返回“True(真)”;不匹配返回“False
② In、Not In运算符
In运算符用来测试一个数据是否在给定的集合内,如果在返回“True(真)”;不在返回“False(假)”。集合是一个用圆括号括起来的常量列表,常量之间用逗号分隔。
③ Between
Between运算符用来测试一个数据是否在给定的区间内如果在返回“True(真)”;不在返回“False
(假)”。
④TOP n 表示返回查询结果的前n条记录
⑤DISTINCT 关键字表示去掉查询结果的重复值
5. 聚合函数

在这里插入图片描述

注意:ALL表示对符合条件的所有元组进行计算,DISTINCT表示去掉重复元组再进行计算。ALL为默认值,既不加任何修饰时系统认为是ALL。

6. FROM字句

6.1 内连接

语法: 表1 INNER JOIN 表2 ON (连接条件)
功能:对两个表进行自然连接。

实例:
查询选了“XXX”课的学生:学号,姓名。

Select  选课.学号,姓名
 From  学生,选课,课程
 Where  学生.学号=选课.学号   And
        选课.课号=课程.课号   And
        课名=‘XXX’

6.2 左外连接

语法:表1 LEFT OUTER JOIN 表2
ON(连接条件)

注:左外连接保留左边数据源的全部数据,即使右边数据源中没有与之可连接的数据,右边没有数据对应填入空值(NULL)。

6.3 右外连接

语法:表1 RIGHT OUTER JOIN 表2
ON(连接条件) 注:右外连接保留右边数据源的全部数据,如果左边数据源中没有与之对应的数据,那么对应值为空(NULL)。

6.4 外连接

语法:表1 FULL OUTER JOIN 表2
ON(连接条件) 相当于笛卡尔积运算

7. WHERE字句

WHERE字句用来指示元组的筛选条件。
语法:WHERE 逻辑表达式 功能:系统选择使逻辑表达式结果为“真”的元组
可以在逻辑表达式中使用下列运算符:
在这里插入图片描述

8. BETWEEN运算符

语法:变量 [NOT] BETWEEN 初值 AND 终值
功能:用来判断一个量是否在区间[初值,终值]内

9. LIKE运算符

语法:字符型变量 [NOT] LIKE ‘模式’
功能:把“字符型变量 ”的值与给定的字符串模式进行匹配,正确返回“真”。
模式:由字符和通配符构成的字符串。通配符如下表。
在这里插入图片描述

10. order by

OEDER BY字句用来指示对查询结果进行排序。
语法:OEDER BY 排序表达1 [ASC|DESC], 只能对有序类型字段进行排序。

11. 聚合函数

在这里插入图片描述

12. 嵌套查询

所谓嵌套查询就是查询中包含着查询,既先查出一个结果,然后利用其结果再进行查询。 可以使用下列方法构成子查询:

  • 使用比较运算符
  • 使用 IN 谓词;
  • 使用ANY、ALL谓词;
  • 使用 EXISTS 谓词。

13. ANY ,ALL运算符

在使用比较运算符时,可以使用下列谓词进行逻辑表述:
ANY :表示集合中的任意某一个(有一个就行,那个都行),它与SOME的语义相同。
例如,X > ANY ( 12, 34, 67 ) ,X=13 ,结果是“真”
ALL:表示集合中所有的。
例如,X > ALL ( 12, 34, 67 ) ,X=13 ,结果是“假”, X=69,结果为“真”。

14. EXISTS 运算符

EXISTS谓词就是逻辑存在量词 。
带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。
若内层查询结果非空,则外层的WHERE子句返回真值 若内层查询结果为空,则外层的WHERE子句返回假值
由EXISTS引出的子查询,其目标列表达式通常都用 * , 因为带EXISTS的子查询只返回真值或假值,给出列名无 实际意义。

五、插入数据语句

1. 在SQL语言中,用来往数据库的表中插入记录的命令是INSERT语句

2. 语法

INSERT  INTO 基本表名 [(字段列表)]
   {
   
   VALUES  (值列表) | SELECT 字段列表 
                    From  表名2  [Where  <条件>] }

3. 说明

① 字段列表是一些要为其赋值的字段,字段间用逗号分隔。省略字段列表,表示要为该表的全部字段赋值。
②值列表是一组与字段列表相对应的值,值之间用逗号分隔。值列表中值的个数、类型要与字段列表中字段的个数、字段类型一一对应。
③在往一个表插入数据时,对于表中“必填字段”属性为“是”,且未设置默认值的字段必须赋值。
④在往一个表插入数据时,不能为“自动编号”类型的字段赋值。

六、修改数据语句

  1. 在SQL语言中,用来修改表中记录的字段值的命令是UPDATE语句
  2. 语法
语法
UPDATE  表名
  SET 列名=表达式 [,列名=表达式,…] 
  [ WHERE 条件表达式 ]
  1. 说明

列名:指要修改值的字段。 一次可以修改多个字段的值。 如果省略条件,将修改表中的所有记录。

七、删除数据语句

  1. 在SQL语言中,用来删除表中记录的命令是DELETE语句
  2. 语句
DELETE  FROM  表名
      [ WHERE  条件表达式 ]

猜你喜欢

转载自blog.csdn.net/weixin_44763595/article/details/109658182