文章目录

  • 实验内容
  • 实验过程
  • 查询
    • 不带where的简单查询
    • 带where的查询
    • LIKE表达式
    • 排序和分组
      • 排序
      • 聚集函数
      • 分组
    • 连接查询
    • 嵌套查询
      • IN-子查询
      • 集合比较-子查询
      • 存在量词--子查询
      • 查询子查询结果中的重复元组
      • 集合运算
  • 数据更新
    • 插入
      • 插入单个元组
      • 插入查询结果
    • 删除
    • 修改

实验内容

  1. 查询操作
    根据教材P79-94页所有查询实例,完成各类查询操作。
  2. 更新操作
    根据教材P94-96上所有更新实例,完成各类更新操作(插入、修改和删除数据等),请注意标准SQLopenGauss中相应SQL语句相同与不同之处。

实验过程

首先启动并连接数据库:

su - omm
gs_om -t start
gsql -d postgres -p 26000 -r

进入到我们实验二创建的数据库db_cc

\c db_cc

查询

不带where的简单查询

查询所有课程的信息

select * from courses;

显示每位学生的年龄

select sname,2017-extract(year from birthday) as age from students ;


注意这里openGauss中不支持year()等函数,这里要用extract代替

显示所有学生的不同年龄

select distinct 2017-extract(year from birthday) as age from students;

带where的查询

查询职称(Title)为教师的全体教师的姓名和性别

select tname, sex from teachers where title = '副教授';


查询考试成绩低于90分的学生的学号

select distinct sno from sc where grade < 90;


查询出生年月在1997~1998的学生的姓名和专业

select sno,sname from students where extract(year from birthday) between 1997 and 1998;

LIKE表达式

查询所有以“数据”开头的课程名

select cname from courses where cname like '数据%';

排序和分组

排序

ORDER BY可以进行查询结果的排序

ORDEF BY <排序列> [ASC|DESC] {,<排序列> {ASC|DESC}}

查询每位学生cs202课程的成绩,并将查询结果按照成绩降序排序

SELECT * FROM sc WHERE cno='cs202' ORDER BY Grade DESC;

聚集函数

查询选修了cs202课程的学生人数

SELECT COUNT(*) FEOM SC WHERE cno = 'cs202';

查询cs102课程的最低分,平均分和最高分

select MIN(GRADE),AVG(Grade),MAX(Grade) from sc where cno = 'cs102';

分组

GROUP BY子句可用来进行分组

GROUP BY <分组列> {,<分组列>} {<分组选择条件>}

查询每个学生的平均成绩,输出学生的学号和平均成绩

select sno,avg(grade) from sc group by sno;


查询每个学生的平均成绩,并输出平均成绩大于85分的学生学号和平时成绩
需要注意的是:我们要去掉平均成绩小于或等于85的分组,需要是能够用到HAVING短语

select sno,avg(grade) from sc group by sno having avg(grade) >85;

连接查询

查询学号为201705001的学生的各科成绩,对每们课程显示名称和成绩。

select cname,grade
from sc,courses
where sc.cno = courses.cno and sno = '201705001';


注意:cno既是sc的属性,也是courses的属性。为了避免二义性,我们必须要在前加上前缀。

查询每个学生的平均成绩,并输出平均成绩大于85分的学生学号,姓名和平均成绩

select students.sno, sname,avg(grade)
from sc,students
where students.sno = sc.sno
group by students.sno,sname
having avg(grade) > 85 ;


自身连接
查询和张华专业相同的学生

select s2.sname
from students s1,students s2
where s1.speciality = s2.speciality ands1.sname = '张华' ands2.sname<>'张华' ;


注意这里students出现了两次,我们用s1和s2来区分他们。

嵌套查询

IN-子查询

查询和张华专业相同的男学生,显示学号和姓名

select speciality
from students
where sname = '张华;

我们将上面作为子查询,我们得到改查询的sql语句为:

select sno, sname
from students
where sex = '男' and speciality in (select specialityfrom studentswhere sname = '张华');


系统会先进性子查询,得到张华的专业。一般的,这是一个集合。(比如叫张华的不止一个)
然后,外层查询选择专业一致的男学生。

集合比较-子查询

sql允许将一个元素与子查询的结构集进行比较,这种量化比较表达式的常用形式是

<> 0 ALL | SOME | ANY <子查询>

查询比数学专业所有学生都小的其他专业的学号、姓名、专业和出生日期;

select birthday
from students
where speciality = '数学';

将它作为子查询

select sno,sname,speciality,year(birthday)
from students
where speciality<>'数学'andyear(birthday)>all(select year(birthday)from studentswhere speciality = '数学');

存在量词–子查询

查询所有选修了cs201课程的学生的学号和姓名

select sno,sname
from students s
where exists(select * from scwhere sno = s.sno and cno='cs201');

查询选修了全部课程的学生的学号和姓名

select sno, sname
from students s
where not exists(select * from courses cwhere not exists(select *from scwhere sc.sno = s.sno and sc.cno = c.cno));

查询子查询结果中的重复元组

unique <子查询>

集合运算

sql支持集合运算
包括UNION, INTERSECT, EXCEPT
查询选修了cs201号课程或者选修了cs202号课程的学生的学号

select sno
from sc
where cno = 'cs201'
union
select sno
from sc
where cno = 'cs201';

数据更新

数据更新包括插入、删除和修改。
对应的sql语句分别为INSERTDELETEUPDATE

插入

插入单个元组

插入单个元组的INSERT格式为

INSERT INTO T [(A1,···,Ak)]
VALUES(C1,···,ck)

T通常是基本表,也可以是视图

