SQL

SQL
  • 综合统一
    集数据定义语言( DDL ),数据操纵语言( DML ),数据控制语言( DCL )功能于一体。
    可以独立完成数据库生命周期中的全部活动:
     定义关系模式,插入数据,建立数据库;
     对数据库中的数据进行查询和更新;
     数据库重构和维护
     数据库安全性、完整性控制等
    用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行。
    数据操作符统一
SQL 的数据定义功能 : 模式定义、表定义、视图和索引的定义

在这里插入图片描述

单表SQL查询
sql语句格式

SELECT [ALL|DISTINCT] < 目标列表达式 >
[ , < 目标列表达式 >] …
FROM < 表名或视图名 >[ ,
< 表名或视图名 > ] …
[ WHERE < 条件表达式 > ]
[ GROUP BY < 列名 1> [ HAVING < 条件表达式 > ] ]
[ ORDER BY < 列名 2> [ ASC|DESC ] ] ;

GROUP BY 子句分组:

细化聚集函数的作用对象(与聚合函数联合使用)
 未对查询结果分组,聚集函数将作用于整个查询结果
 对查询结果分组后,聚集函数将分别作用于每个组
 作用对象是查询的中间结果表
 按指定的一列或多列值分组,值相等的为一组

HAVING 短语与 WHERE 子句的区别:

 作用对象不同
 WHERE 子句作用于基表或视图,从中选择满足条件的元组
 HAVING 短语作用于组,从中选择满足条件的组,与group by联合使用。

多表连接查询

1.等值连接:连接运算符为 =
SELECT Student.* , SC.*
FROM Student , SC
WHERE Student.Sno = SC.Sno ;
2.自身连接:一个表与其自己进行连接
需要给表起别名以示区别
由于所有属性名都是同名属性,因此必须使用别名前缀
eg:查询每一门课的间接先修课(即先修课的先修课)
SELECT FIRST.Cno , SECOND.Cpno
FROM Course FIRST , Course SECOND
WHERE FIRST.Cpno = SECOND.Cno ;
3.外连接
外连接与普通连接的区别:
 普通连接操作只输出满足连接条件的元组
 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
eg:查询每一门课的间接先修课(即先修课的先修课)
SELECT
Student.Sno , Sname , Ssex , Sage , Sdept , Cno , Grade
FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno) ;

嵌套查询

 一个 SELECT-FROM-WHERE 语句称为一个查询块
 将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为嵌套查询
eg:
SELECT Sname /* 外层查询 / 父查询*/
FROM Student
WHERE Sno IN
( SELECT Sno /* 内层查询 / 子查询*/
FROM SC
WHERE Cno= ’ 2 ’ );

子查询的限制

  • 不能使用 ORDER BY 子句
  • 层层嵌套方式反映了 SQL 语言的结构化
  • 有些嵌套查询可以用连接运算替代(内查询与外查询不相关的查询可用连接运算代替)

不相关子查询:

子查询的查询条件不依赖于父查询

  • 由里向外 逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件
嵌套查询

一、带有 IN 谓词的子查询

eg:查询与“刘晨”在同一个系学习的学生。 此查询要求可以分步来完成

SELECT Sno , Sname , Sdept
FROM Student
WHERE Sdept IN
     (SELECT Sdept
       FROM Student
      WHERE Sname= ‘ 刘晨 ’ ) ;

用自身连接完成 eg 查询要求

 SELECT S1.Sno , S1.Sname , S1.Sdept
 FROM Student S1 , Student S2
 WHERE S1.Sdept = S2.Sdept AND S2.Sname = ' 刘晨 ' ;

二、 带有比较运算符的子查询

  • 当能确切知道内层查询返回单值时,可用比较运算符( > , < , = ,>=,<=, != 或 < > )。
  • 与 ANY 或 ALL 谓词配合使用

三、 带有 ANY ( SOME )或 ALL 谓词的子查询

  • 需要配合使用比较运算符

ANY 大于子查询结果中的某个值
ALL 大于子查询结果中的所有值
< ANY 小于子查询结果中的某个值
< ALL 小于子查询结果中的所有值
= ANY 大于等于子查询结果中的某个值
= ALL 大于等于子查询结果中的所有值
<= ANY 小于等于子查询结果中的某个值
<= ALL 小于等于子查询结果中的所有值
= ANY 等于子查询结果中的某个值
=ALL 等于子查询结果中的所有值(通常没有实际意义)
!= (或 <> ) ANY 不等于子查询结果中的某个值
!= (或 <> ) ALL 不等于子查询结果中的任何一个值

  • ANY (或 SOME ), ALL 谓词与聚集函数、 IN 谓词的等价转换关系
    在这里插入图片描述
    四、 带有 EXISTS 谓词的子查询
集合查询

集合操作的种类
 并操作 UNION
 交操作 INTERSECT
 差操作 EXCEPT
参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同

UNION - 将多个查询结果合并起来时,系统自动去掉重复元组。
UNION ALL - 将多个查询结果合并起来时,保留重复元组

视图

视图的特点
 虚表,是从一个或几个基本表(或视图)导出的表
 只存放视图的定义,不存放视图对应的数据
 基表中的数据发生变化,从视图中查询出的数据也随之改变

创建视图

语句格式
CREATE VIEW
< 视图名 > [(< 列名 > [ , < 列名 >]…)]
AS < 子查询 >
[WITH CHECK OPTION] ;
组成视图的属性列名:全部省略或全部指定
子查询不允许含有 ORDER BY 子句和 DISTINCT短语

删除视图

语句的格式:DROP VIEW < 视图名 > ;
 该语句从数据字典中删除指定的视图定义;
 如果该视图上还导出了其他视图,使用 CASCADE 级联删除语句,把该视图和由它导出的所有视图一起删除 ;
 删除基表时,由该基表导出的所有视图定义都必须显式地使用 DROP VIEW 语句删除;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值