数据库基础(2):简单查询和连接查询

1. 实验内容

  建的数据库如下:

 1 CREATE TABLE Depts
 2 (
 3     Dno CHAR(20) PRIMARY KEY,
 4     Dname CHAR(20) NOT NULL
 5 )
 6 INSERT INTO Depts VALUES(‘D01‘,‘自动化‘)
 7 INSERT INTO Depts VALUES(‘D02‘,‘计算机‘)
 8 INSERT INTO Depts VALUES(‘D03‘,‘数学‘)
 9 INSERT INTO Depts VALUES(‘D04‘,‘通信‘)
10 INSERT INTO Depts VALUES(‘D05‘,‘电子‘)
11
12 CREATE TABLE Students
13 (
14     Sno  CHAR(20) PRIMARY KEY,
15     Sname CHAR(20) NOT NULL,
16     Ssex CHAR(2),
17     Sage INT,
18     Dno CHAR(20),
19     CONSTRAINT FK_Dno FOREIGN KEY(Dno) REFERENCES Depts
20 )
21 INSERT INTO Students VALUES(‘S01‘,‘王建平‘,‘男‘,21,‘D01‘)
22 INSERT INTO Students VALUES(‘S02‘,‘刘华‘,‘女‘,19,‘D01‘)
23 INSERT INTO Students VALUES(‘S03‘,‘范林军‘,‘女‘,18,‘D02‘)
24 INSERT INTO Students VALUES(‘S04‘,‘李伟‘,‘男‘,19,‘D03‘)
25 INSERT INTO Students VALUES(‘S05‘,‘黄河‘,‘男‘,18,‘D03‘)
26 INSERT INTO Students VALUES(‘S06‘,‘长江‘,‘男‘,20,‘D03‘)
27
28 CREATE TABLE Courses
29 (
30     Cno CHAR(20) PRIMARY KEY,
31     Cname CHAR(20),
32     Pre_Cno CHAR(6),
33     Credits INT
34 )
35 INSERT INTO Courses VALUES(‘C01‘,‘英语‘,NULL,4)
36 INSERT INTO Courses VALUES(‘C02‘,‘数据结构‘,‘C05‘,2)
37 INSERT INTO Courses VALUES(‘C03‘,‘数据库‘,‘C02‘,2)
38 INSERT INTO Courses VALUES(‘C04‘,‘DB_设计‘,‘C03‘,3)
39 INSERT INTO Courses VALUES(‘C05‘,‘C++‘,NULL,3)
40 INSERT INTO Courses VALUES(‘C06‘,‘网络原理‘,‘C07‘,3)
41 INSERT INTO Courses VALUES(‘C07‘,‘操作系统‘,‘C05‘,3)
42
43 CREATE TABLE Reports
44 (
45     Sno CHAR(20),
46     Cno CHAR(20),
47     Grade INT,
48     PRIMARY KEY(Sno,Cno),
49     CONSTRAINT Student_Report FOREIGN KEY(Sno) REFERENCES Students,
50     CONSTRAINT Report_Course FOREIGN KEY(Cno) REFERENCES Courses
51 )
52 INSERT INTO Reports VALUES(‘S01‘,‘C01‘,92)
53 INSERT INTO Reports VALUES(‘S01‘,‘C03‘,84)
54 INSERT INTO Reports VALUES(‘S02‘,‘C01‘,90)
55 INSERT INTO Reports VALUES(‘S02‘,‘C02‘,94)
56 INSERT INTO Reports VALUES(‘S02‘,‘C03‘,82)
57 INSERT INTO Reports VALUES(‘S03‘,‘C01‘,72)
58 INSERT INTO Reports VALUES(‘S03‘,‘C02‘,90)
59 INSERT INTO Reports VALUES(‘S04‘,‘C03‘,75)

1.  求数学系学生的学号和姓名

SELECT Sno,Sname
FROM Students
WHERE Dno IN
(
    SELECT Dno
    FROM Depts
    WHERE Dname=‘数学‘
)

2.  求选修了课程的学生学号

SELECT DISTINCT Sno
FROM Reports

3.  求选修课程号为‘C01’的学生号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同按学号的升序排列。

SELECT Sno,Grade
FROM Reports
WHERE Cno=‘C01‘
ORDER BY Grade DESC,Sno 

4 .   求选修课程号为‘C01’且成绩在80~90之间的学生学号和成绩,并成绩乘以0.8输出。

SELECT Sno,Grade*0.8 NewGrade
FROM Reports
WHERE Cno=‘C01‘ AND Grade BETWEEN 80 AND 90

5 .   求数学系或计算机系姓张的学生的信息。(若为‘张__‘,则查询的姓名为不多于3个汉字,两个下划线代表一个汉字)

SELECT *
FROM Students
WHERE Sname LIKE‘张%‘ AND Dno IN
(
    SELECT Dno
    FROM Depts
    WHERE Dname=‘数学‘ OR Dname=‘计算机‘
)

6 .   查询每个学生的情况以及他所选修的课程

SELECT Students.* ,Reports.*
FROM Students,Reports
WHERE Students.Sno= Reports.Sno

7.  求学生的学号、姓名、选修的课程及成绩

SELECT Students.Sno,Sname,Cname,Grade
FROM Students,Reports,Courses,Depts
WHERE Students.Sno= Reports.Sno AND Reports.Cno=Courses.Cno
 AND Students.Dno=Depts.Dno

8.  查询每一门课程的间接先行课(即先行课的先行课)

SELECT A.Cno,A.Cname,B.Pre_Cno
FROM Courses A,Courses B
WHERE A.Pre_Cno=B.Cno

9 .  求其他系中比计算机系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生)

