数据库 实验二 数据库的单表查询和连接查询
实验目的
1. 掌握无条件查询的使用方法。
2. 掌握条件查询的使用方法。
3. 掌握库函数及汇总查询的使用方法。
4. 掌握分组查询的使用方法。
5. 掌握查询的排序方法。
6. 掌握连接查询的使用方法。
题目:
对这个数据库中的表进行以下的查询操作(每一个查询都要给出SQL语句,列出查询结果(可以截图))。
(1)查询各位学生的学号、班级和姓名。
(2)查询课程的全部信息。
(3)查询数据库中有哪些专业班级。
(4)查询学时数大于60的课程信息。
(5)查询在1986年出生的学生的学号、姓名和出生日期。
(6)查询三次作业的成绩都在80分(不包括)以上的学号、课程号。
(7)查询姓张的学生的学号、姓名和专业班级。
(8)查询05级的男生信息。
(9)查询没有作业成绩(只要有一门没有成绩就算)的学号和课程号。
(10)查询学号为0538的学生的作业1总分。
(11)查询选修了K001课程的学生人数。
(12)查询数据库*有多少个班级。
(13)查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分。
(14)将学生作业表中的信息按照学号升序排列,如果学号相同,按作业1降序排列。
(15)查询于兰兰的选课信息,列出学号、姓名、课程名。
解析:
(1)查询各位学生的学号、班级和姓名。
SELECT Sno,DeptandClass,Sname
FROM Student
(2)查询课程的全部信息。
SELECT *
FROM Course
(3)查询数据库中有哪些专业班级。
SELECT DeptandClass
FROM Student
(4)查询学时数大于60的课程信息。
SELECT *
FROM Course
WHERE STime>60
(5)查询在1986年出生的学生的学号、姓名和出生日期。
SELECT Sno,Sname,Birthday
FROM Student
WHERE Birthday like '%1986%'
(6)查询三次作业的成绩都在80分(不包括)以上的学号、课程号。
SELECT Sno,Cno
FROM Homework
WHERE Score1>80 and Score2>80 and Score3>80
(无)
(7)查询姓张的学生的学号、姓名和专业班级。
SELECT Sno,Sname,DeptandClass
FROM Student
WHERE Sname like '张%'
(8)查询05级的男生信息。
SELECT *
FROM Student
WHERE DeptandClass like '%05' and Sex='男'
(9)查询没有作业成绩(只要有一门没有成绩就算)的学号和课程号。
错误写法:
WHERE Score1 = NULL OR Score2 = NULL OR Score3 = NULL空值的谓词的一般形式是:列名IS[NOT] NULL;注意:不能写成:列名=NULL;或列名=NOTNULL。
SELECT *
FROM Homework
WHERE Score1 is NULL OR Score2 is NULL OR Score3 is NULL
(10)查询学号为0538的学生的作业1总分。
SELECT Sum(Score1) as Sum
FROM Homework
WHERE Sno = 538
(11)查询选修了K001课程的学生人数。
SELECT Count(*)as Num
FROM Homework
WHERE Cno = 'K001'
(12)查询数据库*有多少个班级。
SELECT Count(Distinct DeptandClass) as Num
FROM Student
(13)查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分。
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
"聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。"
HAVING 子句可以让我们筛选分组后的各组数据。
SELECT Sno,AVG(Score1)as AS1,AVG(Score2)as AS2,AVG(Score3)as AS3
FROM Homework
GROUP BY Sno
Having COUNT(Cno)>=3
(14)将学生作业表中的信息按照学号升序排列,如果学号相同,按作业1降序排列。
SELECT *
FROM Homework
ORDER BY Sno,Score1 DESC
升序:默认 (或ASC)
降序:DESC
(15)查询于兰兰的选课信息,列出学号、姓名、课程名。
INNER JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
列名 'Sno' 不明确。
把语句里相关的列名都加上前缀,可以避免这个问题
报错的主要原因是“显示状态”属于哪个表或哪个结果集不明确
SELECT Student.Sno,Sname,Cname
FROM Homework
INNER JOIN Student
ON Student.Sno=Homework.Sno
INNER JOIN Course
ON Homework.Cno=Course.Cno
WHERE Sname='于兰兰'
有两个INNER JOIN时,FROM后应是连接其他表格的桥梁
附:数据信息表.sql
USE [SCE]
GO
/****** Object: Table [dbo].[学生作业表] Script Date: 11/28/2016 14:04:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[学生作业表](
[课程号] [char](10) NOT NULL,
[学号] [char](10) NOT NULL,
[作业1成绩] [int] NULL,
[作业2成绩] [int] NULL,
[作业3成绩] [int] NULL,
CONSTRAINT [SC_Prim] PRIMARY KEY CLUSTERED
(
[课程号] ASC,
[学号] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K001 ', N'0433 ', 60, 75, 75)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K001 ', N'0529 ', 70, 70, 60)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K001 ', N'0531 ', 70, 80, 80)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K001 ', N'0591 ', 80, 90, 90)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K002 ', N'0496 ', 80, 80, 90)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K002 ', N'0529 ', 70, 70, 85)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K002 ', N'0531 ', 80, 80, 80)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K002 ', N'0538 ', 65, 75, 85)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K002 ', N'0592 ', 75, 85, 85)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K006 ', N'0531 ', 80, 80, 90)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'K006 ', N'0591 ', 80, 80, 80)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'M001 ', N'0496 ', 70, 70, 80)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'M001 ', N'0591 ', 65, 75, 75)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'S001 ', N'0531 ', 80, 80, 80)
INSERT [dbo].[学生作业表] ([课程号], [学号], [作业1成绩], [作业2成绩], [作业3成绩]) VALUES (N'S001 ', N'0538 ', 60, NULL, 80)
/****** Object: Table [dbo].[学生表] Script Date: 11/28/2016 14:04:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[学生表](
[学号] [char](10) NOT NULL,
[姓名] [char](20) NOT NULL,
[性别] [char](2) NOT NULL,
[专业班级] [char](50) NOT NULL,
[出生日期] [date] NOT NULL,
[联系电话] [char](15) NULL,
PRIMARY KEY CLUSTERED
(
[学号] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[学生表] ([学号], [姓名], [性别], [专业班级], [出生日期], [联系电话]) VALUES (N'0433 ', N'张艳 ', N'女', N'生物04 ', CAST(0x0D110B00 AS Date), N' ')
INSERT [dbo].[学生表] ([学号], [姓名], [性别], [专业班级], [出生日期], [联系电话]) VALUES (N'0496 ', N'李越 ', N'男', N'电子04 ', CAST(0x680D0B00 AS Date), N'13812902331 ')
INSERT [dbo].[学生表] ([学号], [姓名], [性别], [专业班级], [出生日期], [联系电话]) VALUES (N'0529 ', N'赵欣 ', N'男', N'会计05 ', CAST(0x4D0D0B00 AS Date), N'13502222908 ')
INSERT [dbo].[学生表] ([学号], [姓名], [性别], [专业班级], [出生日期], [联系电话]) VALUES (N'0531 ', N'张志国 ', N'男', N'生物05 ', CAST(0x0A110B00 AS Date), N'13312567890 ')
INSERT [dbo].[学生表] ([学号], [姓名], [性别], [专业班级], [出生日期], [联系电话]) VALUES (N'0538 ', N'于兰兰 ', N'女', N'生物05 ', CAST(0x650D0B00 AS Date), N'13312004030 ')
INSERT [dbo].[学生表] ([学号], [姓名], [性别], [专业班级], [出生日期], [联系电话]) VALUES (N'0591 ', N'王丽丽 ', N'女', N'电子04 ', CAST(0x820D0B00 AS Date), N'13320809766 ')
INSERT [dbo].[学生表] ([学号], [姓名], [性别], [专业班级], [出生日期], [联系电话]) VALUES (N'0592 ', N'王海强 ', N'男', N'电子04 ', CAST(0x3E110B00 AS Date), N' ')
/****** Object: Table [dbo].[课程表] Script Date: 11/28/2016 14:04:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[课程表](
[课程号] [char](10) NOT NULL,
[课程名] [char](50) NOT NULL,
[学分数] [float] NOT NULL,
[学时数] [int] NOT NULL,
[任课老师] [char](20) NOT NULL,
PRIMARY KEY CLUSTERED
(
[课程号] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[课程表] ([课程号], [课程名], [学分数], [学时数], [任课老师]) VALUES (N'K001 ', N'计算机图形学 ', 2.5, 40, N'胡晶晶 ')
INSERT [dbo].[课程表] ([课程号], [课程名], [学分数], [学时数], [任课老师]) VALUES (N'K002 ', N'计算机应用基础 ', 3, 48, N'任泉 ')
INSERT [dbo].[课程表] ([课程号], [课程名], [学分数], [学时数], [任课老师]) VALUES (N'K006 ', N'数据结构 ', 4, 64, N'马跃先 ')
INSERT [dbo].[课程表] ([课程号], [课程名], [学分数], [学时数], [任课老师]) VALUES (N'M001 ', N'政治经济学 ', 4, 64, N'孔繁新 ')
INSERT [dbo].[课程表] ([课程号], [课程名], [学分数], [学时数], [任课老师]) VALUES (N'S001 ', N'高等数学 ', 3, 48, N'赵晓尘 ')
/****** Object: Default [DF__学生表__性别__0519C6AF] Script Date: 11/28/2016 14:04:33 ******/
ALTER TABLE [dbo].[学生表] ADD DEFAULT ('男') FOR [性别]
GO
/****** Object: Check [Score_Chk1] Script Date: 11/28/2016 14:04:33 ******/
ALTER TABLE [dbo].[学生作业表] WITH CHECK ADD CONSTRAINT [Score_Chk1] CHECK (([作业1成绩]>=(0) AND [作业1成绩]<=(100)))
GO
ALTER TABLE [dbo].[学生作业表] CHECK CONSTRAINT [Score_Chk1]
GO
/****** Object: Check [Score_Chk2] Script Date: 11/28/2016 14:04:33 ******/
ALTER TABLE [dbo].[学生作业表] WITH CHECK ADD CONSTRAINT [Score_Chk2] CHECK (([作业2成绩]>=(0) AND [作业2成绩]<=(100)))
GO
ALTER TABLE [dbo].[学生作业表] CHECK CONSTRAINT [Score_Chk2]
GO
/****** Object: Check [Score_Chk3] Script Date: 11/28/2016 14:04:33 ******/
ALTER TABLE [dbo].[学生作业表] WITH CHECK ADD CONSTRAINT [Score_Chk3] CHECK (([作业3成绩]>=(0) AND [作业3成绩]<=(100)))
GO
ALTER TABLE [dbo].[学生作业表] CHECK CONSTRAINT [Score_Chk3]
GO
本文地址:https://blog.csdn.net/weixin_43673589/article/details/110674285
上一篇: 【MySQL】1、根据条件排名;2、sql拼接字段;3、插入已存在的记录
下一篇: P5
推荐阅读