暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GaussDB云数据库SQL应用系列-基础使用(下)

高斯精选 2023-10-24
739

接上一篇

5、创建表(增删改查)

1)创建3张表,并初始化一些数据

创建表学生表:

--学生表,Students(SNO, SNAME)代表 (学号,姓名)

drop table students;

create table students(

    sno    INTEGER     NOT NULL,

    sname  varchar(32)

);

插入数据:

--插入数据

insert into students(sno,sname) VALUES (1001,'张三');

insert into students(sno,sname) VALUES (1002,'李四');

insert into students(sno,sname) VALUES (1003,'王五');

insert into students(sno,sname) VALUES (1004,'赵六');
--查看结果

select * from  students;

 

创建课程表:

--课程表,course(CNO, CNAME, CTEACHER) 代表(课号, 课名, 教师)

create table if  not exists course(

    cno      INTEGER     NOT NULL,

    cname    varchar(32),

    cteacher varchar(32)

);

插入数据

--插入数据,

insert into course(cno,cname,cteacher)values(1,'数据库','张老师');

insert into course(cno,cname,cteacher)values(2,'操作系统','李老师');

insert into course(cno,cname,cteacher)values(3,'数据结构','王老师');

insert into course(cno,cname,cteacher)values(4,'python','赵老师');
--查看结果

select * from course;

 

创建学生成绩表:

--学生成绩表,SC(SNO, CNO, SCGRADE) 代表(学号, 课号, 成绩)

drop table sc;

create table sc(

    sno      INTEGER     NOT NULL,

    cno      INTEGER     NOT NULL,

    scgrade  DECIMAL(3,1)

);

插入数据

--插入数据

insert into sc(sno,cno,scgrade)values(1001,1,98);

insert into sc(sno,cno,scgrade)values(1001,2,90);

insert into sc(sno,cno,scgrade)values(1002,3,95);

insert into sc(sno,cno,scgrade)values(1002,4,88);

insert into sc(sno,cno,scgrade)values(1003,1,97);

insert into sc(sno,cno,scgrade)values(1004,4,99);
--查看结果

select * from sc;

2)假设查询场景,并通过SQL 实现

示例1:所有参加"数据库"课程考试的同学成绩登记错误, 现需要每人增加1分

--所有参加"数据库"课程考试的同学成绩登记错误, 每人增加1分。

update sc set scgrade= scgrade+1

where cno in (select cno from course where cname ='数据库')
--查看更新结果

select *

  from  SC

 where cno in (select cno from course where cname ='数据库')

 

示例2:获取拥有1门课程以上考试成绩的学生信息

--获取拥有1门课程以上考试成绩的学生信息(学号、姓名、课程号、课程名称、考试成绩)

select  t2.sno

       ,t3.sname

       ,t4.cno

       ,t5.cname

       ,t4.scgrade       

 from

  (select * from

    (select sno

           ,cno

           ,ROW_NUMBER() OVER(PARTITION BY sno ) as num1

       FROM SC) t1

      WHERE  t1.num1>1) t2

left join students t3

on t2.sno=t3.sno

left join sc t4

on t2.sno=t4.sno

left join course t5

on t4.cno=t5.cno

order by sno

 

示例补充:上述SQL语句中用到子查询in 、窗口函数row_number()、用到左连接left join 。

  • IN:子查询(Subquery)是指在一个查询语句中嵌套另一个查询语句,并将该查询语句的结果作为主查询语句的条件或结果之一。在SQL中,子查询通常使用IN关键字来实现。IN关键字用于指定一个值列表,它可以被用来匹配主查询中的某个列的值。 
  • ROW_NUMBER:为各组内值生成连续排序序号,其中,相同的值其序号也不相同
  • Left join :两张表关联, 以左表为主表,用于从两个或多个表中获取数据。它的作用是返回左表中的所有行,同时返回与右表匹配的行。如果右表中没有与左表匹配的行,则返回NULL值。

——结束。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com

最后修改时间:2023-10-25 09:43:15
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论