2025年sql增删改查语句(sql增删改查语句考题)

sql增删改查语句(sql增删改查语句考题)创建一个名为 Students 的表 包含以下列 StudentID 整数 主键 FirstName 最多 50 个字符 LastName 最多 50 个字符 BirthDate 日期 以下是创建名为 Students 的表的 SQL 语句 包含了所需的列和数据类型 sql p p p CREATE TABLE p

大家好,我是讯享网,很高兴认识大家。



创建一个名为 “Students” 的表,包含以下列:

StudentID(整数,主键) FirstName(最多50个字符) LastName(最多50个字符) BirthDate(日期)

以下是创建名为 “Students” 的表的SQL语句,包含了所需的列和数据类型:

sql</p><p>CREATE TABLE Students (</p><p>  StudentID INT PRIMARY KEY,</p><p>  FirstName VARCHAR(50),</p><p>  LastName VARCHAR(50),</p><p>  BirthDate DATE</p><p>);</p><p>

使用上述语句可以创建一个名为 “Students” 的表,其中包含了“StudentID”、“FirstName”、“LastName”和“BirthDate”这四列。“StudentID”列是主键,使用整数数据类型(INT),“FirstName”和“LastName”列使用最多50个字符的字符串数据类型(VARCHAR(50)),“BirthDate”列使用日期数据类型(DATE)。

给 “Students” 表插入以下数据:

StudentID - 1, FirstName - ‘John’, LastName - ‘Doe’, BirthDate - ‘2000-07-22’ StudentID - 2, FirstName - ‘Jane’, LastName - ‘Doe’, BirthDate - ‘2001-05-15’

要将上述数据插入到 “Students” 表中,可以使用以下的SQL语句:

