xCREATE TABLE Jobs (Jid char(6) PRIMARY KEY, --在列级定义主键Descp nchar(20) NOT NULL,EduReq nchar(6) DEFAULT '本科',MinSalary int ,MaxSalary int ,CHECK( MaxSalary >= MinSalary ) --多列的CHECK约束必须定义在表级)
xxxxxxxxxx-- 创建员工表,存储员工基本信息CREATE TABLE Employees (-- 员工ID,10位定长字符,作为主键Eid char(10) PRIMARY KEY,-- 员工姓名,最多20个字符的Unicode字符串,不允许为空Ename nvarchar(20) NOT NULL,-- 性别,1个字符的Unicode字符串,只能是'男'或'女'Sex nchar(1) CHECK (Sex = '男' OR Sex = '女'),-- 出生日期,日期类型BirthDate date,-- 入职日期,日期时间类型,默认为当前系统时间JobDate datetime DEFAULT GETDATE(),-- 身份证号,18位定长字符Sid char(18),-- 职位ID,10位定长字符(此处缺少外键约束定义)Jid char(10),-- 联系电话,11位定长字符Tel char(11));
xxxxxxxxxxALTER TABLE EmployeesADD Salary INT
xxxxxxxxxx-- 修改Jobs表中Descp列的数据类型为NCHAR(40)ALTER TABLE Jobs -- 指定要修改的表名为JobsALTER COLUMN Descp -- 指定要修改的列名为DescpNCHAR(40); -- 将列的数据类型更改为定长Unicode字符串,最大长度40个字符
xxxxxxxxxxALTER TABLE JobsADD CHECK( MinSalary >= 3000 )
xxxxxxxxxx-- 修改Employees表结构:如果存在Tel列,则删除该列ALTER TABLE Employees -- 指定要修改的表名为EmployeesDROP COLUMN -- 声明要删除列的操作IF EXISTS Tel; -- 检查列是否存在,存在则删除Tel列
xxxxxxxxxxDROP TABLE Employees
xxxxxxxxxxSELECT Sno, Sname FROM Student;
xxxxxxxxxxSELECT Sno, Sname, Ssex, Sage, Sdept FROM Student;=SELECT * FROM Student;
xxxxxxxxxx-- 查询学生姓名(Sname)、固定字符串'年份',以及计算列(2009减去学生年龄Sage)SELECTSname, -- 学生姓名列'年份' AS YearLabel, -- 固定字符串'年份',并赋予别名YearLabel2009 - Sage AS BirthYear -- 计算列:用2009减去学生年龄(Sage),推测是推算出生年份,并赋予别名BirthYearFROMStudent; -- 数据来源:Student表
xxxxxxxxxxSELECT * FROM Student WHERE Sdept = '计算机系';
xxxxxxxxxxSELECT Sname, Sage FROM Student WHERE Sage < 20
xxxxxxxxxxSELECT DISTINCT Sno FROM SC WHERE Grade < 60
xxxxxxxxxxselect Sname,Sage,Sdept from student where Sage between 20 and 23;
xxxxxxxxxxselect Sname,Sage,Sdept from student where Sage not between 20 and 23;=SELECT Sname, Sdept, Sage FROM Student WHERE Sage <20 OR Sage>23
xxxxxxxxxxSELECT title_id, type, price, pubdate FROM titlesWHERE pubdate BETWEEN '1991/6/1' AND '1991/6/30'
xxxxxxxxxxselect Sname,Ssex from student where Sdept in('计算机系' ,'通信工程系','信息管理系')=select Sname,Ssex from student where Sdept='计算机系' orSdept='通信工程系' or Sdept='信息管理系'
xxxxxxxxxxselect Sname,Ssex from student where Sdept not in('计算机系' ,'通信工程系','信息管理系')=SELECT Sname, Ssex FROM StudentWHERE Sdept!= '信息管理系' AND Sdept!= '通信工程系' AND Sdept!= '计算机系'
xxxxxxxxxxselect Sname,Sdept from student where Sname like '张%'
xxxxxxxxxxselect Sname,Sdept from student where Sname like '[张刘李]%'
xxxxxxxxxxselect Sname,Sno from student where Sname like '_[大小]%'
xxxxxxxxxxselect * from student where Sname not like '刘%'
xxxxxxxxxxSELECT * FROM Student WHERE Sno not LIKE '%[235]'
xxxxxxxxxxWHERE field1 LIKE '%30!%%' ESCAPE '!'
xxxxxxxxxxWHERE field1 LIKE '%!_%' ESCAPE '!
xxxxxxxxxxSELECT Sno, Cno FROM SC WHERE Grade IS NULL
xxxxxxxxxxSELECT * FROM SC WHERE Grade IS not NULL
xxxxxxxxxxSELECT Sname FROM Student WHERE Sdept = '计算机系' AND Sage < 20
xxxxxxxxxxSELECT Sno, Sname, Sdept, SageFROM StudentWHERE (Sdept = '计算机系'OR Sdept = '信息管理系')AND Sage between 18 and 20;
xxxxxxxxxxSELECT Sno, Sname, Sdept, SageFROM StudentWHERE Sdept in( '计算机系', '信息管理系')AND Sage between 18 and 20;
xxxxxxxxxxSELECT * FROM Student ORDER BY Sage
xxxxxxxxxxSELECT Sno, Grade FROM SCWHERE Cno = 'C002'ORDER BY Grade DESC
xxxxxxxxxxSELECT * FROM StudentORDER BY Sdept, Sage DESC
xxxxxxxxxxSELECT count(*) FROM Student;
xxxxxxxxxxSELECT COUNT(DISTINCT Sno) as num FROM SC;
xxxxxxxxxxSELECT SUM(Grade) FROM SC WHERE Sno = '0811101';
xxxxxxxxxxSELECT MAX(Grade) 最高分, MIN(Grade) 最低分 FROM SC WHERE Cno = 'C001';
xxxxxxxxxxSELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno;
xxxxxxxxxxSELECT Sdept, COUNT(*) AS 学生人数, AVG(Sage) AS 平均年龄 FROM Student GROUP BYSdept
xxxxxxxxxxSELECT Sdept, Ssex, Count(*) 人数, Max(Sage) 最大年龄 FROM StudentGROUP BY Sdept, Ssex ORDER BY Sdept
xxxxxxxxxxSELECT Sno, Count(*) 选课门数 FROM SC GROUP BY Sno HAVING COUNT(*) > 3
xxxxxxxxxxSELECT Sno, AVG(Grade) 平均成绩, COUNT(*) 选课门数 FROM SC GROUP BY SnoHAVING COUNT(*) >= 4
xxxxxxxxxxSELECT sdept, COUNT (*) FROM Student WHERE Sdept in ( '计算机系', '信息管理系')GROUP BY Sdept
xxxxxxxxxxSELECT Sname, Cno, GradeFROM Student JOIN SCON Student.Sno = SC.SnoWHERE Sdept = '计算机系'
xxxxxxxxxxSELECT Sname, GradeFROM Student sJOIN SC ON s.Sno = SC. SnoJOIN Course c ON c.Cno = SC.CnoWHERE Sdept = '信息管理系'AND Cname = '计算机文化学'
xxxxxxxxxxSELECT Sname, Sdept FROM Student SJOIN SC ON S.Sno = SC. SnoJOIN Course C ON C.Cno = SC.cnoWHERE Cname = 'Java'
xxxxxxxxxxELECT Sdept,AVG(grade) as AverageGradeFROM student S JOIN SCON S.Sno = SC.SnoGROUP BY Sdept
xxxxxxxxxxSELECT Cno, COUNT(*) AS Total,AVG(Grade) as AvgGrade,MAX(Grade) as MaxGrade,MIN(Grade) as MinGradeFROM Student S JOIN SC ON S.Sno = SC.SnoWHERE Sdept = '计算机系'GROUP BY Cno
xxxxxxxxxxSELECT S2.Sname, S2.SdeptFROM Student S1 JOIN Student S2ON S1.Sdept = S2.SdeptWHERE S1.Sname = '刘晨'AND S2.Sname != '刘晨'
xxxxxxxxxxSELECT C1.Cname, C1.SemesterFROM Course C1 JOIN Course C2ON C1.Semester = C2.SemesterWHERE C2.Cname = '数据结构'
xxxxxxxxxxELECT DISTINCT a.CnoFROM SC a JOIN SC bON a.Cno = b.CnoAND a.Sno != b.Sno
xxxxxxxxxx-- 查询所有学生的学号、姓名及其选课信息(包括未选课的学生)SELECTStudent.Sno, -- 学生学号(来自Student表)Sname, -- 学生姓名(来自Student表)Cno, -- 课程编号(来自SC表,可能为NULL)Grade -- 成绩(来自SC表,可能为NULL)FROMSC -- 右表:学生选课表(可能包含NULL)RIGHT JOIN -- 右连接:以左表(Student)为基准,保留左表所有记录Student -- 左表:学生信息表(基准表)ONStudent.Sno = SC.Sno -- 连接条件:通过学号(Sno)关联两表
xxxxxxxxxx-- 查询从未被任何学生选修的课程名称SELECTC.Cname -- 课程名称(来自Course表)FROMCourse C -- 左表:课程信息表(基准表)LEFT JOIN -- 左连接:保留左表(Course)所有记录,即使右表(SC)无匹配SC -- 右表:学生选课表ONC.Cno = SC.Cno -- 连接条件:通过课程编号(Cno)关联两表WHERESC.Cno IS NULL -- 筛选条件:只选择右表中无匹配的记录(即未被选修的课程)xxxxxxxxxx -- 查询从未被任何学生选修的课程名称SELECT C.Cname -- 课程名称(来自Course表)FROM Course C -- 左表:课程信息表(基准表)LEFT JOIN -- 左连接:保留左表(Course)所有记录,即使右表(SC)无匹配 SC -- 右表:学生选课表ON C.Cno = SC.Cno -- 连接条件:通过课程编号(Cno)关联两表WHERE SC.Cno IS NULL -- 筛选条件:只选择右表中无匹配的记录(即未被选修的课程)SELECT Cname FROM Course C LEFT JOIN SC ON C.Cno = SC.Cno WHERE SC.Cno IS NULL
xxxxxxxxxxSELECT Sname,SsexFROM Student S LEFT JOIN SCON S.Sno = SC.SnoWHERE Sdept = '计算机系'AND SC.Sno IS NULL
xxxxxxxxxxSELECT S.Sno AS 学号,COUNT(SC.Cno) AS 选课门数FROM Student S LEFT JOIN SCON S.Sno = SC.SnoWHERE Sdept = '计算机系'GROUP BY S.Sno
xxxxxxxxxxSELECT S.Sno AS 学号,COUNT(SC.Cno) AS 门数FROM Student S LEFT JOIN SCON S.Sno = SC.SnoWHERE Sdept = '信息管理系'GROUP BY S.SnoHAVING COUNT(SC.Cno) < 3ORDER BY COUNT(SC.Cno) ASC
xxxxxxxxxxSELECT TOP 3 WITH TIES Sname, Sage, SdeptFROM StudentORDER BY Sage DESC
xxxxxxxxxxSELECT TOP 3 WITH TIES Sname, Sdept, GradeFROM Student S JOIN SC on S.Sno = SC.SnoJOIN Course C ON C.Cno = SC.CnoWHERE Cname = 'Java'ORDER BY Grade DESC
xxxxxxxxxxSELECT TOP 2 WITH TIES Cno, COUNT(*) 选课人数FROM SCGROUP BY CnoORDER BY COUNT(Cno) ASC
xxxxxxxxxxSELECT TOP 2 WITH TIES S.Sno,COUNT(*) 选课门数,AVG(Grade) 平均成绩FROM Student S JOIN SC ON S.Sno = SC.SnoWHERE Sdept = '计算机系'GROUP BY S.snoHAVING COUNT(*) > 2ORDER BY AVG(Grade) DESC
xxxxxxxxxx
xxxxxxxxxx-- 查询学生学号、姓名,并对系别进行转换显示缩写,以及成绩SELECTs.Sno 学号, -- 从Student表中选择学号列,并设置别名为“学号”Sname 姓名, -- 从Student表中选择姓名列,并设置别名为“姓名”CASE sdept -- 使用CASE语句根据系别(sdept)的值进行条件判断WHEN '计算机系' THEN 'CS' -- 如果系别为“计算机系”,则显示为“CS”WHEN '信息管理系' THEN 'IM' -- 如果系别为“信息管理系”,则显示为“IM”WHEN '通信工程系' THEN 'COM' -- 如果系别为“通信工程系”,则显示为“COM”END AS 所在系, -- 结束CASE语句,并将结果列命名为“所在系”Grade 成绩 -- 从SC表中选择成绩列,并设置别名为“成绩”FROMStudent s -- 从Student表开始查询,设置别名为sJOINSC ON s.Sno = SC.Sno -- 将Student表与SC表通过学号(Sno)进行内连接JOINCourse c ON c.Cno = SC.Cno -- 将SC表与Course表通过课程号(Cno)进行内连接WHERECname = 'Java' -- 筛选条件:课程名称为“Java”^[1]^
xxxxxxxxxxSELECT Sno, Grade,CASEWHEN Grade >= 90 THEN '优'WHEN Grade between 80 and 89 THEN '良'WHEN Grade between 70 and 79 THEN '中'WHEN Grade between 60 and 69 THEN '及格'WHEN Grade <60 THEN '不及格'END AS 成绩等级FROM SCWHERE Cno = 'C001'
xxxxxxxxxxSELECT S.Sno, COUNT(SC.Cno) 选课门数,CASEWHEN COUNT(SC.Cno) > 4 THEN '多'WHEN COUNT(SC.Cno) BETWEEN 2 AND 4 THEN '一般'WHEN COUNT(SC.Cno) BETWEEN 1 AND 2 THEN '少'WHEN COUNT(SC.Cno) = 0 THEN '未选'END AS 选课情况FROM Student S LEFT JOIN SC ON S.Sno = SC.SnoWHERE Sdept = '计算机系'GROUP BY S.SnoORDER BY COUNT(SC.Cno) DESC
xxxxxxxxxx
SELECT S.Sno, COUNT(SC.Cno) 选课门数,CASE WHEN COUNT(SC.Cno) > 4 THEN '多' WHEN COUNT(SC.Cno) BETWEEN 2 AND 4 THEN '一般' WHEN COUNT(SC.Cno) BETWEEN 1 AND 2 THEN '少' WHEN COUNT(SC.Cno) = 0 THEN '未选' END AS 选课情况 FROM Student S LEFT JOIN SC ON S.Sno = SC.Sno WHERE Sdept = '计算机系' GROUP BY S.Sno ORDER BY COUNT(SC.Cno) DESC
xxxxxxxxxx