数据库实验三--OpenGauss(查询和更新数据)
文章目录
- 实验内容
- 实验过程
- 查询
- 不带where的简单查询
- 带where的查询
- LIKE表达式
- 排序和分组
- 排序
- 聚集函数
- 分组
- 连接查询
- 嵌套查询
- IN-子查询
- 集合比较-子查询
- 存在量词--子查询
- 查询子查询结果中的重复元组
- 集合运算
- 数据更新
- 插入
- 插入单个元组
- 插入查询结果
- 删除
- 修改
实验内容
- 查询操作
根据教材P79-94页所有查询实例,完成各类查询操作。 - 更新操作
根据教材P94-96上所有更新实例,完成各类更新操作(插入、修改和删除数据等),请注意标准SQL
和openGauss
中相应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语句分别为INSERT
、DELETE
、UPDATE
插入
插入单个元组
插入单个元组的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(查询和更新数据)相关推荐
- 数据库实验三 SQL查询数据
实验三 SQL查询数据 实验目的 熟练掌握使用SQL查询语言.完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询). 实验内容 现有一个单位内部的小型图书借阅系统,假设每本图书的数量无限制,并且 ...
- 数据库实验三 嵌套查询和视图操作
实验三 嵌套查询和视图操作 实验目的: 1. 通过本实验能够熟练应用sql语言使用IN.比较符.ANY或ALL和EXISTS操作符进行嵌套查询操作. 2. 掌握视图的定义.查询.修改. 实验要求: ...
- MySQL数据库实验三 MySQL查询
一.实验项目: MySQL查询. 二.实验目的 掌握MySQL的查询操作. 三.实验内容 (一): 1.查询lineitem表中商品编号(productid)和单价(unitprice),要求消除重复 ...
- 数据库原理及应用(MySQL版)——实验三 MySQL查询
实验三 MySQL查询 1.实验目的 2.实验内容及要求 1.实验目的 熟悉SELECT语句的语法结构: 熟练掌握组合使用where.group by.having和order by等子句: 熟悉聚合 ...
- 太原理工大学软件学院19级数据库实验三(2021.4.19)
太原理工大学数据库实验三(2021.4.19) 以下代码需按步骤复制到查询控制台 博主用的软件是DataGrip,与SQL Server Management Studio在操作上有些差别 1.以Wi ...
- 数据库系统概论 实验报告答案 实验三:创建及管理数据表
实验三:创建及管理数据表 一.实验目的 熟悉数据表的特点: 熟悉在Management Stuio中创建.编辑及删除数据表: 熟悉使用T-SQL创建.编辑及删除数据表: 二.实验学时 2学时 三.实验 ...
- python查询mysql数据库_python针对mysql数据库的连接、查询、更新、删除操作示例...
本文实例讲述了python针对mysql数据库的连接.查询.更新.删除操作.分享给大家供大家参考,具体如下: 连接 一 代码 import pymysql # 打开数据库连接 db = pymysql ...
- 数据库实验三——完整性定义与检查
数据库实验三--完整性定义与检查 一. 实验题目 二. 实验内容和要求 三. 实验步骤 (一) 实体完整性实验 1. 创建表时定义实体完整性 2. 创建表后定义实体完整性 3. 多个候选码时定义实体完 ...
- 数据库实验三 数据查询一
第1关:按条件查询单表的所有字段 任务描述 本关任务:按条件查询数据表的所有字段 为了完成本关任务,你需要掌握: 如何查询数据表的所有字段 相关知识 查询数据表 命令格式: select * from ...
最新文章
- 深入分析jquery解析json数据
- Jquery加载dom元素
- DV型、OV型、EV型三种SSL证书 区别
- 双击执行java_双击以执行Java程序
- CSDN的Markdown编辑器常用语句
- Python 技术篇-调用浏览器访问指定网页,一行代码实现。非Selenium。
- Gray Code LeetCode 89
- 站立会议03--个人总结
- Halcon基本例程(二)
- Google Guava之--cache
- Java思维导图(3)
- matlab中符号函数sgn,matlab 饱和函数 sat
- 3层vni vxlan_VXLAN技术介绍:三层的网络来搭建虚拟的二层网络
- js 无害化_道德第一无害
- TLS远程信息泄露 心脏滴血 CVE-2014-0160 漏洞复现
- STC89C52单片机串口通信以及代码演示
- 用python偷偷给班级群女同学的颜值进行排名,排最后的大姐说开学要打爆我(文末送书)...
- 猴子摘香蕉问题python_Python实战,解决数学小问题猴子分香蕉
- HTML5播放器杂音,HTML5 P5.js使用噪音算法实现的超炫彩虹曲线
- 下列不是python对文件的读操作方法_以下选项不是Python文件读操作的是.