sql</p><p>INSERT INTO Students (StudentID, FirstName, LastName, BirthDate)</p><p>VALUES (1, &#39;John&#39;, &#39;Doe&#39;, &#39;2000-07-22&#39;);</p><p><br></p><p>INSERT INTO Students (StudentID, FirstName, LastName, BirthDate)</p><p>VALUES (2, &#39;Jane&#39;, &#39;Doe&#39;, &#39;2001-05-15&#39;);</p><p>

上述语句将会分别插入两行数据到 “Students” 表中。每个INSERT语句插入一行数据,指定了要插入的列和相应的值。首先,插入了StudentID为1,FirstName为‘John’,LastName为‘Doe’,BirthDate为‘2000-07-22’的行;然后,插入了StudentID为2,FirstName为‘Jane’,LastName为‘Doe’,BirthDate为‘2001-05-15’的行。


问题3:数据控制语言(DCL)

对用户 ‘user1’ 授予对 “Students” 表的所有权限

要将用户 ‘user1’ 授予对 “Students” 表的所有权限,可以使用数据控制语言(DCL)中的GRANT语句。具体的语法如下:

sql</p><p>GRANT ALL PRIVILEGES ON Students TO user1;</p><p>

上述语句将授予用户 ‘user1’ 对 “Students” 表的所有权限,包括SELECT、INSERT、UPDATE、DELETE等操作。这使得用户 ‘user1’ 可以执行与该表相关的所有操作。

请注意,执行此操作需要具有足够的权限。通常,只有数据库管理员或具有管理员权限的用户才能执行此操作。

上述语法将授予用户 ‘user1’ 对 “Students” 表的所有权限。用户 ‘user1’ 将获得对该表的SELECT、INSERT、UPDATE、DELETE等操作的权限。请确保在执行此语句时具有足够的权限,通常只有数据库管理员或具有管理员权限的用户才能执行此操作。

问题4:WHERE语句

找出 “Students” 表中所有2001年以后出生的学生。

要找出 “Students” 表中所有2001年以后出生的学生,可以使用WHERE语句来过滤出符合条件的行。具体的SQL语句如下:

sql</p><p>SELECT *</p><p>FROM Students</p><p>WHERE YEAR(BirthDate) &gt;= 2001;</p><p>

上述语句将会检索 “Students” 表中所有满足条件的行,即出生日期(BirthDate)的年份大于等于2001年的学生。使用YEAR()函数从日期中提取年份,并将其与条件进行比较。

上述查询将返回满足条件的行,包括StudentID、FirstName、LastName和BirthDate列的所有数据。如果需要特定的列,可以将 * 替换为列名的列表。

问题5:聚合函数

计算 “Students” 表中所有学生的平均年龄

要计算 “Students” 表中所有学生的平均年龄,可以使用聚合函数来实现。在这种情况下,我们可以使用AVG()函数来计算平均值。具体的SQL查询如下:

sql</p><p>SELECT AVG(DATEDIFF(CURRENT_DATE, BirthDate)) AS AverageAge</p><p>FROM Students;</p><p>

上述查询将计算出 “Students” 表中所有学生的平均年龄。使用DATEDIFF()函数来计算当前日期(CURRENT_DATE)与每个学生的出生日期(BirthDate)之间的天数差,然后使用AVG()函数计算这些天数差的平均值。通过AS关键字,将结果的列命名为“AverageAge”。

执行上述查询后,将返回一个结果集,其中只包含一个列 “AverageAge”,该列显示了所有学生的平均年龄。

问题6:JOIN操作

假设有一个名为 “Courses” 的表,包含列 CourseID 和 CourseName,以及一个名为 “Enrollments” 的表,包含列 StudentID 和 CourseID。编写一个 SQL 查询,列出所有选课学生的姓名和他们所选的课程名。

问题7:子查询

找出 “Students” 表中年龄大于所有2001年以后出生的学生平均年龄的所有学生。

问题8:事务处理

在 “Students” 表中插入一个新学生,然后在 “Enrollments” 表中为该学生添加一个新的选课记录。确保这两个操作要么都成功,要么都不发生。

问题9:GROUP BY语句

列出 “Enrollments” 表中每个课程的学生数量。


讯享网

问题10:HAVING语句

找出 “Enrollments” 表中选课学生数量超过5的所有课程。

问题6:JOIN操作

要列出所有选课学生的姓名和他们所选的课程名,需要使用JOIN操作连接 “Students”、“Courses” 和 “Enrollments” 表。具体的SQL查询如下:

sql</p><p>SELECT Students.FirstName, Students.LastName, Courses.CourseName</p><p>FROM Students</p><p>JOIN Enrollments ON Students.StudentID = Enrollments.StudentID</p><p>JOIN Courses ON Courses.CourseID = Enrollments.CourseID;</p><p>

上述查询将会连接三个表,并根据学生ID(StudentID)和课程ID(CourseID)进行关联。通过JOIN操作,将学生表、选课表和课程表关联在一起。然后,查询会选择学生的姓名(FirstName和LastName)以及所选课程的名称(CourseName),并将结果返回。

问题7:子查询

要找出 “Students” 表中年龄大于所有2001年以后出生的学生平均年龄的所有学生,可以使用子查询来解决。具体的SQL查询如下:

sql</p><p>SELECT *</p><p>FROM Students</p><p>WHERE BirthDate &lt; (</p><p>    SELECT AVG(DATEDIFF(CURRENT_DATE, BirthDate))</p><p>    FROM Students</p><p>    WHERE YEAR(BirthDate) &gt;= 2001</p><p>);</p><p>

上述查询中,子查询部分计算了2001年以后出生的学生的平均年龄。然后,外部查询使用WHERE子句过滤出 “Students” 表中出生日期早于该平均年龄的学生,以找出年龄大于所有2001年以后出生的学生平均年龄的所有学生。

问题8:事务处理

要在 “Students” 表中插入一个新学生,并在 “Enrollments” 表中为该学生添加一个新的选课记录,并确保这两个操作要么都成功,要么都不发生,可以使用事务处理。具体的SQL语句如下:

sql</p><p>BEGIN TRANSACTION;</p><p>INSERT INTO Students (StudentID, FirstName, LastName, BirthDate)</p><p>VALUES (3, &#39;Alice&#39;, &#39;Smith&#39;, &#39;2002-09-10&#39;);</p><p> </p><p>INSERT INTO Enrollments (StudentID, CourseID)</p><p>VALUES (3, 101);</p><p> </p><p>COMMIT;</p><p>

上述语句中,事务从BEGIN TRANSACTION开始,然后在事务中依次执行插入操作,即首先向 “Students” 表插入新学生的记录,然后向 “Enrollments” 表插入新选课记录。如果两个插入操作都成功执行,最后通过COMMIT提交事务。如果在事务执行过程中发生错误,可以使用ROLLBACK回滚事务,以确保所有操作都不发生。

问题9:GROUP BY语句

要列出 “Enrollments” 表中每个课程的学生数量,可以使用GROUP BY语句对课程ID进行分组,并使用COUNT函数计算每个分组中的学生数量。具体的SQL查询如下:

sql</p><p>SELECT CourseID, COUNT(StudentID) AS StudentCount</p><p>FROM Enrollments</p><p>GROUP BY CourseID;</p><p>

问题10:HAVING语句

要找出 “Enrollments” 表中选课学生数量超过5的所有课程,可以使用HAVING语句结合聚合函数和GROUP BY子句来实现。具体的SQL查询如下:

sql</p><p>SELECT CourseID, COUNT(StudentID) AS StudentCount</p><p>FROM Enrollments</p><p>GROUP BY CourseID</p><p>HAVING COUNT(StudentID) &gt; 5;</p><p>

上述查询中,使用GROUP BY语句按照课程ID(CourseID)进行分组,并使用COUNT函数计算每个课程的学生数量(StudentCount)。然后,通过HAVING子句筛选出学生数量超过5的课程。

执行上述查询后,将返回一个结果集,其中包含满足条件的课程ID(CourseID)和相应的学生数量(StudentCount)。这些课程是选课学生数量超过5的课程。

问题11:ORDER BY语句

列出 “Students” 表中所有学生,按姓氏和名字排序。 

问题12:视图(VIEW)

创建一个视图,列出每个课程的名称以及选课的学生数量。 

问题13:索引(INDEX)

在 “Students” 表的 LastName 列上创建一个索引。 

问题14:存储过程(Stored Procedure)

创建一个存储过程,给定学生ID,返回他们的全名。 

问题15:触发器(Trigger)

创建一个触发器,当 “Students” 表中插入新记录时,向 “AuditLog” 表插入一条新记录,记录学生ID和插入日期。


问题11:ORDER BY语句

要列出 “Students” 表中所有学生,并按姓氏和名字排序,可以使用ORDER BY语句。具体的SQL查询如下:

sql</p><p>SELECT *</p><p>FROM Students</p><p>ORDER BY LastName, FirstName;</p><p>

上述查询将返回 “Students” 表中所有学生的记录,并按照姓氏(LastName)和名字(FirstName)进行升序排序。首先按姓氏排序,如果姓氏相同,则按名字排序。

问题12:视图(VIEW)

要创建一个视图,列出每个课程的名称以及选课的学生数量,可以使用CREATE VIEW语句创建视图。具体的SQL语句如下:

sql</p><p>CREATE VIEW CourseEnrollment AS</p><p>SELECT Courses.CourseName, COUNT(Enrollments.StudentID) AS StudentCount</p><p>FROM Courses</p><p>LEFT JOIN Enrollments ON Courses.CourseID = Enrollments.CourseID</p><p>GROUP BY Courses.CourseID, Courses.CourseName;</p><p>

上述语句中,创建了名为 “CourseEnrollment” 的视图。视图的定义是基于 “Courses” 表和 “Enrollments” 表的连接,使用LEFT JOIN将两个表连接起来。然后,使用GROUP BY语句按课程ID(CourseID)和课程名称(CourseName)分组,并使用COUNT函数计算每个课程的学生数量(StudentCount)。

创建成功后,可以通过查询视图来获取每个课程的名称以及选课的学生数量,例如:

sql</p><p>SELECT * FROM CourseEnrollment;</p><p>

问题13:索引(INDEX)

要在 “Students” 表的 LastName 列上创建一个索引,可以使用CREATE INDEX语句来实现。具体的SQL语句如下:

sql</p><p>CREATE INDEX idx_LastName ON Students (LastName);</p><p>

上述语句将在 “Students” 表的 LastName 列上创建名为 “idx_LastName” 的索引。这将提高根据姓氏进行检索、排序和连接的查询性能。

索引可以加快数据访问速度,但也会增加数据插入、更新和删除的开销。因此,在创建索引之前,需要评估索引的使用场景和数据更新频率,以确保索引的性能收益超过其维护成本。

问题14:存储过程(Stored Procedure)

要创建一个存储过程,给定学生ID,返回他们的全名,可以使用CREATE PROCEDURE语句来定义存储过程。具体的SQL语句如下:

sql</p><p>CREATE PROCEDURE GetStudentFullName</p><p>    @StudentID INT</p><p>AS</p><p>BEGIN</p><p>    SELECT FirstName + &#39; &#39; + LastName AS FullName</p><p>    FROM Students</p><p>    WHERE StudentID = @StudentID;</p><p>END;</p><p>

上述语句中,定义了名为 “GetStudentFullName” 的存储过程。存储过程接受一个参数 @StudentID,用于指定学生ID。在存储过程的主体中,使用SELECT语句查询 “Students” 表,根据给定的学生ID获取对应学生的全名(FirstName + LastName)。

创建成功后,可以通过调用存储过程并传递相应的学生ID来获取学生的全名。例如:

sql</p><p>EXEC GetStudentFullName @StudentID = 1;</p><p>

上述示例中,通过执行存储过程 GetStudentFullName 并传递学生ID为1,将返回学生ID为1的学生的全名。

问题15:触发器(Trigger) 创建一个触发器,当 “Students” 表中插入新记录时,向 “AuditLog” 表插入一条新记录,记录学生ID和插入日期。

要创建一个触发器,当 “Students” 表中插入新记录时向 “AuditLog” 表插入一条新记录,可以使用CREATE TRIGGER语句来实现。具体的SQL语句如下:

sql

上述语句中,创建了名为 “InsertStudentAudit” 的触发器。触发器使用AFTER INSERT指定在 “Students” 表中插入新记录之后触发。FOR EACH ROW表示触发器对每个插入的行执行操作。

触发器的主体部分使用INSERT INTO语句向 “AuditLog” 表插入一条新记录。这条记录包含了插入的学生ID(NEW.StudentID)以及当前的插入日期(NOW())。

当在 “Students” 表中插入新记录时,触发器将自动执行,并在 “AuditLog” 表中插入相应的记录,记录了新插入的学生ID和插入日期。

请确保 “AuditLog” 表已经存在,并且具有与触发器中的INSERT语句相对应的列。

小讯
上一篇 2025-05-11 10:35
下一篇 2025-06-10 12:53

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/159478.html