数据库增删改查

//创建数据库
CREATE DATABASE CourseDB
//修改数据库
ALTER DATABASE CourseDB RENAME TO CourseDBNew
//删除数据库
DROP DATABASE CourseDBNew

数据库表增删改查

//创建学生表
CREATE TABLE Student
( StudentID char(13) PRIMARY KEY,
 StudentName varchar(10) NOT NULL,
 StudentGender char(2) NULL,
 BirthDay date NULL,
 Major varchar(30) NULL,
 StudentPhone char(11) NULL
);

-----------------------------------------------------
PRIMARY KEY:主键
NOT NULL  :非空值
NULL :空值
UNIQUE :值唯一
CHECK : 有效值检查
DEFAULT :缺省值
//创建课程表
CREATE TABLE Course
(
    CourseID char(4) PRIMARY KEY,
    CourseName varchar(20) NOT NULL UNIQUE,
    CourseType varchar(10) NULL CHECK(CourseType IN (“基础课”,“专业课”,“选修课”
)),
    CourseCredit smallint NULL,
    CoursePeriod smallint NULL,
    TestMethod char(4) NULL DEFAULT "闭卷考试"
)
//创建课程计划表
CREATE  TABLE  Plan
( CourseID  	char(4)  	NOT  NULL,
  TeacherID  	char(4)  	NOT  NULL,
  CourseRoom  	varchar(30),
  CourseTime  	varchar(30),
  Note  		varchar(50),
  CONSTRAINT	CoursePlan_PK	PRIMARY Key(CourseID,TeacherID)
);
//表约束定义主键
CREATE TABLE  <表名>
  <列名1>  <数据类型>  [列完整性约束]
	<列名2>  <数据类型>   [列完整性约束]	
    <列名3>  <数据类型>  [列完整性约束]
    
    CONSTRAINT  <约束名>  PRIMARY Key(主键列)
   )
//表约束定义代理键
CREATE TABLE  <表名>
  <代理键列名>  <Serial数据类型>  NOT NULL
	<列名2>  <数据类型>  [列完整性约束]	
    <列名3>  <数据类型>  [列完整性约束]
    
    CONSTRAINT  <约束名>  PRIMARY Key(代理键列名)
   )
//表约束定义外键
CREATE TABLE  <表名>
  <列名1>  <数据类型>  [列完整性约束]
	<列名2>  <数据类型>   [列完整性约束]	
    <列名3>  <数据类型>  [列完整性约束]
    
    CONSTRAINT  <约束名>  FOREIGN Key(外键列)
   )

//创建注册表
CREATE TABLE Register
(
CourseRegID serial NOT NULL,
CoursePlanID Int NOT NULL ,
StudentID char(13),
Note varchar(30),
CONSTRAINT Regiser_PK PRIMARY KEY(CourseRegID),
CONSTRAINT Plan_FK FOREIGN KEY(CoursePlanID)
    REFERENCES Plan(CoursePlanID) 
    ON DELETE CASCADE,
CONSTRAint Student_FK FOREIGN KEY(StudentID)
    REFERENCES Student(StudentID)
    ON DELETE CASCADE,
);
改:
//修改数据库表
ALTER TABLE <表名> <修改方式>;
1ADD修改方式,用于增加新列或列完整性约束
ALTER TABLE <表名> ADD <新列名称><数据类型>|[完整性约束]
2DROP修改方式,用于删除指定列或列的完整性约束条件
ALTER TABLE<表名> DROP  COLUMN <列名>
ALTER TABLE<表名> DROP  CONSTRAINT<完整性约束名>
3RENAME修改方式,用于修改表名称、列名称
ALTER TABLE <表名> RENAME TO <新表名>
ALTER TABLE <表名> RENAME <原列名> TO <新列名>
4ALTER修改方式,用于修改列的数据类型
ALTER TABLE <表名> ALTER  COLUMN <列名> TYPE<新的数据类型>
ALTER TABLE Student ADD email varchar(10);
删:
DROP TABLE <表名>;
注意: 该语句将删除该表的所有数据及其结构
DROP TABLE Register

