`
keepwork
  • 浏览: 334399 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle--经典sql 查询语句 适合初学者

 
阅读更多

开发者博客www.developsearch.com

 

 

create database cstp;
use cstp;
/*1:建立学生表*/
create table student (
   学号 char(3) primary key,
   姓名 char(4),
   性别 char(2),
   年龄 int,
   班级 char(5)
);
insert into student values('108','曾华','男',19,'95033');
insert into student values('105','匡明','男',20,'95031');
insert into student values('107','王丽','女',20,'95033');
insert into student values('101','李军','男',19,'95033');
insert into student values('109','王芳','女',22,'95031');
insert into student values('103','陆君','男',20,'95031');
/*2:建立教师表*/
create table teacher(
   教师号 char(3) primary key,
   姓名 char(4),
   性别 char(2),
   年龄 int ,
   级别 char(6),
   专业 char(8)
);
insert into teacher values('804','李成','男',42,'副教授','计算机系');
insert into teacher values('856','张旭','男',35,'讲师','电子工程');
insert into teacher values('825','王萍','女',28,'助教','计算机系');
insert into teacher values('831','刘冰','女',25,'助教','电子工程');
/*3:建立课程表*/
create table course (
   课程号 char(5) primary key,
   课程名 char(10),
   教师号 char(3),
   foreign key(教师号) references teacher(教师号)
);
insert into course values('3-105','计算机导论','825');
insert into course values('3-245','操作系统','804');
insert into course values('6-166','数字电路','856');
insert into course values('9-888','高等数学','831');
/*4:建立选课表*/
create table sc(
   学号 char(3),
   课程号 char(5),
   primary key(学号,课程号),
   成绩 int,
   foreign key(学号) references student(学号),
   foreign key(课程号) references course(课程号)
);
insert into sc values('103','3-245',86);
insert into sc values('105','3-245',75);
insert into sc values('109','3-245',68);
insert into sc values('103','3-105',92);
insert into sc values('105','3-105',88);
insert into sc values('109','3-105',76);
insert into sc values('101','3-105',64);
insert into sc values('107','3-105',91);
insert into sc values('108','3-105',78);
insert into sc values('101','6-166',85);
insert into sc values('107','6-166',79);
insert into sc values('108','6-166',81);
/*5:所有表内容*/
select * from student;
select * from course;
select * from teacher;
select * from sc;

所有表信息如下:

student(学生)表
经典sql 查询语句 适合初学者 - 易建锋 - yijianfeng_vip的博客
 
course(课程)表
经典sql 查询语句 适合初学者 - 易建锋 - yijianfeng_vip的博客
 
teacher(教师)表
经典sql 查询语句 适合初学者 - 易建锋 - yijianfeng_vip的博客
 
sc(选课)表
经典sql 查询语句 适合初学者 - 易建锋 - yijianfeng_vip的博客
 


作业题:
1.查询选修课程'3-105'且成绩在60到80之间的所有记录。
注释:用于指定某个范围使用between and,也可以使用and连接符;
答案:
法1:select * from sc where 课程号='3-105' and 成绩 between 60 and 80;
法2:select * from sc where 课程号='3-105' and 成绩 > 60 and 成绩 < 80;


2.查询成绩为85、86或88的记录。
注释:用于制定某个集合使用 in 关键字,也可以使用 or 连接符;
答案:
法1:select * from sc where 成绩=85 or 成绩=86 or 成绩=88;
法2:select * from sc where 成绩 in(85,86,88);


3.查询'95031'班的学生人数。
注释:count(*)用于计算结果总数;
答案:
select count(班级) as 学生人数 from student where 班级='95031';


4.查询最低分大于70,且最高分小于90的学号列。
注释:having后面跟聚合函数:avg,min,max,count;having语句只能跟在:group by语句后面;
答案:
select 学号,min(成绩)as 最低分,max(成绩)as 最高分 from sc group by 学号 having min(成绩)>70 and max(成绩) < 90;


5.查询至少有5名学生选修并以3开头的课程的平均成绩。
注释:group by 语句置于where语句后面表示根据什么条件来分组;
答案:
select avg(成绩) as 平均成绩 from sc where 课程号 like '3%' group by 课程号 having count(课程号) >= 5;


6.查询平均分大于80分的学生的成绩表
注释:having后面跟聚合函数avg();
答案:
select * from sc group by 学号 having avg(成绩) > 80;


7.查询'95033'班每个学生所选课程的平均分。
注释:此题是根据 '95033'班学生的学号进行的分组,使用where语句限制group by语句的分组条件;
答案:
select 学号,avg(成绩) as 平均成绩 from sc where 学号 in (select 学号 from student where 班级 = '95033') group by 学号;


8.以选修 '3-105'为例,查询成绩高于'109'号同学的所有同学的记录。
注释:此题使用典型的嵌套查询,层层深入;
答案:
select * from student where 学号 in (select 学号 from sc where 课程号='3-105' and 成绩 >
(select 成绩 from sc where 学号='109' and 课程号='3-105'));


9.查询与学号为'108'的同学同岁的所有学生的学号、姓名和年龄。
注释:当查询的结果集返回只有一个时关键字in的作用等价于'='的作用,但是注意'='只能用与返回结果集只有一个,而 in 可以有多个结果;
答案:
法1:select 学号,姓名,年龄 from student where 年龄 = (select 年龄 from student where 学号='108');
法2:select 学号,姓名,年龄 from student where 年龄 in (select 年龄 from student where 学号='108');


10.查询'张旭'教师任课的课程号,选修其课程学生的学号和成绩。
注释:此题使用了表的连接:inner join,将多个表连接在一起组成一个新的表,标的连接的条件是必须存在相同的列;
答案:
法1:select 课程号 from course where 教师号=(select 教师号 from teacher where 姓名='张旭'); select 学号,成绩 from sc where 课程号 in(select 课程号 from course where 教师号 in
(select 教师号 from teacher where 姓名='张旭'));
法2:select teacher.姓名 as 教师姓名,course.课程号,student.姓名 as 学生姓名,student.学号,成绩 from  teacher inner join (course inner join (sc inner join student on student.学号=sc.学号) on course.课程号=sc.课程号) on course.教师号=teacher.教师号 where  teacher.姓名='张旭';


11.查询选修其课程的学生人数多于5人的教师姓名。
注册:此题采用嵌套查询和连接表两种方法,表现出了同样的效果;
答案:
法1:select 姓名 as 教师姓名 from teacher where 教师号 in (select 教师号 from course where 课程号 in (select 课程号 from sc group by 课程号 having count(*) > 5));
法2:select 姓名 as 教师姓名 from teacher inner join (course inner join sc on course.课程号=sc.课程号) on teacher.教师号=course.教师号 group by sc.课程号 having count(*) > 5;


12.查询'计算机系'与'电子工程系'不同职称的教师的姓名和职称。
注释:不同职称意味着分组后的返回结果集只有一个;
答案:
select 姓名 as 教师姓名,级别 as 职称 from teacher group by 级别 having count(*) = 1;


13.查询选修编号为'3-105'课程且成绩至少高于选修编号为'3-245'课程的同学的课程号、学号 、成绩并按成绩从高到低次序排列。
注释:any 表示任意一个;
答案:
select * from sc where 课程号='3-105' and 成绩 > any (select 成绩 from sc where 课程号='3-245') order by 成绩 desc;


14.查询选修编号为'3-105'课程且成绩高于选修编号为'3-245'课程的同学的课程号、学号 、成绩。
注释:all 表示所有;
答案:
select * from sc where 课程号='3-105' and 成绩 > all (select 成绩 from sc where 课程号='3-245') order by 成绩 desc;


15.列出所有教师和同学的姓名 、性别 、年龄。
注释:此题将所有表连接在一起:
答案:
select student.姓名 as 学生姓名,student.性别 as 学生性别,student.年龄 as 学生年龄,
teacher.姓名 as 教师姓名,teacher.性别 as 教师性别,teacher.年龄 as 教师年龄 from
student inner join (sc inner join (course inner join teacher on course.教师号=teacher.教师号)
on sc.课程号=course.课程号) on student.学号=sc.学号;


16.查询成绩比'3-105'课程的平均成绩低的学生的成绩表。
答案:
select * from sc where 成绩 < (select avg(成绩) from sc where 课程号='3-105') and 课程号='3-105';


17.查询成绩比该课程平均成绩低的学生的成绩表。
注释:此题是所有题中最难的,下面的方法很经典,请认真琢磨,先按照课程进行分组,查出小于各门课程平均成绩的所有成绩;
答案:
select * from sc where 成绩 < any (select avg(成绩) from sc group by 课程号) order by 课程号 asc;


18.列出所有任课教师的姓名和专业。
注释:姓名和专业涉及两个表course表和teacher表,只需连接这两个表就能解决此题了;
答案:
select teacher.姓名 as 教师姓名,专业 from teacher where 教师号 in (select 教师号 from course where 课程号 in (select 课程号 from sc group by 课程号));


19.列出所有未讲课教师的姓名和专业。
注释:解答同上题;
答案:
select teacher.姓名 as 教师姓名,专业 from teacher where 教师号 not in
(select 教师号 from course where 课程号 in (select 课程号 from sc group by 课程号));


20.列出至少有2名男生的班号。
注释:根据性别='男'这个条件来对student表进行分组就可以了;
答案:
select 班级 as 班号 from student where 性别='男' group by 班级 having count(*) >= 2;


21.查询不姓'王'的学生记录。
答案:
法1:select *  from student where 姓名 not like '王%';
法2:select * from student where 姓名 not in (select 姓名 from student where 姓名like '王%');


22.查询每门课最高分的学生的学号、课程号、成绩。
注释:此题的技巧在于根据最高分来查成绩表;
答案:
select * from sc where 成绩 in (select max(成绩) from sc group by 课程号);


23.查询与'李军'同性别并同班的同学名字。
注释:嵌套查询;
答案:
select 姓名 from student where 性别=(select 性别 from student where 姓名='李军') and
班级=(select 班级 from student where 姓名='李军');


24.查询'男'教师及其所上的课程。
注释:先分析此题涉及的表;
答案:
select 姓名 as 教师名,课程名 as 课程 from teacher inner join course on teacher.教师号=course.教师号 where 性别='男';


25.查询选修'计算机导论'课程的'男'同学的成绩表。
注释:此题用嵌套查询和表连接两种方法进行解答;
答案:
法1:select * from sc where 课程号=(select 课程号 from course where 课程名='计算机导论') and 学号 in (select 学号 from student where 性别='男');
法2:select sc.学号,student.姓名 as 学生姓名,student.性别 as 学生性别,sc.课程号,sc.成绩,course.课程名 from student inner join (sc inner join course on sc.课程号=course.课程号)
on student.学号=sc.学号 where 性别='男' and 课程名='计算机导论';

分享到:
评论

相关推荐

    ORACLE-SQL语句学习教程解读.pdf

    本教程将深入探讨Oracle SQL的各种核心概念和技术,旨在帮助初学者和经验丰富的用户更好地理解和使用SQL语句。 首先,我们从“概述”部分开始,它通常会介绍SQL语言的基本概念和在Oracle环境中的应用。SQL(结构化...

    oracle-sql.rar_oracle

    本压缩包“oracle-sql.rar_oracle”显然针对的是Oracle SQL的学习资源,特别是对于初学者而言,它提供了丰富的实用技巧和经典查询示例。 在“oracle-sql.rar”中,我们有两个文件:“oracle常用经典sql查询.doc”和...

    Oracle-SQL.rar_oracle_oracle sql_sql

    10. **数据库连接与管理工具**:如SQL*Plus、SQL Developer等,是与Oracle数据库交互的常用工具,它们能帮助我们执行SQL语句,管理数据库对象,以及监控数据库状态。 通过这份“Oracle SQL.ppt”,初学者可以逐步...

    初学者常用Oracle sql语句

    ### 初学者常用Oracle SQL语句详解 #### 一、查询表名 在Oracle数据库中,根据不同的权限和需求,可以使用以下几种方法来查询表名: 1. **查询当前用户所拥有的表:** ```sql SELECT table_name, tablespace_...

    Oracle-Pl-Sql.rar

    在“Oracle-PL-Sql.rar”这个压缩包中,包含了一系列的PPT课件,这些课件可能涵盖了PL/SQL的基础知识和进阶主题,适合初学者入门学习。以下是可能涉及的一些关键知识点: 1. **PL/SQL基础语法**:这包括变量声明、...

    经典sql和oracle语句下载

    在IT领域,SQL(Structured Query Language)是一种用于管理和处理关系数据库的强大语言,广泛应用于数据...这份文档无疑为SQL初学者和经验丰富的开发者提供了一个宝贵的参考资料库,帮助他们提升技能,解决实际问题。

    Oracle基本sql语句

    Oracle数据库是全球最广泛使用的...通过对这些基础知识的复习和练习,可以帮助初学者和有经验的数据库管理员都能更好地掌握和使用Oracle数据库。记住,通过不断的练习和实际操作,才能真正地熟悉并运用好SQL语句。

    oracle-MySQL笔记整理资料 适合初学者

    这篇笔记整理资料适合初学者,将帮助他们理解这两种数据库的基本概念、语法和操作。 Oracle数据库是由Oracle公司开发的企业级关系型数据库系统,适用于大型数据仓库和复杂的事务处理。它的主要特点包括高度可扩展性...

    oracle的sql语句和语法

    本资料将重点介绍Oracle SQL语句和语法,适合初学者入门学习。 1. **SQL基础** - **SELECT语句**:用于从数据库中检索数据,是最常用的SQL语句。可以指定列名、表名、条件等,例如`SELECT column1, column2 FROM ...

    Oracle-PL-SQL入门教程(经典)

    | 新手上路 | 电脑初学者 | | 软件教室 | 一般的电脑用户 | | 设计教室 | 电脑设计爱好者 | | 开发教室 | 电脑编程人员 | #### 创建表格 - **CREATE TABLE 语句**:用于创建新的数据库表格。其基本语法格式...

    Oracle-PL-SQL.zip_oracle

    Oracle PL/SQL是Oracle数据库系统中的一个核心组件,它是一种过程化语言,专门设计用于数据库交互和处理。在"Mastering Oracle PL/SQL: ...不论你是初学者还是有经验的开发人员,这本书都能提供有价值的洞见和指导。

    oracle初学者必会的sql语句总结

    根据提供的标题、描述、标签及部分内容,我们可以整理出Oracle初学者必须掌握的一些SQL语句及相关知识点,主要包括数据查询、表的创建与管理、数据插入、更新与删除等基础操作。 ### 1. 基本的数据查询语句 - **...

    introduction to oracle - sql plsql

    ### Oracle SQL与PL/SQL简介 #### 一、Oracle数据库概览 Oracle数据库是全球领先的数据库管理系统之一...以上是对Oracle SQL与PL/SQL的初步介绍,希望对初学者有所帮助。未来还可以深入探讨更多高级主题和技术细节。

    oracle常用sql语句大全 注释完整 放心使用

    本资料集包含了Oracle数据库中常用SQL语句的大全,注释完整,非常适合初学者和有经验的开发者参考使用。 1. **数据查询(SELECT语句)**: - `SELECT * FROM table_name;`:查询表table_name中的所有列。 - `...

    oracle9i--pl/sql

    Oracle 9i是Oracle数据库的一个重要版本,发布于2001..."Oracle9i--pl/sql"这本书应该会详细讲解这些内容,帮助初学者逐步掌握数据库管理和编程技能。通过阅读和实践,你可以更好地理解和运用这些知识来解决实际问题。

    经典sql语句经典的sql语句

    描述中提到的“经典的SQL语句对初学者有很大帮助”,意味着我们将探讨一些基础且重要的SQL概念和语法,这些内容是学习SQL的基石,也是任何数据库管理员或开发者应该熟知的。 从标签“sql语句”我们可以推断,接下来...

    oracle-sql-the-essential-reference

    《Oracle SQL:核心参考》不仅是Oracle SQL初学者的理想入门读物,也为经验丰富的开发者提供了宝贵的参考资料。本书通过详细的理论讲解和丰富的实践示例,帮助读者全面掌握Oracle SQL的各项技能。无论是想要深入了解...

    Pro Oracle SQL-成为SQL语言编写专家

    - **SQL语句分类**:SQL语句大致分为五类:数据定义语言 (DDL)、数据操纵语言 (DML)、数据查询语言 (DQL)、数据控制语言 (DCL) 和事务控制语言 (TCL)。每种类型的语句都有其特定的功能和应用场景。 - DDL 主要用于...

    oracle归档备份SQL语句版初学者适用

    本文将针对初学者,详细介绍如何使用SQL语句进行Oracle数据库的归档备份,帮助你掌握这一核心技能。 首先,理解Oracle归档备份的概念。在Oracle数据库中,归档日志模式(Archived Log Mode)是一种运行模式,它允许...

Global site tag (gtag.js) - Google Analytics