实验二 SQL 语言——SELECT 查询操作(第一部分)

SQL 语言——SELECT 查询操作

实验目的:

	-了解查询的概念和方法;
	-掌握 SQL Server 集成管理器查询子窗口中执行 SELECT 操作的方法;
	-掌握 SELECT 语句在单表查询中的应用;
	-掌握 SELECT 语句在多表查询中的应用;
	-掌握 SELECT 语句在复杂查询中的应用。 

实验要求:

实验内容:

1、 背景知识

2、 利用 SQL 语句创建数据库及表和插入记录

  (1) 在 SQL Server Management Studio 的查询子窗口中(要以具有相应操作权限的某用 户登录)执行如下命令创建数据库。需要说明的是不同数据库系统其创建的数据库 命令或方式有所不同。 CREATE DATABASE jxgl
  (2) 刷新数据库目录后,选择新出现的 jxgl 数据库,在 SQL 操作窗口中,创建 Student、 SC、Course 三个表及表记录。 利用 CREATE、INSERT、CHECK、DEFAULT、PRIMARY KEY、FPREIGN KEY、CONSTRAINT、 IN、UNION、EXISTS、WHERE、GROUP BY、ORDER BY、UNIQUE 等 SQL 命令在 SQL 操作 窗口编写 SQL 语句进行表结构的定义和记录的插入,主要包含以下三个表:

表2-1 学生表(Student)表结构
字段名数据类型长度是否允许为空值说明
Sno字符型(char)5×学号,主键
Sname字符型(varchar)20×姓名
Ssex字符型(char)2性别,默认”男“
Sage短整型(smallint)年龄
Sdept字符型(varchar)8系名
表 2-2 课程表(Course)表结构
字段名数据类型长度是否允许为空值说明
Cno字符型(char)4×课程号,主键
Cname字符型(varchar)20×课程名
Cpno字符型(char)4先行课
Ccredit精确值型(numeric)numeric(2,1)学分
表 2-3 学生选课表(SC)表结构
字段名数据类型长度是否允许为空值说明
Sno字符型(char)5×学号,外键
Cno字符型(char)20×课程号,外键
Grade精确值型(decimal)decimal(4,1)成绩,0~100之间

学生表:Student(Sno,Sname,Ssex,Sage,Sdept) Sno 为主键
说明:Sno 学号,Sname 姓名,Ssex 性别,Sage 年龄,Sdept 所在系
表中现有记录为:

SnoSnameSsexSageSdept
98001钱横18CS
98002王林19CS
98003李民20IS
98004赵三16MA
98005钱力25PH
98006曹莉16MA
98007孙慧22PH

课程表:Course(Cno,Cname,Cpno,Credeit) Cno 为主键
说明:Cno 课程号,Cname 课程名,Cpno 先行课,Ccredit 学分
表中现有记录为

CnoCnameCpnoCcredit
1001数据库系统10054
1002数学分析NULL2
1003信息系统导论10013.5
1004操作系统_原理10063
1005数据结构10074
1006数据处理基础NULL4
1007C 语言10063

学生选课表:SC(Sno,Cno,Grade) Sno,Cno 为主键
说明:Sno 学号,Cno 课程号,Grade 成绩
表中现有记录为:

SnoCnoGrade
98001100187
98001100267
98001100390
98001100497
98002100295
98002100388
98003100257
98003100454
98004100187
98004100295
98004100381
98004100479
98004100547
98004100692
98004100771
98005100248
980051005NULL

3、 单表查询

(1) 查询考试成绩大于等于 90 的学生的学号。
(2) 查询年龄大于 23 岁的男学生的学号和姓名。
(3) 查询年龄大于 18 岁,并不是信息系(IS)与数学系(MA)的学生的姓名和性别。
(4) 查询以“操作系统_”开头,且倒数第二个汉字为“原”字的课程的详细情况。 (5) 查询选修了课程的学生人数。
(6) 根据系统当前时间和学生年龄,查询学生出生日期(要求以特定输出:年-月-日)。

建表的SQL语句:
	create table Student(
	Sno char(5) not null primary key,	-- 学号,主键
	Sname varchar(20) not null,			-- 姓名
	Ssex char(2) default('男'),			-- 性别,默认为男
	Sage smallint,						-- 年龄
	Sdept varchar(8),					-- 系名
	)
	go
	
	create table Course(
		Cno char(4) not null primary key,	-- 课程号,主键
		Cname varchar(20) not null,			-- 课程名
		Cpno char(4),						-- 先行课
		Ccredit numeric(2,1),				-- 学分
	)
	
	create table SC(
		Sno char(5) not null,				-- 学号,外键
		Cno char(4) not null,				-- 课程号,外键
		Grade decimal(4,1),					-- 成绩
	)
	--向学生表(Student)中插入数据
	insert into Student values ('98001','钱横','男',18,'CS')
	insert into Student values ('98002','王林','女',19,'CS')
	insert into Student values ('98003','李民','男',20,'IS')
	insert into Student values ('98004','赵三','女',16,'MA')
	insert into Student values ('98005','钱力','男',25,'PH')
	insert into Student values ('98006','曹莉','女',16,'MA')
	insert into Student values ('98007','孙慧','女',22,'PH')
	
	select * 
	from Student
	--向课程表(Course)中插入数据
	insert into Course values('1001','数据库系统','1005',4)
	insert into Course values('1002','数学分析',null,2)
	insert into Course values('1003','信息系统导论','1001',3.5)
	insert into Course values('1004','操作系统原理','1006',3)
	insert into Course values('1005','数据结构','1007',4)
	insert into Course values('1006','数据处理基础',null,4)
	insert into Course values('1007','C语言','1006',3)
	
	select *
	from Course
	--向选课表(SC)中插入数据
	insert into SC values('98001','1001',87)
	insert into SC values('98001','1002',67)
	insert into SC values('98001','1003',90)
	insert into SC values('98001','1004',97)
	insert into SC values('98002','1002',95)
	insert into SC values('98002','1003',88)
	insert into SC values('98003','1002',57)
	insert into SC values('98003','1004',84)
	insert into SC values('98004','1001',87)
	insert into SC values('98004','1002',95)
	insert into SC values('98004','1003',81)
	insert into SC values('98004','1004',79)
	insert into SC values('98004','1005',47)
	insert into SC values('98004','1006',92)
	insert into SC values('98004','1007',71)
	insert into SC values('98005','1002',48)
	insert into SC values('98005','1005',null)
	
	select *
	from SC

----------------------单表查询----------------------
--1.查询考试成绩大于等于 90 的学生的学号
select SC.Sno
from SC
where Sc.Grade >= 90

--2.查询年龄大于 23 岁的男学生的学号和姓名
select Student.Sno,Student.Sname
from Student
where Student.Sage > 23

--3.查询年龄大于 18 岁,并不是信息系(IS)与数学系(MA)的学生的姓名和性别
select Student.Sname,Student.Ssex
from Student
where Student.Sage > 18
and Student.Sdept not in('IS','MA')

--4.查询以“操作系统_”开头,且倒数第二个汉字为“原”字的课程的详细情况
select *
from Course
where Course.Cname like '操作系统%原_'

--5.查询选修了课程的学生人数
select distinct count(*) as 选秀课程人数
from Course

--6.根据系统当前时间和学生年龄,查询学生出生日期(要求以特定输出:年-月-日)
select year(GETDATE())
select Student.Sname,(year(GETDATE()) - Student.Sage) as 出生年份
from Student

多表查询和符合查询在下一张
实验二:第二部分

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值