数据库索引创建、修改、删除

创建
CREATE INDEX  <索引名>  ON <表名><(列名)>;
//实例
CREATE INDEX Birthday_idx ON STUDENT (Birthday);
修改
ALTER  INDEX  <索引名> <修改项>;
//例如
ALTER  INDEX  <索引名> RENAME TO <新索引名>;
//修改实例
// 在学生信息表Student中,将原索引Birthday_Idx更名为Bday_Idx,其索引修改SQL语句如下
ALTER  INDEX Birthday_Idx  RENAME TO Bday_Idx;
删除
DROP  INDEX  <索引名> ;
//索引删除实例
DROP INDEX bday_idx;

数据操纵SQL语句

插入语句
INSERT  INTO  <表名|视图名>[<列名表>]  VALUES (列值表);
//实例
INSERT INTO Student VALUES('2022090916018','pluto','男','2005-01-26','软件工程','[email protected]');
//多条数据插入
INSERT INTO Student VALUES('2017220101106','张亮','男','1999-11-21','软件工程','[email protected]');
INSERT INTO Student VALUES('2017220101107','谢云','男','1999-08-12','软件工程','[email protected]');
INSERT INTO Student VALUES('2017220101108','刘亚','女','1999-06-20','软件工程',NULL);
更新语句
UPDATE  <表名|视图名>
SET  <列名1>=<表达式1> [<列名2>=<表达式2>...]
[WHERE   <条件表达式>]
//实例
UPDATE Student SET Email = '[email protected]' WHERE StudentName = 'pluto';
删除语句
DELETE 
FROM  <表名|视图名>
[WHERE   <条件表达式>]
//实例
DELETE FROM Student WHERE StudentName = '张三';

数据查询SQL语句

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

看PPT吧。过于多了

内置函数
典型SQL内置函数类型如下
聚合函数
算术函数
字符串函数
日期时间函数
数据类型转换函数

聚合函数

聚合函数功能
AVG()计算结果集指定列数据的平均值
COUNT()计算结果集行数
MIN()找出结果集指定列数据的最小值
MAX()找出结果集指定列数据的最大值
SUM()计算结果集指定列数据的总和

看PPT吧。过于多了

多表查询和子查询
子查询SQL语句基本格式
SELECT    <目标列>[<目标列>]
FROM  <表名>
WHERE  <条件中嵌套另一关系表的SELECT 查询结果集>
该操作需要关联教师信息表Teacher和学院信息表College,才能获得这些数据。这里可采用子查询方法实现两表关联查询,其查询SQL语句如下

//实例
SELECT  TeacherID,  TeacherName,  TeacherTitle
FROM  Teacher
WHERE  CollegeID  IN
        (SELECT  CollegeID  
     FROM  College
     WHERE  CollegeName=’计算机学院’);
连接关联多表查询SQL语句基本格式
SELECT    <目标列>[<目标列>]
FROM  <表名1><表名2>,…, <表名n>
WHERE  <关系表之间的连接关联条件>
//实例
 在选课管理系统数据库中,希望获得各个学院的教师信息列表,包括学院名称、教师编号、教师姓名、教师性别、职称等信息。要求按学院名称、教师编号分别排序输出,其查询SQL语句如下

SELECT  B.CollegeName AS 学院名称,  A.TeacherID  AS 编号, A.TeacherName  AS 姓名,  A.TeacherGender  AS 性别,  A. TeacherTitle  AS 职称
FROM  Teacher  AS  ACollege  AS  B
WHERE  A.CollegeID=B.CollegeID 
ORDER  BY  B.CollegeName, A.TeacherID;
JOIN ON连接查询语句
SQL语言中,实现多表连接关联查询还可以使用JOINON关键词的语句格式。其中两表连接关联查询的JOINON语句格式如下

SELECT  <目标列>[<目标列>]
FROM  <表名1>  JOIN  <表名2>  ON <连接条件>;
 在选课管理系统数据库中,希望获得各个学院的教师信息,包括学院名称、教师编号、教师姓名、教师性别、职称等信息。要求按学院名称、教师编号分别排序输出,其查询SQL语句如下

