2022级数据库原理能力测试补测3

10-1 查询所有选了datasad的学生的编号

提示:请使用SELECT语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `students` (
  `sid` bigint(20) NOT NULL,
  `sname` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 DEFAULT NULL,
  `grade` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  PRIMARY KEY (`sid`)
);
CREATE TABLE `teachers` (
  `tid` bigint(20) NOT NULL,
  `tname` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 DEFAULT NULL,
  `salary` smallint(6) DEFAULT NULL,
  PRIMARY KEY (`tid`)
);
CREATE TABLE `courses` (
  `cid` bigint(20) NOT NULL,
  `cname` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  `hour` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  PRIMARY KEY (`cid`)
);
CREATE TABLE `choices` (
  `no` char(10) CHARACTER SET utf8mb4 NOT NULL,
  `sid` bigint(20) DEFAULT NULL,
  `tid` bigint(20) DEFAULT NULL,
  `cid` bigint(20) DEFAULT NULL,
  `sorce` int(11) DEFAULT NULL,
  PRIMARY KEY (`no`),
  KEY `FK_CHOICES_STUDENTS_idx` (`sid`),
  KEY `FK_CHOICES_TEACHERS_idx` (`tid`),
  KEY `FK_CHOICES_COURESE_idx` (`cid`),
  CONSTRAINT `FK_CHOICES_COURESE` FOREIGN KEY (`cid`) REFERENCES `courses` (`cid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_STUDENTS` FOREIGN KEY (`sid`) REFERENCES `students` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_TEACHERS` FOREIGN KEY (`tid`) REFERENCES `teachers` (`tid`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

表样例

students表:

image.png

courses表:

image.png

teachers表:

image.png

choices表:(此处只显示部分)

image.png

输出样例:

image.png

 这里有个特别偷懒的写法,就是直接从choices表中找到datasad的cid,然后懂的都懂

select sid
from choices 
where cid = '1005'

 换种标准写法:

联立表或者子查询,这里我写的子查询:

select sid
from choices
where cid = (
    select cid
    from courses
    where cname = 'datasad'
)

10-2 求出至少被两名学生选修的课程编号

提示:请使用SELECT语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `students` (
  `sid` bigint(20) NOT NULL,
  `sname` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 DEFAULT NULL,
  `grade` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  PRIMARY KEY (`sid`)
);
CREATE TABLE `teachers` (
  `tid` bigint(20) NOT NULL,
  `tname` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 DEFAULT NULL,
  `salary` smallint(6) DEFAULT NULL,
  PRIMARY KEY (`tid`)
);
CREATE TABLE `courses` (
  `cid` bigint(20) NOT NULL,
  `cname` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  `hour` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
  PRIMARY KEY (`cid`)
);
CREATE TABLE `choices` (
  `no` char(10) CHARACTER SET utf8mb4 NOT NULL,
  `sid` bigint(20) DEFAULT NULL,
  `tid` bigint(20) DEFAULT NULL,
  `cid` bigint(20) DEFAULT NULL,
  `sorce` int(11) DEFAULT NULL,
  PRIMARY KEY (`no`),
  KEY `FK_CHOICES_STUDENTS_idx` (`sid`),
  KEY `FK_CHOICES_TEACHERS_idx` (`tid`),
  KEY `FK_CHOICES_COURESE_idx` (`cid`),
  CONSTRAINT `FK_CHOICES_COURESE` FOREIGN KEY (`cid`) REFERENCES `courses` (`cid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_STUDENTS` FOREIGN KEY (`sid`) REFERENCES `students` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_TEACHERS` FOREIGN KEY (`tid`) REFERENCES `teachers` (`tid`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

表样例

请在这里给出上述表结构对应的表样例。例如

choices表:

image.png

输出样例:

image.png

 这题写法比较简单,就一张表,分组就行了,条件表达式用having不用where

select cid
from choices
group by cid
having count(sid) >= 2

10-3 查询学生的基本信息及其选修课程编号和成绩

提示:请使用SELECT语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `teachers`  (
  `tid` bigint(20) NOT NULL,
  `tname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `salary` smallint(6) NULL DEFAULT NULL,
  PRIMARY KEY (`tid`) USING BTREE
);
CREATE TABLE `courses`  (
  `cid` bigint(20) NOT NULL,
  `cname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `hour` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`cid`) USING BTREE
);
CREATE TABLE `students`  (
  `sid` bigint(20) NOT NULL,
  `sname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `grade` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`sid`) USING BTREE
) ;
CREATE TABLE `choices`  (
  `no` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `sid` bigint(20) NULL DEFAULT NULL,
  `tid` bigint(20) NULL DEFAULT NULL,
  `cid` bigint(20) NULL DEFAULT NULL,
  `sorce` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`no`) USING BTREE,
  INDEX `FK_CHOICES_STUDENTS_idx`(`sid`) USING BTREE,
  INDEX `FK_CHOICES_TEACHERS_idx`(`tid`) USING BTREE,
  INDEX `FK_CHOICES_COURESE_idx`(`cid`) USING BTREE,
  CONSTRAINT `FK_CHOICES_COURESE` FOREIGN KEY (`cid`) REFERENCES `courses` (`cid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_STUDENTS` FOREIGN KEY (`sid`) REFERENCES `students` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_TEACHERS` FOREIGN KEY (`tid`) REFERENCES `teachers` (`tid`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

student.png

teachers表:

teacher.png

courses表:

course.png

choices表:

choices.png

输出样例:

O5T9AV04VM{64A@64$QEJ12.png

 这题感觉也挺简单的,就是联立两张表按要求输出就行

select s.sid,sname,email,grade,cid,sorce
from students s
join choices cs on cs.sid = s.sid

10-4 查询学号800009026的学生的姓名和选修课程名称和成绩

提示:请使用SELECT语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `teachers`  (
  `tid` bigint(20) NOT NULL,
  `tname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `salary` smallint(6) NULL DEFAULT NULL,
  PRIMARY KEY (`tid`) USING BTREE
);
CREATE TABLE `courses`  (
  `cid` bigint(20) NOT NULL,
  `cname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `hour` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`cid`) USING BTREE
);
CREATE TABLE `students`  (
  `sid` bigint(20) NOT NULL,
  `sname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `grade` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`sid`) USING BTREE
) ;
CREATE TABLE `choices`  (
  `no` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `sid` bigint(20) NULL DEFAULT NULL,
  `tid` bigint(20) NULL DEFAULT NULL,
  `cid` bigint(20) NULL DEFAULT NULL,
  `sorce` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`no`) USING BTREE,
  INDEX `FK_CHOICES_STUDENTS_idx`(`sid`) USING BTREE,
  INDEX `FK_CHOICES_TEACHERS_idx`(`tid`) USING BTREE,
  INDEX `FK_CHOICES_COURESE_idx`(`cid`) USING BTREE,
  CONSTRAINT `FK_CHOICES_COURESE` FOREIGN KEY (`cid`) REFERENCES `courses` (`cid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_STUDENTS` FOREIGN KEY (`sid`) REFERENCES `students` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_TEACHERS` FOREIGN KEY (`tid`) REFERENCES `teachers` (`tid`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

student.png

teachers表:

teacher.png

courses表:

course.png

choices表:

choices.png

输出样例:

snamecnamesorce
吴庆dfdata58

 这一题的话稍微麻烦一点,要联三张表,然后注意一下联的时候有顺序,要不然的话就没办法使用连接

select sname,cname,sorce
from students s
join choices cs on cs.sid = s.sid
join courses cr on cr.cid = cs.cid
where s.sid = '800009026'

10-5 查询与学号850955252的学生同年级的所有学生资料

提示:请使用SELECT语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `teachers`  (
  `tid` bigint(20) NOT NULL,
  `tname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `salary` smallint(6) NULL DEFAULT NULL,
  PRIMARY KEY (`tid`) USING BTREE
);
CREATE TABLE `courses`  (
  `cid` bigint(20) NOT NULL,
  `cname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `hour` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`cid`) USING BTREE
);
CREATE TABLE `students`  (
  `sid` bigint(20) NOT NULL,
  `sname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `grade` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`sid`) USING BTREE
) ;
CREATE TABLE `choices`  (
  `no` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `sid` bigint(20) NULL DEFAULT NULL,
  `tid` bigint(20) NULL DEFAULT NULL,
  `cid` bigint(20) NULL DEFAULT NULL,
  `sorce` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`no`) USING BTREE,
  INDEX `FK_CHOICES_STUDENTS_idx`(`sid`) USING BTREE,
  INDEX `FK_CHOICES_TEACHERS_idx`(`tid`) USING BTREE,
  INDEX `FK_CHOICES_COURESE_idx`(`cid`) USING BTREE,
  CONSTRAINT `FK_CHOICES_COURESE` FOREIGN KEY (`cid`) REFERENCES `courses` (`cid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_STUDENTS` FOREIGN KEY (`sid`) REFERENCES `students` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_TEACHERS` FOREIGN KEY (`tid`) REFERENCES `teachers` (`tid`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

student.png

teachers表:

teacher.png

courses表:

course.png

choices表:

choices.png

输出样例:

image.png

这题其实我也偷懒了,我直接找学号对应的年级,但是这样是不好滴,因为以后如果不显示这个数据的话就没办法使用这种情况了,所以我这次用子查询来做。

首先是子查询中查询该学号对应的年级,然后年级相同的就全部列出来就行。

select sid,sname,email,grade
from students
where grade = (
    select grade
    from students
    where sid = '850955252'
)

10-6 查询没有学生选的课程的编号

提示:请使用SELECT语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `teachers`  (
  `tid` bigint(20) NOT NULL,
  `tname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `salary` smallint(6) NULL DEFAULT NULL,
  PRIMARY KEY (`tid`) USING BTREE
);
CREATE TABLE `courses`  (
  `cid` bigint(20) NOT NULL,
  `cname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `hour` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`cid`) USING BTREE
);
CREATE TABLE `students`  (
  `sid` bigint(20) NOT NULL,
  `sname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `grade` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`sid`) USING BTREE
) ;
CREATE TABLE `choices`  (
  `no` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `sid` bigint(20) NULL DEFAULT NULL,
  `tid` bigint(20) NULL DEFAULT NULL,
  `cid` bigint(20) NULL DEFAULT NULL,
  `sorce` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`no`) USING BTREE,
  INDEX `FK_CHOICES_STUDENTS_idx`(`sid`) USING BTREE,
  INDEX `FK_CHOICES_TEACHERS_idx`(`tid`) USING BTREE,
  INDEX `FK_CHOICES_COURESE_idx`(`cid`) USING BTREE,
  CONSTRAINT `FK_CHOICES_COURESE` FOREIGN KEY (`cid`) REFERENCES `courses` (`cid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_STUDENTS` FOREIGN KEY (`sid`) REFERENCES `students` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_TEACHERS` FOREIGN KEY (`tid`) REFERENCES `teachers` (`tid`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

student.png

teachers表:

teacher.png

courses表:

course.png

choices表:

choices.png

输出样例:

image.png

这题的话要使用左连接,然后看看学号为null的值,就证明该课没人选。

select cr.cid 
from courses cr
left join choices cs on cr.cid = cs.cid
where cs.cid is null

10-7 查询选修了课程名为c++的学生学号和姓名
并按sid升序排序

提示:请使用SELECT语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `teachers`  (
  `tid` bigint(20) NOT NULL,
  `tname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `salary` smallint(6) NULL DEFAULT NULL,
  PRIMARY KEY (`tid`) USING BTREE
);
CREATE TABLE `courses`  (
  `cid` bigint(20) NOT NULL,
  `cname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `hour` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`cid`) USING BTREE
);
CREATE TABLE `students`  (
  `sid` bigint(20) NOT NULL,
  `sname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `grade` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`sid`) USING BTREE
) ;
CREATE TABLE `choices`  (
  `no` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `sid` bigint(20) NULL DEFAULT NULL,
  `tid` bigint(20) NULL DEFAULT NULL,
  `cid` bigint(20) NULL DEFAULT NULL,
  `sorce` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`no`) USING BTREE,
  INDEX `FK_CHOICES_STUDENTS_idx`(`sid`) USING BTREE,
  INDEX `FK_CHOICES_TEACHERS_idx`(`tid`) USING BTREE,
  INDEX `FK_CHOICES_COURESE_idx`(`cid`) USING BTREE,
  CONSTRAINT `FK_CHOICES_COURESE` FOREIGN KEY (`cid`) REFERENCES `courses` (`cid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_STUDENTS` FOREIGN KEY (`sid`) REFERENCES `students` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_TEACHERS` FOREIGN KEY (`tid`) REFERENCES `teachers` (`tid`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

student.png

teachers表:

teacher.png

courses表:

course.png

choices表:

choices.png

输出样例:

image.png

 这题的话把三张表连接起来就好,然后按要求输出,最后要记得按照学号排个序。

select s.sid,sname
from students s
join choices cs on cs.sid = s.sid
join courses cr on cr.cid = cs.cid
where cr.cname = 'c++'
order by s.sid asc

10-8 查询所有有选课的学生的详细信息

提示:请使用SELECT语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `teachers`  (
  `tid` bigint(20) NOT NULL,
  `tname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `salary` smallint(6) NULL DEFAULT NULL,
  PRIMARY KEY (`tid`) USING BTREE
);
CREATE TABLE `courses`  (
  `cid` bigint(20) NOT NULL,
  `cname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `hour` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`cid`) USING BTREE
);
CREATE TABLE `students`  (
  `sid` bigint(20) NOT NULL,
  `sname` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `email` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `grade` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`sid`) USING BTREE
) ;
CREATE TABLE `choices`  (
  `no` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `sid` bigint(20) NULL DEFAULT NULL,
  `tid` bigint(20) NULL DEFAULT NULL,
  `cid` bigint(20) NULL DEFAULT NULL,
  `sorce` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`no`) USING BTREE,
  INDEX `FK_CHOICES_STUDENTS_idx`(`sid`) USING BTREE,
  INDEX `FK_CHOICES_TEACHERS_idx`(`tid`) USING BTREE,
  INDEX `FK_CHOICES_COURESE_idx`(`cid`) USING BTREE,
  CONSTRAINT `FK_CHOICES_COURESE` FOREIGN KEY (`cid`) REFERENCES `courses` (`cid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_STUDENTS` FOREIGN KEY (`sid`) REFERENCES `students` (`sid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_CHOICES_TEACHERS` FOREIGN KEY (`tid`) REFERENCES `teachers` (`tid`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

表样例

请在这里给出上述表结构对应的表样例。例如

students表:

student.png

teachers表:

teacher.png

courses表:

course.png

choices表:

choices.png

输出样例:

image.png

这题是我想的太复杂了导致一直没写出来,其实只需要联立两张表,学生表和选课表,因为如果没选课的话就不会把数据选上,但是有一点要注意的是一个学生可以有多个选课。

select distinct s.sid,s.sname,s.email,s.grade
from students s
join choices cs on cs.sid = s.sid

10-9 查找来自国家(Country)JapanUSA各个供应商名称及其供应的产品,显示为:供应商编号(SupplierID)公司名称(CompanyName)产品编号(ProductID)产品名称(ProductName)

提示:请使用SELECT语句作答。

表结构:

products

列名数据类型长度主码说明
ProductIDint11产品编号
ProductNamevarchar40产品名称
SupplierIDint11供应商编号
CategoryIDint11种类编号
QuantityPerUnitvarchar20数量
UnitPricedecimal10,4单价
UnitsInStocksmallint2库存数量
UnitsOnOrdersmallint2订购数量
ReorderLevelsmallint2再次订购量
Discontinuedbit1中止

suppliers

列名数据类型长度主码说明
SupplierIDint11供应商编号
CompanyNamevarchar40公司名称
ContactNamevarchar30联系人
ContactTitlevarchar30职务
Addressvarchar60地址
Cityvarchar15城市
Regionvarchar15区域
PostalCodevarchar10邮政编码
Countryvarchar15国家
Phonevarchar24电话
Faxvarchar24传真
HomePagemediumtext,主页

表样例

products表:

ProductIDProductNameSupplierIDCategoryIDQuantityPerUnitUnitPriceUnitsInStockUnitsOnOrderReorderLevelDiscontinued
1Chai1110 boxes x 20 bags1839010
2Chang1124 - 12 oz bottles19174025
3Aniseed Syrup1212 - 550 ml bottles10137025
4Chef Anton's Cajun Seasoning2248 - 6 oz jars225300
5Chef Anton's Gumbo Mix2236 boxes21.35000
6Grandma's Boysenberry Spread3212 - 8 oz jars25120025
7Uncle Bob's Organic Dried Pears3712 - 1 lb pkgs.3015010
8Northwoods Cranberry Sauce3212 - 12 oz jars40600
9Mishi Kobe Niku4618 - 500 g pkgs.972900
10Ikura4812 - 200 ml jars313100

suppliers表:

SupplierIDCompanyNameContactNameContactTitleAddressCityRegionPostalCodeCountryPhoneFaxHomePage
1Exotic LiquidsCharlotte CooperPurchasing Manager49 Gilbert St.LondonEC1 4SDUK(171) 555-2222
2New Orleans Cajun DelightsShelley BurkeOrder AdministratorP.O. Box 78934New OrleansLA70117USA(100) 555-4822#CAJUN.HTM#
3Grandma Kelly's HomesteadRegina MurphySales Representative707 Oxford Rd.Ann ArborMI48104USA(313) 555-5735(313) 555-3349
4Tokyo TradersYoshi NagaseMarketing Manager9-8 SekimaiMusashino-shiTokyo100Japan(03) 3555-5011
5Cooperativa de Quesos 'Las Cabras'Antonio del Valle SaavedraExport AdministratorCalle del Rosal 4OviedoAsturias33007Spain(98) 598 76 54
6Mayumi'sMayumi OhnoMarketing Representative92 Setsuko Chuo-kuOsaka545Japan(06) 431-7877Mayumi's (on the World Wide Web)#http://www.microsoft.com/accessdev/sampleapps/mayumi.htm#
7Pavlova, Ltd.Ian DevlingMarketing Manager74 Rose St. Moonie PondsMelbourneVictoria3058Australia(03) 444-2343(03) 444-6588
8Specialty Biscuits, Ltd.Peter WilsonSales Representative29 King's WayManchesterM14 GSDUK(161) 555-4448
9PB Knckebrd ABLars PetersonSales AgentKaloadagatan 13GteborgS-345 67Sweden031-987 65 43031-987 65 91
10Refrescos Americanas LTDACarlos DiazMarketing ManagerAv. das Americanas 12.890So Paulo5442Brazil(11) 555 4640

输出样例:

ProductIDProductNameSupplierIDCompanyName
4Chef Anton's Cajun Seasoning2New Orleans Cajun Delights
5Chef Anton's Gumbo Mix2New Orleans Cajun Delights
8Northwoods Cranberry Sauce3Grandma Kelly's Homestead
7Uncle Bob's Organic Dried Pears3Grandma Kelly's Homestead
6Grandma's Boysenberry Spread3Grandma Kelly's Homestead
10Ikura4Tokyo Traders
9Mishi Kobe Niku4Tokyo Traders

 这一题目除了表看上去累人一点难度不高:

select ps.ProductID,ps.ProductName,ss.SupplierID,ss.CompanyName
from products ps
join suppliers ss on ss.SupplierID = ps.SupplierID
where ss.Country = 'Japan' or ss.Country = 'USA'

10-10 查询每位领导的直接下属数量,显示:领导的员工编号(EmployeeID),下属数量(重命名为(countSub))

提示:请使用SELECT语句作答。

表结构:

列名数据类型长度主码说明
EmployeeIDint11员工编号
LastNamevarchar20
FirstNamevarchar10
Titlevarchar30职务
TitleOfCourtesyvarchar25礼貌称号
BirthDatedatetime,出生日期
HireDatedatetime,入职日期
Addressvarchar60地址
Cityvarchar15城市
Regionvarchar15区域
PostalCodevarchar10邮政编码
Countryvarchar15国家
HomePhonevarchar24住宅电话
Extensionvarchar4范围
Photolongblob,照片
ReportsToint11直接上级
PhotoPathvarchar255照片

表样例

employees表:

EmployeeIDLastNameFirstNameTitleTitleOfCourtesyBirthDateHireDateAddressCityRegionPostalCodeCountryHomePhoneExtensionReportsTo
1DavolioNancySales RepresentativeMs.1948/12/8 00:00:001992/5/1 00:00:00507 - 20th Ave. E.Apt. 2ASeattleWA98122USA(206) 555-985754672
2FullerAndrewVice President, SalesDr.1952/2/19 00:00:001992/8/14 00:00:00908 W. Capital WayTacomaWA98401USA(206) 555-94823457
3LeverlingJanetSales RepresentativeMs.1963/8/30 00:00:001992/4/1 00:00:00722 Moss Bay Blvd.KirklandWA98033USA(206) 555-341233552

输出样例:

EmployeeIDcountSub
22

 刚刚写出这一题后发现这题其实挺简单的,测试的时候写不出纯粹是一直是count(Title)as countSub,所以注意审题!!!!!!ReportsTo才是直接上级,最后别忘了要is not null不然会把null值也输出

select ReportsTo as EmployeeID,
count(*) as countSub
from employees
group by ReportsTo
having ReportsTo is not null

10-11 查找所有“大学语文”分数在80以上的学生的姓名,所在院系。

提示:请使用SELECT语句作答。

表结构:

定义表结构的SQL语句如下:

CREATE TABLE student (

sno varchar(6) NOT NULL ,

sname varchar(10) ,

sex char(2) ,

nation char(2) ,

pnum char(18) ,

birth date ,

phone char(11) ,

dept varchar(20) ,

PRIMARY KEY (sno)

) ;

CREATE TABLE course (

cno varchar(6) NOT NULL,

cname varchar(20) ,

credit int(11) ,

attribute varchar(10) ,

PRIMARY KEY (cno)

) ;

CREATE TABLE score (

sno varchar(6) NOT NULL,

cno varchar(6) NOT NULL,

term varchar(15),

grade int(11),

PRIMARY KEY (sno,cno)

) ;

表样例

student表:
 

student.png

course表:
 

course.png

score表:
 

score.png

输出样例:

7-7.png

 又是水题,连表就行

select s.sname,s.dept
from student s
join score sc on sc.sno = s.sno
join course cr on cr.cno = sc.cno
where cr.cname = '大学语文' and sc.grade >= 80

10-12 检索选修40008课程并且成绩在60到80之间的学生学号和选修的学期。

提示:请使用SELECT语句作答。

表结构:

定义表结构的SQL语句如下:

CREATE TABLE score (

sno varchar(6) NOT NULL,

cno varchar(6) NOT NULL,

term varchar(15),

grade int(11),

PRIMARY KEY (sno,cno)

) ;

表样例

score表:

score.png

输出样例:

3-8.png

 好的水题一道,这里熟悉一下between and用法就好

select sno,term
from score 
where cno = '40008' and grade between '60' and '80'

10-13 显示出所有选课学生的学号,课号以及提高1%的成绩,要求成绩四舍五入保留整数。

提示:请使用SELECT语句作答。

表结构:

定义表结构的SQL语句如下:

CREATE TABLE score (

sno varchar(6) NOT NULL,

cno varchar(6) NOT NULL,

term varchar(15),

grade int(11),

PRIMARY KEY (sno,cno)

) ;

表样例(部分数据)

score表:

score.png

输出样例(部分数据):

5-5.png

 这一题熟悉一下round函数是四舍五入函数即可(前面测试的时候出现过)

select sno,cno,
round(grade + grade* 0.01) as grade
from score

10-14 本题目要求编写SQL语句,
查询每个订单的信息及员工姓名,供应商名称和产品名称。

提示:请使用SELECT语句作答。

表结构:

CREATE TABLE `employee` (
  `Eid` varchar(10),   --职工编号
  `EName` varchar(30), --职工姓名
  `Wno` varchar(10),   --所在仓库
  `Salary` int(11)     --职工工资
);
CREATE TABLE `orders` (
  `OrdNo` int(11),   --订单编号
  `Sid` varchar(10), --供应商编号
  `Eid` varchar(10), --职工编号
  `Pid` varchar(20), --商品编号
  `Price` decimal(10,2), --价格
  `QTY` int(11),     --订购数量
  `ordDate` date    --订单日期
);
CREATE TABLE `product` (
  `Pid` varchar(20),   --商品编号
  `PName` varchar(50), --商品名称
  `Weight` decimal(10, 3)    --重量
);
CREATE TABLE `supplier` (
  `Sid` varchar(10),   --供应商编号
  `SName` varchar(50), --供应商名称
  `City` varchar(20)   --供应商地址
);

表样例

employee表:

EidENameWnoSalary
0010张三A013600
0011刘勇A012700
0012张立A018500
0021刘靖A022500
0022王强A025600
0023李军5000
0031王林3500

orders表:

OrdNoSidEidPidPriceQTYordDate
1S010011P0111232022-02-13
2S020012P0112252022-02-14
3S030012P0360552022-02-14

product表:

PidPNameWeight
P01M6螺栓30
P02M8螺栓40
P03M16螺栓140
P04螺帽30
P05螺母45
P06垫片10
P07铰链70
P21螺钉3

supplier表:

SidSNameCity
S01东风机械厂武汉
S02天鹰紧固件厂温州
S05长城机电杭州

输出样例:

OrdNoSidEidPidPriceQTYordDateENameSNamePName
1S010011P0111232022-02-13刘勇东风机械厂M6螺栓
2S020012P0112252022-02-14张立天鹰紧固件厂M6螺栓
3S020012P0360552022-02-14张立天鹰紧固件厂M16螺栓

这题主要是连表复杂了一点,三张表都要连上去

select os.OrdNo,os.Sid,os.Eid,os.Pid,os.Price,os.QTY,os.ordDate,ee.EName,sr.SName,pt.PName
from orders os
join employee ee on ee.Eid = os.Eid
join supplier sr on sr.Sid = os.Sid
join product pt on pt.Pid = os.Pid

10-15 查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by。

提示:请使用SELECT语句作答。

表结构:

 

CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`)); CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL, `salary` int(11) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`from_date`));

表样例

employees表:

image.png

salaries表:

image.png

输出样例:

image.png

这题真的折磨死人,网上查题目也交不了,Chat也交不了 ,一开始的思路是找到最大值,父查找再找出不属于最大值的另一个最大值(也就是第二大的值),但是这样一直是答案错误,然后换了个思路,最底层(也就是最先运行的子查找)先查找最大值,第二层查找再查找排除掉最大值的第二个最大值,第三层循环就输出该值就行。

select ee.emp_no,ss.salary,ee.last_name,ee.first_name
from employees ee
join salaries ss on ss.emp_no = ee.emp_no
where to_date = '9999-01-01'
and salary = (
    select max(salary)
    from salaries 
    where to_date = '9999-01-01'
    and salary != (
        select max(salary)
        from salaries
    )
)

终于在睡觉前解决了这题,收工!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值