`
不管不问
  • 浏览: 939 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

基于postgreSQL的基本SQL语句

阅读更多
//创建模式“S-T”

CREATE SCHEMA "S-T";

//在“S-T”模式下创建Student表,Sno是主键

CREATE TABLE "S-T".Student (
Sno character(6) primary key,
Sname character(12) unique,
Ssex character(2),
Sage integer,
Sdept character(12)
);


//在“S-T”模式下创建Course表,同时以Cpno为外键,对应的是自身的主键

CREATE TABLE "S-T".Course(
Cno character(4) primary key,
Cname character(12) unique,
Cpno character(4),
Ccredit integer,
foreign key (Cpno) references "S-T".Course(Cno)
);

//在“S-T”模式下 创建表SC,Sno、Cno即是主键、又是外键
CREATE TABLE  "S-T".SC(
Sno character(6),
Cno character(4),
Grade integer,
primary key (Sno,Cno),
foreign key (Sno) references "S-T".Student(Sno),
foreign key (Cno) references "S-T".Course(Cno)
);

//创建索引

CREATE UNIQUE INDEX Sno ON Student(Sno DESC);

//删除索引

DROP INDEX Sno;

//创建视图

CREATE VIEW N_Student
AS SELECT Sno,Sname,Ssex,Sage,Sdept
   FROM Student
   WHERE Ssex='女';

//设置默认的模式 不设置则默认为:"$user",PUBLIC

SET search_path TO  "S-T";
SET search_path TO  "S-T",PUBLIC ;
SET search_path TO  "$user",PUBLIC ;

//显示当前的模式

SHOW search_path ;

//删除模式

DROP SCHEMA "S-T" CASCADE;


INSERT INTO "S-T".Student(Sno,Sname,Ssex,Sage,Sdept) VALUES('201301','张三','男',20,'IS');
INSERT INTO "S-T".Student(Sno,Sname,Ssex,Sage,Sdept) VALUES('201302','李四','女',19,'CS');
INSERT INTO "S-T".Student(Sno,Sname,Ssex,Sage,Sdept) VALUES('201303','王二','女',22,'MA');
INSERT INTO "S-T".Student(Sno,Sname,Ssex,Sage,Sdept) VALUES('201304','赵六','男',21,'CS');
INSERT INTO "S-T".Student(Sno,Sname,Ssex,Sage,Sdept) VALUES('201305','李明','女',20,'IS'); 
INSERT INTO "S-T".Student(Sno,Sname,Ssex,Sage,Sdept) VALUES('201306','王五','女',20,'IS'); 
INSERT INTO "S-T".Student(Sno,Sname,Ssex,Sage,Sdept) VALUES('201307','李六','女',20,'IS'); 


INSERT INTO "S-T".Course(Cno,Cname,Cpno,Ccredit) VALUES('0001','高等数学','0001',4);
INSERT INTO "S-T".Course(Cno,Cname,Cpno,Ccredit) VALUES('0002','数据结构','0001',3);
INSERT INTO "S-T".Course(Cno,Cname,Cpno,Ccredit) VALUES('0003','大学英语','0002',5);
INSERT INTO "S-T".Course(Cno,Cname,Cpno,Ccredit) VALUES('0004','软件工程','0003',3);
INSERT INTO "S-T".Course(Cno,Cname,Cpno,Ccredit) VALUES('0005','数据库原理','0004',5);
INSERT INTO "S-T".Course(Cno,Cname,Cpno,Ccredit) VALUES('0006','编译原理','0006',5);

INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201301','0001',90);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201301','0002',87);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201301','0003',98);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201301','0004',78);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201301','0005',63);

INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201302','0001',80);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201302','0002',97);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201302','0003',78);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201302','0004',79);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201302','0005',69);

INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201303','0001',89);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201303','0002',89);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201303','0003',78);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201303','0004',85);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201303','0005',86);

INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201304','0001',87);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201304','0002',69);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201304','0003',88);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201304','0004',88);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201304','0005',93);

INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201305','0001',68);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201305','0002',89);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201305','0003',79);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201305','0004',88);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201305','0005',66);


INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201306','0001',68);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201306','0002',89);
INSERT INTO "S-T".SC(Sno,Cno,Grade) VALUES('201306','0003',79);



//添加 S_enterance 列

ALTER TABLE Student ADD S_enterance date;

//删除 S_enterance 列

ALTER TABLE Student  DROP S_enterance;

//修改 S_enterance 列的数据类型:character  integer 不符合要求(postgreSQL)

ALTER TABLE Student ALTER COLUMN S_enterance TYPE character(12);


ALTER TABLE SC ALTER COLUMN Grade TYPE integer;
ALTER TABLE SC DROP Grade;

SELECT * FROM "S-T".Student;
SELECT * FROM  "S-T".Course;
SELECT *  FROM  "S-T".SC;

SELECT Sname AS 姓名,2013-Sage  "出生年月",LOWER(Sdept) AS "院系"
FROM Student;
SELECT * FROM Student
WHERE Sdept='IS';
SELECT * FROM Student
WHERE Sno LIKE '20133_1' ESCAPE '3';
SELECT * FROM Student
WHERE Sno LIKE '2013_1';

SELECT DISTINCT Sno FROM SC;
SELECT ALL Sno FROM SC;
SELECT Sno FROM SC;
SELECT Sno,Grade FROM SC
WHERE Cno='0004'
ORDER BY Grade DESC;
SELECT COUNT(DISTINCT Sno) FROM SC;


SELECT Cno,SUM(Grade) FROM SC
GROUP BY Cno
HAVING SUM(Grade)>=200;


SELECT S.*,SC.*
FROM Student S ,SC
WHERE S.Sno=SC.Sno

SELECT C.Cno,C.Cname,C.Cpno,CP.Cno,CP.Cname,C.Ccredit
FROM Course C,Course CP
WHERE C.Cpno=CP.Cno


//查询所有学生及其选课情况
SELECT S.Sno,S.Sname,SC.Cno,SC.Grade
FROM Student S RIGHT  JOIN SC ON(S.Sno=SC.Sno);

//查询有一门课的分数大于 80 并且年龄大于 19 的全部学生
SELECT S.Sno,S.Sname,S.Sage,SC.Cno,SC.Grade
FROM Student S LEFT  JOIN SC ON(S.Sno=SC.Sno)
WHERE Sage>19 AND SC.Grade>=80;

//查询有一门课的分数大于 70 并且年龄大于 19 的全部学生
SELECT Sno,Sname,Sage
FROM Student
WHERE SNO IN(
SELECT Sno
FROM SC
WHERE Grade>70
) AND Sname IN (
SELECT Sname
FROM Student
WHERE Sage>19
);
//查询和“王二”同系的全部学生
SELECT *
FROM Student
WHERE Sdept IN (
SELECT Sdept
FROM Student
WHERE Sname = '王二'
);


//查询大于某个学生的平均分的学生的学号、课程号
SELECT SC1.Sno, SC1.Cno
FROM SC SC1
WHERE SC1.Grade >= (
SELECT AVG(Grade)
FROM SC SC2
GROUP BY SC2.Sno
HAVING SC1.Sno=SC2.Sno
);

//查询大于某个学生的平均分的学生的学号、课程号
SELECT SC1.Sno, SC1.Cno
FROM SC SC1
WHERE SC1.Grade >= (
SELECT AVG(Grade)
FROM SC SC2
WHERE SC1.Sno=SC2.Sno
);

//查询不等于每个学生的平均分的学生的学号、课程号
SELECT SC1.Sno, SC1.Cno
FROM SC SC1
WHERE SC1.Grade <> ANY (
SELECT AVG(Grade)
FROM SC SC2
GROUP BY SC2.Sno
);
//查询大于每个学生的平均分的学生的学号、课程号
SELECT SC1.Sno, SC1.Cno
FROM SC SC1
WHERE SC1.Grade >= ALL (
SELECT AVG(Grade)
FROM SC SC2
GROUP BY SC2.Sno
);
//查询小于某一“IS”学生的年龄的非“IS”的学生
SELECT S1.Sname,S1.Sage
FROM Student S1
WHERE S1.Sage < ANY(
SELECT DISTINCT Sage
FROM Student S2
WHERE Sdept = 'CS'
) AND Sdept <> 'CS';

//查询年龄小于全部的 “IS” 学生的年龄的非 “IS” 的学生
SELECT S1.Sname,S1.Sage
FROM Student S1
WHERE S1.Sage < ALL(
SELECT DISTINCT Sage
FROM Student S2
WHERE Sdept = 'IS'
) AND Sdept <> 'IS';

//查询选修 “0001” 课程的学生
SELECT *
FROM Student
WHERE  EXISTS (
SELECT *
FROM SC
WHERE Sno=Student.Sno AND Cno='0001'

);
//查询没有选修 ”0001” 课程的学生
SELECT *
FROM Student
WHERE NOT EXISTS (
SELECT *
FROM SC
WHERE Sno=Student.Sno AND Cno='0001'

);

//查询选修全部课程的学生
SELECT *
FROM Student
WHERE  EXISTS (
SELECT Sno,COUNT(Cno)
FROM SC
GROUP BY Sno
HAVING Sno=Student.Sno AND COUNT(Cno) = (
SELECT COUNT(Cno)
FROM Course
)

);

//查询选修全部课程的学生
SELECT *
FROM Student S
WHERE NOT EXISTS (
SELECT *
FROM Course C
WHERE  NOT EXISTS (
SELECT *
FROM SC
WHERE SC.Sno=S.Sno AND
      SC.Cno=C.Cno
)

);


//查询选修了学号为“201306”的学生所选修的全部课程的学生(不包含学号为“201306”的学生)
SELECT DISTINCT Sno
FROM SC SC1
WHERE  NOT EXISTS (
SELECT *
FROM SC SC2
WHERE SC2.Sno='201306' AND NOT EXISTS (
SELECT *
FROM SC SC3
WHERE SC3.Sno=SC1.Sno AND
      SC2.Cno=SC3.Cno 
     
)

) AND Sno NOT LIKE '201306';
SELECT  * FROM N_Student;

DELETE  FROM Course WHERE Cno='0006'

DROP TABLE student CASCADE;
DROP TABLE sc;
DROP TABLE course;
DROP VIEW N_Student;

  • SQL.rar (16.7 KB)
  • 下载次数: 0
分享到:
评论

相关推荐

    tpch生成的,22个适合postgresql的sql语句

    tpch生成的,22个适合postgresql的sql语句

    SQLTracker,抓取sql语句的工具

    SQLTracker是一款专为数据库操作监控设计的工具,它在IT领域中主要用于跟踪和记录SQL语句的执行情况。SQL(Structured Query Language)是用于管理关系数据库的编程语言,包括查询、更新、插入和删除数据等操作。SQL...

    PostgreSQL之SQL调优指南.pptx

    pg_stat_statements模块可以提供详细的SQL语句执行信息,而auto_explain模块可以提供详细的SQL语句执行计划信息。同时,PostgreSQL也提供了pg_stat_activity视图,用于显示当前有哪些活动会话,每个会话正在执行什么...

    PostgreSQL sql语句:创建用户,创建数据库,用户授权

    PostgreSQL sql语句:创建用户,创建数据库,用户授权

    Sql语句生成器

    10. **兼容性**:一个好的Sql语句生成器应该支持多种数据库系统,如MySQL、Oracle、SQL Server、PostgreSQL等,以适应不同环境的需求。 总的来说,Sql语句生成器是数据库管理的得力助手,它简化了繁琐的脚本编写...

    SQL语句生成及分析器

    除了基本的SELECT语句,SQL语句生成器可能还会支持INSERT、UPDATE、DELETE等操作,以及更复杂的DML(数据操纵语言)和DDL(数据定义语言)任务,如创建表、视图、索引等。用户甚至可以利用这个工具生成JOIN操作,...

    Expression表达式转换为SQL语句,支持SqlServer、MySql、Oracle、Sqlite、PostgreSql

    .NET Standard 2.1、.NET 5、.NET 6、.NET 7 版本SQLBuilder,Expression表达式转换为SQL语句,支持SqlServer、MySql、Oracle、Sqlite、PostgreSql;基于Dapper实现了不同数据库对应的数据仓储Repository;

    sql语句自动生成器

    SQL语句自动生成器是一款非常实用的工具,尤其对于初学者和繁忙的数据库管理员来说,它极大地简化了SQL查询的编写过程。SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言,涵盖增、删、改、查...

    生成SQL语句工具

    首先,我们要理解SQL语句的基本类型。SQL主要包括以下几种: 1. **SELECT语句**:用于从数据库中检索数据,是最常用的SQL命令。它可以按照特定条件筛选、排序和分组数据。 2. **INSERT语句**:用于向数据库表中...

    根据postgresql或者greenplum数据库创建表的sql语句转换成最基本的django model

    有时候在django中使用postgresql和greenplum数据库时,使用django model的数据库同步命令时会有问题,生成不了对应的数据库表,无奈只有手工先创建数据库表,然后再根据表字段手动创建model,为了提高效率我写了一个...

    PostgreSQL慢SQL调优手册

    **PostgreSQL 慢 SQL 调优手册** 1、**Create Index Directly** 创建合适的索引是优化查询性能的关键。为经常出现在 WHERE 子句中的列创建索引可以显著提升查询速度。例如,如果你的查询频繁地过滤某个特定列,如 ...

    sql语句电子书 . .

    以上只是“SQL语句电子书”可能涉及的一些关键知识点,实际内容可能还包括具体的SQL标准(如SQL-92、SQL-99、SQL:2003等)、不同数据库系统(如MySQL、Oracle、SQL Server、PostgreSQL等)的语法差异、实际案例分析...

    SQL语句学习资料SQL语句学习资料

    总的来说,深入学习SQL语句,不仅需要理解基本概念,还要通过大量的实践来熟练运用,以提升你在数据管理和分析领域的专业能力。这个压缩包中的"课后练习"文件将是你提升SQL技能的重要资源,务必充分利用。

    PostgreSQL_与_MS_SQLServer比较

    ### PostgreSQL与MS SQL ...综上所述,尽管 MS SQL Server 和 PostgreSQL 在很多基本概念上相似,但在具体的实现细节上存在显著差异。了解这些差异对于跨平台迁移项目或进行数据库设计时选择合适的技术栈至关重要。

    sql语句生成的工具

    SQL语句生成工具是数据库管理工作中的一大利器,它极大地简化了数据库操作,特别是对于复杂的查询、更新和数据处理任务。这种工具通常具有图形用户界面,允许用户通过直观的界面来构建SQL语句,而无需手动编写复杂的...

    可以自动生成sql语句的工具

    为了提高开发效率,许多工具应运而生,它们能够自动生成SQL语句,甚至包括相关的基本代码,如增、删、改、查操作。标题中的“可以自动生成sql语句的工具”就是这类软件的代表,它极大地简化了程序员的工作,减少了...

    好用的SQL语句格式化工具

    “好用的SQL语句格式化工具”是一款专门用于优化SQL代码外观的软件,它能够自动化地对SQL语句进行整理和美化,使其符合标准的编码规范,提升代码的可读性和可维护性。通过使用这样的工具,开发人员可以更轻松地检查...

    SQL语句练习提高

    【SQL语句练习提高】 在SQL中,查询和操作数据是其核心功能。以下通过给出的练习题目,我们将深入理解SQL的基本句式和用法。 28. 题目要求从`employee`表中抽取部门名称(depart_name),计算平均工资(avg(wage)...

Global site tag (gtag.js) - Google Analytics