交互式SQL语句

文章目录

  • 交互式SQL语句
    • 一、数据准备
      • (1)向Departments中写入数据
      • (2)向Teachers中写入数据
      • (3)向Students中写入数据
      • (4)向Courses中写入数据
      • (5)向Teaches中写入数据
      • (6)向SC中写入数据
    • 二、查询操作
      • 1.不带 WHERE 的简单查询
      • 2.带 WHERE 的查询
        • <1>WHERE表达式
        • <2>IN 表达式
        • <3>LIKE 表达式
        • <4>NULL 表达式
      • 3.排序和分组
        • <1>排序
        • <2>聚集函数
        • <3>分组
      • 4.连接查询
      • 5.嵌套查询
        • <1>IN 引出的子查询
        • <2>集合的比较引出的子查询
        • <3>存在量词引出的子查询
      • 6.集合运算
    • 三、更新操作
      • 1.插入
      • 2.修改
      • 3.删除

一、数据准备

(1)向Departments中写入数据

由于是一个空表,先所有Dheadno置为空

INSERT INTO Departments (Dno, Dname, Dheadno) VALUES
('CS','计算机',NULL),
('MA', '数学', NULL),
('PH', '物理', NULL),
('CH', '化学', NULL);

SELECT * FROM Departments;

(2)向Teachers中写入数据

INSERT INTO Teachers (Tno, Tname, Sex, Birthday, Title, Dno) VALUES
('05001', '张海峰','男', '1969-02-21', '教授', 'CS'),
('05002', '刘晓明','男', '1978-10-06', '副教授', 'CS') ,
('05003', '王梅','女', '1972-02-25', '副教授', 'CS'),
('05004', '赵青山','男', '1981-05-18', '讲师', 'CS'),
('06001', '朱杰','男', '1963-01-30', '教授', 'MA'),
('06002', '欧阳梅','女', '1970-8-11', '副教授', 'MA');

SELECT * FROM Teachers;

  • 修改院系的Dheadno

    UPDATE Departments SET Dheadno='05001' WHERE Dno='CS';
    
    UPDATE Departments SET Dheadno='06001' WHERE Dno='MA';
    

(3)向Students中写入数据

INSERT INTO Students (Sno, Sname, Sex, Birthday, Speciality, Dno) VALUES
('201705001', '张华','男', '1999-12-16', '计算机', 'CS') ,
('201705002', '李玉','女', '1998-10-17', '计算机', 'CS') ,
('201705003', '欧阳山','男', '1999-05-24', '计算机', 'CS') ,
('201706001', '林艳', '女','1998-09-20', '数学', 'MA'),
('201706002', '高山','男','1997-08-16', '数学', 'MA') ,
('201706003', '王海洋','男', '1997-01-30', '数学', 'MA');

SELECT * FROM Students;

(4)向Courses中写入数据

INSERT INTO Courses (Cno, Cname, Period, Credit) VALUES
('CS101', '计算科学导论', 2, 1 ),
('CS102', 'C语言', 4, 3 ),
('CS201', '数据结构', 4, 3) ,
('CS202', '离散数学', 4, 3 ),
('CS301', '数据库原理', 4, 3);

SELECT * FROM Courses;

(5)向Teaches中写入数据

INSERT INTO Teaches (Tno, Cno,Tcscore) VALUES
('05001', 'CS101', 95 ),
('05002', 'CS101', 92) ,
('05003', 'CS101', 90 ),
('05004', 'CS102', 95 );

SELECT * FROM Teaches;

(6)向SC中写入数据

INSERT INTO SC(Sno, Cno, Grade) VALUES
('201705001', 'CS101', 89 ),
('201705002', 'CS101', 91 ),
('201705003', 'CS101', 80 ),
('201705001', 'CS102', 90 ),
('201705002', 'CS102', 87 ),
('201705003', 'CS102', 82 ),
('201705001', 'CS201', 88 ),
('201705002', 'CS201', 89 ),
('201705003', 'CS201', 90 ),
('201705001', 'CS202', 86 ),
('201705002', 'CS202', 85 ),
('201705001', 'CS301', 92 );