SELECT *
FROM Students
WHERE Dno!=
(
    SELECT Dno
    FROM Depts
    WHERE Dname=‘计算机‘
) AND Sage<some
    (
        SELECT MAX(Sage)
        FROM Students
        WHERE Dno=
        (
            SELECT Dno
            FROM Depts
            WHERE Dname=‘计算机‘
        )
    )

【*】10.  查询选修了全部课程的学生姓名

SELECT Sname
FROM Students
WHERE NOT EXISTS
(
    SELECT *
    FROM Courses
    WHERE NOT EXISTS
    (
        SELECT *
        FROM Reports
        WHERE Sno=Students.Sno AND Cno=Courses.Cno
    )
)

【*】11.  求至少选修了学号为“S03”的学生所选修全部课程的学生学号和姓名

SELECT Sno,Sname
FROM Students
WHERE Sno IN
(
    SELECT DISTINCT Sno
    FROM Reports A
    WHERE NOT EXISTS
    (
        SELECT *
        FROM Reports B
        WHERE B.Sno=‘S03‘ AND NOT EXISTS
        (
            SELECT *
            FROM Reports C
            WHERE C.Sno=A.Sno AND C.Cno=B.Cno
        )
    )
)
时间: 2024-11-10 10:48:32

数据库基础(2):简单查询和连接查询的相关文章

【知识库】-数据库_MySQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

简书作者:seay 文章出处: 关系数据库SQL之高级数据查询:去重复.组合查询.连接查询.虚拟表 回顾:[知识库]-数据库_MySQL之基本数据查询:子查询.分组查询.模糊查询 Learn [已经过测试校验] 一.去重复(DISTINCT) 二.组合查询 三.UNION(并集) 四.连接查询 五.虚拟表 一.去重复(DISTINCT) DISTINCT:用于返回唯一不同的值,主要是用于某一字段 语法 SELECT DISTINCT <列名>|* FROM <表名> 示例 -- 查

MySQL数据库联合查询与连接查询

联合查询 基本概念 联合查询是可合并多个相似的选择查询的结果集.等同于将一个表追加到另一个表,从而实现将两个表的查询组合在一起,使用为此为UNINO或UNION ALL 联合查询:将多个查询的结果合并到一起(纵向合并):字段数不变,多个查询的记录数合并 应用场景 1.将同一张表中不同的结果(需要对应多条查询语句来实现),合并到一起展示数据 2.最常见:在数据量大的情况下,会对表进行分表操作,需要对每张表进行部分数据统计,使用联合查询来将数据存放到一起显示 基本语法 select 语句 union

mysql数据库基础的简单操作指南

最近在学习mysql,本文是做的关于mysql学习的笔记,跟大家分享一下,希望对大家学习mysql知识有所助益.mysql现在几乎已经成了网站建设的主流数据库,很多php网站系统都采用了mysql数据库.比mssql最大的优势在于开源,免费.希望与大家共同进步. mysql数据库基础的简单操作指南:首先进入mysql:mysql -u root -p 1.建库: create database 库名称; 例如:create database mydata;(创建一个名为“mydata”的库):

mysql查询、子查询、连接查询

mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count().sum()等聚合函数一起使用. having子句(筛选):有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出. order by子句(排序):按照“属性名”指定的字段进行排序.排序方式由“asc”和“desc”两个参数指出,默

mysql 子句、子查询、连接查询

一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count().sum()等聚合函数一起使用. having子句(筛选):有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出. order by子句(排序):按照“属性名”指定的字段进行排序.排序方式由“asc”和“desc”两个参数指出,默认是按照“asc”来排序,即升序.

聚合函数,分组查询,连接查询综合例子

实例如下: update users set classes='1' where id in('u001','u002','u003','u004'); update users set classes='2' where id in('u005','u006','u007'); users表的内容如下: +------+-----------+------------+------+-------+---------+ | id | firstname | secondname | age |

合并查询与连接查询区别

一.合并查询与连接查询区别 1.合并查询 --行合并的结果集 --合并查询unioinselect name,sex from hanshuunionselect YYadd,YYadd from YingHu --连接查询where--两个表的乘积select hanshu.name,YingHu.YYadd from hanshu,YingHu ---如果不加where查询的话,将产生迪卡尔现象 (两表相乘)select hanshu.name,YingHu.YYadd from hansh

MySql数据库再学习——简述多表连接查询的自我理解

一:序 这几天在学习数据库部分,因为在学校听课也是比较迷糊,经过学习之后感觉现在思路比较清楚,对于多表连接查询操作有了一个新的认识. 二:假设 假设现在有两个表 :A ,B. 三:两表之间的连接方式 两个表的连接方式分为,内,外,交叉三种. 内连接的查询方式又分为隐式和显式两种. 外连接的查询方式又分为左,右两种. 交叉是将两个表的记录做乘积,因为得到的记录很大程度上没有直接联系,所以交叉连接查询基本没什么意义. 四:内连接 内连接的关键词:inner join...(inner可以省略) 隐式

python 之 数据库(多表查询之连接查询、子查询、pymysql模块的使用)

10.10 多表连接查询 10.101 内连接 把两张表有对应关系的记录连接成一张虚拟表 select * from emp,dep: #连接两张表的笛卡尔积 select * from emp,dep where emp.dep_id = dep.id; # 不推荐用where连接表 select * from emp inner join dep on emp.dep_id = dep.id; #推荐 +----+-----------+--------+------+--------+--

数据库的子查询、连接查询

新建两个表,teacher student create table teacher ( id int primary key auto_increment, name varchar(20)  not null default 't' )engine innodb character set utf8; create table student ( id int primary key auto_increment, name varchar(20) not null default 't',