数据库系统概论03-关系数据库标准语言SQL&模式、基本表、视图操作&连接、查询删改语句

3.1关系数据库标准语言SQL

(Structured Query Language )结构化查询语言

数据查询:SELECT

数据定义:CREATE\DROP

数据操纵:INSERT\UPDATE\DELETE

数据控制:GRANT\REVOKE

3.1.1 数据定义

操作对象 创建 删除 修改
模式 CREATE SCHEMA DROP SCHEMA  
CREATE TABLE DROP TABLE ALTER TABLE
视图 CREATE VIEW DROP VIEW  
索引 CREATE INDEX DROP INDEX ALTER INDEX

3.1.2 模式的定义与删除

定义模式

CREATE SCHEMA 名字 AUTHORIZATION 用户名

create schema  "test" authorization wang
CREATE TABLE NAME(SID INT,
                  SNAME CHAR(20)
                  );

删除模式

DROP SCHEMA 名字 CASCADE|RESTRICT

CASCADE:级联     RESTRICT:限制

3.1.3 基本表的定义与修改

定义基本表

CREATE TABLE 表名 (列名 数据类型 列级完整性约束条件,

                                       列名 数据类型 约束条件

                                      表级完整性约束条件);

约束条件:UNIQUE\PRIMARY KEY\NOT NULL

表级完整性约束条件:FOREIGN KEY(Sno) REFERENCES Course(Cno)

数据类型:char(n)定长、varchar(n)变长字符串、BLOB二进制大对象、TIME时分秒、Date年月日等

修改基本表

ALTER TABLE 表名

ADD COLUMN 新列名 数据类型  [约束]

ADD [表级完整性约束条件]

DROP COLUMN 列名 CASCADE|RESTRICT

DROP CONSTRAINT 约束 CASCADE|RESTRICT

DROP COLUMN 列名 数据类型

删除基本表

DROP TABLE 表名 CASCADE|RESTRICT

3.1.3 索引的建立与删除

建立索引

CREATE [UNIQUE] [CLUSTER] INDEX 索引名 ON 表名 (列名)

CREATE UNIQUE INDEX Stuno ON Student(Sno);
ASC升序、DESC降序

修改索引

ALTER INDEX 旧索引名 RENAME TO 新索引名

3.2 数据查询

SELECT ALL|DISTINCT 目标列表达式 FROM  表名或视图名 WHERE 条件表达式 GROUP BY 列名 HAVING  条件表达式 ORDER BY 列名 ASC|DESC

DISTINCT:消除重复行

比较运算符=、>、>=、<、<=、!=或<>、!>、!<

逻辑运算符and、or、not

模糊匹配

like

NO LIKE
%表示任意多个任意字符
_表示一个任意字符
查询姓黄的学生
select * from chanpin where name like '%车';
查询名字以车结尾的产品

范围查询
in表示在一个非连续的范围内
not in表示不在一个非连续的范围内

BETWEEN 下限 AND 上限、 NOT BETWEEN AND

空值查询
is null
is not null

3.2.1 聚合函数

  • COUNT():统计行数量
  • SUM:获取单个列的合计值
  • AVG:计算某个列的平均值
  • MAX:计算列的最大值
  • MIN:计算列的最小值

案例:

(1)查询选修课程的学生人数       SELECT COUNT(DISTINCT Sno) FROM SC;

(2)计算选修1号课程的学生的平均成绩   SELECT AVG(GRADE) FROM SC WHERE Cno='1';

(3)查询学生201507110选修课程的总课程 SELECT SUM(Ccredit) FROM SC,Course WHERE Sno='201507110' AND SC.Sno=Course.Cno

(4)求各个课程号及其相应的选课人数  SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;

(5)选修三门以上课程的学生学号:SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)>3;

GROUP BY 将查询结果按某一列或多列的值分组,值相等为一组。

WHERE 子句与HAVING短句的区别在于作用对象不同。WHERE 子句--基本表或视图、HAVING短句--组,后面可以加聚集函数

3.2.2 连接查询

等值与非等值连接查询

连接运算符是=时,称为等值连接。

在等值连接时中把目标列中重复的属性列去掉则为自然连接

自身连接

给表取别名

SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno = SECOND.Cno

外连接

不满足条件的元组也保存,即保存悬浮元组

SELECT * FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno);

内连接
select a.*,b.* from a inner join b on a.id=b.parent_id 

多表查询

SELECT * FROM SC,Student,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;

嵌套查询

一个SELECT-FROM-WHERE称为查询块

将查询块嵌套在另一个查询块的WHERE子句或HAVING短句的条件中

注意!!!子查询的SELECT语句中不能使用ORDER BY子句,ORDER BY子句只能对最后的查询结果排序

带有IN谓词的子查询

  • 不相关子查询:子查询的查询条件不依赖于父查询

实例:SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN

(SELECT Sdept FROM Student WHERE Sname='amber');

  • 相关子查询:子查询的查询条件依赖于父查询

带比较运算符的子查询:用=、>、<等代替IN

带ANY(SOME)或ALL的子查询,如<ANY、>SOME等

带EXISTS、NOT EXISTS谓词的子查询,不返回任何数据,只返回true或false

3.2.2 集合查询

UNION:并操作,查询结果列数一定要相同,对应项的数据类型也必须相同

INTERSECT:交操作

EXCEPT:差操作

3.3 数据更新

插入元组在: INSERT INTO 表名 属性列 VALUES()

INSERT INTO Dept_age(Sdept,Avg_age) SELECT Sdept,AVG(Sage)FROM Student GROUP BY Sdept;

修改操作

UPDATE Student SET Sage=22 WHERE Sno='201507110';

删除数据

DELETE FROM Student WHERE Sno='201507111';

3.4 视图

3.4.1 建立视图

CREATE VIEW 视图名 (列名,列名,,) AS 子查询 [ WITH CHECK OPTION];

WITH CHECK OPTION:删改查操作时必须满足视图定义的谓词条件(即子查询中的条件表达式)

分组视图:带有聚集函数和GROUP BY 子句的查询来定义视图

删除视图:DROP VIEW 视图名 CASCADE

3.4.2 查询视图

视图消解:从数据字典中取出视图的定义,把定义中的子查询和用户查询结合起来,转换成等价的基本表查询,再执行修改后的查询。(对师徒查询转换成对基本表的查询)

SELECT Sno,Sage FROM IS_Student WHERE Sage <20

转换后:SELECT Sno,Sage FROM Student WHERE Sdept='IS' and Sage <20

3.4.3 更新视图

不是所有试图都是可更新的。由两个以上的基本表导出的,则此视图不允许更新等。

UPDATE Sno,Sage FROM Student WHERE Sdept='IS' and Sage <20

转换为更新基本表

猜你喜欢

转载自blog.csdn.net/xuxuan1997/article/details/83893316