SELECT * FROM SC;

二、查询操作

SELECT 语句的一般形式如下:

1.不带 WHERE 的简单查询

  • 查询所有课程的信息

    SELECT Cno , Cname, Period, Credit
    FROM Courses;
    

    SELECT *
    FROM Courses;
    

  • 显示每位学生的年龄:

    SELECT Sname, 2021-date_part('year',Birthday) AS Age
    FROM Students;
    

2.带 WHERE 的查询

<1>WHERE表达式

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

    SELECT Tname, Sex
    FROM Teachers
    WHERE Title='讲师';
    

  • 查询考试成绩不及格的学生的学号。

    SELECT DISTINCT Sno
    FROM SC
    WHERE Grade<60;
    

  • 查询出生年份在 1997~1999 年的学生的姓名和专业。

    SELECT Sname , Speciality
    FROM Students
    WHERE date_part('year',Birthday) BETWEEN 1997 AND 1999;
    
    SELECT Sname , Speciality
    FROM Students
    WHERE date_part('year',Birthday)>=1997 AND date_part('year',Birthday)<=1999;
    

  • 查询出生年份不在 1997~1999 年的学生的姓名和专业。

    SELECT Sname , Speciality
    FROM Students
    WHERE date_part('year',Birthday) NOT BETWEEN 1997 AND 1999 ;
    
    SELECT Sname , Speciality
    FROM Students
    WHERE date_part('year',Birthday)<1997 OR date_part('year',Birthday)>1999;
    

<2>IN 表达式

  • 查询计算机和软件工程专业的学生的学号和姓名。

    SELECT Sno , Sname
    FROM Students
    WHERE Speciality IN ('计算机', '软件工程') ;
    

  • 查询既不是计算机,也不是软件工程专业的学生的学号和姓名。

    SELECT Sno , Sname
    FROM Students
    WHERE Speciality NOT IN ('计算机', '软件工程') ;
    

<3>LIKE 表达式

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

    SELECT Cname
    FROM Courses
    WHERE Cname LIKE '数据%';
    

<4>NULL 表达式

  • 查询院长号为空的院系号和院系名。

    SELECT Dno , Dname
    FROM Departments
    WHERE Dheadno IS NULL;
    

3.排序和分组

<1>排序

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

    SELECT*
    FROM SC
    WHERE Cno='CS202'
    ORDER BY Grade DESC;
    

  • 查询每位学生的每门课程的成绩,并将查询结果按课程号升序、成绩降序排序。

    SELECT *
    FROM SC
    ORDER BY Cno, Grade DESC;
    

<2>聚集函数

  • 查询选修了 CS101 课程的学生的人数。

    SELECT COUNT(*)
    FROM SC
    WHERE Cno='CS101';
    

  • 查询 CS101 课程成绩最低分、平均分和最高分。

    SELECT MIN (Grade), AVG (Grade) , MAX (Grade)
    FROM SC
    WHERE Cno ='CS101';
    

<3>分组

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

    SELECT Sno,AVG(Grade)
    FROM SC
    GROUP BY Sno;
    

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

    SELECT Sno,AVG(Grade)
    FROM SC
    GROUP BY Sno HAVING AVG(Grade)>85;
    

4.连接查询

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

    SELECT Cname,Grade
    FROM SC,Courses
    WHERE Sno='201705001' AND SC.Cno=Courses.Cno;
    

  • 查询选修 CS202 课程,并且成绩在 90 分以上的所有学生的学号、姓名和成绩。

    SELECT SC.Sno,Sname,Grade
    FROM SC,Students
    WHERE Cno='CS202' AND Grade>90 AND SC.Sno=Students.Sno;
    

  • 查询每个学生选修的每门课程的成绩,要求列出学号、姓名、课程名和成绩。

SELECT Students.Sno, Sname, Cname, Grade
FROM Students, SC, Courses
WHERE Students.Sno = SC. Sno AND SC.Cno = Courses.Cno;

  • 查询每个学生的平均成绩,并输出平均成绩大于 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.Sname='林艳' AND date_part('year',S1.Birthday)=date_part('year',S2.Birthday) AND S2.Sname <>'林艳';
    