实例
SELECT  B.CollegeName AS 学院名称,  A.TeacherID  AS 编号, A.TeacherName  AS 姓名,  A.TeacherGender  AS 性别,  A. TeacherTitle  AS 职称
FROM  TEACHER  AS  A  JOIN  COLLEGE  AS  B
ON  A.CollegeID=B.CollegeID 
ORDER  BY  B.CollegeName, A.TeacherID;
SQL 应用中,有时候也希望输出那些不满足连接条件的元组数据。这时,可使用JOINON外连接方式实现。其实现方式有三种形式,具体如下:

LEFT JOIN: 左外连接,即使没有与右表关联列值匹配,也从左表返回所有的行。
RIGHT JOIN: 右外连接,即使没有与左表关联列值匹配,也从右表返回所有的行。
FULL JOIN: 全外连接,同时进行左连接和右连接,就返回所有行。

数据控制SQL语句

//GRANT 权限授予语句
GRANT  <权限列表>  ON  <数据库对象>  TO  <用户或角色> [ WITH GRANT OPTION ]
//实例
// 在选课管理系统数据库中,将课程注册表REGISTER的数据插入、数据修改、数据删除、数据查询访问权限赋予学生角色RoleS
GRANT  SELECT, INSERT, UPDATE, DELETE  ON  REGISTER  TO  RoleS;
//REVOKE 权限收回语句
REVOKE语句是一种由数据库对象创建者或管理员将赋予其它用户或角色的权限进行收回语句,它可以收回原授予给其他用户或角色的权限。

REVOKE  <权限列表>  ON  <数据库对象>  FROM  <用户或角色> ;
//实例
// 在选课管理系统数据库中,收回学生角色RoleS在课程注册表REGISTER的数据删除访问权限
REVOKE  DELETE  ON  REGISTER  FROM  RoleS;
//DENY权限拒绝语句
//DENY语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通过其组或角色成员继承权限。

DENY  <权限列表>  ON  <数据库对象>  TO  <用户或角色> ;
//实例
// 在选课管理系统数据库中,若拒绝教师角色RoleT对教师表TEACHER的数据删除访问权限
DENY  DELETE  ON  TEACHER  TO  RoleT;

视图SQL语句

创建视图
CREATE  VIEW  <视图名>[(列名1)(列名2),…]  AS  <SELECT查询>
//实例
// 在选课管理系统数据库中,若需要建立一个查看基础课数据的视图BasicCourseView,其创建SQL语句如下

CREATE  VIEW  BasicCourseView  AS
SELECT  CourseName,  CourseCredit,  CoursePeriod,  TestMethod
FROM    COURSE
WHERE  CourseType=‘基础课’;

当视图在数据库中创建后,用户可以像访问关系表一样去操作访问视图。

 使用SELECT语句查询该视图数据,并按课程名称排序输出,其SQL语句如下

SELECT   *
FROM  BasicCourseView
ORDER  BY  CourseName;
删除视图
DROP  VIEW  <视图名>
其中DROP VIEW 为删除视图语句的关键词。<视图名>为将被删除的视图名称。
//实例
 在数据库中,若需要删除名称为BasicCourseView的视图对象,其删除该视图的SQL语句如下
DROP  VIEW  BasicCourseView; 
视图应用

1.数据库开发人员可以将复杂的SQL查询语句封装在视图内,外部程序只需要使用简单的视图访问方式,便可获取所需要的数据。

2.通过视图可以将数据表中敏感数据隐藏起来,外部用户无法得知数据表的完整数据,降低数据库被攻击的风险。此外,还可以保护用户隐私数据。

3.提供一定程度的数据逻辑独立性。通过视图,可提供一定程度的数据逻辑独立性。当数据表结构发生改变,只要视图结构不变,应用程序可以不作修改。

4.集中展示用户所感兴趣的特定数据。通过视图,可以将部分用户不关心的数据进行过滤,仅仅提供他们所感兴趣的数据。