精华内容
下载资源
问答
  • 数据库操作语言种类
    千次阅读
    2020-06-12 18:05:37

    sql语句种类

    结构化查询语言(Structured Query Languages)简称SQL或“S-Q-L”,是一种数据库查询、程序设计和数据库管理语言,用于存取数据、查询数据、更新数据和管理关系数据库系统;同时也是数据库脚本文件的扩展名。包括以下四种类型。
    1、数据操纵语言(Data Manipulation Language)简称 DML:用来操纵数据库中数据的命令。包括:select、insert、update、delete。 
    
    2、数据定义语言(Data Definition Language)简称 DDL:用来建立数据库、数据库对象和定义列的命令。包括:create、alter、drop。 
    可用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等:CREATE TABLE(表)/VIEW(视图)/INDEX(索引)/SYN(同义词)/CLUSTER(簇)
    
    3、数据控制语言(Data Control Language)简称 DCL:用来控制数据库组件的存取许可、权限等的命令。包括:grant、deny、revoke。 
    
    4、事务控制(Transaction control):commit、rollback、savepoint。
    
    更多相关内容
  • SQL Server数据库操作类是C#语言的,可实现对SQL Server数据库的增删改查询等操作,并且该操作类可实现对图片的存储
  • 第3章 结构化查询语言---SQL语言:目录 1、了解SQL语言的特点 2、理解SQL语言的功能 3、掌握SQL语言创建...结构化查询语言,它是一种对数据库进行访问与操作的数据子语言。 SQL可嵌入到编程语言(如JAVA、C#等)中

    目录

    第3章 结构化查询语言---SQL语言:目录

    SQL简介:结构化查询语言

    SQL发展过程:了解即可

    SQL应用情况:市面上大多数数据库都是用SQL语言,有些数据库有扩展

    SQL能做什么?:增删查改,建新库表等

    SQL语句类别:增删查改和其它

    1. 数据操纵语言:增删查改

    2. 数据定义语言:创删表等

    3. 数据控制语言:权限

    4. 事务处理语言:事物

    5. 游标控制语言:游标

    SQL支持三级模式:外模式是自己看到的,模式是表,内模式为存储文件

    SQL特点:同意,非过程,集合,简单

    综合统一:统一不同类型的SQL语句

    高度非过程化:高层不考虑低层

    面向集合的操作方式:集合化

    语言简洁,易学易用,核心功能只需9个动词:简单易用

    PostgreSQL的数据类型

    (1)数字数据类型用于指定表中的数字数据

    (2)字符串数据类型

    (3)日期/时间数据类型

    (4)其他数据类型

    一、创建数据库

    一、数据库创建SQL语句

    1. 语句基本格式

    2.语句执行

     查看新建的数据库

     3、使用 pgAdmin 工具的图形化界面

    二、数据库修改SQL语句

    1.语句基本格式:ALTER修改

    2.语句执行

    三、数据库删除SQL语句

    1. 语句基本格式:DROP删除

    2.语句执行

    二、数据库表创建SQL语句

    1.语句基本格式:CREATE TABLE创建表

    2. 列完整性约束

    3. SQL语句应用

    5.其它的列完整性约束应用

    例  选课管理系统数据库的课程信息表Course设计需求

    创建课程信息表Course的SQL语句

    在PostgreSQL服务器中,执行SQL语句创建数据库关系表Course

    6.表约束定义主键:复合主键,多个主键,约束名自己起名

    例:选课管理系统数据库的开课计划表Plan设计需求

    创建开课计划表Plan的SQL语句

    在PostgreSQL中,执行SQL语句创建数据库关系表Plan

    使用表约束定义主键的优点:

    7.表约束定义代理键:代理键,没有实际意义的键,只是一个序号

    例  选课管理系统数据库的开课计划表Plan设计需求

    创建开课计划表Plan的SQL语句

    在PostgreSQL中,执行SQL语句创建数据库关系表Plan

    8.表约束定义外键:外键,其它表的主键

    例 选课管理系统数据库的注册表Register设计需求

    创建注册表Register的SQL语句

    在PostgreSQL中,执行SQL语句创建数据库关系表Register。​

    二、修改表结构SQL语句:ALTER TABLE修改

    1.语句基本格式:ALTER TABLE修改

    2.主要语句类型:ADD增,DROP删,RENAME改名,ALTER COLUMN改类型

    3.表修改举例

    三、删除表结构SQL语句:DROP TABLE删除

    1.语句基本格式:DROP TABLE删除

    2.表删除举例

    例 执行SQL语句删除注册表Register

    3.2 数据定义SQL语句:增删查改

    一、什么是索引

    二、索引作用及特点

    三、索引创建SQL语句

    四、索引修改SQL语句

    五、索引删除SQL语句

    3.3数据操纵SQL语句

    一、数据插入SQL语句

    二、数据更新SQL语句

    三、数据删除SQL语句

    3.4数据查询SQL语句-单表数据查询

    一、 数据查询SQL语句格式

    二、从单个表读取指定列

    1.语句基本格式

    2.数据查询实例

    3.数据查询SQL语句及执行结果

    三、从单个表读取指定行

    1.语句基本格式

    2.数据查询实例

    3.数据查询SQL语句及执行结果

    四、从单个表读取指定行和列

    1.语句基本格式

    2.数据查询实例

    3.数据查询SQL语句及执行结果

    五、Where条件子句

    六、对结果集进行排序

    3.4数据查询SQL语句—内置函数、分组统计

    一、SQL内置函数类型

    二、SQL聚合函数

    三、SQL内置函数与分组统计

    3.4 数据查询SQL语句-多表关联查询

    一、子查询与多表关联

     二、使用连接关联多表查询

    三、SQL    JOIN …ON连接查询语句

    四、外部连接

    3.5数据控制SQL语句  

    一、什么是数据控制SQL语句:权限控制:授权,收权,拒绝

    二、GRANT权限授予语句

    三、REVOKE权限收回语句

    四、DENY权限拒绝语句

    3.6 视图SQL语句

    一、什么是视图

    二、视图创建SQL语句

    三、视图删除

    四、SQL视图应用

    1.使用视图简化复杂SQL查询操作

    2.使用视图提高数据访问安全性

    3. 提供一定程度的数据逻辑独立性

    4. 集中展示用户所感兴趣的特定数据

    3.7 PostgreSQL数据库SQL实践

    一、项目案例——工程项目管理系统

    二、执行SQL语句创建ProjectDB数据库

    三、执行SQL语句创建ProjectDB数据库的关系表 

     四、执行SQL语句插入数据

    五、执行SQL语句实现多表关联查询

    六、执行SQL语句实现视图创建操作


    第3章 结构化查询语言---SQL语言:目录

    1、了解SQL语言的特点

    2、理解SQL语言的功能

    3、掌握SQL语言创建数据库、表、视图、索引

    4、掌握SQL语言的数据操纵语言

    5、掌握SQL语言的查询语句

    6、掌握SQL语言控制管理数据库对象

    7、在PostgreSQL环境下进行项目实践

    SQL简介:结构化查询语言

    SQL:Structured Query Language,

    结构化查询语言,它是一种对数据库进行访问与操作的数据子语言。

    SQL可嵌入到编程语言(如JAVA、C#等)中执行或在DBMS工具中执行。

    SQL不仅仅是一个查询工具,还用于控制DBMS提供给用户的所有功能,包括:

    1. 数据定义(Data definition)
    2. 数据检索(Data retrieval)
    3. 数据操纵(Data manipulation)
    4. 存取控制(Access control)
    5. 数据共享(Data sharing):
    6. 数据完整性(Data integrity)

    SQL发展过程:了解即可

    20世纪70年代由IBM公司开发

    1986 ANSI的数据库委员会批准了SQL作为关系型数据库语言的美国标准。

    1987年国际标准化组织(ISO)将其采纳为国际标准SQL86。

    1989年更新成为国际标准SQL-89

    1992年更新成为国际标准SQL-92(或称SQL2)

    1999年更新成为国际标准SQL-99(或称SQL3)

    2008年更新成为国际标准SQL2008

    SQL应用情况:市面上大多数数据库都是用SQL语言,有些数据库有扩展

    绝大多数主流的关系型数据库管理系统采用了SQL语言标准

    • Oracle
    • Sybase
    • DB2
    • Microsoft SQL Server
    • Access
    • MySql
    • …….

    其中一些数据库管理系统对SQL语句进行了再开发和扩展

    如Sybase、Microsoft SQL Server将操作语言扩展为Transaction-SQL;

    Oracle将操作语言扩展为PL/SQL。

    SQL能做什么?:增删查改,建新库表等

    • SQL 可从数据库取回数据
    • SQL 可在数据库中插入新的纪录
    • SQL 可更新数据库中的数据
    • SQL 可从数据库删除记录
    • SQL 可创建新数据库
    • SQL 可在数据库中创建新表
    • SQL 可在数据库中创建存储过程
    • SQL 可在数据库中创建视图
    • SQL 可以设置表、存储过程和视图的权限

    SQL语句类别:增删查改和其它

    1. 数据操纵语言:增删查改

    (Data Manipulation Language,DML)是SQL语言中用于查询和增删修改表数据的语句

    • SELECT - 从数据库表中获取数据
    • UPDATE - 更新数据库表中的数据
    • DELETE - 从数据库表中删除数据
    • INSERT - 向数据库表中插入数据

    2. 数据定义语言:创删表等

    (Data Definition Language,DDL)是SQL语言中用于创建或删除表。也可以定义索引(键),规定表之间间的约束。

    • CREATE DATABASE - 创建新数据库
    • ALTER DATABASE - 修改数据库
    • CREATE TABLE - 创建新表
    • ALTER TABLE - 变更(改变)数据库表
    • DROP TABLE - 删除表
    • CREATE INDEX - 创建索引(搜索键)
    • DROP INDEX - 删除索引

    3. 数据控制语言:权限

    (Data Control Language,DCL)是SQL语言中用于对数据访问

    权进行控制的语句。

    • GRANT – 授予用户对数据对象的权限
    • DENY – 拒绝授予用户对数据对象的权限
    • REVOKE – 撤消用户对数据对象的权限

    4. 事务处理语言:事物

    (Transaction Process Language,TPL)是SQL语言中用于数据库内部事务处理的语句。

    BEGIN TRANSACTION – 开始事务

    COMMIT – 提交事务

    ROLLBACK – 回滚事务

    5. 游标控制语言:游标

    (Cursor Control Language,CCL)是SQL语言中用于数据库

    游标操作的语句。

    DECLARE CURSOR – 定义游标

    FETCH INTO – 提交游标数据

    CLOSE CURSOR– 关闭游标

    SQL支持三级模式:外模式是自己看到的,模式是表,内模式为存储文件

    SQL特点:同意,非过程,集合,简单

    综合统一:统一不同类型的SQL语句

    ① 集DDL、DML、DCL的功能于一体

    ② 可以在运行后根据需要随时修改模式

    ③ 数据操作符统一

    高度非过程化:高层不考虑低层

    ① 只需提出“做什么”,而无需指明“怎么做”。

    ② 无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成

    面向集合的操作方式:集合化

    操作对象和结果均为集合

    语言简洁,易学易用,核心功能只需9个动词:简单易用

    ① DDL:CREATE、DROP、ALTER

    ② DML: SELECT、INSERT、UPDATE、DELETE

    ③ DCL:GRANT、REVOKE

    PostgreSQL的数据类型

    (1)数字数据类型用于指定表中的数字数据

    名称

    描述

    存储大小

    范围

    smallint

    存储整数,小范围

    2字节

    -32768  +32767

    integer

    存储整数。使用这个类型可存

    储典型的整数

    4字节

    -2147483648  +2147483647

    bigint

    存储整数,大范围。

    8字节

    -9223372036854775808 

    9223372036854775807

    decimal

    用户指定的精度,精确

    变量

    小数点前最多为131072个数字; 小数点后

    最多为16383个数字。

    numeric

    用户指定的精度,精确

    变量

    小数点前最多为131072个数字; 小数点后

    最多为16383个数字。

    real

    可变精度,不精确

    4字节

    6位数字精度

    double

    可变精度,不精确

    8字节

    15位数字精度

    serial

    自动递增整数

    4字节

    1  2147483647

    bigserial

    大的自动递增整数

    8字节

    1  9223372036854775807

    (2)字符串数据类型

    数据类型

    描述

    char(size)

    size是要存储的字符数。固定长度字符串,右边的空格填充到相等大小的字符。

    character(size)

    size是要存储的字符数。 固定长度字符串 右边的空格填充到相等大小的字符。

    varchar(size)

    这里size是要存储的字符数。 可变长度字符串

    character varying(size)

    这里size是要存储的字符数。 可变长度字符串。

    text

    可变长度字符串。

    (3)日期/时间数据类型

    名称

    描述

    存储大小

    最小值

    最大值

    精度

    timestamp [ (p) ]

    日期和时间,

    8字节

    4713 BC

    294276 AD

    1微秒

    date

    日期

    4字节

    4713 BC

    5874897 AD

    1

    time [ (p) ]

    时间(无日期)

    8字节

    0:00:00

    24:00:00

    1微秒

    interval [ fields ] [ (p) ]

    时间间隔

    12字节

    -178000000

    178000000

    1微秒

    (4)其他数据类型

    名称

    描述

    存储大小

    money

    货币金额

    8字节

    boolean

    它指定truefalse的状态。

    1字节

    一、创建数据库

    PostgreSQL 创建数据库可以用以下三种方式:

    1、使用 CREATE DATABASE SQL 语句来创建。

    2、使用 createdb 命令来创建。

    3、使用 pgAdmin 工具。

    一、数据库创建SQL语句

    1. 语句基本格式

    CREATE DATABASE <数据库名>;

    例 执行SQL语句创建一个选课管理数据库CourseDB。

    CREATE DATABASE CourseDB;

     

     

     

    2.语句执行

    在PostgreSQL服务器中,执行SQL语句创建数据库CourseDB。

     查看新建的数据库

     3、使用 pgAdmin 工具的图形化界面

    二、数据库修改SQL语句

    1.语句基本格式:ALTER修改

    ALTER DATABASE <数据库名> <修改内容>;

    例 将选课管理数据库CourseDB名称修改为 CourseManageDB

    ALTER DATABASE CourseDB RENAME TO CourseManageDB;

    2.语句执行

    在PostgreSQL服务器中,执行SQL语句修改数据库CourseDB名称。

    三、数据库删除SQL语句

    1. 语句基本格式:DROP删除

    DROP DATABASE <数据库名>;

    例 删除前面创建的选课管理数据库CourseManageDB

    DROP DATABASE CourseManageDB;

    2.语句执行

    在PostgreSQL服务器中,执行SQL语句删除数据库CourseManageDB。

    二、数据库表创建SQL语句

    1.语句基本格式:CREATE TABLE创建表

    CREATE TABLE <表名>
    
    (<列名1> <数据类型> [列完整性约束],
    
    <列名2> <数据类型> [列完整性约束],
    
    <列名3> <数据类型> [列完整性约束],
    
    …
    
    );

    2. 列完整性约束

    列完整性约束关键词

    • PRIMARY KEY——主键
    • NOT NULL——非空值
    • NULL——空值
    • UNIQUE——值唯一:作为候选键,选完主键以后,要求唯一的候选键
    • CHECK——有效性检查:避免低级错误
    • DEFAULT——缺省值

    3. SQL语句应用

    例  选课管理数据库的学生表Student设计需求

    字段名称

    字段编码

    数据类型

    字段大小

    必填字段

    是否为键

    学号

    StudentID

    文本

    13

    主键

    姓名

    StudentName

    文本

    10

    性别

    StudentGender

    文本

    2

    出生日期

    BirthDay

    日期

    短日期

    专业

    Major

    文本

    30

    手机号

    StudentPhone

    文本

    11

    创建学生表Student的SQL语句

    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
    );
    

    在PostgreSQL服务器中,执行SQL语句创建数据库关系表Student

    5.其它的列完整性约束应用

    在关系表创建SQL语句中,除了使用主键约束、是否空值约束外。有时还会使用如下约束。

    • UNIQUE——值唯一
    • CHECK——有效性检查
    • DEFAULT——缺省值 :没指定的情况下,默认为缺省值

    例  选课管理系统数据库的课程信息表Course设计需求

    字段名称

    字段编码

    数据类型

    字段大小

    必填字段

    是否为键

    备注

    课程编号

    CourseID

    文本

    4

    主键

    课程名

    CourseName

    文本

    20

    取值唯一

    课程类别

    CourseType

    文本

    10

    基础

    课”、

    专业

    课”、

    选修课”

    学分

    CourseCredit

    数字

    短整型

    学时

    CoursePeriod

    数字

    短整型

    考核方式

    TestMethod

    文本

    10

    缺省值

    闭卷考

    试”

    创建课程信息表Course的SQL语句

    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)	NOT NULL DEFAULT '闭卷考试'
    );
    

    在PostgreSQL服务器中,执行SQL语句创建数据库关系表Course

    6.表约束定义主键:复合主键,多个主键,约束名自己起名

    使用列 约束关 键词PRIMARY KEY定 义 表 的 主 键 列 只 能 定 义 单 列 主 键,

    若要定义由多个列构成的复合主键,则需要使用表约束方式来定义。

    CREATE TABLE <表名>
    ( <列名1> <数据类型> [列完整性约束],
    <列名2> <数据类型> [列完整性约束],
    <列名3> <数据类型> [列完整性约束],
    …
    CONSTRAINT <约束名> PRIMARY Key(主键列)
    );
    

    例:选课管理系统数据库的开课计划表Plan设计需求

    字段名称

    字段编码

    数据类型

    字段大小

    必填字段

    是否为键

    课程编号

    CourseID

    文本

    4

    主键

    教师编号

    TeacherID

    文本

    4

    主键

    地点

    CourseRoom

    文本

    30

    时间

    CourseTime

    文本

    30

    备注

    Note

    文本

    50

    创建开课计划表Plan的SQL语句

    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)
    );
    

    在PostgreSQL中,执行SQL语句创建数据库关系表Plan

    使用表约束定义主键的优点:

    • 便于定义复合主键
    • 可命名主键约束
    • 便于定义代理键

    7.表约束定义代理键:代理键,没有实际意义的键,只是一个序号

    在一些关系表中,为了方便数据处理,可以使用代理键去替代复合主键。

    在SQL语句中,关系表的代理键采用表约束方式来定义。

    CREATE TABLE <表名>
    ( <代理键列名> <Serial数据类型> NOT NULL,
    <列名2> <数据类型> [列完整性约束],
    <列名3> <数据类型> [列完整性约束],
    …
    CONSTRAINT <约束名> PRIMARY Key(代理键列名)
    );
    

    例  选课管理系统数据库的开课计划表Plan设计需求

    字段名称

    字段编码

    数据类型

    字段大小

    必填字段

    是否为键

    开课编号

    CoursePlanID

    自动编号

    长整型

    代理键

    课程编号

    CourseID

    文本

    4

    教师编号

    TeacherID

    文本

    4

    地点

    CourseRoom

    文本

    30

    时间

    CourseTime

    文本

    30

    备注

    Note

    文本

    50

    创建开课计划表Plan的SQL语句

    CREATE TABLE Plan
    ( CoursePlanID	serial	NOT NULL,
    CourseID	char(4)	NOT NULL,
    TeacherID	char(4)	NOT NULL,
    CourseRoom	varchar(30),
    CourseTime	varchar(30),
    Note	varchar(50),
    CONSTRAINT CoursePlan_PK PRIMARY Key(CoursePlanID)
    );
    

    在PostgreSQL中,执行SQL语句创建数据库关系表Plan

    8.表约束定义外键:外键,其它表的主键

    在数据库中,一些关系表之间存在关联。在一个表中作为主键的列,在另外的关联表中则作为外键。

    CREATE TABLE <表名>
    ( <列名1> <数据类型> [列完整性约束],
    <列名2> <数据类型> [列完整性约束],
    <列名3> <数据类型> [列完整性约束],
    …
    CONSTRAINT <约束名> FOREIGN Key(外键列)
    );
    

    例 选课管理系统数据库的注册表Register设计需求

    字段名称

    字段编码

    数据类型

    字段大小

    必填字段

    是否为键

    注册编号

    CourseRegID

    自动编号

    长整型

    代理键

    开课编号

    CoursePlanID

    数字

    长整型

    外键

    学号

    StudentID

    文本

    13

    外键

    备注

    Note

    文本

    30

    创建注册表Register的SQL语句

    CREATE TABLE Register
    ( CourseRegID	serial 	NOT NULL,
    CoursePlanID	Int	NOT NULL,
    StudentID		char(13),
    Note		varchar(30),
    CONSTRAINT CourseRegID_PK PRIMARY Key(CourseRegID),
    CONSTRAINT CoursePlanID_FK FOREIGN Key(CoursePlanID)
    	EFERENCES	Plan(CoursePlanID)    --当前表CoursePlanID参照Plan表的CoursePlanID
    ON DELETE CASCADE,    --级联删除,当在开课表中删除,注册表中相关信息一并删除
    CONSTRAINT StudentID_FK FOREIGN KEY(StudentID)
    	REFERENCES Student(StudentID)
    ON DELETE CASCADE
    );
    

    在PostgreSQL中,执行SQL语句创建数据库关系表Register。

    二、修改表结构SQL语句:ALTER TABLE修改

    1.语句基本格式:ALTER TABLE修改

    ALTER TABLE <表名> <修改方式>;

    2.主要语句类型:ADD增,DROP删,RENAME改名,ALTER COLUMN改类型

    1)ADD修改方式,用于增加新列或列完整性约束

    ALTER TABLE <表名> ADD <新列名称><数据类型>|[完整性约束]

    2)DROP修改方式,用于删除指定列或列的完整性约束条件

    ALTER TABLE<表名> DROP COLUMN <列名>;
    
    ALTER TABLE<表名> DROP CONSTRAINT<完整性约束名>;

    3)RENAME修改方式,用于修改表名称、列名称

    ALTER TABLE <表名> RENAME TO <新表名>;
    
    ALTER TABLE <表名> RENAME <原列名> TO <新列名>;

    4)ALTER修改方式,用于修改列的数据类型

    ALTER TABLE <表名> ALTER COLUMN <列名> TYPE<新的数据类型>;

    3.表修改举例

    学生表Student原有结构及数据

     例 在学生表Student中,新增一个“email”列

    学生表Student修改后结构及数据 

    三、删除表结构SQL语句:DROP TABLE删除

    1.语句基本格式:DROP TABLE删除

    DROP TABLE <表名>;

    注意: 该语句将删除该表的所有数据及其结构

    2.表删除举例

    例: 删除注册表Register表及其数据,可以使用如下语句。

    DROP TABLE Register;

    例 执行SQL语句删除注册表Register

    3.2 数据定义SQL语句:增删查改

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

    一、什么是索引

    索 引 (Index )是一种按照关系表中指定列的取值顺序组织元组数据存储的数据结构,使用它可以加快表中数据的查询访问

    二、索引作用及特点

    索引作用:支持对数据库表中数据快速查找,其机理类似图书目录可以快速定位章节内容。

    索引优点:

    • 提高数据检索速度

    • 可快速连接关联表

    • 减少分组和排序时间

    索引开销:

    • 创建和维护索引都需要较大开销

    • 索引会占用额外存储空间

    • 数据操纵因维护索引带来系统性能开销

    三、索引创建SQL语句

    1.语句基本格式

    CREATE INDEX<索引名>ON <表名><(列名)>;

    2.索引创建实例

    例 在学生信息表Student中,为出生日期Birthday列创建索引,以便支持按出生日期快速查询学生信息。

    CREATE INDEX Birthday_Idx ON STUDENT (Birthday);

    3.索引创建SQL执行

    四、索引修改SQL语句

    1.语句基本格式

    ALTER INDEX <索引名> <修改项>;

    例如,索引名称修改语句格式如下:

    ALTER INDEX <索引名> RENAME TO <新索引名>;

    2.索引修改实例

    例 在学生信息表Student中,将原索引Birthday_Idx更名为Bday_Idx,其索引修

    改SQL语句如下:

    ALTER INDEX Birthday_Idx RENAME TO Bday_Idx;

    3.索引修改SQL执行

    五、索引删除SQL语句

    1.语句基本格式

    DROP INDEX <索引名> ;

    2.索引删除实例

    例 在学生信息表Student中,删除bday_idx索引,其索引删除SQL语句如下:

    DROP INDEX bday_idx;

    3.索引删除SQL执行

    3.3数据操纵SQL语句

    本节学习目标

    掌握SQL语言的数据插入语句

    掌握SQL语言的数据修改语句

    掌握SQL语言的数据删除语句

    一、数据插入SQL语句

    1.语句基本格式

    INSERT INTO <表名|视图名>[<列名表>] VALUES (列值表);

    2.数据插入实例

    例 在学生信息表Student中,插入一个新的学生数据,如:

    “2017220101105”,“柳因”,“女”,“1999-04-23”,“软件工程”,“liuyin@163.com”。

    INSERT INTO Student VALUES('2017220101105','柳因','女','1999-04-23','软件工程', 'liuyin@163.com');

    3.数据插入SQL语句执行

    4.多条数据插入

    在数据库表插入操作中,还可以执行一组SQL数据插入语句,实现在表中多行数据插入。

    例 在学生信息表STUDENT中,一次插入多个学生数据,其插入数据SQL

    语句如下:

    INSERT INTO Student VALUES('2017220101106',' 张 亮 ',' 男 ','1999-11-21',' 软 件 工 程','zhangl@163.com');
    INSERT INTO Student VALUES('2017220101107',' 谢 云 ',' 男 ','1999-08-12',' 软 件 工 程','xiey@163.com');
    INSERT INTO Student VALUES('2017220101108','刘亚','女','1999-06-20','软件工程',NULL);

    5.多条数据插入SQL语句执行

     

     6.数据插入结果查看

    二、数据更新SQL语句

    1.语句基本格式

    UPDATE <表名|视图名>
    SET <列名1>=<表达式1> [,<列名2>=<表达式2>...]
    [WHERE <条件表达式>];

    2.数据更新实例

    例 在学生信息表Student中,学生“赵东”的原有Email数据为空,现需要修改为“zhaodong@163.com”。

    UPDATE Student
    SET Email='zhaodong@163.com'
    WHERE StudentName='赵东';

    3.数据更新SQL语句执行

    4.数据更新结果查看

    三、数据删除SQL语句

    1.语句基本格式

    DELETE
    FROM <表名|视图名>
    [WHERE <条件表达式>];

    2.数据删除实例

    例 在学生信息表STUDENT中,删除姓名为 “张亮”的学生数据,其数据删除的SQL语句如下:

    DELETE
    FROM STUDENT
    WHERE StudentName='张亮';

    3.数据删除SQL语句执行

     

    4.数据删除结果查看 

    3.4数据查询SQL语句-单表数据查询

    一、 数据查询SQL语句格式

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

    二、从单个表读取指定列

    在关系数据库中,最简单的数据查询操作就是从单个关系表中读取指定列的数据,即关系的投影操作。

    1.语句基本格式

    SELECT <目标列>[,<目标列>…]
    FROM <关系表>;

    2.数据查询实例

    例 学生信息表Student原始数据如下图所示。 

    要求:从Student表中读取学生的学号、姓名、专业列数据输出。

    3.数据查询SQL语句及执行结果

     

    若希望从Student表查询所有列数据,其数据查询SQL语句及执行结果如下: 

    若希望从Student表中查询专业列(Major)数据,其数据查询SQL语句及执行结果如下:

    为了在结果集中过滤重复数据,可以在查询语句的输出列前加入DISTINCT关键字,其执行结果如下。

    三、从单个表读取指定行

    SQL查询语句也可以从一个关系表中读取满足条件的指定行数据,即完成关系数据的元组选择操作。

    1.语句基本格式

    SELECT *
    FROM <关系表>
    WHERE <条件表达式>;
    

     

    2.数据查询实例

    例 学生信息表Student原始数据如下图所示。 

     

    要求:从Student表中查询男生数据

    3.数据查询SQL语句及执行结果

     

    四、从单个表读取指定行和列

    在SQL查询语句中,还可以从一个关系表中读取指定行与指定列范围内的数据。既完成关系的行选择,又完成关系的列投影操作。

    1.语句基本格式

    SELECT <目标列>[,<目标列>…]
    FROM <关系表>
    WHERE <条件表达式>;
    

     

    2.数据查询实例

    例 学生信息表Student原始数据如下图所示

     要求:从Student表中查询性别为“男”的学生学号、学生姓名、性别、专业数据

    3.数据查询SQL语句及执行结果

    五、Where条件子句

    在WHERE子句中可以使用如下方式,指定范围数据。

    1 ) 使 用 BETWEEN .. AND 关 键 词 来 限 定 列 值 范 围 , 还 可 以 使 用 关 键 词LIKE与通配符来限定查询条件。

    2)使用通配符来限定字符串数据范围。下划线(_)通配符用于代表一个未指定的字符。百分号(%)通配符用于代表一个或多个未指定的字符。

    例1 若要从STUDENT表中查询出生日期在“2000-01-01”到“2000-12-30”的学生数据。其数据查询SQL语句如下:

    SELECT *
    FROM STUDENT
    WHERE BirthDay BETWEEN '2000-01-01' AND '2000-12-30';
    

    数据查询SQL语句及执行结果

    例2 若要从STUDENT表中查询邮箱域名为“@163.com”的学生数据。其数据

    查询SQL语句如下:

    SELECT *
    FROM STUDENT
    WHERE Email LIKE '%@163.com'; 

    数据查询SQL语句及执行结果

    在SQL查询Where子句中,还可以使用多个条件表达式,

    并通过逻辑运算符(AND、OR、NOT)连接操作,以及使用IN或NOT IN关键词,进一步限定结果集的数据范围。

    例3 从STUDENT表中查询性别为“男”,并且专业为“软件工程”的学生数据,其数据查询SQL语句如下。

    SELECT StudentID, StudentName, StudentGender, Major
    FROM STUDENT
    WHERE Major='软件工程' AND StudentGender='男';

    数据查询SQL语句及执行结果

    例4 在STUDENT表查询时,使用IN关键字限定范围”计算机应用”专业的学生。其SQL语句如下所示。

    SELECT    StudentID, StudentName, StudentGender, Major
    FROM    STUDENT
    WHERE    Major IN  ('计算机应用');

    数据查询SQL语句及执行结果

    六、对结果集进行排序

    在SELECT查询语句返回的结果集中,行的顺序是任意的。如果需要结果集排序,可以在SELECT语句中加入ORDER BY关键字。

    例 若要从STUDENT表中按学生出生日期降序输出学生数据,其数据查询SQL语句如下。

    SELECT *
    FROM STUDENT
    ORDER BY Birthday DESC;

    在默认情况下,SQL查询的结果集是按指定列值的升序排列。可以使用关键词ASC和DESC选定排序是升序或降序。

     数据查询SQL语句及执行结果

     如果结果集需要按多个列排序,可以分别加入关键字ASC或DESC改变。

    例 若要将STUDENT表查询数据,首先按出生日期降序排列,然后按姓名升序排列,其数据查询SQL语句如下
     

    SELECT *
    FROM STUDENT
    ORDER BY Birthday DESC , StudentName ASC;

    数据查询SQL语句及执行结果

    3.4数据查询SQL语句—内置函数、分组统计

    一、SQL内置函数类型

    SQL语言提供了大量内置函数,支持对SELECT查询结果数据进行处理。

    典型SQL内置函数类型如下:

    • 聚合函数
    • 算术函数
    • 字符串函数
    • 日期时间函数
    • 数据类型转换函数

    二、SQL聚合函数

    聚合函数是一些对关系表中数值属性列进行计算并返回一个结果数值的函数。

    聚合函数

    功能

    AVG()

    计算结果集指定列数据的平均值

    COUNT()

    计算结果集行数

    MIN()

    找出结果集指定列数据的最小值

    MAX()

    找出结果集指定列数据的最大值

    SUM()

    计算结果集指定列数据的总和

    例 学生信息表Student原始数据如下图所示。

    例1 若要统计Student表中的学生人数,在SELECT语句中可以使用COUNT()函数来计算,其查询SQL语句如下:
     

    SELECT COUNT(*) AS 学生人数
    FROM Student;

    例2 找出STUDENT表中年龄最大和年龄最小的学生出生日期,其查询SQL语句如下:
     

    SELECT Min(Birthday) AS 最大年龄,Max(Birthday) AS 最小年龄

    三、SQL内置函数与分组统计

    在SQL语言中,可使用内置函数对查询结果集进行分组数据统计。

    这是通过在SELECT语句中加入Group By子语句来实现。

    分组统计SQL语句基本格式:

    SELECT    统计函数(目标列)
    FROM <表名>
    [WHERE 条件]
    GROUP BY <目标列>
    [Having 条件]; 

    例 学生信息表Student原始数据如下图所示。

    例1 若要分专业统计Student表中的学生人数。在SELECT语句中可以使用GROUP BY分组子句完成统计,其查询SQL语句如下:
     

    SELECT Major AS 专业, COUNT(StudentID) AS 学生人数
    FROM Student
    GROUP BY Major; 

    例2 若要分专业统计STUDENT表中男生人数,但限定只显示人数大于2的人数,其查询SQL语句如下:

    SELECT Major AS 专业, COUNT(StudentID) AS 学生人数
    FROM Student
    WHERE StudentGender='男'
    GROUP BY Major
    HAVING COUNT(*)>2;

    3.4 数据查询SQL语句-多表关联查询

    一、子查询与多表关联

    在实际应用中,通常需要关联多表才能获得所需的信息。在SELECT查询语句中,可使用子查询方式实现多表关联查询。

    子查询SQL语句基本格式:

    SELECT    <目标列>[,<目标列>…]
    FROM <表名>
    WHERE <条件中嵌套另一关系表的SELECT 查询结果集>

    例 在选课管理系统数据库中,希望能检索出“计算机学院”的教师名单。

    该操作需要关联教师信息表Teacher和学院信息表College,才能获得这些数据。

    这里可采用子查询方法实现两表关联查询,其查询SQL

    语句如下:

    SELECT TeacherID, TeacherName, TeacherTitle
    FROM Teacher
    WHERE CollegeID IN
    (SELECT CollegeID
    FROM College
    WHERE CollegeName='计算机学院');

    例 在选课管理系统数据库中,希望能检索出“计算机学院”的教师名单。

    该操作需要关联教师信息表Teacher和学院信息表College,才能获得这些数据。

    这里可采用子查询方法实现两表关联查询,其查询SQL语句如下:

    SELECT TeacherID, TeacherName, TeacherTitle
    FROM Teacher T, College C
    WHERE T.CollegeID=C.CollegeID and C.CollegeName='计算机学院');

     

     二、使用连接关联多表查询

    在使用多个表查询时,子查询只有在结果数据均来自一个表的情况下才有用。

    但如果需要从两个或多个表中获取结果数据,就不能使用子查询,而需要采用连接关联多表查询。

    连接关联多表查询SQL语句基本格式:

    SELECT    <目标列>[,<目标列>…]
    FROM <表名1>,<表名2>,…, <表名n>,
    WHERE <关系表之间的连接关联条件>

    例 在选课管理系统数据库中,希望获得各个学院的教师信息列表,

    包括学院名称、教师编号、教师姓名、教师性别、职称等信息。

    要求按学院名称、教师编号分别排序输出,其查询SQL语句如下:
     

    SELECT B.College Name AS 学 院 名 称 , A.TeacherID AS 编号 ,
    A.TeacherName AS 姓名, A.TeacherGender AS 性别, A. TeacherTitle AS 职称
    FROM Teacher AS A,College AS B
    WHERE A.CollegeID=B.CollegeID
    ORDER BY B.CollegeName, A.TeacherID;

    三、SQL    JOIN …ON连接查询语句

    在SQL语言中,实现多表连接关联查询还可以使用JOIN…ON关键词的语句格式。

    其中两表连接关联查询的JOIN…ON语句格式如下:
     

    SELECT <目标列>[,<目标列>…]
    FROM <表名1> JOIN <表名2> ON <连接条件>; 

    例 在选课管理系统数据库中,希望获得各个学院的教师信息,

    包括学院名称、教师编号、教师姓名、教师性别、职称等信息。

    要求按学院名称、教师编号分别排序输出,其查询SQL语句如下:

    SELECT B.College Name 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;

    四、外部连接

    前节介绍的多表连接方式在SELECT查询语句称为内部连接。

    在一些特殊情况下,如关联表中一些行的主键与外键不匹配,查询结果集就会丢失部分数据 

    例 在选课管理数据库中,希望查询所有开设课程的学生选课情况,

    包括课程名称、任课教师、选课学生人数。这需要关联课程信息表COURSE、教师信息表TEACHER、开课计划表PLAN、选课注册信息表REGISTER。

    其连接查询的SQL语句如下:

    SELECT C.CourseName AS 课程名称, T.TeacherName AS 教师,
    COUNT (R.CoursePlanID)    AS 选课人数
    FROM    COURSE    AS    C    JOIN    PLAN    AS    P    ON    C.CourseID=P.CourseID
    JOIN    TEACHER    AS    T    ON    P.TeacherID=T.TeacherID
    JOIN    REGISTER    AS    R    ON    P.CoursePlanID=R.CoursePlanID
    GROUP    BY C.CourseName, T.TeacherName;

    问题:在上面的内连接查询中,只能找出有学生注册的课程名称和选课人数,但不能找出没有学生注册的课程名称。

    在SQL 应用中,有时候也希望输出那些不满足连接条件的元组数据。这时,

    可使用JOIN…ON外连接方式实现。其实现方式有三种形式,具体如下:

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

    例 在选课管理系统数据库中,希望能查询所有开设课程的学生选课情况,

    包括课程名称、任课教师、选课学生人数。这需要关联课程信息表COURSE、开课计划表CPLAN、教师信息表TEACHER、选课注册信息表REGISTER。若使用左外连接查询,

    该JOIN…ON连接查询的SQL语句如下:
     

    SELECT C.CourseName AS 课程名称, T.TeacherName AS 教师,
    COUNT (R.CoursePlanID) AS 选课人数
    FROM COURSE AS C JOIN PLAN AS P
    ON C.CourseID=P.CourseID
    JOIN TEACHER AS T ON P.TeacherID=T.TeacherID
    LEFT JOIN REGISTER AS R ON P.CoursePlanID=R.CoursePlanID
    GROUP BY C.CourseName, T.TeacherName;

    3.5数据控制SQL语句
      

    一、什么是数据控制SQL语句:权限控制:授权,收权,拒绝

    在SQL语言中,数据控制SQL语句是一种可对用户数据访问权进行控制的操作语句,

    它可以控制特定用户或角色对数据表、视图、存储过程、触发器等数据库对象的访问权限

    主要有如下语句:

    • GRANT授权语句

    • REVOKE收权语句

    1. • DENY拒绝权限语句

    二、GRANT权限授予语句

    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;

    3.6 视图SQL语句

    一、什么是视图

    视图——是一种通过基础表或其它视图构建的虚拟表

    它本身没有自己的数据,而是使用了存储在基础表中的数据。

    二、视图创建SQL语句

    1.语句基本格式

    CREATE VIEW <视图名>[(列名1),(列名2),…] AS <SELECT查询>;

    2.视图创建实例

    例 在选课管理系统数据库中,若需要建立一个查看基础课数据的视图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 BasicCourseView;

    三、视图删除

    当数据库不再需要某视图时,可以在数据库中删除该视图。

    1.语句基本格式

    DROP VIEW <视图名>;

    其中DROP VIEW 为删除视图语句的关键词。<视图名>为将被删除的视图名称。

    2.视图删除实例

    例 在数据库中,若需要删除名称为BasicCourseView的视图对象,其删除该视图的SQL语句如下:

    DROP VIEW BasicCourseView;

    四、SQL视图应用

    1.使用视图简化复杂SQL查询操作

    数据库开发人员可以将复杂的SQL查询语句封装在视图内,

    外部程序只需要使用简单的视图访问方式,便可获取所需要的数据。

    例 在选课管理系统数据库中,查询选修“数据库系统原理与开发”课程的学生名单。

    这需要关联课程信息表COURSE、开课计划表PLAN、选课注册信息表REGISTER、学生信息表STUDENT,其查询SQL语句如下:

    SELECT C.CourseName AS 课程名称, S.StudentID AS 学号, S.StudentName AS 姓名
    FROM    COURSE AS C,PLAN AS P, REGISTER AS R, STUDENT AS S
    WHERE    C.CourseID=P.CourseID AND    C.CourseName=’数据库系统原理与开发’AND
    P.CoursePlanID=R.CoursePlanID AND R.StudentID=S.StudentID;

    上面这个SQL语句是较复杂和冗长,为了让外部程序简单地实现该信息查询,可以先定义一个名称为DatabaseCourseView视图,其创建SQL语句如下:

    CREATE VIEW DatabaseCourseView AS
    SELECT C.CourseName AS 课程名称, S.StudentID AS 学号, S.StudentName AS 姓名
    FROM COURSE AS C,PLAN AS P, REGISTER AS R, STUDENT AS S
    WHERE C.CourseID=P.CourseID AND C. CourseName='数据库系统原理与开发' AND P.CoursePlanID=R.CoursePlanID AND R.StudentID=S. StudentID;

    当DatabaseCourseView视图被创建完成后,外部程序就可以通过一个简单

    的SELECT语句查询视图数据,其操作语句如下:

    SELECT * FROM DatabaseCourseView;

    2.使用视图提高数据访问安全性

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

    此外,还可以保护用户隐私数据。

    例 在选课管理系统数据库中,除管理部门用户外,其他用户只能浏览教师基本信息,如教师编号、教师姓名、性别、职称、所属学院。教师其他信息需要被隐藏,可通过视图来处理,其视图创建SQL语句如下:
     

    CREATE VIEW BasicTeacherInfoView AS
    SELECT T.TeacherID AS 编号, T.TeacherName AS 教师姓名, T.TeacherGender
    AS 性别, T. TeacherTitle AS 职称, C.CollegeName AS 所属学院
    FROM TEACHER AS T, COLLEGE AS C 
    WHERE T.CollegeID=C. CollegeID;

    当BasicTeacherInfoView视图被创建完成后,

    外部程序就可以通过一个简单的SELECT语句查询视图数据,其操作语句如下:
     

    SELECT * FROM BasicTeacherInfoView
    ORDER BY 所属学院 , 教师姓名;

    3. 提供一定程度的数据逻辑独立性

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

    4. 集中展示用户所感兴趣的特定数据

    通过视图,可以将部分用户不关心的数据进行过滤,仅仅提供他们所感兴趣的数据。

    3.7 PostgreSQL数据库SQL实践

    一、项目案例——工程项目管理系统

    在 某 工 程 项 目 管 理 系 统 中 , 将 使 用PostgreSQL 数 据 库 管 理 系 统 工 具pgAdmin4创建一个工程项目数据库ProjectDB。

    在该数据库中,包含部门表(Department)、员工表(Employee)、项目表(Project)和任务表(Assignment)。各个数据库表结构设计如下。

    部门表(Department)

    字段名称

    字段编码

    数据类型

    字段大小

    必填字段

    是否为键

    部门编号

    DepartmentCode

    Char

    3

    主键

    部门名称

    DepartmentName

    Varchar

    30

    部门简介

    DepartmentIntro

    Varchar

    200

    部门地点

    DepartmentAddr

    Varchar

    50

    部门电话

    DepartmentTel

    Varchar

    20

    员工表(Employee)

    字段名称

    字段编码

    数据类型

    字段大小

    必填字段

    是否为键

    员工编号

    EmployeeID

    Serial

    主键

    员工姓名

    EmployeeName

    Varchar

    10

    性别

    Gender

    Char

    2

    默认值

    所属部门

    Department

    Char

    3

    外键

    学历

    Degree

    Char

    4

    本科

    究生其它

    出生日期

    Birthday

    Date

    联系电话

    Phone

    Char

    11

    邮箱

    Email

    Varchar

    20

    取值唯一

    项目表(Project)

    字段名称

    字段编码

    数据类型

    字段大小

    必填字段

    是否为键

    项目编号

    ProjectID

    Serial

    代理键

    项目名称

    ProjectName

    Varchar

    50

    所属部门

    Department

    Char

    30

    外键

    估算工时

    EstimateHours

    Int

    开始日期

    StartDate

    Date

    结束日期

    EndDate

    Date

    任务表(Assignment)

    字段名称

    字段编码

    数据类型

    字段大小

    必填字段

    是否为键

    项目编号

    ProjectID

    int

    主键,外键

    员工编号

    EmployeeID

    int

    主键,外键

    完成工时

    FishedHours

    int

    工时成本

    Cost

    int

    二、执行SQL语句创建ProjectDB数据库

    三、执行SQL语句创建ProjectDB数据库的关系表 

     四、执行SQL语句插入数据

    Department表数据 

    Employee表数据

    Project表数据 

    Assignment表数据 

    五、执行SQL语句实现多表关联查询

    例:在工程项目管理系统数据库ProjectDB中,管理部门希望了解各个项目参与员工的任务工时列表。

    实现该信息查询处理,需要关联Employee表、Project表和Assignment表。查询输出内容应包含(“项目名称”、“员工姓名”、“实际工时”)数据。
     

    SELECT ProjectName AS 项目名称, EmployeeName AS 员工姓名,
    FishedHours AS 实际工时
    FROM Employee AS E, Project AS P, Assignment AS A
    WHERE E.EmployeeID =A.EmployeeID AND P.ProjectID=A.ProjectID
    ORDER BY P.ProjectID, A.EmployeeID;

    六、执行SQL语句实现视图创建操作

    例:在工程项目管理系统数据库ProjectDB中,管理部门希望能查询输出员工通信录。

    为了保护员工的一些隐私信息,可以采用视图方式查询输出,

    其输出内容包含(“员工编号”、“员工姓名”、“手机”、“邮箱”)基本数据。

    该视图的创建SQL语句如下:

    CREATE VIEW ContactView AS
    SELECT EmployeeID AS 员工编号, EmployeeName AS 员工姓名,
    Phone AS 电话, Email AS 邮箱
    FROM Employee;

    视图查询SQL语句执行
     

    SELECT * FROM ContactView ORDER BY 员工编号;
    展开全文
  • 数据库定义与操作语言 一、ScoreDB中各个表 二、实验目的 理解和掌握数据库SQL DDL语句的语法; 掌握SQL 程序设计基本规范,熟练运用SQL语言实现数据基本查询语句、嵌套查询等; 熟悉数据库的数据更新操作; ...

    数据库定义与操作语言

    一、ScoreDB中各个表

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

    二、实验目的

    理解和掌握数据库SQL DDL语句的语法;
    掌握SQL 程序设计基本规范,熟练运用SQL语言实现数据基本查询语句、嵌套查询等;
    熟悉数据库的数据更新操作;
    熟练SQL有关视图的操作。

    三、实验内容

    导入ScoreDB数据库,按照“实验2数据”,修改四张表内各个字段的类型以及宽度。完成后,实现以下操作:
    2.1数据查询

    1. 查询选修了“数据结构”课程的同学姓名。
    SELECT StudentName
    FROM Student,Course,Score
    WHERE Student.studentNo=Score.studentNo AND Course.courseNo=Score.courseNo AND courseName='数据结构'
    
    1. 查询选修了课程号为’001’或’002’课程的学生学号、课程号和分数。
    SELECT studentNo,courseNo,score
    FROM Score
    WHERE courseNo='001' OR courseNo='002'
    
    1. 查询学过课程号为’001’但是没有学过课程号为’002’的课程的学生学号、课程号和分数。
    select studentNo,courseNo,score
    from Score S1
    where  courseNo!='002' and exists(select  * from Score as S2 where courseNo='001')
    

    select studentNo, courseNo, score
    from Score
    where studentNo in (select studentNo from score where courseNo='001') and studentNo not
    in (select studentNo from score where courseNo='002')
    
    

    4.查询至少有一门课与学号为’0700001’的学生所学相同的学生的学号和姓名。

    select distinct studentName,Student.studentNo
    from Student,Score
    where Student.studentNo=Score.studentNo and courseNo in(select courseNo from Score where studentNo='0700001')
    

    select distinct a. studentNo, studentName
    from Student a, score b
    where a. studentNo=b. studentNo and courseNo in (select courseNo from score 
    where studentNo ='0700001' ) and a. studentNo<>'0700001'
    
    

    5.查询至少选修了学号为“0700001”学生所选修的所有课程的学生姓名。

    select distinct studentName
    from Student,Score x
    where Student.studentNo=x.studentNo and not exists(select* from Score y where y.studentNo='0700001' and not exists(select* from Score z where z.studentNo=x.studentNo and z.courseNo=y.courseNo))
    

    ps:
    如果只需要查询学号可以用如下代码

    select distinct studentNo
    from Score x
    where   not exists(select* from Score y where y.studentNo='0700001' and not exists(select* from Score z where z.studentNo=x.studentNo and z.courseNo=y.courseNo))
    

    6.查询本月过生日的学生信息。

    select *
    from Student
    where MONTH(birthday)=MONTH(getdate())
    

    7.查询没有成绩的学生信息。(使用IN语句)

    select *
    from  Student
    where studentNo in(select studentNo from Score where score is null)
    

    8.查询(没有)选修过课程的学生姓名。(使用IN语句)

    select studentName,studentNo
    from Student
    where studentNo not in(select studentNo from Score )
    

    9.查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩。

    select Student.studentNo,studentName,S.avg_score
    from Student,(select Score.studentNo,avg(score) avg_score from Score where score<60 group by Score.studentNo having count(*)>=2) as S
    where S.studentNo=Student.studentNo
    

    select a.studentNo, studentName, avg (score) avg_ score
    from score a, student b
    where a.studentNo in (select studentNo from score where score<60
    group by studentNo
    having count(*)>=2) and a. studentNo=b. studentNo
    group by a. studentNo, studentName
    
    

    10.查找选修过课程名中包含“系统”的课程的同学学号、姓名和所在班级。

    select Student.studentNo,studentName,classNo
    from Student,Score,Course
    where Student.studentNo=Score.studentNo and Score.courseNo=Course.courseNo and courseName like'%系统%'
    

    11.查找同时选修过“高等数学”和“离散数学”两门课程的同学
    学号、姓名以及该同学所选修的所有课程的课程名和相应成绩,按学号(升序)、成绩(降序)排序输出。

    select Student.studentNo,studentName,courseName,score
    from Student,Score,Course
    where Student.studentNo=Score.studentNo  and Score.courseNo=Course.courseNo and Student.studentNo IN(SELECT Score.studentNo from Score,Course
    where courseName='高等数学'and Course.courseNo=Score.courseNo and studentNo in(select Score.studentNo from Score,Course where courseName='离散数学'
    and Course.courseNo=Score.courseNo))
    order by Student.studentNo ASC,score DESC
    

    select s. studentNo, studentName, courseName, score
    from Student s, Course c, Score sc
    where s. studentNo =sc. studentNo and c. courseNo=sc. courseNo
    and s. studentNo in (select studentNo
    from Score
    where courseNo in (select courseNo from Course where courseName ='
    高等数学'))
    and s. studentNo in(select studentNo
    from Score
    where courseNo in (select courseNo from Course where courseName='离
    散数学'))
    order by studentNo asc,score desc
    
    

    12.查询所有学生的选修信息,显示信息包括学号,选修门数,平均分和总分。

    select studentNo,COUNT(courseNo) cnt ,avg(score) avg_s,sum(score) sum_s
    from Score
    group by(studentNo)
    

    13.查询先修课是“计算机基础”的课程。(分别用自连接和IN语句实现)
    ①自连接

    select C1.courseNo
    from Course C1,Course C2
    where C1.priorCourse=C2.courseNo and C2.courseName='计算机基础'
    

    ②IN语句
    方法1:

    select courseNo
    from (select C1.courseNo
    from Course C1,Course C2
    where C1.priorCourse=C2.courseNo and C2.courseName='计算机基础') as C
    

    方法2:

    select courseNo
    from Course
    where priorCourse in (select courseNo from Course where courseName='计算机基础')
    

    14.查询至少有一门课程成绩超过85分的所有学生的信息,显示信息包括学号、课程号和分数。

    select Student.studentNo,Score.courseNo,score
    from Student,Score
    where Student.studentNo=Score.studentNo and Score.studentNo in (select studentNo from Score where score>85)
    

    select *
    from score
    where score>85
    
    

    15.查询至少有两门课程成绩超过85分的所有学生的学号。

    select studentNo 
    from Score 
    where score>85
    group by (studentNo)
    having count(*)>=2
    

    16.查询平均成绩超过80分且选修3门及以上的所有学生的信息,显示信息包括学号、课程数目和分数。

    select Student.studentNo,sc.courseNo,cnt_course,sc.score
    from Student,(select s.studentNo,count(courseNo)cnt_course from Score s group by s.studentNo having avg(s.score)>80 and count(*)>=2) as S,Score sc
    where s.studentNo=Student.studentNo and s.studentNo=sc.studentNo
    

    select studentNo, avg (score) avg_ score, count (*) count_ _cno
    from score
    group by studentNo
    having avg(score)>80 and count (*)>=3
    
    

    17.查询所选修课程的成绩大于所有“002”号课程成绩的同学学号及相应课程的课程号和成绩。

    select studentNo,courseNo,score
    from Score
    where score >(select MAX(score) from Score where courseNo='002')
    

    select studentNo, courseNo, score
    from Score
    where (score>all(select score from Score where courseNo='002') )
    
    

    18.查询选修了所有课程的学生姓名。

    select studentName
    from Student
    where not exists(select *from Course where not exists (select *from Score where studentNo =Student.studentNo and courseNo=Course.courseNo))
    
    展开全文
  • 数据库的四种语言

    万次阅读 2017-11-01 20:28:34
    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。 1. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE 子句组成的查询块: SELECT ...
    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。

    1. 数据查询语言DQL
    数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
    子句组成的查询块:
    SELECT <字段名表>
    FROM <表或视图名>
    WHERE <查询条件>

    2 .数据操纵语言DML
    数据操纵语言DML主要有三种形式:
    1) 插入:INSERT
    2) 更新:UPDATE
    3) 删除:DELETE

    3. 数据定义语言DDL
    数据定义语言DDL用来创建数据库中的各种对象-----表、视图、
    索引、同义词、聚簇等如:
    CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
    | | | | |
    表 视图 索引 同义词 簇

    DDL操作是隐性提交的!不能rollback

    4. 数据控制语言DCL
    数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
    数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
    1) GRANT:授权。


    2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
    回滚---ROLLBACK
    回滚命令使数据库状态回到上次最后提交的状态。其格式为:
    SQL>ROLLBACK;


    3) COMMIT [WORK]:提交。


        在数据库的插入、删除和修改操作时,只有当事务在提交到数据
    库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看
    到所做的事情,别人只有在最后提交完成后才可以看到。
    提交数据有三种类型:显式提交、隐式提交及自动提交。下面分
    别说明这三种类型。


    (1) 显式提交
    用COMMIT命令直接完成的提交为显式提交。其格式为:
    SQL>COMMIT;


    (2) 隐式提交
    用SQL命令间接完成的提交为隐式提交。这些命令是:
    ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
    EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。


    (3) 自动提交
    若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
    系统将自动进行提交,这就是自动提交。其格式为:
    SQL>SET AUTOCOMMIT ON;
    展开全文
  • C#ADO.NET数据库操作

    千次阅读 2022-04-04 17:34:59
    C#ADO.NET数据库操作的相关介绍,并对涉及到的类进行介绍说明
  • 理解和掌握数据库DDL语言,能够熟练使用SQL语句创建、修改和删除数据库和基本表 实验内容 掌握SQL DDL语句的语法,特别是各种参数的具体含义和使用方法;使用SQL语句创建、修改和删除数据库和基本表 注意事项: ...
  • 根据SQL指令完成的数据库操作的不同,可以将SQL指令分为四类: (1)DDL(Data Definition Language,数据定义语⾔) 用于完成对数据库对象(数据库数据表、视图、索引等)的创建、删除、修改 (2)DML(Data ...
  • 数据库之DML的基本操作

    千次阅读 2020-03-05 22:18:43
    DML(数据操作语言,对表记录的操作(增,删,改)) 1.插入数据 insert into 列名 values (列值1,列值2,…) ; 在表名后给出要插入的列名,其他没有指定的列插入NILL。 在values后给出列值,值的顺序和个数...
  • 前言: ...理解和掌握数据库DDL语言,能够熟练地使用SQL DDL语句创建、修改和删除数据库、模式和基本表。 2实验内容和要求 理解和掌握SQL DDL语句的语法,特别是各种参数的具体含义和使用方法;使用SQ...
  • Python 操作数据库

    千次阅读 2020-09-02 20:32:52
    虽然数据库的种类有很多,如 SQLite、MySQL、Oracle 等等,但是它们的功能基本都是一样的,为了对数据库进行统一的操作,大多数语言都提供了简单的、标准化的数据库接口(API)。在 Python Database API 2.0 规范中...
  • R语言--操作MySQL数据库

    千次阅读 2020-04-29 20:47:19
    用R操作MySQL数据库,可以说是数据分析师必备的技能了,本文介绍RMySQL包,可以在R语言中对数据库进行增删改查的操作。 软件版本 win10 64bit r3.6.1 rstudio 1.2 RMySQL 0.10.20 安装包 install.packages('R...
  • 微信小程序云开发:数据库操作

    千次阅读 2019-06-24 23:34:44
    field数据库操作创建记录查询记录删除记录更新记录 数据库官方文档 微信云开发数据库 不同于一般的关系型数据库(例如:MySQL)以及对象数据库(例如:NoSQL),微信云开发为我们提供的是一个JSON数据库,通过集合...
  • SQL语言(一)数据库定义语言DDL

    千次阅读 2020-06-22 08:36:29
    DML,英文叫做 Data Manipulation Language,数据操作语言,我们用它操作和数据库相关的记录,比如增加、删除、修改数据表中的记录。 DCL,英文叫做 Data Control Language,数据控制语言,我们用它来定义访问权限和...
  • Python操作数据库

    千人学习 2021-04-23 17:59:13
    数据库有很多种,初学者搞定MySQL就行了,因为现在互联网公司多数是用这个数据库,大厂也不例外。 【为什么学Python】   Python 是当今非常热门的语言之一,2020年的 TIOBE 编程语言排行榜中 ,Python名列第一...
  • Oracle数据库SQL语言

    千人学习 2017-01-31 20:16:39
    本课程全面介绍oracle的SQL语言。 介绍查询语句 DML语句 DDL语句 数据库对象等等
  • 实验一 数据库定义与操作语言 实验1.1 数据库定义 实验目的 理解和掌握数据库DDL语言,能够熟练使用SQL DDL 语句创建、修改和删除数据库、模式和基本表。 实验内容和要求 理解和掌握SQL DDL语句的语法,...
  • 数据库数据库基础操作

    千次阅读 多人点赞 2020-04-22 21:33:29
    3.数据库操作 3.1查看数据库 3.2创建数据库 3.3使用数据库 3.4删除数据库 4.数据类型 4.1数值类型 4.2字符串类型 4.3日期类型 5.表操作 5.1创建表 5.2查看表结构 5.3删除表 6.补充:安装和启动MySQL 6.1安装 6.2...
  • 数据库发展和展望二、使用C语言实现一个简单的数据库三、使用C语言连接数据库四、SQL语言和MySQL教程1.SQL是什么1) DDL - Data Definition Language,数据定义语言2) DML - Data Manipulation Language,数据处理...
  • MySQL数据库与SQL语言的规范

    千次阅读 2020-07-03 21:24:52
    结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 结构化查询语言(SQL 语言)是高级的非过程...
  • MySQL数据库——DDL(数据库定义语言

    千次阅读 热门讨论 2017-11-18 12:41:53
    概念 ...数据库管理系统:管理或操作数据的一个系统;(类似于仓库管理员); 表:数据库中的数据都是以表为单位,保存数据; 表名:类似于java中的类名; 字段:设计表的时候,指定的名称和属性,类似于java中
  • GBase 8s 数据库操作指南

    千次阅读 2020-05-14 18:42:33
    一、数据库日常管理指南 简介: GBase 8s数据库日常管理包括数据库模式的切换,以及服务器的监控。监控主要分为两个方面,一方面是系统级别的监控,主要包括对系统cpu的监控,以及内存的占用情况;另一方面是数据库...
  • DDL(数据库定义语言)

    万次阅读 2018-08-02 21:26:39
    DDL(Data Definition Language) 数据定义语言 1. 基本操作 查看所有数据库名称:【语法:show databases;...切换数据库:【语法:use test;...2.操作数据库 2.1 创建数据库: 语法: cr...
  • golang操作数据库

    万次阅读 2018-07-26 21:22:11
    这里不对数据库的知识做过多介绍,想要对数据库有更深的了解可以点这里,我在这里只介绍下golang对数据库操作方式。至于通过gorm来操作数据库,则在下篇文章再讲解。 因为我也是初学,所以这里只列举了用golang...
  • C++完整数据库SQLServer操作类(ODBC)

    千次下载 热门讨论 2014-10-20 11:39:36
    C++对SQLServer操作的可直接使用类,包括打开数据库,对数据库进行操作,获取数据等结合sql对数据库的全部操作,ODBC操作数据库
  • Dart的数据库操作

    千次阅读 2015-06-21 14:52:07
    连接数据库Dart连接数据库需要先从Pub下载sqljocky包 我新建了一个数据库,内容如下连接数据库的代码如下import 'package:sqljocky/sqljocky.dart';main(List<String> arguments) { //创建一个连接池,host:连接...
  • 我们在实际的Python开发过程中,不可避免的需要与各种数据库进行交互,这些数据库包括关系型数据库与非关系型数据库,其中最具代表性的是Mysql、Mongodb和Redis,学习本套课程,大大提升你的开发效率
  • SQL server数据库与mysql数据库的区别

    千次阅读 2019-04-04 11:29:01
    SQL server数据库与mysql数据库有什么区别 什么是SQL Server? SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的...
  • 关系数据库标准语言SQL

    千次阅读 2017-12-07 23:55:17
    结构化查询语言(SQL)是关系数据库的标准语言,也是一个通用的、功能极强的关系数据语言。其功能不仅是查询,还包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。 1、SQL的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 809,673
精华内容 323,869
关键字:

数据库操作语言

友情链接: ISOIEC 13818-1_CN.zip