sql练习三(50)
sql 五十题

sql 五十题以下是一些SQL练习题,共50题:1. 什么是SQL?2. 什么是关系型数据库?3. 什么是主键?4. 什么是外键?5. 什么是索引?6. 什么是查询?7. 什么是插入操作?8. 什么是更新操作?9. 什么是删除操作?10. 什么是聚合函数?11. 什么是分组操作?12. 什么是排序操作?13. 什么是联接操作?14. 什么是子查询?15. 什么是视图?16. 什么是存储过程?17. 什么是触发器?18. 如何使用WHERE子句进行过滤?19. 如何使用ORDER BY子句进行排序?20. 如何使用GROUP BY子句进行分组?21. 如何使用HAVING子句进行分组过滤?22. 如何使用JOIN操作联接表?23. 如何使用聚合函数SUM、AVG、MIN、MAX?24. 如何使用聚合函数COUNT、COUNT()和COUNT(列名)的区别?25. 如何使用子查询嵌套查询?26. 如何创建视图并查询视图数据?27. 如何创建存储过程并调用存储过程?28. 如何创建触发器并触发触发器?29. 如何使用INSERT INTO语句插入数据?30. 如何使用UPDATE语句更新数据?31. 如何使用DELETE语句删除数据?32. 如何使用TRUNCATE TABLE语句清空表数据?33. 如何使用UNION操作符合并多个查询结果?34. 如何使用UNION ALL操作符合并多个查询结果(包括重复行)?35. 如何使用IN操作符筛选符合条件的多个值?36. 如何使用LIKE操作符进行模糊查询?37. 如何使用NOT操作符进行否定筛选?38. 如何使用BETWEEN操作符筛选范围值?39. 如何使用EXISTS操作符检查子查询结果是否存在?40. 如何使用NOT EXISTS操作符检查子查询结果是否存在(否定筛选)?41. 如何使用CASE语句进行条件判断和值转换?42. 如何使用DISTINCT关键字去除查询结果的重复行?43. 如何使用LIMIT关键字限制查询结果的行数?44. 如何使用JOIN操作连接多个表并筛选数据?45. 如何使用INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN的区别和用法?46. 如何使用视图提高查询效率和维护数据安全性?47. 如何使用存储过程存储复杂的业务逻辑和重复使用的查询语句?48. 如何使用触发器自动执行特定事件或数据修改操作?49. 如何优化SQL查询性能,提高数据库的响应速度?50. 如何安全地管理和维护数据库,确保数据的完整性和可靠性?。
MySql语句练习50题