5.嵌套查询

<1>IN 引出的子查询

  • 查询和林艳在同一个专业学习的男同学的学号与姓名。

    SELECT Sno , Sname
    FROM Students
    WHERE Sex='男' AND Speciality IN (SELECT Speciality FROM Students WHERE Sname ='林艳') ;
    

<2>集合的比较引出的子查询

  • 查询比计算机专业所有学生都大的其他专业的学生的学号、姓名、专业和出生日期。

    SELECT Sno , Sname, Speciality, date_part('year',Birthday)
    FROM Students
    WHERE Speciality <>'计算机' AND
    date_part('year',Birthday)<ALL (SELECT date_part('year',Birthday)FROM StudentsWHERE Speciality ='计算机');
    
    SELECT Sno , Sname, Speciality, date_part('year',Birthday)
    FROM Students
    WHERE Speciality <>'计算机' AND
    date_part('year',Birthday)<ALL (SELECT MIN(date_part('year',Birthday))FROM StudentsWHERE Speciality ='计算机');
    

  • 查询平均成绩最高的课程的课程号和平均成绩。

    SELECT Cno , AVG(Grade)
    FROM SC
    GROUP BY Cno
    HAVING AVG(Grade) >= ALL (SELECT AVG(Grade)
    FROM SC
    GROUP BY Cno) ;
    

<3>存在量词引出的子查询

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

    SELECT Sno, Sname
    FROM Students S
    WHERE EXISTS
    (SELECT *
    FROM SC
    WHERE Sno=S.Sno AND Cno='CS101');
    

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

    SELECT Sno , Sname
    FROM Students S
    WHERE NOT EXISTS (SELECT * FROM Courses C WHERE NOT EXISTS (SELECT * FROM SC WHERE SC . Sno= S . Sno AND SC . Cno= C. Cno)) ;
    

  • 查询至少选修了学号为 201705002学生选修的全部课程的学生的学号和姓名。

    SELECT Sno , Sname
    FROM Students S
    WHERE NOT EXISTS (SELECT * FROM SC SC1WHERE SC1.Sno = '201705002 'AND NOT EXISTS (SELECT * FROM SC SC2 WHERE SC2.Sno=S.Sno AND SC2 . Cno=SC1. Cno));
    

6.集合运算

并 (UNION) 、交 (INTERSECT) 差 (EXCEPT)

  • 查询选修 CS101 号课程或者选修 CS102 号课程 学生的学号。

    SELECT Sno
    FROM SC
    WHERE Cno= ' CS101'
    UNION
    SELECT Sno
    FROM SC
    WHERE Cno= 'CS102';
    

三、更新操作

1.插入

INSERT INTO Students
VALUES ('201905001', 'BK','男', '2000-01-01','2019',' 计算机','CS');

2.修改

UPDATE Students
SET Birthday='2000-11-11'
WHERE Sno='20190501';

SELECT * FROM Students;

3.删除

DELETE FROM Students
WHERE Sno='201905001';

SELECT * FROM Students;