将学号为201716010、姓名为司马相如、性别为男、生日为1997-01-28,专业为数学,入学年份为2017,专业代码为ma的学生元组插入到表格中。

INSERT INTO students
VALUES ('201716010','司马相如','男','1997-01-28','2017','数学','ma');


向表sc中插入一个选课记录,登记为一个学号为201716010的学生选修了cs301的课程

INSERT INTO sc(sno,cno)
VALUES ('201716010','cs301');



(这里在插入时没有插入成绩)

插入查询结果

INSERT INTO T[(A1,···.Ak)]
<查询表达式>

删除

可以使用DELETE来进行删除

DELETE FROM T[WHERE <删除条件>]

删除学号为201716010的学生记录

delete from students
where sno = '201716010';

需要注意的是,201716010的记录在sc表中也有,并且sno在sc表中是外码,所以上面的指令直接执行会违反完整性约束。删除该同学的记录需要在sc表和students表中一块删除。本部分会在之后的实验中详细操作。

修改

使用update语句可以修改指定元组指定属性上的值

UPDATE T
SET A1 = e1,···,Ak = ek[WHERE <修改条件>]

将学号为201716010的学生的专业入学时间修改为2018

update students
set enrollyear = '2018'
where sno = '201716010';


数据库实验三--OpenGauss(查询和更新数据)相关推荐

  1. 数据库实验三 SQL查询数据

    实验三 SQL查询数据 实验目的 熟练掌握使用SQL查询语言.完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询). 实验内容 现有一个单位内部的小型图书借阅系统,假设每本图书的数量无限制,并且 ...

  2. 数据库实验三 嵌套查询和视图操作

    实验三 嵌套查询和视图操作 实验目的: 1.  通过本实验能够熟练应用sql语言使用IN.比较符.ANY或ALL和EXISTS操作符进行嵌套查询操作. 2.  掌握视图的定义.查询.修改. 实验要求: ...

  3. MySQL数据库实验三 MySQL查询

    一.实验项目: MySQL查询. 二.实验目的 掌握MySQL的查询操作. 三.实验内容 (一): 1.查询lineitem表中商品编号(productid)和单价(unitprice),要求消除重复 ...

  4. 数据库原理及应用(MySQL版)——实验三 MySQL查询

    实验三 MySQL查询 1.实验目的 2.实验内容及要求 1.实验目的 熟悉SELECT语句的语法结构: 熟练掌握组合使用where.group by.having和order by等子句: 熟悉聚合 ...

  5. 太原理工大学软件学院19级数据库实验三(2021.4.19)

    太原理工大学数据库实验三(2021.4.19) 以下代码需按步骤复制到查询控制台 博主用的软件是DataGrip,与SQL Server Management Studio在操作上有些差别 1.以Wi ...

  6. 数据库系统概论 实验报告答案 实验三:创建及管理数据表

    实验三:创建及管理数据表 一.实验目的 熟悉数据表的特点: 熟悉在Management Stuio中创建.编辑及删除数据表: 熟悉使用T-SQL创建.编辑及删除数据表: 二.实验学时 2学时 三.实验 ...

  7. python查询mysql数据库_python针对mysql数据库的连接、查询、更新、删除操作示例...

    本文实例讲述了python针对mysql数据库的连接.查询.更新.删除操作.分享给大家供大家参考,具体如下: 连接 一 代码 import pymysql # 打开数据库连接 db = pymysql ...

  8. 数据库实验三——完整性定义与检查

    数据库实验三--完整性定义与检查 一. 实验题目 二. 实验内容和要求 三. 实验步骤 (一) 实体完整性实验 1. 创建表时定义实体完整性 2. 创建表后定义实体完整性 3. 多个候选码时定义实体完 ...

  9. 数据库实验三 数据查询一

    第1关:按条件查询单表的所有字段 任务描述 本关任务:按条件查询数据表的所有字段 为了完成本关任务,你需要掌握: 如何查询数据表的所有字段 相关知识 查询数据表 命令格式: select * from ...

最新文章

  1. 一文弄懂神经网络中的反向传播法——BackPropagation
  2. 学习Kotlin(二)基本语法
  3. 利用策略模式优化过多 if else 代码
  4. JavaScript实现strongly Connected Components 强连通分量算法(附完整源码)
  5. cygwin swoole_swoole入门--------基础概念
  6. 图论算法——图的遍历
  7. MyEclipse注册码
  8. MySql常用语句 转
  9. request库的基本使用
  10. python3 pdf转成txt
  11. 135编辑器怎么复制html,135编辑器复制粘贴文字的方法
  12. 【吐血整理】数据库的安全性
  13. 洛达悦虎1562M各个版本固件升级教程
  14. javaweb之c3p0连接池(c3p0-config.xml的写法)
  15. 人生不该困于五环之外(3):3到5年离开五环之外
  16. c语言小车程序,循迹小车的C语言程序(带注释)
  17. The bean ‘dataTokenMapper‘ could not be injected because it is a JDK dynamic
  18. kafka的副本以及分区与副本的关系
  19. 适合四季畅饮的饮料 体动果味苏打水
  20. 叮当软件测试简历,软件测试作业..doc

热门文章

  1. 爬虫项目-人大法律文件
  2. 财富法则-平庸的本质
  3. 2023最新考研计划清单
  4. 查询RDP端口的小技巧
  5. uniapp苹果调试 使用iTunes iOS真机调试
  6. JavaWeb eclipse-web如何安装如何下载jdk如何下载tomcat(详细讲解)
  7. C# 把汉字转成拼音
  8. 在线汇率转换,用json解析数据,支持偏好设置。
  9. PlantUML导出大图被截取和乱码
  10. 云计算技术重塑视频会议系统市场新格局