MySql语句练习50题-- 1、查询"01"课程⽐"02"课程成绩⾼的学⽣的信息及课程分数select st.*,sc.s_score as '语⽂' ,sc2.s_score '数学'from student stleft join score sc on sc.s_id=st.s_id and sc.c_id='01'left join score sc2 on sc2.s_id=st.s_id and sc2.c_id='02'where sc.s_score>sc2.s_score-- 2、查询"01"课程⽐"02"课程成绩低的学⽣的信息及课程分数select st.*,sc.s_score '语⽂',sc2.s_score '数学' from student stleft join score sc on sc.s_id=st.s_id and sc.c_id='01'left join score sc2 on sc2.s_id=st.s_id and sc2.c_id='02'where sc.s_score<sc2.s_score-- 3、查询平均成绩⼤于等于60分的同学的学⽣编号和学⽣姓名和平均成绩select st.s_id,st.s_name,ROUND(AVG(sc.s_score),2) cjScore from student stleft join score sc on sc.s_id=st.s_idgroup by st.s_id having AVG(sc.s_score)>=60SELECT s.s_id,st.s_name,s.`平均成绩` from student st INNER JOIN(SELECT AVG(sc.s_score) as '平均成绩',sc.s_id from score sc GROUP BY sc.s_id HAVING AVG(sc.s_score) >60) son s.s_id=st.s_id-- 4、查询平均成绩⼩于60分的同学的学⽣编号和学⽣姓名和平均成绩-- (包括有成绩的和⽆成绩的)select st.s_id,st.s_name,(case when ROUND(AVG(sc.s_score),2) is null then 0 else ROUND(AVG(sc.s_score)) end ) cjScore from student stleft join score sc on sc.s_id=st.s_idgroup by st.s_id having AVG(sc.s_score)<60 or AVG(sc.s_score) is NULL-- 5、查询所有同学的学⽣编号、学⽣姓名、选课总数、所有课程的总成绩select st.s_id,st.s_name,count(c.c_id),( case when SUM(sc.s_score) is null or sum(sc.s_score)="" then 0 else SUM(sc.s_score) end) from student stleft join score sc on sc.s_id =st.s_idleft join course c on c.c_id=sc.c_idgroup by st.s_id-- 6、查询"李"姓⽼师的数量select t.t_name,count(t.t_id) from teacher tgroup by t.t_id having t.t_name like "李%";-- 7、查询学过"张三"⽼师授课的同学的信息select st.* from student stleft join score sc on sc.s_id=st.s_idleft join course c on c.c_id=sc.c_idleft join teacher t on t.t_id=c.t_idwhere t.t_name="张三"-- 8、查询没学过"张三"⽼师授课的同学的信息-- 张三⽼师教的课select c.* from course c left join teacher t on t.t_id=c.t_id where t.t_name="张三"-- 有张三⽼师课成绩的st.s_idselect sc.s_id from score sc where sc.c_id in (select c.c_id from course c left join teacher t on t.t_id=c.t_id where t.t_name="张三")-- 不在上⾯查到的st.s_id的学⽣信息,即没学过张三⽼师授课的同学信息select st.* from student st where st.s_id not in(select sc.s_id from score sc where sc.c_id in (select c.c_id from course c left join teacher t on t.t_id=c.t_id where t.t_name="张三"))-- 9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息select st.* from student stinner join score sc on sc.s_id = st.s_idinner join course c on c.c_id=sc.c_id and c.c_id="01"where st.s_id in (select st2.s_id from student st2inner join score sc2 on sc2.s_id = st2.s_idinner join course c2 on c2.c_id=sc2.c_id and c2.c_id="02"⽹友提供的思路(厉害呦~):SELECT st.*FROM student stINNER JOIN score sc ON sc.`s_id`=st.`s_id`GROUP BY st.`s_id`HAVING SUM(IF(sc.`c_id`="01" OR sc.`c_id`="02" ,1,0))>1-- 10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息select st.* from student stinner join score sc on sc.s_id = st.s_idinner join course c on c.c_id=sc.c_id and c.c_id="01"where st.s_id not in (select st2.s_id from student st2inner join score sc2 on sc2.s_id = st2.s_idinner join course c2 on c2.c_id=sc2.c_id and c2.c_id="02")-- 11、查询没有学全所有课程的同学的信息-- 太复杂,下次换⼀种思路,看有没有简单点⽅法-- 此处思路为查学全所有课程的学⽣id,再内联取反⾯select * from student where s_id not in (select st.s_id from student stinner join score sc on sc.s_id = st.s_id and sc.c_id="01"where st.s_id in (select st2.s_id from student st2inner join score sc2 on sc2.s_id = st2.s_id and sc2.c_id="02") and st.s_id in (select st2.s_id from student st2inner join score sc2 on sc2.s_id = st2.s_id and sc2.c_id="03"))-- 来⾃⼀楼⽹友的思路,左连接,根据学⽣id分组过滤掉数量⼩于课程表中总课程数量的结果(show me his code),简洁不少。
sql 练习题

sql 练习题SQL练习题SQL(Structured Query Language)是一种用于管理关系数据库系统的标准化语言。
它可以用于创建、修改和查询数据库中的数据。
对于想要提高SQL技能的人来说,练习是非常重要的。
在本文中,我将提供一些SQL练习题,帮助读者加深对SQL的理解和应用。
练习题一:查询数据假设有一个名为"employees"的表,包含以下字段:id、name、age、salary。
请编写一条SQL语句,查询所有员工的姓名和薪水。
练习题二:条件查询在上述"employees"表的基础上,请编写一条SQL语句,查询所有薪水大于5000的员工的姓名和薪水。
练习题三:排序查询继续使用上述"employees"表,请编写一条SQL语句,查询所有员工的姓名和薪水,并按照薪水降序排列。
练习题四:聚合函数假设有一个名为"orders"的表,包含以下字段:id、customer_id、order_date、total_amount。
请编写一条SQL语句,查询每个客户的总订单金额。
练习题五:连接查询在上述"employees"和"orders"表的基础上,请编写一条SQL语句,查询每个员工的姓名、薪水和总订单金额,并按照薪水降序排列。
练习题六:子查询在上述"employees"表的基础上,请编写一条SQL语句,查询薪水高于平均薪水的员工的姓名和薪水。
练习题七:更新数据假设有一个名为"products"的表,包含以下字段:id、name、price。
请编写一条SQL语句,将所有价格低于10的产品的价格增加10%。
练习题八:删除数据在上述"products"表的基础上,请编写一条SQL语句,删除所有价格高于100的产品。
练习题九:创建表请编写一条SQL语句,创建一个名为"students"的表,包含以下字段:id、name、age、gender。
sql50经典题

sql50经典题SQL(Structured Query Language)是用于管理关系数据库的标准编程语言。
以下是一些经典的 SQL 题目,可以帮助你提高 SQL 编程技能:1. 选择题:* 什么是 SQL?* SQL 中哪些关键字可以用于选择所有行?* SQL 中哪些关键字可以用于过滤数据?2. 查询题:* 请编写一个 SQL 查询,从 `employees` 表中选取所有员工的姓名和工资。
* 请编写一个 SQL 查询,从 `orders` 表中选取所有订单的编号、客户姓名和订单日期。
3. 插入题:* 请编写一个 SQL 插入语句,将一条新员工记录插入到 `employees` 表中。
* 请编写一个 SQL 插入语句,将一条新订单记录插入到 `orders` 表中。
4. 更新题:* 请编写一个 SQL 更新语句,将 `employees` 表中某个员工的工资增加 10%。
* 请编写一个 SQL 更新语句,将 `orders` 表中某个订单的状态更新为"Shipped"。
5. 删除题:* 请编写一个 SQL 删除语句,从 `employees` 表中删除某个员工的记录。
* 请编写一个 SQL 删除语句,从 `orders` 表中删除某个订单的记录。
6. 排序和聚合题:* 请编写一个 SQL 查询,按工资从高到低排列 `employees` 表中的员工记录。
* 请编写一个 SQL 查询,计算 `employees` 表中的平均工资。
7. 联接题:* 请编写一个 SQL 查询,联接 `orders` 表和 `customers` 表,选取所有订单的编号、客户姓名和订单日期。
* 请编写一个 SQL 查询,联接 `orders` 表和 `employees` 表,选取所有订单的编号、员工姓名和订单日期。
8. 子查询和内连接题:* 请编写一个 SQL 子查询,找出平均工资最高的员工姓名。
sql命令练习题

sql命令练习题SQL(Structured Query Language)是一种用于管理和操作关系型数据库的语言。
掌握SQL命令对于数据库管理和开发至关重要。
本文将提供一些SQL命令练习题,帮助读者提升对SQL语言的理解和应用能力。
练习一:创建数据库和表格1. 创建一个名为"company"的数据库。
2. 在"company"数据库中创建一个名为"employees"的表格,包含以下字段:- "id":整数类型,作为唯一标识员工的主键。
- "name":字符串类型,存储员工姓名。
- "age":整数类型,存储员工年龄。
- "position":字符串类型,存储员工职位。
练习二:插入数据1. 向"employees"表格中插入一条员工记录,包含以下信息:- id:1- name:John- age:30- position:Manager2. 向"employees"表格中插入多条员工记录,包含以下信息:- id:2,name:Lisa,age:25,position:Engineer- id:3,name:Mike,age:35,position:Senior Manager- id:4,name:Sarah,age:28,position:Analyst练习三:查询数据1. 查询"employees"表格中所有员工的信息。
2. 查询"employees"表格中年龄大于等于30的员工姓名和职位。
3. 查询"employees"表格中职位为"Manager"的员工数量。
练习四:更新数据1. 将id为1的员工的职位更新为"Senior Manager"。
sql练习题

sql练习题SQL练习题在现代信息化社会中,数据的处理和管理变得愈发重要。
而SQL(Structured Query Language)作为一种用于管理和处理关系型数据库的语言,也成为了各行各业从事数据分析和管理的必备技能之一。
为了提高自己的SQL技能,我们可以通过练习题来不断巩固和提升。
练习题一:查询商品信息假设有一个商品表(Product)和一个供应商表(Supplier),其中商品表包含了商品的ID、名称、价格和供应商ID等信息,供应商表包含了供应商的ID和名称等信息。
请写出一条SQL语句,查询出所有商品的名称、价格和供应商名称。
解答一:```sqlSELECT , Product.Price, FROM ProductJOIN Supplier ON Product.SupplierID = Supplier.ID;```练习题二:统计销售额假设有一个订单表(Orders)和一个订单详情表(OrderDetails),其中订单表包含了订单的ID、日期和客户ID等信息,订单详情表包含了订单详情的ID、订单ID、商品ID和数量等信息。
请写出一条SQL语句,统计每个客户的总销售额,并按销售额降序排序。
解答二:```sqlSELECT Orders.CustomerID, SUM(Product.Price * OrderDetails.Quantity) AS TotalSalesFROM OrdersJOIN OrderDetails ON Orders.ID = OrderDetails.OrderIDJOIN Product ON OrderDetails.ProductID = Product.IDGROUP BY Orders.CustomerIDORDER BY TotalSales DESC;```练习题三:查询员工信息假设有一个员工表(Employee)和一个部门表(Department),其中员工表包含了员工的ID、姓名和部门ID等信息,部门表包含了部门的ID和名称等信息。
SQL经典50题练习
创建表及插⼊数据学⽣表Studentcreate table SC(SId varchar(10),CId varchar(10),score decimal(18,1));insert into SC values('01' , '01' , 80);insert into SC values('01' , '02' , 90);insert into SC values('01' , '03' , 99);insert into SC values('02' , '01' , 70);insert into SC values('02' , '02' , 60);insert into SC values('02' , '03' , 80);insert into SC values('03' , '01' , 80);insert into SC values('03' , '02' , 80);insert into SC values('03' , '03' , 80);insert into SC values('04' , '01' , 50);insert into SC values('04' , '02' , 30);insert into SC values('04' , '03' , 20);insert into SC values('05' , '01' , 76);insert into SC values('05' , '02' , 87);insert into SC values('06' , '01' , 31);insert into SC values('06' , '03' , 34);insert into SC values('07' , '02' , 89);insert into SC values('07' , '03' , 98);练习题⽬1. 查询" 01 "课程⽐" 02 "课程成绩⾼的学⽣的信息及课程分数1.1 查询同时存在" 01 "课程和" 02 "课程的情况1.2 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显⽰为 null )1.3 查询不存在" 01 "课程但存在" 02 "课程的情况2. 查询平均成绩⼤于等于 60 分的同学的学⽣编号和学⽣姓名和平均成绩3. 查询在 SC 表存在成绩的学⽣信息4. 查询所有同学的学⽣编号、学⽣姓名、选课总数、所有课程的总成绩(没成绩的显⽰为 null )4.1 查有成绩的学⽣信息5. 查询「李」姓⽼师的数量6. 查询学过「张三」⽼师授课的同学的信息7. 查询没有学全所有课程的同学的信息8. 查询⾄少有⼀门课与学号为" 01 "的同学所学相同的同学的信息9. 查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息10. 查询没学过"张三"⽼师讲授的任⼀门课程的学⽣姓名11. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩12. 检索" 01 "课程分数⼩于 60,按分数降序排列的学⽣信息13. 按平均成绩从⾼到低显⽰所有学⽣的所有课程的成绩以及平均成绩14. 查询各科成绩最⾼分、最低分和平均分:以如下形式显⽰:课程 ID,课程 name,最⾼分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90要求输出课程号和选修⼈数,查询结果按⼈数降序排列,若⼈数相同,按课程号升序排列15. 按各科成绩进⾏排序,并显⽰排名, Score 重复时保留名次空缺15. 按各科成绩进⾏排序,并显⽰排名, Score 重复时保留名次空缺15.1 按各科成绩进⾏排序,并显⽰排名, Score 重复时合并名次16. 查询学⽣的总成绩,并进⾏排名,总分重复时保留名次空缺16.1 查询学⽣的总成绩,并进⾏排名,总分重复时不保留名次空缺17. 统计各科成绩各分数段⼈数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分⽐18. 查询各科成绩前三名的记录19. 查询每门课程被选修的学⽣数20. 查询出只选修两门课程的学⽣学号和姓名21. 查询男⽣、⼥⽣⼈数22. 查询名字中含有「风」字的学⽣信息23. 查询同名同性学⽣名单,并统计同名⼈数24. 查询 1990 年出⽣的学⽣名单25. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列26. 查询平均成绩⼤于等于 85 的所有学⽣的学号、姓名和平均成绩27. 查询课程名称为「数学」,且分数低于 60 的学⽣姓名和分数28. 查询所有学⽣的课程及分数情况(存在学⽣没成绩,没选课的情况)29. 查询任何⼀门课程成绩在 70 分以上的姓名、课程名称和分数30. 查询不及格的课程31. 查询课程编号为 01 且课程成绩在 80 分以上的学⽣的学号和姓名32. 求每门课程的学⽣⼈数33. 成绩不重复,查询选修「张三」⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成绩34. 成绩有重复的情况下,查询选修「张三」⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成 绩35. 查询不同课程成绩相同的学⽣的学⽣编号、课程编号、学⽣成绩36. 查询每门功成绩最好的前两名37. 统计每门课程的学⽣选修⼈数(超过 5 ⼈的课程才统计)。
sql语句练习50题
sql语句练习50题Student(Sid,Sname,Sage,Ssex) 学⽣表Course(Cid,Cname,Tid) 课程表SC(Sid,Cid,score) 成绩表Teacher(Tid,Tname) 教师表练习内容:1.查询“某1”课程⽐“某2”课程成绩⾼的所有学⽣的学号;SELECT a.sid FROM (SELECT sid,score FROM SC WHERE cid=1) a,(SELECT sid,score FROM SC WHERE cid=3) b WHEREa.score>b.score AND a.sid=b.sid;此题知识点,嵌套查询和给查出来的表起别名2.查询平均成绩⼤于60分的同学的学号和平均成绩;SELECT sid,avg(score) FROM sc GROUP BY sid having avg(score) >60;此题知识点,GROUP BY 语句⽤于结合合计函数,根据⼀个或多个列对结果集进⾏分组。
group by后⾯不能接where,having代替了where3.查询所有同学的学号、姓名、选课数、总成绩SELECT Student.sid,Student.Sname,count(SC.cid),sum(score)FROM Student left Outer JOIN SC on Student.sid=SC.cid GROUP BY Student.sid,Sname4.查询姓“李”的⽼师的个数;select count(teacher.tid)from teacher where teacher.tname like'李%'5.查询没学过“叶平”⽼师课的同学的学号、姓名;SELECT Student.sid,Student.Sname FROM Student WHERE sid not in (SELECT distinct( SC.sid) FROM SC,Course,Teacher WHERE SC.cid=Course.cid AND Teacher.id=Course.tid AND Teacher.Tname='叶平');此题知识点,distinct是去重的作⽤6.查询学过“```”并且也学过编号“```”课程的同学的学号、姓名;select a.SID,a.SNAME from (select student.SNAME,student.SID from student,course,sc where cname='c++'and sc.sid=student.sid and sc.cid=course.cid) a,(select student.SNAME,student.SID from student,course,sc where cname='english'and sc.sid=student.sid and sc.cid=course.cid) b where a.sid=b.sid;标准答案(但是好像不好使)SELECT Student.S#,Student.Sname FROM Student,SC WHERE Student.S#=SC.S# ANDSC.C#='001'and exists( SELECT * FROM SC as SC_2 WHERE SC_2.S#=SC.S# AND SC_2.C#='002');此题知识点,exists是在集合⾥找数据,as就是起别名7.查询学过“叶平”⽼师所教的所有课的同学的学号、姓名;select a.sid,a.sname from (select student.sid,student.sname from student,teacher,course,scwhere teacher.TNAME='杨巍巍' and teacher.tid=course.tid and course.cid=sc.cid and student.sid=sc.sid) a标准答案:SELECT sid,Sname FROM Student WHERE sid in (SELECT sid FROM SC ,Course ,Teacher WHERE SC.cid=Course.cid AND Teacher.tid=Course.tid AND Teacher.Tname='杨巍巍' GROUP BY sid having count(SC.cid)=(SELECT count(cid) FROM Course,Teacher WHERE Teacher.tid=Course.tid AND Tname='杨巍巍'))8.查询课程编号“”的成绩⽐课程编号“”课程低的所有同学的学号、姓名;select a.sid,a.sname from(select student.SID,student.sname,sc.SCORE from student,sc where student.sid=sc.sid and sc.cid=1) a, (select student.SID,student.sname,sc.score from student,sc where student.sid=sc.sid and sc.cid=2) b where a.score<b.score anda.sid=b.sid标准答案:SELECT sid,Sname FROM (SELECT Student.sid,Student.Sname,score ,(SELECT score FROM SC SC_2 WHERE SC_2.sid=Student.sid AND SC_2.cid=1) score2 FROM Student,SCWHERE Student.sid=SC.sid AND cid=1) S_2 WHERE score2 <score;9.查询所有课程成绩⼩于分的同学的学号、姓名;SELECT sid,Sname FROM Student WHERE sid not in (SELECT Student.sid FROM Student,SC WHERE Student.sid=SC.sid AND score>60);此题知识点,先查出⼤于60分的,然后not in 就是⼩于60分的了10.查询没有学全所有课的同学的学号、姓名;SELECT Student.sid,Student.Sname FROM Student,SCWHERE Student.sid=SC.sid GROUP BY Student.sid,Student.Sname having count(cid) <(SELECT count(cid) FROM Course);11.查询⾄少有⼀门课与学号为“”的同学所学相同的同学的学号和姓名;12.查询⾄少学过学号为“”同学所有⼀门课的其他同学学号和姓名;SELECT student.sid,student.Sname FROM Student,SC WHERE Student.sid=SC.sid AND cid in (SELECT cid FROM SC WHERE sid=1)此题知识点,SELECT sid,Sname FROM Student,SC WHERE Student.sid=SC.sid AND cid in (SELECT cid FROM SC WHEREsid=1)这样写是错误的,因为from后⾯是两个表,不能明确是哪个表⾥⾯的sid和sname所以错误提⽰是“未明确定义列”13.把“SC”表中“叶平”⽼师教的课的成绩都更改为此课程的平均成绩;update sc set score=(select avg(score) from sc,course,teacher where course.cid=sc.cid and course.tid=teacher.tid andteacher.tname='杨巍巍')14.查询和“”号的同学学习的课程完全相同的其他同学学号和姓名;SELECT sid FROM SC WHERE cid in (SELECT cid FROM SC WHERE sid=6) GROUP BY sid having count(*)=(SELECT count(*) FROM SC WHERE sid=6);此题知识点,⽤数量来判断15.删除学习“叶平”⽼师课的SC表记录;delete from sc s where s.cid in (select c.cid from teacher t,course c where t.tid = c.tid and tname='李⼦')此题知识点,嵌套查询可以分布考虑,先查出李⼦⽼师都交了什么课的id,然后再删除那些id的值16.向SC表中插⼊⼀些记录,这些记录要求符合以下条件:没有上过编号“”课程的同学学号、课程的平均成绩;Insert into SC SELECT sid,2,(SELECT avg(score) FROM SC WHERE cid=2) FROM Student WHERE sid not in (SELECT sid FROM SC WHERE cid=2);17.按平均成绩从⾼到低显⽰所有学⽣的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显⽰:学⽣ID,,数据库,企业管理,英语,有效课程数,有效平均分;(没做出来)18.查询各科成绩最⾼和最低的分:以如下形式显⽰:课程ID,最⾼分,最低分;select cid as 课程号,max(score)as 最⾼分,min(score) as 最低分 from sc group by cid标准答案(但是运⾏不好使)SELECT L.cid As 课程ID,L.score AS 最⾼分,R.score AS 最低分FROM SC L ,SC AS RWHERE L.cid = R.cid ANDL.score = (SELECT MAX(IL.score)FROM SC AS IL,Student AS IMWHERE L.cid = IL.cid AND IM.sid=IL.sidGROUP BY IL.cid)AND R.Score = (SELECT MIN(IR.score) FROM SC AS IR WHERE R.cid = IR.cid GROUP BY IR.cid );19.按各科平均成绩从低到⾼和及格率的百分数从⾼到低顺序26.查询每门课程被选修的学⽣数select sc.cid,count(sc.sid) from sc,course where sc.cid=course.cid group by sc.cid27.查询出只选修了⼀门课程的全部学⽣的学号和姓名SELECT SC.sid,Student.Sname,count(cid) AS 选课数 FROM SC ,StudentWHERE SC.sid=Student.sid GROUP BY SC.sid ,Student.Sname having count(cid)=1;32.查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列SELECT Cid,Avg(score) FROM SC GROUP BY cid ORDER BY Avg(score),cid DESC ;37.查询不及格的课程,并按课程号从⼤到⼩排列SELECT cid,sid FROM sc WHERE score <60 ORDER BY cid38.查询课程编号为且课程成绩在分以上的学⽣的学号和姓名;select student.sid,student.sname from sc,student where sc.cid=1 and sc.score>60 and sc.sid=student.sid40.查询选修“叶平”⽼师所授课程的学⽣中,成绩最⾼的学⽣姓名及其成绩select student.sname,sc.score from sc,student,teacher,course c where teacher.tname='李⼦'and teacher.tid=c.tid and c.cid=sc.cid and sc.sid=student.sid and sc.score=(select max(score)from sc where sc.cid=c.cid)41.查询各个课程及相应的选修⼈数select sc.cid ,count(sc.sid)from sc,student where sc.sid=student.sid group by sc.cid43.查询每门功成绩最好的前两名44.统计每门课程的学⽣选修⼈数(超过⼈的课程才统计)。
sql中级练习题
sql中级练习题在SQL中级练习题中,我们将会思考和解决与SQL查询语言相关的问题。
SQL(结构化查询语言)是一种用于在关系数据库中管理和操作数据的标准语言。
通过解决这些练习题,我们将加深对SQL的理解,并提高在实际应用中编写和优化查询语句的能力。
练习一:学生表查询考虑一个学生表,包含以下字段:学生ID(student_id)、学生姓名(student_name)、学生所在班级(class_id)、学生的总成绩(total_score)。
1. 查询学生表中所有学生的信息。
SELECT * FROM 学生表;2. 查询学生表中总成绩大于80分的学生信息。
SELECT * FROM 学生表 WHERE total_score > 80;3. 查询学生表中总成绩最高的学生信息。
SELECT * FROM 学生表 ORDER BY total_score DESC LIMIT 1;4. 查询每个班级的学生总人数和平均成绩。
SELECT class_id, COUNT(*) AS 学生总人数, AVG(total_score) AS 平均成绩FROM 学生表GROUP BY class_id;练习二:订单表查询考虑一个订单表,包含以下字段:订单ID(order_id)、客户ID (customer_id)、订单日期(order_date)、订单金额(order_amount)。
1. 查询订单表中所有订单的信息。
SELECT * FROM 订单表;2. 查询订单表中订单金额大于1000的订单信息。
SELECT * FROM 订单表 WHERE order_amount > 1000;3. 查询订单表中订单日期在2020年1月1日至2020年12月31日期间的订单信息。
SELECT * FROM 订单表 WHERE order_date BETWEEN '2020-01-01' AND '2020-12-31';4. 查询每个客户的订单总金额和订单数量。
sql基础50题
sql基础50题1. 什么是SQL?它的作用是什么?2. SQL中的数据类型有哪些?3. SQL中如何创建表格?4. SQL中如何插入数据?5. SQL中如何查询数据?6. SQL中如何更新数据?7. SQL中如何删除数据?8. SQL中如何对数据进行排序?9. SQL中如何对数据进行分组?10. SQL中如何对数据进行过滤?11. SQL中如何进行数据的连接操作?12. SQL中如何使用子查询?13. SQL中如何使用聚合函数?14. SQL中如何使用索引提高查询性能?15. SQL中如何使用视图?16. SQL中如何使用存储过程?17. SQL中如何使用触发器?18. SQL中如何进行事务管理?19. SQL中如何进行数据备份与恢复?20. SQL中如何使用JOIN进行表连接?21. SQL中如何使用UNION进行表合并?22. SQL中如何使用DISTINCT去重?23. SQL中如何使用HAVING进行分组过滤?24. SQL中如何使用LIKE进行模糊查询?25. SQL中如何使用IN进行条件筛选?26. SQL中如何使用BETWEEN进行范围查询?27. SQL中如何使用COUNT函数统计数据数量?28. SQL中如何使用SUM函数求和?29. SQL中如何使用MAX函数获取最大值?30. SQL中如何使用MIN函数获取最小值?31. SQL中如何使用AVG函数计算平均值?32. SQL中如何使用GROUP BY进行分组统计?33. SQL中如何使用ORDER BY进行排序?34. SQL中如何使用LIMIT进行分页查询?35. SQL中如何使用UPDATE进行数据更新?36. SQL中如何使用DELETE进行数据删除?37. SQL中如何使用TRUNCATE进行数据清空?38. SQL中如何使用TRANSACTION进行事务处理?39. SQL中如何使用JOIN进行内连接?40. SQL中如何使用LEFT JOIN进行左连接?41. SQL中如何使用RIGHT JOIN进行右连接?42. SQL中如何使用FULL JOIN进行全连接?43. SQL中如何使用UNION进行多表合并?44. SQL中如何使用CREATE INDEX进行索引创建?45. SQL中如何使用DROP INDEX进行索引删除?46. SQL中如何使用CREATE VIEW进行视图创建?47. SQL中如何使用DROP VIEW进行视图删除?48. SQL中如何使用CREATE PROCEDURE进行存储过程创建?49. SQL中如何使用DROP PROCEDURE进行存储过程删除?50. SQL中如何使用CREATE TRIGGER进行触发器创建?。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1) 为表userinfo添加约束,语法如下:alter table userinfo add constraint uq_userid unique ( userid )执行成功后,为userinfo表的()字段添加了()约束。
a) Userid ;主键b) Userid ;唯一c) Uq_userid ;外键d) Uq_userid ;检查2) 在SQL Server 2005 数据库中,有以下创建和使用存储过程的代码,在ManagementStudio 中运行以下代码,选择中说法正确的是CREA TE PROCEDURE myProc @inparam int,@outparam int OUTPUTASSELECT @outparam=100IF (@outparam>0)RETURN 1000ELSERETURN 2000GOdeclare @A intdeclare @B intSet @A=10EXEC myProe @A,@Bselect @A,@Ba) 代码行1将产生错误b) 代码行2将产生错误c) 代码行3将产生错误d) 正常运行,最后一行输出为10和NULL3) 关于子查询,以下说法正确的是()。
(选择两项)a) 一般来说,表连接都可以用子查询替换。
b) 一般来说,子查询都可以用表连接替换。
c) 相对于表连接,子查询适合于作为查询的筛选条件。
d) 相对于表连接,子查询适合于查看多表的数据。
4) 创建存储过程如下:CREATE procedure bookproc@id int, @title char(20) OUTPUTasselect @title=title from book where id= @id执行该存储过程的方法正确的是()。
(选择一项)a) exec bookproc 1,@title outputprint @titleb) exec bookproc @id =1,@title outputprint @titlec) declare @title char(20)exec bookproc 1,@title outputprint @titled) declare @title char(20)exec bookproc @id =1,@title outputprint @title5) 在SQLServer 2005数据库中,如果强制要求grades表中的学员必须是Students表中存在的学员,以下描述正确的是()a) a)在grades()表中创建外键约束b) b)在grades()表中创建检查约束c) c)在grades()表中创建唯一约束d) d)在grades()表中创建默认约束6) 一个学生只能就读于一个班级,而一个班级可以同时容纳多个学生,学生与班级之间是()关系。
(选择一项)a) 一对一b) 一对多c) 多对一d) 多对多7) 在SqlSever2005数据库中,给定创建视图的代码如下,则下划线处应填写的正确关键字为()。
a) Inb) Asc) Ford) on8) )在SQL Server 2005数据库中,执行以下的T-SQL,若能找到title_id为te2的记录,将产生的结果是(选择一项)Begin transactionIf exists(select title_id from titles where title_id=”te2’)BeginDelete titles where title_id =’te2’Rollback trasactionPrint ‘OK’Enda) 删除该记录行,不打印任何信息b) 不删除该记录行,并且打印OKc) 删除该记录行,并且打印OKd) 不删除该记录行,也不打印任何信息9) 在SQL Server2005数据库中,假设UserInfo 有age字段,现在要求该字段的值在20~60之间,可以通过添加约束来实现,横线处应该填写的是Alter table userinfo ______________________a) Add constraint PK_age primary key(age)b) Add constraint UQ_age unique(age)c) Add constraint DF_age default(‘20~60’) for aged) Add constraint CK_age check(age between 20 and 60)10) 在SQL Server2005数据库中,对存储过程的描述正确的是(选择一项)a) 定义了一个有相关列和行的集合b) 当用户修改数据时,一种特殊形式的存储过程被自动执行c) SQL语句的预编译集合d) 它根据一列或多列的值,提供对数据库表中行的快速访问11) 在SQL Server 2005数据库系统中,以下扩展名的文件中不是SQL Server 2005数据库文件的是a) mdfb) ndfc) dbfd) ldf12) 以下关于规范设计的描述正确的是()。
(选择两项)a) 规范设计的主要目的是消除数据冗余。
b) 规范设计往往会增加数据库的性能。
c) 设计数据库时,规范化程度越高越好。
d) 在规范化数据库中,易于维护数据完整性。
13) 关于存储过程,以下说法正确的是()。
(选择一项)a) 不能在存储过程中使用CREA TE VIEW命令。
b) T-SQL批代码的执行速度要快于存储过程。
c) 存储过程必须带有参数。
d) 存储过程不能返回结果集。
14) 下面T-SQL代码运行完的结果是()。
declare @counter intset @counter=1while @counter<3beginset @counter=@counter+1print @counterconvert(varchar(5),@counter)breakprint ‘loop’enda) 2loopb) 2c) 2loop3loopd) 2315) 在SQL Server 2005 数据库中,现在有表student(数据如下左图),class(数据如下右图),现在针对“中文2”班的学生姓名和班级名建立视图如下所示,则下划线处应填写的内容为Create view ScanNameInfo AsSELECT a.studentname,b.classname form dbo.student a INNER JOIN dbo.class b____________a) ON a.classID = b.classID WHERE (b.classID=2)b) IN a.classID=b.classID WHERE (b.classID=2)c) ON a.classID = b.classID=2d) IN a.classID = b.classID and b.classID=216) 已知有student表,studentid为主键,现在表中共有10行记录,studentid列值从1到10。
创建试图:CREATE VIEW dbo.VIEW_studentASSELECT * FROM dbo.student接着执行如下命令:DELETE FROM VIEW_student WHERE (studentid = 8);然后执行查询命令:SELECT * FROM student;SELECT * FROM VIEW_student;假定上述命令全部执行成功,将各自返回()()行记录。
a) 10,10b) 10,9c) 9,10d) 9,917) 设计用户表时,身份证号为固定18位长,对该字段最好采用()数据类型。
(选择一项)a) intb) charc) varchard) text18)授予用户teacher对Score表的插入和修改的权限,正确的授权语句是()。
(选择一项)a) GRANT INSERT,UPDATE TO TABLE Score ON teacherb) GRANT INSERT AND UPDATE TO TABLE Score ON teacherc) GRANT INSERT,UPDATE ON Score TO teacherd) GRANT INSERT AND UPDATE ON Score TO teacher19)建立如下数据库表:CREATE T ABLE department(int NOT NULL primary key,DeptName varchar (20) NOT NULL)CREATE T ABLE Employee (EmployeeID int NOT NULL,DeptID int NOT NULL,Name varchar (20) NOT NULL)要想保证Employee表中每一个雇员(Employee)是唯一的,且只能属于在Department 表中已经存在的部门,最优的做法是()。
(选择一项)a) 把EmployeeID 和DeptID 设为组合主键。
b) 把EmployeeID设为主键,同时在DeptID列上创建一个外健约束。
c) 把EmployeeID设为主键,同时在DeptID列上创建一个检查约束。
d) 在DepartmentID列上创建一个唯一约束,同时在DeptID列上创建一个外健约束。
20)建立一张员工表(employee),当向表中插入数据时,若不提供入职时间(beginTime),就把系统当前时间自动作为员工入职时间插入数据库中,以下说法正确的是()。
(选择一项)a) 约束中不能使用各种函数,所以只能使用触发器来实现。
b) 可以使用CHECK约束实现,默认值采用日期函数getDate()。
c) 入职时间必须设为日期类型。
d) 可以使用DEFAULT 约束实现,默认值采用日期函数getDate()。
21) 为了加快对某表的访问速度,应对此表建立()。
(选择一项)a) 约束b) 存储过程c) 规则d) 索引22) 假设有表student的设计如下:ID(学号)Name(姓名)Address(家庭住址)Department(所在系)DepartmentHead(系主任)该表最高满足第()范式。
(选择一项)a) 一b) 二c) 三d) 不满足任何范式;23) 在SQL Server2005数据库中,以下关于系统存储过程的说法正确的是()(选两项)a) 存储在Master数据库中b) 名称以“sp_”开头c) 名称已“sys_”开头d) 用来代替用户的自定义的存储过程24)SQL Server 2005数据裤系统的编程语言是T-SQL,在T-SQL中储存的数据值的对象是变量,T-SQL语句的局部变量必须以()标价作为前缀。