【数据库原理实验(openGauss)】交互式SQL语句相关推荐

  1. 【数据库原理实验(openGauss)】实验报告

    <数据库系统原理实验>报告 文章目录 <数据库系统原理实验>报告 一.实验课程性质和教学目标 二.实验课程教学基本要求 三.实验教学内容 实验一 认识DBMS系统 (一)实验目 ...

  2. 【数据库原理实验(openGauss)】金融场景化实验

    金融场景化实验 文章目录 金融场景化实验 一.金融数据模型 1.E-R图 2.关系模式 3.物理模型 Client(客户)表 bank_card(银行卡)表 finances_product(理财产品 ...

  3. 【数据库原理实验(openGauss)】认识DBMS系统

    认识DBMS系统(openGauss) 文章目录 认识DBMS系统(openGauss) 一.openGauss安装目录 (1)集群openGauss安装目录 (2)集群openGauss数据目录 ( ...

  4. 【数据库原理实验(openGauss)】完整性控制

    完整性控制 文章目录 完整性控制 一.约束 1.创建约束的方法 (1)创建基本表时定义表的完整性约束条件 (2)修改表时定义表的完整性约束条件 2.创建约束实例 二.触发器 (1)创建触发器语法 (2 ...

  5. 【数据库原理实验(openGauss)】 使用JDBC连接数据库

    使用JDBC连接数据库 文章目录 使用JDBC连接数据库 一.准备连接环境 1.修改数据库的pg_hba.conf文件 2.登陆数据库授权退出 3.修改数据库监听地址 4.下载Java驱动包导入工具 ...

  6. 【数据库原理实验(openGauss)】数据库的备份与恢复

    数据库的备份与恢复 文章目录 数据库的备份与恢复 一.物理备份和恢复 实验准备: (1)物理备份 (2)物理备份恢复 二.逻辑备份和恢复 实验准备: (1)gs_dump备份 1.gs_dump备份示 ...

  7. 【数据库原理实验(openGauss)】事务与并发控制

    事务与并发控制 文章目录 事务与并发控制 一.事务 (1)事务的ACID特性 (2)事务管理 (3)事务实例 1.未提交的事务 2.已提交的事务 二.并发控制 (1)加锁语法 (2)加锁实例 一.事务 ...

  8. 【数据库原理实验(openGauss)】视图

    视图 文章目录 视图 一.创建视图 二.基于视图的查询 三.基于视图的更新 四.删除视图 五.对视图的理解 一.创建视图 CREATE VIEW CS_Students AS SELECT Sno, ...

  9. 【数据库原理实验(openGauss)】创建数据库、表和索引

    创建数据库.表和索引 文章目录 创建数据库.表和索引 一.创建数据库 二.创建与删除模式 三.创建与修改表 (1)创建表 (2)修改表 四.创建与删除索引 (1)创建索引 (2)删除索引 一.创建数据 ...

最新文章

  1. 【Git】切换分支,以及git stash的使用
  2. asp.net mvc 缓存CaChe使用
  3. js 将图片置灰_艾叶灰千万别扔——艾叶灰的神奇功效
  4. ASP.NET MVC 在WebService中Token的使用方法
  5. 卢伟冰:Redmi K30会支持全网通5G 雷军:必须的!
  6. android多击事件_Android中的多击事件
  7. CentOS7通过定时脚本阻断异常IP连接SSH(实测)
  8. 泰科推标签即服务服务,助力实现最大价值
  9. vue2+vuex+vue-router 快速入门(三) vue 实例介绍
  10. python新浪api_python调用新浪微博API项目实践
  11. android wear 2.0.国行,你的智能手表升级Android Wear 2.0系统吗? 快来看看
  12. 随处可见抢眼美女 TechED盛宴人潮汹涌
  13. ESMap平台在线开发工具介绍-易景空间地图
  14. 记录一次Java笔试题记录一次Java笔试题
  15. 苹果App被置病毒 网友:安卓无压力
  16. python写xml多了ns0_python – SUDS生成的XML不正确
  17. 健身耳机哪个好、最好的健身耳机推荐
  18. Julien Nioche谈Apache Nutch 2的特性及产品路线图
  19. Photoshop修复画笔工具、污点修复画笔工具使用方法
  20. 计算机等级考试(三级网络)基本概念与名词解释

热门文章

  1. springboot之websocket集成
  2. web之XmlHttpRequest
  3. pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
  4. python基础系统性学习
  5. html怎么用div从左到右,单独使用CSS,你怎么能有一个从右到左的边框底部渐变?...
  6. css贝塞尔曲线 多个点_了解贝塞尔曲线的数学和Python实现示例
  7. Android移动应用基础教程【Android事件处理】
  8. linux postgresql 恢复数据库,PostgreSQL数据库备份和恢复
  9. python爬取京东数据加载失败_Python爬取京东商品数据
  10. python怎么导入csv文件数据-机器学习Python实践——数据导入(CSV)