mysql练习题50道
- 格式:docx
- 大小:37.84 KB
- 文档页数:13
MySQL数据库原理设计与应用练习题一、单选题(共31题,每题1分,共31分)1.下面关于MySQL安装目录描述错误的是()。
A、lib目录用于存储一系列的库文件B、include目录用于存放一些头文件C、bin目录用于存放一些课执行文件D、以上答案都不正确正确答案:D2.下面对“ORDER BY pno,level”描述正确的是()。
A、先按level全部升序后,再按pno升序B、先按level升序后,相同的level再按pno升序C、先按pno全部升序后,再按level升序D、先按pno升序后,相同的pno再按level升序正确答案:D3.VARCHAR(4)类型的字段存储'abcd'占用的字节数为()。
A、1B、3C、4D、5正确答案:D4.以下选项中,运算优先级别最低的是()。
A、逻辑运算符B、赋值运算符C、算术运算符D、位运算符正确答案:B5.以下不属于MySQL安装时自动创建的数据库是()。
A、sysB、mydbC、mysqlD、information_schema正确答案:B6.下列操作中,会隐式提交事务的是()。
A、SELECTB、UPDATEC、CREATE TABLED、DELETE正确答案:C7.下面对TINYINT(3)描述正确的是()。
A、3用于设置TINYINT的取值范围B、3用于设置取值范围所能表示的最大宽度C、插入数据的位数超过3时会报错D、以上答案都不正确正确答案:B8.以下()是查询语句select选项的默认值。
A、ALLB、DISTINCTC、DISTINCTROWD、以上答案都不正确正确答案:A9.下面关于“表1 LEFT JOIN 表2”的说法错误的是()。
A、连接结果中只会保留表2中符合连接条件的记录B、连接结果会保留所有表1中的所有记录C、LEFT JOIN 可用LEFT OUTER JOIN代替D、以上说法都不正确正确答案:D10.以下属于行子查询的是()。
mysql数据库考试试题及答案一、选择题(每题2分,共20分)1. MySQL数据库默认使用的端口号是多少?A. 3306B. 8080C. 80D. 21答案:A2. 下列哪个不是MySQL的数据类型?A. INTB. VARCHARC. DATED. BOOLEAN答案:D3. 在MySQL中,以下哪个命令用于创建数据库?A. CREATE TABLEB. CREATE DATABASEC. DROP DATABASED. ALTER DATABASE答案:B4. 如何在MySQL中查看当前所有数据库?A. SHOW DATABASES;B. LIST DATABASES;C. SELECT DATABASES;D. DISPLAY DATABASES;答案:A5. 在MySQL中,以下哪个语句用于删除表?A. DROP TABLEB. REMOVE TABLEC. DELETE TABLED. DESTROY TABLE答案:A6. 下列哪个不是MySQL的索引类型?A. PRIMARYB. UNIQUEC. INDEXD. FOREIGN答案:D7. 在MySQL中,使用哪个命令来查看表结构?A. DESCRIBE table_name;B. EXPLAIN table_name;C. SHOW table_name;D. SELECT table_name;答案:A8. 如何在MySQL中为表添加新列?A. ADD COLUMN column_name;B. INSERT COLUMN column_name;C. CREATE COLUMN column_name;D. APPEND COLUMN column_name;答案:A9. 在MySQL中,使用哪个命令来创建视图?A. CREATE VIEW view_name AS SELECT ...B. VIEW view_name AS SELECT ...C. DEFINE VIEW view_name AS SELECT ...D. CREATE SELECT view_name AS ...答案:A10. 下列哪个命令用于在MySQL中备份数据库?A. BACKUP DATABASEB. COPY DATABASEC. DUMP DATABASED. SAVE DATABASE答案:C二、填空题(每空1分,共10分)1. 在MySQL中,使用______语句可以创建新的表。
MySQL1、以下选项中,()用于描述数据在磁盘中如何存储。
——[单选题]A 外模式B 内模式C 概念模式D 以上答案都不正确正确答案:B2、以下选项描述错误的是()。
——[单选题]A 等值连接的关系需要具有数目相等且可比的属性组B 自然连接的结果是等值连接去除重复的属性组C 除法可看作是笛卡尔积的逆运算D 以上说法都不正确正确答案:D3、对于关系R和S来说,()表示属于S而不属于R的元组。
——[单选题]A R-SB S-RC R∪SD R∩S正确答案:B4、以下()在关系模型中表示属性的取值范围。
——[单选题]A 元组B 键C 属性D 域正确答案:D5、下列()不能称为实体。
——[单选题]A 班级B 手机C 图书D 姓名正确答案:D6、在数据库建模的过程中,E-R图属于()的产物。
——[单选题]A 物理模型B 逻辑模型C 概念模型D 以上答案都不正确正确答案:C7、下列()可以在命令提示符下停止MySQL服务器——[单选题]A net stopB net start mysqlC net stop mysqlD stop mysql正确答案:C8、以下选项中,不属于MySQL特点的是()。
——[单选题]A 界面良好B 跨平台C 体积小D 速度快正确答案:A9、MySQL数据库服务器的默认端口号是()。
——[单选题]A 80B 8080C 3306D 1433正确答案:C10、以下选项中,()面向数据库设计人员,描述数据的整体逻辑结构。
——[单选题]A 概念模式B 存储模式C 外模式D 以上答案都不正确正确答案:A11、以下模式之间的映像能体现逻辑独立性的是()。
——[单选题]A 外模式/内模式映像B 内模式/概念模式映像C 外模式/概念模式映像D 以上答案都不正确正确答案:C12、下面关于MySQL安装目录描述错误的是()。
——[单选题]A lib目录用于存储一系列的库文件B include目录用于存放一些头文件C bin目录用于存放一些课执行文件D 以上答案都不正确正确答案:D13、下面关于命令“mysqld --initialize-insecure”描述错误的是()。
mysql测试题及答案MySQL测试题及答案一、选择题1. MySQL的默认端口号是什么?A. 22B. 3306C. 80D. 443答案:B2. 下列哪个SQL语句用于查询表中的所有记录?A. SELECT * FROM table_name WHERE condition;B. SELECT * FROM table_name;C. SELECT table_name.*;D. SELECT ALL FROM table_name;答案:B3. 在MySQL中,以下哪个命令用于创建新的数据库?A. CREATE DATABASE database_name;B. NEW DATABASE database_name;C. START DATABASE database_name;D. INIT DATABASE database_name;答案:A二、填空题4. 在MySQL中,使用____语句可以删除一个表。
答案:DROP TABLE5. 要查看当前MySQL服务器上所有数据库的名称,可以使用____命令。
答案:SHOW DATABASES;6. 以下SQL语句的作用是____:SELECT column1, column2 FROMtable_name WHERE column1 = value1 ORDER BY column2 DESC LIMIT 1;答案:查询表table_name中column1等于value1的记录,并按column2降序排列,返回第一条记录。
三、简答题7. 请简述主键(Primary Key)和外键(Foreign Key)的区别。
答案:主键是表中用于唯一标识每条记录的字段,一个表只能有一个主键,并且主键的值不能为NULL。
外键是表中用于与另一个表的主键建立链接的字段,用于维护两个表之间的数据一致性,一个表可以有多个外键。
8. 解释什么是事务(Transaction)以及它的特性。
mysql试题及答案一、选择题(每题2分,共20分)1. MySQL数据库默认的端口号是多少?A. 21B. 22C. 3306D. 80答案:C2. 在MySQL中,以下哪个命令用于创建数据库?A. CREATE DATABASEB. CREATE TABLEC. CREATE USERD. CREATE INDEX答案:A3. 如何在MySQL中选择所有的行和列?A. SELECT * FROM table_name;B. SELECT ALL FROM table_name;C. SELECT ALL table_name;D. SELECT table_name;答案:A4. 下列哪个选项不是MySQL的数据类型?A. INTB. DATEC. FLOATD. STRING答案:D5. 在MySQL中,如何删除一个数据库?A. DROP DATABASE database_name;B. DELETE DATABASE database_name;C. REMOVE DATABASE database_name;D. REMOVE database_name;答案:A6. 如何在MySQL中为一个表添加一个新列?A. ADD COLUMN column_name datatype;B. CREATE COLUMN column_name datatype;C. INSERT COLUMN column_name datatype;D. ADD NEW COLUMN column_name datatype;答案:A7. 在MySQL中,以下哪个命令用于删除表中的行?A. DELETE FROM table_name;B. REMOVE FROM table_name;C. DROP FROM table_name;D. REMOVE table_name;答案:A8. 如何在MySQL中更新表中的记录?A. UPDATE table_name SET column1=value1, column2=value2 WHERE condition;B. CHANGE table_name SET column1=value1, column2=value2 WHERE condition;C. MODIFY table_name SET column1=value1, column2=value2 WHERE condition;D. ALTER table_name SET column1=value1, column2=value2WHERE condition;答案:A9. MySQL中的事务是什么?A. 一系列原子性的SQL操作B. 单个SQL语句C. 一组数据D. 一个数据库答案:A10. 如何在MySQL中查看当前数据库的版本?A. SELECT VERSION();B. SHOW VERSION;C. VERSION();D. SHOW DATABASE VERSION;答案:A二、填空题(每题2分,共20分)1. MySQL的默认用户是________。
MySQL经典练习题及答案,常⽤SQL语句练习50题表名和字段–1.学⽣表Student(s_id,s_name,s_birth,s_sex) –学⽣编号,学⽣姓名, 出⽣年⽉,学⽣性别–2.课程表Course(c_id,c_name,t_id) – –课程编号, 课程名称, 教师编号–3.教师表Teacher(t_id,t_name) –教师编号,教师姓名–4.成绩表Score(s_id,c_id,s_score) –学⽣编号,课程编号,分数测试数据#–1.学⽣表#Student(s_id,s_name,s_birth,s_sex) –学⽣编号,学⽣姓名, 出⽣年⽉,学⽣性别CREATE TABLE `Student` (`s_id` VARCHAR(20),s_name VARCHAR(20) NOT NULL DEFAULT'',s_brith VARCHAR(20) NOT NULL DEFAULT'',s_sex VARCHAR(10) NOT NULL DEFAULT'',PRIMARY KEY(s_id));#–2.课程表#Course(c_id,c_name,t_id) – –课程编号, 课程名称, 教师编号create table Course(c_id varchar(20),c_name VARCHAR(20) not null DEFAULT'',t_id VARCHAR(20) NOT NULL,PRIMARY KEY(c_id));/*–3.教师表Teacher(t_id,t_name) –教师编号,教师姓名*/CREATE TABLE Teacher(t_id VARCHAR(20),t_name VARCHAR(20) NOT NULL DEFAULT'',PRIMARY KEY(t_id));/*–4.成绩表Score(s_id,c_id,s_score) –学⽣编号,课程编号,分数*/Create table Score(s_id VARCHAR(20),c_id VARCHAR(20) not null default'',s_score INT(3),primary key(`s_id`,`c_id`));插⼊数据#--插⼊学⽣表测试数据#('01' , '赵雷' , '1990-01-01' , '男')insert into Student values('01' , '赵雷' , '1990-01-01' , '男');insert into Student values('02' , '钱电' , '1990-12-21' , '男');insert into Student values('03' , '孙风' , '1990-05-20' , '男');insert into Student values('04' , '李云' , '1990-08-06' , '男');insert into Student values('05' , '周梅' , '1991-12-01' , '⼥');insert into Student values('06' , '吴兰' , '1992-03-01' , '⼥');insert into Student values('07' , '郑⽵' , '1989-07-01' , '⼥');insert into Student values('08' , '王菊' , '1990-01-20' , '⼥');#--课程表测试数据insert into Course values('01' , '语⽂' , '02');insert into Course values('02' , '数学' , '01');insert into Course values('03' , '英语' , '03');#--教师表测试数据insert into Teacher values('01' , '张三');insert into Teacher values('02' , '李四');insert into Teacher values('03' , '王五');#--成绩表测试数据insert into Score values('01' , '01' , 80);insert into Score values('01' , '02' , 90);insert into Score values('01' , '03' , 99);insert into Score values('02' , '01' , 70);insert into Score values('02' , '02' , 60);insert into Score values('02' , '03' , 80);insert into Score values('03' , '01' , 80);insert into Score values('03' , '02' , 80);insert into Score values('03' , '03' , 80);insert into Score values('04' , '01' , 50);insert into Score values('04' , '02' , 30);insert into Score values('04' , '03' , 20);insert into Score values('05' , '01' , 76);insert into Score values('05' , '02' , 87);insert into Score values('06' , '01' , 31);insert into Score values('06' , '03' , 34);insert into Score values('07' , '02' , 89);insert into Score values('07' , '03' , 98);练习题和sql语句1、查询"01"课程⽐"02"课程成绩⾼的学⽣的信息及课程分数-- 1、查询"01"课程⽐"02"课程成绩⾼的学⽣的信息及课程分数select a.*,b.s_score as score01,c.s_score as score02 FROM student a JOIN score b ON a.s_id=b.s_id and b.c_id='01' LEFT JOIN score c on a.s_id=c.s_id and c.c_id='02' or c.c_id = NULL WHERE b.s_score>c.s_score ;2、查询"01"课程⽐"02"课程成绩低的学⽣的信息及课程分数-- 2、查询"01"课程⽐"02"课程成绩低的学⽣的信息及课程分数select a.* ,b.s_score as 01_score,c.s_score as 02_score fromstudent a left join score b on a.s_id=b.s_id and b.c_id='01'or b.c_id=NULL join score c on a.s_id=c.s_id and c.c_id='02'where b.s_score<c.s_score-- 3、查询平均成绩⼤于等于60分的同学的学⽣编号和学⽣姓名和平均成绩select b.s_id,b.s_name,ROUND(AVG(a.s_score),2) as avg_score fromstudent bjoin score a on b.s_id = a.s_idGROUP BY b.s_id,b.s_name HAVING ROUND(AVG(a.s_score),2)>=60;-- 4、查询平均成绩⼩于60分的同学的学⽣编号和学⽣姓名和平均成绩-- (包括有成绩的和⽆成绩的)select b.s_id,b.s_name,ROUND(AVG(a.s_score),2) as avg_score fromstudent bleft join score a on b.s_id = a.s_idGROUP BY b.s_id,b.s_name HAVING ROUND(AVG(a.s_score),2)<60unionselect a.s_id,a.s_name,0as avg_score fromstudent awhere a.s_id not in (select distinct s_id from score);-- 5、查询所有同学的学⽣编号、学⽣姓名、选课总数、所有课程的总成绩select a.s_id,a.s_name,count(b.c_id) as sum_course,sum(b.s_score) as sum_score fromstudent aleft join score b on a.s_id=b.s_idGROUP BY a.s_id,a.s_name;-- 6、查询"李"姓⽼师的数量select count(t_id) from teacher where t_name like'李%';-- 7、查询学过"张三"⽼师授课的同学的信息select a.*fromstudent ajoin score b on a.s_id=b.s_id where b.c_id in(select c_id from course where t_id =(select t_id from teacher where t_name ='张三'));-- 8、查询没学过"张三"⽼师授课的同学的信息select*fromstudent cwhere c.s_id not in(select a.s_id from student a join score b on a.s_id=b.s_id where b.c_id in(select c_id from course where t_id =(select t_id from teacher where t_name ='张三')));-- 9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息select a.*fromstudent a,score b,score cwhere a.s_id = b.s_id and a.s_id = c.s_id and b.c_id='01'and c.c_id='02';-- 10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息select a.*fromstudent awhere a.s_id in (select s_id from score where c_id='01' ) and a.s_id not in(select s_id from score where c_id='02')-- 11、查询没有学全所有课程的同学的信息select s.*fromstudent s where s.s_id in(select s_id from score where s_id not in(select a.s_id from score ajoin score b on a.s_id = b.s_id and b.c_id='02'join score c on a.s_id = c.s_id and c.c_id='03'where a.c_id='01'))-- 12、查询⾄少有⼀门课与学号为"01"的同学所学相同的同学的信息select*from student where s_id in(select distinct a.s_id from score a where a.c_id in(select a.c_id from score a where a.s_id='01'));-- 13、查询和"01"号的同学学习的课程完全相同的其他同学的信息select a.*from student a where a.s_id in(select distinct s_id from score where s_id!='01'and c_id in(select c_id from score where s_id='01')group by s_idhaving count(1)=(select count(1) from score where s_id='01'));-- 14、查询没学过"张三"⽼师讲授的任⼀门课程的学⽣姓名select a.s_name from student a where a.s_id not in (select s_id from score where c_id =(select c_id from course where t_id =(select t_id from teacher where t_name ='张三'))group by s_id);-- 15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩select a.s_id,a.s_name,ROUND(AVG(b.s_score)) fromstudent aleft join score b on a.s_id = b.s_idwhere a.s_id in(select s_id from score where s_score<60GROUP BY s_id having count(1)>=2)GROUP BY a.s_id,a.s_name-- 16、检索"01"课程分数⼩于60,按分数降序排列的学⽣信息select a.*,b.c_id,b.s_score fromstudent a,score bwhere a.s_id = b.s_id and b.c_id='01'and b.s_score<60ORDER BY b.s_score DESC;-- 17、按平均成绩从⾼到低显⽰所有学⽣的所有课程的成绩以及平均成绩select a.s_id,(select s_score from score where s_id=a.s_id and c_id='01') as语⽂,(select s_score from score where s_id=a.s_id and c_id='02') as数学,(select s_score from score where s_id=a.s_id and c_id='03') as英语,round(avg(s_score),2) as平均分from score a GROUP BY a.s_id ORDER BY平均分DESC;-- 18.查询各科成绩最⾼分、最低分和平均分:以如下形式显⽰:课程ID,课程name,最⾼分,最低分,平均分,及格率,中等率,优良率,优秀率--及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90select a.c_id,b.c_name,MAX(s_score),MIN(s_score),ROUND(AVG(s_score),2),ROUND(100*(SUM(case when a.s_score>=60then1else0end)/SUM(case when a.s_score then1else0end)),2) as及格率,ROUND(100*(SUM(case when a.s_score>=70and a.s_score<=80then1else0end)/SUM(case when a.s_score then1else0end)),2) as中等率, ROUND(100*(SUM(case when a.s_score>=80and a.s_score<=90then1else0end)/SUM(case when a.s_score then1else0end)),2) as优良率, ROUND(100*(SUM(case when a.s_score>=90then1else0end)/SUM(case when a.s_score then1else0end)),2) as优秀率from score a left join course b on a.c_id = b.c_id GROUP BY a.c_id,b.c_name-- 19、按各科成绩进⾏排序,并显⽰排名(实现不完全)-- mysql没有rank函数select a.s_id,a.c_id,@i:=@i+1as i保留排名,@k:=(case when@score=a.s_score then@k else@i end) as rank不保留排名,@score:=a.s_score as scorefrom (select s_id,c_id,s_score from score WHERE c_id='01'GROUP BY s_id,c_id,s_score ORDER BY s_score DESC)a,(select@k:=0,@i:=0,@score:=0)sunionselect a.s_id,a.c_id,@i:=@i+1as i,@k:=(case when@score=a.s_score then@k else@i end) as rank,@score:=a.s_score as scorefrom (select s_id,c_id,s_score from score WHERE c_id='02'GROUP BY s_id,c_id,s_score ORDER BY s_score DESC)a,(select@k:=0,@i:=0,@score:=0)sunionselect a.s_id,a.c_id,@i:=@i+1as i,@k:=(case when@score=a.s_score then@k else@i end) as rank,@score:=a.s_score as scorefrom (select s_id,c_id,s_score from score WHERE c_id='03'GROUP BY s_id,c_id,s_score ORDER BY s_score DESC)a,(select@k:=0,@i:=0,@score:=0)s-- 20、查询学⽣的总成绩并进⾏排名select a.s_id,@i:=@i+1as i,@k:=(case when@score=a.sum_score then@k else@i end) as rank,@score:=a.sum_score as scorefrom (select s_id,SUM(s_score) as sum_score from score GROUP BY s_id ORDER BY sum_score DESC)a,(select@k:=0,@i:=0,@score:=0)s-- 21、查询不同⽼师所教不同课程平均分从⾼到低显⽰select a.t_id,c.t_name,a.c_id,ROUND(avg(s_score),2) as avg_score from course aleft join score b on a.c_id=b.c_idleft join teacher c on a.t_id=c.t_idGROUP BY a.c_id,a.t_id,c.t_name ORDER BY avg_score DESC;-- 22、查询所有课程的成绩第2名到第3名的学⽣信息及该课程成绩select d.*,c.排名,c.s_score,c.c_id from (select a.s_id,a.s_score,a.c_id,@i:=@i+1as排名from score a,(select@i:=0)s where a.c_id='01')cleft join student d on c.s_id=d.s_idwhere排名BETWEEN2AND3UNIONselect d.*,c.排名,c.s_score,c.c_id from (select a.s_id,a.s_score,a.c_id,@j:=@j+1as排名from score a,(select@j:=0)s where a.c_id='02')cleft join student d on c.s_id=d.s_idwhere排名BETWEEN2AND3UNIONselect d.*,c.排名,c.s_score,c.c_id from (select a.s_id,a.s_score,a.c_id,@k:=@k+1as排名from score a,(select@k:=0)s where a.c_id='03')cleft join student d on c.s_id=d.s_idwhere排名BETWEEN2AND3;-- 23、统计各科成绩各分数段⼈数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分⽐select distinct f.c_name,a.c_id,b.`85-100`,b.百分⽐,c.`70-85`,c.百分⽐,d.`60-70`,d.百分⽐,e.`0-60`,e.百分⽐from score a left join (select c_id,SUM(case when s_score >85and s_score <=100then1else0end) as `85-100`,ROUND(100*(SUM(case when s_score >85and s_score <=100then1else0end)/count(*)),2) as百分⽐from score GROUP BY c_id)b on a.c_id=b.c_idleft join (select c_id,SUM(case when s_score >70and s_score <=85then1else0end) as `70-85`,ROUND(100*(SUM(case when s_score >70and s_score <=85then1else0end)/count(*)),2) as百分⽐from score GROUP BY c_id)c on a.c_id=c.c_idleft join (select c_id,SUM(case when s_score >60and s_score <=70then1else0end) as `60-70`,ROUND(100*(SUM(case when s_score >60and s_score <=70then1else0end)/count(*)),2) as百分⽐from score GROUP BY c_id)d on a.c_id=d.c_idleft join (select c_id,SUM(case when s_score >=0and s_score <=60then1else0end) as `0-60`,ROUND(100*(SUM(case when s_score >=0and s_score <=60then1else0end)/count(*)),2) as百分⽐from score GROUP BY c_id)e on a.c_id=e.c_idleft join course f on a.c_id = f.c_id-- 24、查询学⽣平均成绩及其名次select a.s_id,@i:=@i+1as'不保留空缺排名',@k:=(case when@avg_score=a.avg_s then@k else@i end) as'保留空缺排名',@avg_score:=avg_s as'平均分'from (select s_id,ROUND(AVG(s_score),2) as avg_s from score GROUP BY s_id)a,(select@avg_score:=0,@i:=0,@k:=0)b;-- 25、查询各科成绩前三名的记录-- 1.选出b表⽐a表成绩⼤的所有组-- 2.选出⽐当前id成绩⼤的⼩于三个的select a.s_id,a.c_id,a.s_score from score aleft join score b on a.c_id = b.c_id and a.s_score<b.s_scoregroup by a.s_id,a.c_id,a.s_score HAVING COUNT(b.s_id)<3ORDER BY a.c_id,a.s_score DESC-- 26、查询每门课程被选修的学⽣数select c_id,count(s_id) from score a GROUP BY c_id-- 27、查询出只有两门课程的全部学⽣的学号和姓名select s_id,s_name from student where s_id in(select s_id from score GROUP BY s_id HAVING COUNT(c_id)=2);-- 28、查询男⽣、⼥⽣⼈数select s_sex,COUNT(s_sex) as⼈数from student GROUP BY s_sex-- 29、查询名字中含有"风"字的学⽣信息select*from student where s_name like'%风%';-- 30、查询同名同性学⽣名单,并统计同名⼈数select a.s_name,a.s_sex,count(*) from student a JOINstudent b on a.s_id !=b.s_id and a.s_name = b.s_name and a.s_sex = b.s_sexGROUP BY a.s_name,a.s_sex-- 31、查询1990年出⽣的学⽣名单select s_name from student where s_birth like'1990%'-- 32、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列select c_id,ROUND(AVG(s_score),2) as avg_score from score GROUP BY c_id ORDER BY avg_score DESC,c_id ASC -- 33、查询平均成绩⼤于等于85的所有学⽣的学号、姓名和平均成绩select a.s_id,b.s_name,ROUND(avg(a.s_score),2) as avg_score from score aleft join student b on a.s_id=b.s_id GROUP BY s_id HAVING avg_score>=85-- 34、查询课程名称为"数学",且分数低于60的学⽣姓名和分数select a.s_name,b.s_score from score b LEFT JOIN student a on a.s_id=b.s_id where b.c_id=(select c_id from course where c_name ='数学') and b.s_score<60-- 35、查询所有学⽣的课程及分数情况;select a.s_id,a.s_name,SUM(case c.c_name when'语⽂'then b.s_score else0end) as'语⽂',SUM(case c.c_name when'数学'then b.s_score else0end) as'数学',SUM(case c.c_name when'英语'then b.s_score else0end) as'英语',SUM(b.s_score) as'总分'from student a left join score b on a.s_id = b.s_idleft join course c on b.c_id = c.c_idGROUP BY a.s_id,a.s_name-- 36、查询任何⼀门课程成绩在70分以上的姓名、课程名称和分数;select a.s_name,b.c_name,c.s_score from course b left join score c on b.c_id = c.c_idleft join student a on a.s_id=c.s_id where c.s_score>=70-- 37、查询不及格的课程select a.s_id,a.c_id,b.c_name,a.s_score from score a left join course b on a.c_id = b.c_idwhere a.s_score<60--38、查询课程编号为01且课程成绩在80分以上的学⽣的学号和姓名;select a.s_id,b.s_name from score a LEFT JOIN student b on a.s_id = b.s_idwhere a.c_id ='01'and a.s_score>80-- 39、求每门课程的学⽣⼈数select count(*) from score GROUP BY c_id;-- 40、查询选修"张三"⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成绩-- 查询⽼师idselect c_id from course c,teacher d where c.t_id=d.t_id and d.t_name='张三'-- 查询最⾼分(可能有相同分数)select MAX(s_score) from score where c_id='02'-- 查询信息select a.*,b.s_score,b.c_id,c.c_name from student aLEFT JOIN score b on a.s_id = b.s_idLEFT JOIN course c on b.c_id=c.c_idwhere b.c_id =(select c_id from course c,teacher d where c.t_id=d.t_id and d.t_name='张三')and b.s_score in (select MAX(s_score) from score where c_id='02')-- 41、查询不同课程成绩相同的学⽣的学⽣编号、课程编号、学⽣成绩select DISTINCT b.s_id,b.c_id,b.s_score from score a,score b where a.c_id != b.c_id and a.s_score = b.s_score-- 42、查询每门功成绩最好的前两名-- ⽜逼的写法select a.s_id,a.c_id,a.s_score from score awhere (select COUNT(1) from score b where b.c_id=a.c_id and b.s_score>=a.s_score)<=2ORDER BY a.c_id-- 43、统计每门课程的学⽣选修⼈数(超过5⼈的课程才统计)。
MySQL-50道经典sql题汇总题⽬是根据⾃⼰的理解做的,都能跑出来,但是肯定还有不⾜之处,欢迎⼤家提出问题,⼀起研究学习建表DROP TABLE IF EXISTS `course`;CREATE TABLE `course` (`CId` varchar(10) default NULL,`Cname` varchar(10) default NULL,`TId` varchar(10) default NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for sc-- ----------------------------DROP TABLE IF EXISTS `sc`;CREATE TABLE `sc` (`SId` varchar(10) default NULL,`CId` varchar(10) default NULL,`score` int(4) default NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for student-- ----------------------------DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (`SId` varchar(10) default NULL,`Sname` varchar(20) default NULL,`Sage` date default NULL,`Ssex` varchar(10) default NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Table structure for teacher-- ----------------------------DROP TABLE IF EXISTS `teacher`;CREATE TABLE `teacher` (`TId` varchar(10) default NULL,`Tname` varchar(20) default NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;添加数据courseINSERT INTO `course` VALUES ('01', 'CHINESE', '02');INSERT INTO `course` VALUES ('02', 'MATH', '01');INSERT INTO `course` VALUES ('03', 'ENGLISH', '03');INSERT INTO `course` VALUES ('04', 'JAVA', '04');scINSERT INTO `sc` VALUES ('01', '01', 80);INSERT INTO `sc` VALUES ('01', '03', 99);INSERT INTO `sc` VALUES ('02', '04', 50);INSERT INTO `sc` VALUES ('02', '03', 80);INSERT INTO `sc` VALUES ('03', '01', 80);INSERT INTO `sc` VALUES ('03', '03', 80);INSERT INTO `sc` VALUES ('04', '01', 50);INSERT INTO `sc` VALUES ('04', '03', 20);INSERT INTO `sc` VALUES ('05', '01', 100);INSERT INTO `sc` VALUES ('06', '01', 31);INSERT INTO `sc` VALUES ('06', '03', 34);INSERT INTO `sc` VALUES ('07', '03', 98);INSERT INTO `sc` VALUES ('07', '04', 55);INSERT INTO `sc` VALUES ('01', '04', 50);INSERT INTO `sc` VALUES ('01', '02', 10);INSERT INTO `sc` VALUES ('02', '02', 70);INSERT INTO `sc` VALUES ('03', '02', 50);INSERT INTO `sc` VALUES ('04', '02', 80);INSERT INTO `sc` VALUES ('05', '02', 73);INSERT INTO `sc` VALUES ('06', '02', 99);INSERT INTO `sc` VALUES ('07', '02', 100);INSERT INTO `sc` VALUES ('08', '02', 59);INSERT INTO `sc` VALUES ('09', '02', 80);INSERT INTO `sc` VALUES ('08', '01', 40);INSERT INTO `sc` VALUES ('08', '03', 35);studentINSERT INTO `student` VALUES ('01', 'Zhao Lei', '1990-1-1', 'MAN'); INSERT INTO `student` VALUES ('02', 'Qian Dian', '1990-12-21', 'MAN'); INSERT INTO `student` VALUES ('03', 'Sun Feng', '1990-5-20', 'MAN'); INSERT INTO `student` VALUES ('04', 'Li Yun', '1990-8-6', 'MAN'); INSERT INTO `student` VALUES ('05', 'Zhou Mei', '1991-12-1', 'WOMAN'); INSERT INTO `student` VALUES ('06', 'Wu Lan', '1992-3-1', 'WOMAN'); INSERT INTO `student` VALUES ('07', 'Zheng Zhu', '1989-7-1', 'WOMAN'); INSERT INTO `student` VALUES ('08', 'Wang Ju', '1990-1-20', 'WOMAN'); INSERT INTO `student` VALUES ('09', 'Wang Ju', '2020-8-30', 'MAN');teacherINSERT INTO `teacher` VALUES ('01', 'Li Pengfei');INSERT INTO `teacher` VALUES ('02', 'Wang Wen');INSERT INTO `teacher` VALUES ('03', 'Zhang Zhichao');INSERT INTO `teacher` VALUES ('04', 'Ye Ping');题⽬01、查询'01'课程⽐'02'课程成绩⾼的所有学⽣的学号;SELECT a.SId FROM (select SId,score from `sc` where CId = '01')as aINNER JOIN(select SId,score from `sc` where CId = '02')as bON a.SId = b.SIdINNER JOIN student as c ON c.SId = a.SIdwhere a.score>b.score02、查询平均成绩⼤于60分的同学的学号和平均成绩;select SId,AVG(score) FROM sc GROUP BY SId HAVING AVG(score)>6003、查询所有同学的学号、姓名、选课数、总成绩;⼀SELECT t1.SId,t1.Sname,(SELECT COUNT(CId) FROM sc s1 where s1.SId=t1.SId) 数量,(SELECT SUM(score) FROM sc s2 where s2.SId = t1.SId) 总成绩from student t1⼆select stu.SId , stu.Sname,COUNT(s.CId),sum(s.score) from sc as s join student as stuon s.SId = stu.SIdGROUP BY stu.SId04、查询姓“李”的⽼师的个数;SELECT COUNT(Tid) FROM teacher where Tname LIKE 'Li%'05、查询没学过“叶平”⽼师课的同学的学号、姓名; 思路:查找所有学过yp⽼师可的学⽣,然后看哪个Sid没在⾥⾯SELECT SId,Sname from student WHERE SId NOT IN(SELECT SId from sc where CId IN(SELECT CId FROM course where TId IN(SELECT TId FROM teacher where Tname ='Ye Ping')))06、查询学过“01”并且也学过编号“02”课程的同学的学号、姓名;SELECT SId,Sname from student st where(select COUNT(*) FROM sc s1 where s1.SId=st.SId and CId='01')>0and (select COUNT(*) from sc s2 where s2.SId=st.SId and CId='02')>0SELECT DISTINCT stu.SId , stu.Sname from sc as s join student as stu on s.SId = stu.SId where01 in (SELECT CId from sc where stu.SId = SId) and 02 in (SELECT CId from sc where stu.SId = SId)07、查询学过“Li Pengfei”⽼师所教的所有课的同学的学号、姓名;select DISTINCT stu.SId ,stu.Sname from student as stujoin sc as s on stu.SId = s.SIdwhere (SELECT COUNT(1) from sc as ss join course as c on ss.CId = c.CIdJOIN teacher as t on c.TId = t.TIdwhere s.SId = ss.SId and t.Tname = "Li PengFei" )=(select COUNT(1) from course as cou join teacher as tea on cou.TId = tea.TIdwhere tea.Tname = "Li PengFei")08、查询课程编号“02”的成绩⽐课程编号“01”课程低的所有同学的学号、姓名;⼀ SELECT st.SId,st.Sname from (SELECT SId,score from sc where CId = '02') aINNER JOIN (SELECT SId,score from sc where CId = '01') bON a.SId = b.SIdINNER JOIN student st ON st.SId = b.SId where a.score<b.score⼆ SELECT SId,Sname from student where SId IN(SELECT s1.SId from sc s1 ,sc s2 wheres1.SId = s2.Sid and s2.CId = '02' and s1.CId = '01' and s1.score>s2.score)09、查询所有课程成绩⼩于80分的同学的学号、姓名;SELECT SId ,sname from student where SId NOT IN (select SId from sc where score >=80)SELECT stu.SId,stu.Sname from student as stuwhere (SELECT COUNT(1) from sc where stu.SId = SId) = (SELECT COUNT(1) from sc WHERE stu.SId = SId and score<80) 10、查询没有学全所有课的同学的学号、姓名;SELECT SId,Sname from student where SId IN(select SId from scgroup BY SId HAVING (SELECT COUNT(CId) from course)=COUNT(SId))SELECT DISTINCT stu.SId,stu.Sname from student as stuwhere (SELECT COUNT(1) from sc where stu.SId = SId) = (SELECT COUNT(1) from course )11、查询⾄少有⼀门课与学号为“01”的同学所学相同的同学的学号和姓名;SELECT SId ,Sname from student where SId IN(select SId from sc where CId IN(select CId from sc where SId = '01'))12、查询学过学号为“07”同学所有门课的其他同学学号和姓名;select SId ,Sname from student where SId IN(SELECT SId from sc WHERECId IN(SELECT CId from sc where SId = '07')GROUP BY CId HAVING COUNT(SId)>=(SELECT COUNT(SId) from sc where SId = '07'))13.丢了 知道的可以告诉我⼀下14、查询和“07”号的同学学习的课程完全相同的其他同学学号和姓名;select s.SId,stu.Sname from sc as s join student as stu on s.SId = stu.SId wheres.SId not in (select SId from sc where CId not in (select CId from sc where SId = 07)) and(SELECT COUNT(1) from sc where SId = 07) = (SELECT COUNT(1) from sc where SId = s.SId)GROUP BY s.SId,stu.Sname15、删除学习“Li Pengfei”⽼师课的SC表记录;DELETE from sc where CId IN (select CId from course where TId = (SELECT TId from teacher where Tname = 'Li Pengfei'))16、向SC表中插⼊⼀些记录,这些记录要求符合以下条件:没有上过编号“03”课程的同学学号,“02”,以及“02”课的平均成绩;INSERT INTO sc SELECT SId,'02',b.av from sc,(SELECT AVG(score) AS av from sc where CId = '02') bwhere SId NOT IN (SELECT SId from sc s2 where CId ='03')17、按平均成绩从⾼到低显⽰所有学⽣的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显⽰:select st.Sname,a.score as 'MATH',b.score as 'ENGLISH',c.score as 'CHINESE' from(SELECT SId,score from sc where CId = (select CId FROM course where Cname = 'MATH')) as aINNER JOIN (SELECT SId,score from sc where CId = (select CId FROM course where Cname = 'ENGLISH')) as b ON a.SId = b.SIdINNER JOIN(SELECT SId,score from sc where CId = (select CId FROM course where Cname = 'CHINESE')) as c ON b.SId = c.SIdINNER JOIN student as st ON c.SId = st.SIdGROUP BY st.Sname ORDER BY AVG(a.score+b.score+c.score)DESC18、查询各科成绩最⾼和最低的分:以如下形式显⽰:course_id,max,minSELECT CId as 'coures_id',MAX(score) as 'max',MIN(score) as 'min'from scGROUP BY CId19、按各科平均成绩从低到⾼和及格率的百分数从⾼到低顺序SELECT CId,AVG(score) as '平均成绩',sum(case when score>60 then 1 else 0 end)/count(*)*100 as '及格率'from scGROUP BY CIdORDER BY AVG(score) asc,sum(case when score>=60 then 1 else 0 end)/count(*) descSELECT s.CId,ame,AVG(s.score),(SELECT COUNT(1) from sc where CId = s.CId and score>60)/(SELECT COUNT(1) from sc WHERE CId = s.CId) as 及格率from sc as s JOIN course as cou on s.CId = cou.CIdGROUP BY CIdORDER BY AVG(s.score) ASC,及格率 DESC20、查询如下课程平均成绩和及格率的百分数(⽤"1⾏"显⽰): math(01),chinese(02),english(03)select AVG(a.score) as 'MATH',SUM(case when a.score>=60 then 1 else 0 end)/count(a.SId)*100 as 'MATH%',AVG(b.score) as 'ENGLISH',sum(case when b.score>=60 then 1 else 0 end)/count(b.SId)*100 as 'ENGLISH%',AVG(c.score) as 'CHINESE', sum(case when c.score>=60 then 1 else 0 end)/count(c.SId)*100 as 'CHINESE%'from(SELECT SId,score from sc where CId = (select CId FROM course where Cname = 'MATH')) as aINNER JOIN (SELECT SId,score from sc where CId = (select CId FROM course where Cname = 'ENGLISH')) as b INNER JOIN(SELECT SId,score from sc where CId = (select CId FROM course where Cname = 'CHINESE')) as cSELECT s.CId,ame,AVG(s.score),(SELECT COUNT(1) from sc where CId = s.CId and score>60)/(SELECT COUNT(1) from sc WHERE CId = s.CId) as 及格率from sc as s JOIN course as cou on s.CId = cou.CId where s.CId in (01,02,03)GROUP BY CId21、查询不同⽼师所教不同课程平均分从⾼到低显⽰SELECT tea.Tname,ame,AVG(s.score) as 平均分from sc as s JOIN course as cou on s.CId = cou.CIdJOIN teacher as tea on tea.TId = cou.TIdGROUP BY s.CIdORDER BY 平均分 desc22、查询如下课程成绩第 3 名到第 6 名的学⽣成绩单:math(01),chinese(02),english(03)——student_id,student_name,math,chinese,english,avg_score;⼀:select stu.SId,stu.Sname,(SELECT score from sc as s1 where CId = "02" and SId = stu.SId) as 数学,(SELECT score from sc as s2 where CId = "01" and SId = stu.SId) as 语⽂,(SELECT score from sc as s3 where CId = "03" and SId = stu.SId) as 英语,avg((SELECT score from sc as s1 where CId = "02" and SId = stu.SId)+(SELECT score from sc as s1 where CId = "01" and SId = stu.SId)+(SELECT score from sc as s1 where CId = "03" and SId = stu.SId))/3 as 平均成绩from student stuGROUP BY stu.SIdORDER BY 平均成绩 desc LIMIT 2,4⼆:select stu.SId,stu.Sname,ms.score as "数学",ys.score as "语⽂",es.score as "英语" ,avg(ms.score+ys.score+es.score)/3 as "平均成绩" from(SELECT SId,score from sc where CId = "02") as msINNER join (SELECT SId,score from sc where CId = "01" )as ys on ms.SId = ys.SIdINNER join (SELECT SId,score from sc where CId = "03")as es on ys.SId = es.SIdINNER join student stu on stu.SId = es.SIdGROUP BY stu.SId,stu.Sname,ms.score,ys.score,es.scoreORDER BY avg(ms.score+ys.score+es.score) DESC23、统计列印各科成绩,各分数段⼈数:课程ID,课程名称,[100-85],[85-70],[70-60],[-60]--分组求和 sum case when then else endSELECT cou.CId ,ame,SUM(CASE when s.score>=85 then 1 ELSE 0 END) as "[100-85]" ,SUM(CASE when s.score<85 and s.score >=70 then 1 ELSE 0 END) as "[85-70]" ,SUM(CASE when s.score<70 and s.score>=60 then 1 ELSE 0 END) as "[70-60]" ,SUM(CASe when s.score<60 then 1 ELSE 0 END) as "60以下"from sc as s join course as cou on cou.CId = s.CIdGROUP BY cou.CId ,ame24、查询学⽣平均成绩及其名次select SId,平均成绩,(SELECT COUNT(1) from(SELECT SId,AVG(score) as 平均成绩 from sc GROUP BY SId)as a where a.平均成绩>b.平均成绩)+1 as 排名 from(select SId,AVG(score) as 平均成绩 from sc GROUP BY SId) as bGROUP BY SIdORDER BY 平均成绩 DESCSELECT(SELECT COUNT(1) from (SELECT AVG(score) as pjcj,SId from sc GROUP BY SId) as b where b.pjcj>a.平均成绩)+1 as 排名,姓名,平均成绩from(SELECT stu.Sname as 姓名, AVG(s.score) as 平均成绩 from sc as s join student as stu on s.SId = stu.SId GROUP BY stu.Sname)as aORDER BY 排名25、查询各科成绩前三名的记录:(不考虑成绩并列情况)//有瑕疵SELECT ame,b.score,b.SId,(SELECT COUNT(1) from sc as c where c.score>b.score and c.CId = b.CId)+1 as 排名fromsc as b join course as cou on b.CId = cou.CId where (select COUNT(1) from sc as a WHERE a.CId = b.CId and a.score>b.score order BY a.CId)<3 GROUP By ame,b.SIdORDER BY ame,b.score descSELECT s.CId ,s.SId ,s.score from(SELECT CId,SId,score,(SELECT COUNT(1) from sc as s2 WHERE s2.score>s1.score and s2.CId = s1.CId)+1 as c1 from sc as s1HAVING c1<4)as sGROUP BY s.CId ,s.SIdORDER BY s.CId, s.score DESC26、查询每门课程被选修的学⽣数select ame,(SELECT count(*) from sc as a WHERE a.CId = b.CId),COUNT(b.SId)from sc as b JOIN course as cou on b.CId = cou.CidGROUP BY ame27、查询出只选修了2门课程的全部学⽣的学号和姓名select stu.SId,stu.Sname from student as stu join (SELECT SId,COUNT(SId) from scGROUP BY SId HAVING COUNT(SId) = 2) as a on stu.SId = a.SId28、查询男⽣、⼥⽣⼈数SELECT Ssex,count(Ssex) from studentGROUP BY Ssex29、查询姓“王”的学⽣名单select * from student WHERE Sname LIKE "Wang%"30、查询同名同性学⽣名单,并统计同名⼈数select a.Sname,(SELECT COUNT(1) from student as b where a.Sname = b.Sname)as c from student as a GROUP BY a.SnameHAVING c>131、1990年出⽣的学⽣名单(注:Student表中Sage列的类型是datetime)select * from student where YEAR(Sage)=199032、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列SELECT s.CId,ame,AVG(s.score) from sc as s JOIN course as cou on s.CId = cou.CIdGROUP BY s.CIdORDER BY AVG(s.score) DESC ,s.CId ASC33、丢了 知道的告诉我⼀下34、查询课程名称为“MATH”,且分数低于60的学⽣姓名和分数SELECT stu.Sname,s.score from sc as s join student as stu on s.SId = stu.SIdwhere s.score<60 and s.CId = (SELECT CId from course where Cname = "MATH")35、查询所有学⽣的选课情况;⼀ select stu.SId,stu.Sname,s.CId,ame from sc as s join student as stu on s.SId = stu.SIdjoin course as cou on cou.CId = s.CIdGROUP BY stu.SId,s.CIdORDER BY s.SId asc⼆.合并SELECT stu.SId,stu.Sname,GROUP_CONCAT(ame SEPARATOR ' , ') as 选课 from sc as s join student as stu ON s.SId = stu.SId JOIN course as cou on cou.CId = s.CIdGROUP BY stu.SId36、查询每门课程成绩在70分以上的姓名、课程名称和分数;SELECT stu.Sname,ame,s.score from student as stu join sc as s on stu.SId = s.SId JOIN course as cou on cou.CId = s.CIdwhere s.score>=7037、查询不及格的课程,显⽰学号、姓名、课程号、成绩SELECT stu.SId,stu.Sname,s.CId,s.score from student as stu join sc as s on stu.SId = s.SIdwhere s.score <6038、查询课程编号为03且课程成绩在80分以上的学⽣的学号和姓名;SELECT stu.SId,stu.Sname from student as stu join sc as s on stu.SId = s.SIdwhere s.score >=80 and s.CId = 0339、求选了课程的学⽣⼈数去重SELECT COUNT(DISTINCT SId) as 选课⼈数 from sc40、查询选修“Li Pengfei”⽼师所授课程的学⽣中,成绩最⾼的学⽣姓名及其成绩select stu.Sname,s.score from student as stujoin sc as s on stu.SId = s.SIdwhere s.score = (SELECT MAX(score) from sc as s join course as cou on cou.CId = s.CIdjoin teacher as tea on tea.TId = cou.TId where tea.Tname = "Li Pengfei" )and s.CId = (SELECT DISTINCT s.CId from sc as s join course as cou on cou.CId = s.CIdjoin teacher as tea on tea.TId = cou.TId where tea.Tname = "Li Pengfei" )41、查询各个课程及相应的选修⼈数SELECT ame,count(1) from sc as s join course as cou on s.CId = cou.CIdGROUP BY ame42、查询不同课程成绩相同的学⽣的学号、课程号、学⽣成绩理解俩种意思:⼀:不同课程,不同学⽣,成绩相同SELECT stu.SId,stu.Sname,s.CId,s.score from student as stu join sc as s on stu.SId = s.SIdwhere s.score in (SELECT score from sc where SId!=s.SId)ORDER BY s.score DESC⼆:不同课程,相同学⽣,成绩相同(可以去重不⽤in)SELECT stu.SId,stu.Sname,s.CId,s.score from student as stu join sc as s on stu.SId = s.SIdwhere s.score in (SELECT score from sc where SId=s.SId and CId!=s.CId)ORDER BY s.score DESC43、查询每门课程成绩最好的前两名SELECT s.CId,stu.Sname,s.score from student as stu join sc as s on stu.SId = s.SIdwhere (SELECT COUNT(1) FROM sc where CId = S.CId and score>s.score)<2GROUP BY s.CId,stu.SnameORDER BY s.CId,s.score DESC44、统计每门课程的学⽣选修⼈数(超过5⼈的课程才统计)。
mysql练习题(打印版)# MySQL练习题## 1. 基本数据操作题目:创建一个名为`students`的表,包含`id`(主键,自增),`name`(姓名),`age`(年龄),`grade`(年级)四个字段。
```sqlCREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),age INT,grade VARCHAR(10));```题目:向`students`表中插入三个学生记录,姓名分别为“张三”,“李四”,“王五”,年龄分别为18,19,20,年级均为“大一”。
```sqlINSERT INTO students (name, age, grade) VALUES('张三', 18, '大一'),('李四', 19, '大一'),('王五', 20, '大一');```题目:查询`students`表中所有学生的姓名和年龄。
```sqlSELECT name, age FROM students;```题目:更新`students`表中名为“张三”的学生的年级为“大二”。
```sqlUPDATE students SET grade = '大二' WHERE name = '张三';```题目:删除`students`表中年龄为19的学生记录。
```sqlDELETE FROM students WHERE age = 19;```## 2. 高级查询题目:查询`students`表中年龄大于18岁的所有学生信息。
```sqlSELECT * FROM students WHERE age > 18;```题目:查询`students`表中年级为“大一”的学生的平均年龄。
mysql笔试题目及答案一、选择题(每题2分,共20分)1. MySQL数据库默认的存储引擎是()。
A. InnoDBB. MyISAMC. MemoryD. Archive答案:B2. 下列哪个选项不是MySQL的索引类型?()A. B-TreeB. HashC. R-TreeD. Full-Text答案:B3. MySQL中,以下哪个函数用于获取当前时间?()A. NOW()B. CURDATE()C. CURTIME()D. DATE()答案:A4. 在MySQL中,以下哪个选项是正确的创建数据库的语法?()A. CREATE DATABASE database_name;B. CREATE DATABASE database_name COLLATE utf8_general_ci;C. CREATE TABLE database_name;D. CREATE DATABASE database_name IF NOT EXISTS;答案:D5. 在MySQL中,以下哪个选项是正确的创建表的语法?()A. CREATE TABLE table_name (column1 INT, column2 VARCHAR(10));B. CREATE TABLE table_name (column1 INT, column2 VARCHAR(10)) ENGINE=InnoDB;C. CREATE TABLE table_name (column1 INT, column2 VARCHAR(10)) CHARSET=utf8;D. CREATE TABLE table_name (column1 INT, column2 VARCHAR(10)) ENGINE=InnoDB CHARSET=utf8;答案:D6. MySQL中,以下哪个选项是正确的删除表的语法?()A. REMOVE TABLE table_name;B. DROP TABLE table_name;C. DELETE TABLE table_name;D. REMOVE table_name;答案:B7. 在MySQL中,以下哪个选项是正确的插入数据的语法?()A. INSERT INTO table_name (column1, column2) VALUES (value1, value2);B. INSERT INTO table_name VALUES (value1, value2);C. INSERT INTO table_name (column1, column2) SET value1,value2;D. INSERT INTO table_name SET (column1, value1), (column2, value2);答案:A8. 在MySQL中,以下哪个选项是正确的更新数据的语法?()A. UPDATE table_name SET column1 = value1, column2 = value2WHERE condition;B. UPDATE table_name SET column1 = value1 WHERE condition;C. UPDATE table_name SET column1 = value1, column2 = value2;D. UPDATE table_name column1 = value1, column2 = value2 WHERE condition;答案:A9. 在MySQL中,以下哪个选项是正确的查询数据的语法?()A. SELECT * FROM table_name WHERE condition;B. SELECT * FROM table_name;C. SELECT table_name WHERE condition;D. SELECT * FROM table_name WHERE condition LIMIT 10;答案:A10. 在MySQL中,以下哪个选项是正确的删除数据的语法?()A. DELETE FROM table_name WHERE condition;B. REMOVE FROM table_name WHERE condition;C. DELETE table_name WHERE condition;D. REMOVE table_name WHERE condition;答案:A二、填空题(每题3分,共15分)1. MySQL中,使用________函数可以获取当前日期。
mysql50条练习题MySQL是一种广泛应用于数据库管理系统的开源软件,它的功能强大且易于使用。
为了更好地掌握MySQL的使用技巧和理解数据库的基本概念,下面将介绍50个MySQL练习题,帮助读者提升MySQL技能。
1. 创建一个名为"employees"的表,包含字段:员工ID、姓名、性别、年龄、部门ID。
2. 插入5条员工信息到"employees"表中。
3. 查询"employees"表中所有员工的信息。
4. 查询"employees"表中员工ID为1的员工信息。
5. 查询"employees"表中年龄大于30岁的员工信息。
6. 查询"employees"表中部门ID为2的员工信息。
7. 查询"employees"表中男性员工的信息。
8. 查询"employees"表中女性员工的信息,并按年龄降序排列。
9. 更新"employees"表中员工ID为1的员工的姓名为"张三"。
10. 删除"employees"表中员工ID为2的员工信息。
11. 创建一个名为"departments"的表,包含字段:部门ID、部门名称。
12. 插入3个部门信息到"departments"表中。
13. 查询"departments"表中所有部门的信息。
14. 查询"departments"表中部门ID为1的部门信息。
15. 查询"departments"表中部门名称为"人事部"的部门信息。
16. 查询"employees"表中员工所在部门的信息。
17. 查询"employees"表中每个部门的员工数量。
mysql-50道经典sql题English.Q1: Find all customers who have placed orders with a total value of over $1000.sql.SELECT customer_id, SUM(order_total) AS total_value.FROM orders.GROUP BY customer_id.HAVING total_value > 1000;Q2: Find all products that have been ordered more than 10 times.sql.SELECT product_id, COUNT() AS order_count.FROM order_items.GROUP BY product_id.HAVING order_count > 10;Q3: Find all employees who have worked on more than 5 projects.sql.SELECT employee_id, COUNT() AS project_count.FROM project_assignments.GROUP BY employee_id.HAVING project_count > 5;Q4: Find all orders that were shipped within 2 days of being placed.sql.SELECT order_id, DATEDIFF(ship_date, order_date) AS shipping_time.FROM orders.WHERE shipping_time <= 2;Q5: Find all customers who have placed at least one order in the last year.sql.SELECT customer_id.FROM orders.WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 1YEAR);Chinese.Q1: 找出所有总订单价值超过 1000 美元的客户。
mysql之经典50道题MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种Web应用程序和企业级应用中。
在使用MySQL的过程中,我们经常会遇到一些常见的问题和挑战。
下面是MySQL的经典50道题,希望对大家有所帮助。
1. 什么是MySQL?MySQL是一种开源的关系型数据库管理系统,它使用SQL语言进行数据管理。
2. MySQL的特点有哪些?MySQL具有高性能、可靠性、可扩展性和易用性等特点。
3. 如何安装MySQL?可以从MySQL官方网站下载MySQL的安装包,并按照安装向导进行安装。
4. 如何创建数据库?可以使用CREATE DATABASE语句来创建数据库,例如:CREATE DATABASE mydb;5. 如何创建表?可以使用CREATE TABLE语句来创建表,例如:CREATE TABLE mytable (id INT, name VARCHAR(20));6. 如何插入数据?可以使用INSERT INTO语句来插入数据,例如:INSERT INTO mytable (id, name) VALUES (1, 'John');7. 如何查询数据?可以使用SELECT语句来查询数据,例如:SELECT * FROM mytable;8. 如何更新数据?可以使用UPDATE语句来更新数据,例如:UPDATE mytable SET name = 'Tom' WHERE id = 1;9. 如何删除数据?可以使用DELETE FROM语句来删除数据,例如:DELETE FROM mytable WHERE id = 1;10. 如何备份数据库?可以使用mysqldump命令来备份数据库,例如:mysqldump -u username -p password mydb > backup.sql;11. 如何恢复数据库?可以使用mysql命令来恢复数据库,例如:mysql -u username -p password mydb < backup.sql;12. 如何优化查询性能?可以使用索引、合理设计表结构、避免全表扫描等方法来优化查询性能。
mysql数据库练习题(含答案)创建数据库1 DROP DATABASE IF EXISTS test1; #如果存在test1数据库删除test1数据库2 CREATE DATABASE test1; #创建test1数据库3 USE test1; #切换的test1数据库⾥创建部门表1 DROP IF EXISTS TABLE DEPT; #如果存在dept数据表,删除dept数据表.2 CREATE TABLE DEPT(3 DEPTNO int PRIMARY KEY, #部门编号4 DNAME VARCHAR(14) , #部门名称5 LOC VARCHAR(13) #部门地址6 ) ;向部门表插⼊数据1 INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');2 INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');3 INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');4 INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');创建员⼯表1 DROP IF EXISTS TABLE EMP; #如果存在emp数据表,删除emp数据表.2 CREATE TABLE EMP(3 EMPNO int PRIMARY KEY, #员⼯编号4 ENAME VARCHAR(10), #员⼯姓名5 JOB VARCHAR(9), #员⼯⼯作6 MGR int, #员⼯直属领导编号7 HIREDATE DATE, #⼊职时间8 SAL double, #⼯资9 COMM double, #奖⾦10 DEPTNO int #对应dept表的外键11 );添加部门和员⼯之间的主外键关系1 ALTER TABLE EMP ADD CONSTRAINT FOREIGN KEY EMP(DEPTNO) REFERENCES DEPT (DEPTNO); #加主键约束1.主键约束:要对⼀个列加主键约束的话,这列就必须要满⾜的条件就是分空因为主键约束:就是对⼀个列进⾏了约束,约束为(⾮空、不重复)以下是代码要对⼀个列加主键,列名为id,表名为emp格式为:alter table 表格名称 add constraint 约束名称增加的约束类型(列名)添加部门和员⼯1 INSERT INTO EMP VALUES(7369,'SMITH','CLERK',7902,"1980-12-17",800,NULL,20);2 INSERT INTO EMP VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30); 3 INSERT INTO EMP VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30); 4 INSERT INTO EMPVALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20); 5 INSERT INTO EMP VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30); 6 INSERT INTO EMP VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30); 7 INSERT INTO EMP VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10); 8 INSERT INTO EMP VALUES(7788,'SCOTT','ANALYST',7566,'1987-07-03',3000,NULL,20); 9 INSERT INTO EMPVALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10); 10 INSERT INTO EMP VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30); 11 INSERT INTO EMP VALUES(7876,'ADAMS','CLERK',7788,'1987-07-13',1100,NULL,20); 12 INSERT INTO EMP VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30); 13 INSERT INTO EMP VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20); 14 INSERT INTO EMPVALUES(7934,'MILLER','CLERK',7782,'1981-01-23',1300,NULL,10);创建⼯资等级表1 DROP IF EXISTS TABLE SALGRADE; #如果存在salgrade数据表,删除salgrare数据表.2 CREATE TABLE SALGRADE(3 GRADE int, #等级4 LOSAL double, #最低⼯资5 HISAL double ); #最⾼⼯资6 INSERT INTO SALGRADE VALUES (1,700,1200);7 INSERT INTO SALGRADE VALUES (2,1201,1400);8 INSERT INTO SALGRADE VALUES (3,1401,2000);9 INSERT INTO SALGRADE VALUES (4,2001,3000); 10 INSERT INTO SALGRADE VALUES (5,3001,9999);单表查询题⽬及答案1 #1、查找部门30中员⼯的详细信息。
mysql数据库考试试题及答案一、选择题1. MySQL中的InnoDB存储引擎支持的事务隔离级别有几种?A. 一种B. 两种C. 三种D. 四种答案:D2. 下列哪个命令可以查看MySQL服务器的版本信息?A. SHOW DATABASES;B. SHOW TABLES;C. SHOW VARIABLES;D. SHOW PROCESSLIST;答案:C3. 在MySQL中,如果需要对一个表进行备份,应该使用哪个命令?A. mysqldumpB. mysqlimportC. mysqladmin createD. mysqladmin backup答案:A4. 在SQL语句中,用于删除表中数据但不删除表结构的关键字是什么?A. TRUNCATEB. DROPC. DELETED. REMOVE答案:C5. 在MySQL中,创建新数据库的命令是什么?A. CREATE DATABASEB. NEW DATABASEC. BUILD DATABASED. INIT DATABASE答案:A二、填空题1. 在MySQL中,___________命令可以用来创建新的表。
答案:CREATE TABLE2. 如果需要查询数据库中所有的表,可以使用___________命令。
答案:SHOW TABLES3. 在SQL中,___________关键字用于指定唯一键值,保证表中每一行数据的唯一性。
答案:PRIMARY KEY4. 当需要对数据库进行优化时,可以使用___________命令。
答案:OPTIMIZE TABLE5. 在MySQL中,___________函数用于获取当前日期和时间。
答案:NOW()三、判断题1. 在MySQL中,使用TEXT类型的字段可以存储二进制数据。
(对/错) 答案:错2. 在MySQL中,外键约束可以用来级联更新和删除数据。
(对/错)答案:对3. 使用LIKE关键字进行模糊查询时,%和_分别代表任意多个字符和任意单个字符。
mysql考试题一、选择题1. 下列关于MySQL的说法中,错误的是:A. MySQL是一个开源的关系型数据库管理系统B. MySQL支持多种操作系统,包括Windows、Linux和Mac OSC. MySQL使用SQL语言来进行数据库操作D. MySQL可以存储非结构化数据2. 在MySQL中,以下哪个是正确的数据类型:A. STRINGB. INTEGERC. BOOLEAND. MONEY3. 下列关于MySQL存储引擎的说法中,正确的是:A. InnoDB支持事务B. MyISAM支持行级锁C. MyISAM支持外键D. InnoDB不支持聚簇索引4. MySQL的连接方式有几种:A. 2B. 3C. 4D. 55. 下列哪个不是MySQL的客户端工具:A. MySQL WorkbenchB. NavicatC. HeidiSQLD. Apache二、填空题1. 在MySQL中,用于创建数据库的SQL语句是__________。
2. 在MySQL中,用于查询数据的SQL语句是__________。
3. MySQL默认端口号是__________。
4. 在MySQL中,用于删除表的SQL语句是__________。
三、简答题1. 请简要描述MySQL的特点以及其应用领域。
2. 什么是MySQL中的主键和外键?它们有什么作用?3. 请简述MySQL中存储引擎的概念,并说明各种存储引擎的特点。
四、综合题请设计一个MySQL数据库,包括至少3个表,每个表至少包含3个字段,各表之间要有关联。
以上为MySQL考试题,希望您能认真回答。
祝您顺利通过考试!。
MySQL数据库原理设计与应用习题库+答案一、多选题(共50题,每题1分,共50分)1、下列选项中,占用字节数均为4的是()。
A、TINYINTB、INTC、FLOATD、DOUBLE正确答案:BC2、以下字符集中支持中文的是()。
A、latin1B、big5C、gbkD、utf8正确答案:BCD3、下面关于外键约束描述正确的是()。
A、可防止非法数据的插入B、会带来额外的开销C、删除主表的数据时,需要先删除从表的数据D、以上说法都不正确正确答案:ABC4、在MySQL5.7版本中,支持全文索引的存储引擎有()。
A、ARCHIVEB、MEMORYC、MyISAMD、InnoDB正确答案:CD5、下面还原数据库的命令中,正确的是()。
A、先登录MySQL,再执行use mydb; source mydb.sqlB、mysql -uroot -p123456 mydb < mydb.sqlC、mysqldump -uroot -p123456 mydb < mydb.sqlD、先登录MySQL,再执行source mydb mydb.sql正确答案:AB6、以下选项()表示“cid等于5且price等于199”的比较条件。
A、cid=5&&price=199B、(cid,price)=(5,199)C、cid=5 OR price=199D、以上答案都不正确正确答案:AB7、以下选项属于数据控制语言的是()。
A、ALTERB、GRANTC、COMMITD、ROLLBACK正确答案:BCD8、下列关于MYSQL中事务的说法,正确的有()。
A、事务就是针对数据库的一组操作B、事务中的语句要么都执行,要么都不执行C、事务提交成功后其中的操作才会生效D、可以通过START TRANSACTION来提交事务正确答案:ABC9、以下用于刷新权限的是()。
A、FLUSH PRIVILEGESB、mysqladmin -uroot -p reloadC、mysqladmin -uroot -p flush-privilegesD、以上答案都不正确正确答案:ABC10、下列属于位运算符的是()。
MySQLMySQL经典50题000.题⽬已知有如下4张表:学⽣表:student(学号,学⽣姓名,出⽣年⽉,性别)成绩表:score(学号,课程号,成绩)课程表:course(课程号,课程名称,教师号)教师表:teacher(教师号,教师姓名)根据以上信息按照下⾯要求写出对应的SQL语句。
001.创建表分析表与表的关联关系:创建学⽣表:创建成绩表:创建课程表:创建教师表:002.插⼊数据insert into student(学号,姓名,出⽣⽇期,性别)values('0001' , '猴⼦' , '1989-01-01' , '男');insert into student(学号,姓名,出⽣⽇期,性别)values('0002' , '猴⼦' , '1990-12-21' , '⼥');insert into student(学号,姓名,出⽣⽇期,性别)values('0003' , '马云' , '1991-12-21' , '男');insert into student(学号,姓名,出⽣⽇期,性别)values('0004' , '王思聪' , '1990-05-20' , '男');同理插⼊其他表的数据:成绩表:insert into score(学号,课程号,成绩)values('0001' , '0001' , 80);insert into score(学号,课程号,成绩)values('0001' , '0002' , 90);insert into score(学号,课程号,成绩)values('0001' , '0003' , 99);insert into score(学号,课程号,成绩)values('0002' , '0002' , 60);insert into score(学号,课程号,成绩)values('0002' , '0003' , 80);insert into score(学号,课程号,成绩)values('0003' , '0001' , 80);insert into score(学号,课程号,成绩)values('0003' , '0002' , 80);insert into score(学号,课程号,成绩)values('0003' , '0003' , 80);课程表:insert into course(课程号,课程名称,教师号)values('0001' , '语⽂' , '0002');insert into course(课程号,课程名称,教师号)values('0002' , '数学' , '0001');insert into course(课程号,课程名称,教师号)values('0003' , '英语' , '0003');教师表:-- 教师表:添加数据insert into teacher(教师号,教师姓名)values('0001' , '孟扎扎');insert into teacher(教师号,教师姓名)values('0002' , '马化腾');-- 这⾥的教师姓名是空值(null)insert into teacher(教师号,教师姓名)values('0003' , null);-- 这⾥的教师姓名是空字符串('')insert into teacher(教师号,教师姓名)values('0004' , '');003.50道⾯试题简单查询1.查询姓“猴“的学⽣名单SELECT * FROM student WHERE 姓名 LIKE '猴%';2.查询姓名总最后⼀个字是‘猴’的学⽣ SELECT * FROM student WHERE 姓名 LIKE '%猴';3.查询姓名中带‘猴’的学⽣名单SELECT * FROM student WHERE 姓名 LIKE '%猴%';4.查询姓“孟”⽼师的个数 SELECT * FROM teacher WHERE 教师姓名 LIKE '孟%';汇总分析5.查询课程编号为“0002”的总成绩 *分析思路select 查询结果 [总成绩:汇总函数sum]from 从哪张表中查找数据[成绩表score]where 查询条件 [课程号是0002]*/SELECT SUM(成绩) FROM score WHERE 课程号 = '0002';6.查询选了课程的学⽣⼈数 /*这个题⽬翻译成⼤⽩话就是:查询有多少⼈选了课程select 学号,成绩表⾥学号有重复值需要去掉from 从课程表查找score;*/SELECT COUNT(DISTINCT 学号) as 学⽣⼈数 FROM score;分组7.查询各科成绩最⾼和最低的分 /*分析思路select 查询结果 [课程ID:是课程号的别名,最⾼分:max(成绩) ,最低分:min(成绩)]from 从哪张表中查找数据 [成绩表score]where 查询条件 [没有]group by 分组 [各科成绩:也就是每门课程的成绩,需要按课程号分组];*/SELECT 课程号,MAX(成绩) as 最⾼分,MIN(成绩) as 最低分 FROM score GROUP BY 课程号;8.查询每门课程被选修的学⽣数/*分析思路select 查询结果 [课程号,选修该课程的学⽣数:汇总函数count]from 从哪张表中查找数据 [成绩表score]where 查询条件 [没有]group by 分组 [每门课程:按课程号分组];*/SELECT 课程号,COUNT(DISTINCT 学号) as 学⽣数 FROM score GROUP BY 课程号;9.查询男⽣,⼥⽣⼈数/*分析思路select 查询结果 [性别,对应性别的⼈数:汇总函数count]from 从哪张表中查找数据 [性别在学⽣表中,所以查找的是学⽣表student]where 查询条件 [没有]group by 分组 [男⽣、⼥⽣⼈数:按性别分组]having 对分组结果指定条件 [没有]order by 对查询结果排序[没有];*/SELECT 性别,COUNT(性别) as 学⽣数 FROM student GROUP BY 性别;SELECT 性别,COUNT(*) as 学⽣数 FROM student GROUP BY 性别;分组结果的条件10.查询平均成绩⼤于60分学⽣的学号和平均成绩/*题⽬翻译成⼤⽩话:平均成绩:展开来说就是计算每个学⽣的平均成绩这⾥涉及到“每个”就是要分组了平均成绩⼤于60分,就是对分组结果指定条件分析思路select 查询结果 [学号,平均成绩:汇总函数avg(成绩)]from 从哪张表中查找数据 [成绩在成绩表中,所以查找的是成绩表score]where 查询条件 [没有]group by 分组 [平均成绩:先按学号分组,再计算平均成绩]having 对分组结果指定条件 [平均成绩⼤于60分]*/SELECT 学号,AVG(成绩) as 平均成绩 FROM score GROUP BY 学号 HAVING AVG(成绩)>60;11.查询⾄少选修两门课程的学⽣学号 /*翻译成⼤⽩话:第1步,需要先计算出每个学⽣选修的课程数据,需要按学号分组第2步,⾄少选修两门课程:也就是每个学⽣选修课程数⽬>=2,对分组结果指定条件分析思路select 查询结果 [学号,每个学⽣选修课程数⽬:汇总函数count]from 从哪张表中查找数据 [课程的学⽣学号:课程表score]where 查询条件 [⾄少选修两门课程:需要先计算出每个学⽣选修了多少门课,需要⽤分组,所以这⾥没有where⼦句] group by 分组 [每个学⽣选修课程数⽬:按课程号分组,然后⽤汇总函数count计算出选修了多少门课]having 对分组结果指定条件 [⾄少选修两门课程:每个学⽣选修课程数⽬>=2]*/SELECT 学号,COUNT(课程号) as 选修课程数 FROM score GROUP BY 学号 HAVING COUNT(课程号)>=2;12.查询同名同姓学⽣名单并统计同名⼈数 /*翻译成⼤⽩话,问题解析:1)查找出姓名相同的学⽣有谁,每个姓名相同学⽣的⼈数查询结果:姓名,⼈数条件:怎么算姓名相同?按姓名分组后⼈数⼤于等于2,因为同名的⼈数⼤于等于2分析思路select 查询结果 [姓名,⼈数:汇总函数count(*)]from 从哪张表中查找数据 [学⽣表student]where 查询条件 [没有]group by 分组 [姓名相同:按姓名分组]having 对分组结果指定条件 [姓名相同:count(*)>=2]order by 对查询结果排序[没有];*/SELECT 姓名,COUNT(姓名) as 同名⼈数 FROM student GROUP BY 姓名 HAVING COUNT(姓名)>=2;13.查询不及格的课程并按课程号从⼤到⼩排列 /*分析思路select 查询结果 [课程号]from 从哪张表中查找数据 [成绩表score]where 查询条件 [不及格:成绩 <60]group by 分组 [没有]having 对分组结果指定条件 [没有]order by 对查询结果排序[课程号从⼤到⼩排列:降序desc];*/SELECT 课程号 FROM score WHERE 成绩<60 ORDER BY 课程号 DESC;14.查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列 /*分析思路select 查询结果 [课程号,平均成绩:汇总函数avg(成绩)]from 从哪张表中查找数据 [成绩表score]where 查询条件 [没有]group by 分组 [每门课程:按课程号分组]having 对分组结果指定条件 [没有]order by 对查询结果排序[按平均成绩升序排序:asc,平均成绩相同时,按课程号降序排列:desc];*/SELECT 课程号,AVG(成绩) as 平均成绩 FROM score GROUP BY 课程号 ORDER BY 平均成绩 ASC,课程号 DESC;15.检索课程编号为“0004”且分数⼩于60的学⽣学号,结果按按分数降序排列 /*分析思路select 查询结果 []from 从哪张表中查找数据 [成绩表score]where 查询条件 [课程编号为“04”且分数⼩于60]group by 分组 [没有]having 对分组结果指定条件 []order by 对查询结果排序[查询结果按按分数降序排列];*/SELECT 学号 FROM score WHERE 课程号='0004' AND 成绩<60 ORDER BY 成绩 DESC;16.统计每门课程的学⽣选修⼈数(超过2⼈的课程才统计),要求输出课程号和选修⼈数,查询结果按⼈数降序排序,若⼈数相同,按课程号升序排序/*分析思路select 查询结果 [要求输出课程号和选修⼈数]from 从哪张表中查找数据 []where 查询条件 []group by 分组 [每门课程:按课程号分组]having 对分组结果指定条件 [学⽣选修⼈数(超过2⼈的课程才统计):每门课程学⽣⼈数>2]order by 对查询结果排序[查询结果按⼈数降序排序,若⼈数相同,按课程号升序排序];*/SELECT 课程号,COUNT(学号) as 选修⼈数 FROM score GROUP BY 课程号 HAVING 选修⼈数>2 ORDER BY 选修⼈数 DESC,课程号 ASC;17.查询两门以上不及格课程的同学的学号及其平均成绩 /*分析思路先分解题⽬:1)[两门以上][不及格课程]限制条件2)[同学的学号及其平均成绩],也就是每个学⽣的平均成绩,显⽰学号,平均成绩分析过程:第1步:得到每个学⽣的平均成绩,显⽰学号,平均成绩第2步:再加上限制条件:1)不及格课程2)两门以上[不及格课程]:课程数⽬>2/*第1步:得到每个学⽣的平均成绩,显⽰学号,平均成绩select 查询结果 [学号,平均成绩:汇总函数avg(成绩)]from 从哪张表中查找数据 [涉及到成绩:成绩表score]where 查询条件 [没有]group by 分组 [每个学⽣的平均:按学号分组]having 对分组结果指定条件 [没有]order by 对查询结果排序[没有];*/select 学号, avg(成绩) as 平均成绩from scoregroup by 学号;/*第2步:再加上限制条件:1)不及格课程2)两门以上[不及格课程]select 查询结果 [学号,平均成绩:汇总函数avg(成绩)]from 从哪张表中查找数据 [涉及到成绩:成绩表score]where 查询条件 [限制条件:不及格课程,平均成绩<60]group by 分组 [每个学⽣的平均:按学号分组]having 对分组结果指定条件 [限制条件:课程数⽬>2,汇总函数count(课程号)>2]order by 对查询结果排序[没有];*/SELECT 学号,AVG(成绩) as 平均成绩 FROM score WHERE 成绩<60 GROUP BY 学号 HAVING COUNT(成绩)>2; 汇总分析18.查询学⽣的总成绩并进⾏排名 【知识点】分组查询/*分析思路select 查询结果 [总成绩:sum(成绩), 学号]from 从哪张表中查找数据 [成绩表score]where 查询条件 [没有]group by 分组 [学⽣的总成绩:按照每个学⽣学号进⾏分组]order by 排序 [按照总成绩进⾏排序:sum(成绩)];/*SELECT 学号,SUM(成绩) as 总成绩 FROM score GROUP BY 学号 ORDER BY 总成绩 DESC;19.查询平均成绩⼤于60分的学⽣的学号和平均成绩 【知识点】分组+条件/*分析思路select 查询结果 [学号, 平均成绩: avg(成绩)]from 从哪张表中查找数据 [成绩表score]where 查询条件 [没有]group by 分组 [学号]having 分组条件 [平均成绩⼤于60分:avg(成绩 ) >60]order by 排序 [没有];/*SELECT 学号,AVG(成绩) as 平均成绩 FROM score GROUP BY 学号 HAVING 平均成绩>60;复杂查询 20.查询所有课程成绩⼩于60分学⽣的学号、姓名 【知识点】⼦查询1.翻译成⼤⽩话1)查询结果:学⽣学号,姓名2)查询条件:所有课程成绩 < 60 的学⽣,需要从成绩表⾥查找,⽤到⼦查询第1步,写⼦查询(所有课程成绩 < 60 的学⽣)select 查询结果[学号]from 从哪张表中查找数据[成绩表:score]where 查询条件[成绩 < 60]group by 分组[没有]having 对分组结果指定条件[没有]order by 对查询结果排序[没有]limit 从查询结果中取出指定⾏[没有];select 学号from studentwhere 成绩 < 60;第2步,查询结果:学⽣学号,姓名,条件是前⾯1步查到的学号select 查询结果[学号,姓名]from 从哪张表中查找数据[学⽣表:student]where 查询条件[⽤到运算符in]group by 分组[没有]having 对分组结果指定条件[没有]order by 对查询结果排序[没有]limit 从查询结果中取出指定⾏[没有];*/SELECT 学号,姓名 FROM student WHERE 学号 in (SELECT 学号 FROM score WHERE 成绩<60);21.查询没有学全所有课的学⽣的学号、姓名 /*查找出学号,条件:没有学全所有课,也就是该学⽣选修的课程数 < 总的课程数【考察知识点】in,⼦查询*/SELECT 学号,姓名 FROM student WHERE 学号 IN ( SELECT 学号 FROM score GROUP BY 学号 HAVING COUNT(学号)<( SELECT COUNT(课程号) FROM course ));22.查询出只选修了两门课程的全部学⽣的学号和姓名 SELECT 学号,姓名 FROM student WHERE 学号 IN ( SELECT 学号 FROM score GROUP BY 学号 HAVING COUNT(课程号)=2);23.1990年出⽣的学⽣名单 /*查找1990年出⽣的学⽣名单学⽣表中出⽣⽇期列的类型是datetime*/SELECT * FROM student WHERE 出⽣⽇期 LIKE "1990%";SELECT * FROM student WHERE YEAR(出⽣⽇期) = 1990;24.查询各科成绩前两名的记录 /*第1步,查出有哪些组我们可以按课程号分组,查询出有哪些组,对应这个问题⾥就是有哪些课程号select 课程号,max(成绩) as 最⼤成绩from scoregroup by 课程号;第2步:先使⽤order by⼦句按成绩降序排序(desc),然后使⽤limt⼦句返回topN(对应这个问题返回的成绩前两名)-- 课程号'0001' 这⼀组⾥成绩前2名select *from scorewhere 课程号 = '0001'order by 成绩 desclimit 2;同样的,可以写出其他组的(其他课程号)取出成绩前2名的sql第3步,使⽤union all 将每组选出的数据合并到⼀起-- 左右滑动可以可拿到全部sql(select * from score where 课程号 = '0001' order by 成绩 desc limit 2)union all(select * from score where 课程号 = '0002' order by 成绩 desc limit 2)union all(select * from score where 课程号 = '0003' order by 成绩 desc limit 2);*/(SELECT * FROM score WHERE 课程号 = '0001' ORDER BY 成绩 DESC LIMIT 2)UNION ALL(SELECT * FROM score WHERE 课程号 = '0002' ORDER BY 成绩 DESC LIMIT 2)UNION ALL(SELECT * FROM score WHERE 课程号 = '0003' ORDER BY 成绩 DESC LIMIT 2);25.查询各学⽣的年龄(精确到⽉份) 下⾯说明了TIMESTAMPDIFF函数的语法。
一、填空题:1.MySQL中,创建数据库的命令为为__ create database ____。
2.数据库的完整性分为:实体完整性、域完整性、参照完整性和用户自定义完整性。
3.Select 命令中,表示条件表达式用where子句,排序用order by,分组用group by__子句。
4.在SQL 中,测试列值是否为空用___is null____运算符号。
5.SQL可用____alter table____命令修改表。
6.数据库管理系统(DBMS)属于_应用__软件。
7.数据库设计中,将ER图转换成关系数据模型的过程属于____逻辑设计阶段_。
8.SQL语句中修改表结构的命令是_ alter table __。
9.在数据库系统中,视图的内容实际上不存在,而是从__基表__导出。
10.M ySQL中显示表中列信息的指令为__ describe _____。
11.b ool型数据用于存储逻辑值,它只有两种状态,即__true__和__false____。
12.B LOB用于保存_大型二进制数据________。
13.将一个列设置为主键的方法是,在列的定义中使用[PRIMARY] KEY(或PRIMARYKEY)(或KEY) ________子句。
14.如果需要将几个互不相干的查询的结果合并成一个结果,可以使用___UNION ______关键字。
二、选择题:1. 陈述A:varchar型数据表示固定长字符数据。
陈述B:char型数据表示不定长字符数据。
关于对以上陈述的描述中,正确的是( A )。
A. 都是错误的B. 都正确C. 陈述A正确,陈述B错误D. 陈述A错误,陈述B正确2. 在SQL中,DROP INDEX 语句的作用是(B)A.. 建立索引B. 删除索引C. 修改索引D. 更新索引3.MySQL是一种( A )类型的数据库管理系统。
A. 关系模型B. 网状模型C. 实体-关系模型D. 层次模型4. 用SQL 的ALTER TABLE 语句修改基本表时,删除其中某个列的约束条件应使用的子句是(D)A.ADDB. DELETEC. MODIFYD. DROP5.下列语言中属于结构化查询语言的是( C )。
mysql练习题50道1. 编写一个MySQL查询,用于查找表中的所有数据。
```SELECT * FROM 表名;```2. 编写一个MySQL查询,用于查找表中的所有数据,并按照某一列的升序排列。
```SELECT * FROM 表名 ORDER BY 列名 ASC;```3. 编写一个MySQL查询,用于查找表中的所有数据,并按照某一列的降序排列。
```SELECT * FROM 表名 ORDER BY 列名 DESC;```4. 编写一个MySQL查询,用于查找表中某一列的数据,并去除重复项。
```SELECT DISTINCT 列名 FROM 表名;```5. 编写一个MySQL查询,用于查找表中满足某个条件的数据。
```SELECT * FROM 表名 WHERE 条件;```6. 编写一个MySQL查询,用于查找表中满足多个条件的数据。
```SELECT * FROM 表名 WHERE 条件1 AND 条件2;```7. 编写一个MySQL查询,用于查找表中满足某个条件或另一个条件的数据。
```SELECT * FROM 表名 WHERE 条件1 OR 条件2;```8. 编写一个MySQL查询,用于计算表中某一列的总和。
```SELECT SUM(列名) FROM 表名;```9. 编写一个MySQL查询,用于计算表中某一列的平均值。
```SELECT AVG(列名) FROM 表名;```10. 编写一个MySQL查询,用于计算表中某一列的最大值。
```SELECT MAX(列名) FROM 表名;```11. 编写一个MySQL查询,用于计算表中某一列的最小值。
```SELECT MIN(列名) FROM 表名;```12. 编写一个MySQL查询,用于统计表中某一列的行数。
```SELECT COUNT(列名) FROM 表名;```13. 编写一个MySQL查询,用于在查询结果中限制返回的行数。
```SELECT * FROM 表名 LIMIT 行数;```14. 编写一个MySQL查询,用于在查询结果中跳过指定数量的行数。
```SELECT * FROM 表名 OFFSET 行数;```15. 编写一个MySQL查询,用于在查询结果中仅返回不同的值。
```SELECT DISTINCT 列名 FROM 表名;```16. 编写一个MySQL查询,用于将查询结果按照某一列进行分组。
```SELECT * FROM 表名 GROUP BY 列名;```17. 编写一个MySQL查询,用于将查询结果按照某一列进行分组,并计算每个组的数量。
```SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名;18. 编写一个MySQL查询,用于在查询结果中根据某一列的值进行过滤。
```SELECT * FROM 表名 HAVING 条件;```19. 编写一个MySQL查询,用于在查询结果中根据某一列的值进行排序,并限制返回的行数。
```SELECT * FROM 表名 ORDER BY 列名 LIMIT 行数;```20. 编写一个MySQL查询,用于在查询结果中根据某一列的值进行排序,并跳过指定数量的行数。
```SELECT * FROM 表名 ORDER BY 列名 OFFSET 行数;```21. 编写一个MySQL查询,用于连接两个表,并返回匹配的行。
```SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列名 = 表2.列名;22. 编写一个MySQL查询,用于连接两个表,并返回包括未匹配的行。
```SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列名 = 表2.列名;```23. 编写一个MySQL查询,用于连接两个表,并返回不包括匹配的行。
```SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.列名 = 表2.列名;```24. 编写一个MySQL查询,用于向表中插入数据。
```INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3);```25. 编写一个MySQL查询,用于更新表中的数据。
```UPDATE 表名 SET 列名 = 新值 WHERE 条件;```26. 编写一个MySQL查询,用于删除表中的数据。
```DELETE FROM 表名 WHERE 条件;```27. 编写一个MySQL查询,用于创建一个新的数据库。
```CREATE DATABASE 数据库名;```28. 编写一个MySQL查询,用于创建一个新的数据表。
```CREATE TABLE 表名 (列1 数据类型, 列2 数据类型, 列3 数据类型);```29. 编写一个MySQL查询,用于在数据表中添加一个新列。
```ALTER TABLE 表名 ADD 列名数据类型;```30. 编写一个MySQL查询,用于修改数据表中的列。
ALTER TABLE 表名 MODIFY 列名数据类型;```31. 编写一个MySQL查询,用于删除数据表中的列。
```ALTER TABLE 表名 DROP 列名;```32. 编写一个MySQL查询,用于在数据表中创建一个新的索引。
```CREATE INDEX 索引名 ON 表名 (列名);```33. 编写一个MySQL查询,用于删除数据表中的索引。
```DROP INDEX 索引名 ON 表名;```34. 编写一个MySQL查询,用于对数据表中的列进行排序。
```ALTER TABLE 表名 ORDER BY 列名;35. 编写一个MySQL查询,用于重命名数据表。
```ALTER TABLE 表名 RENAME TO 新表名;```36. 编写一个MySQL查询,用于删除数据表。
```DROP TABLE 表名;```37. 编写一个MySQL查询,用于在数据表中创建一个新的视图。
```CREATE VIEW 视图名 AS SELECT * FROM 表名;```38. 编写一个MySQL查询,用于删除数据表中的视图。
```DROP VIEW 视图名;```39. 编写一个MySQL查询,用于设置数据表中的列为主键。
ALTER TABLE 表名 ADD PRIMARY KEY (列名);```40. 编写一个MySQL查询,用于删除数据表中的主键。
```ALTER TABLE 表名 DROP PRIMARY KEY;```41. 编写一个MySQL查询,用于设置数据表中的列为外键。
```ALTER TABLE 表名 ADD FOREIGN KEY (列名) REFERENCES 另一张表名(列名);```42. 编写一个MySQL查询,用于删除数据表中的外键。
```ALTER TABLE 表名 DROP FOREIGN KEY 外键名;```43. 编写一个MySQL查询,用于创建一个存储过程。
```CREATE PROCEDURE 存储过程名参数BEGINSQL语句;END;```44. 编写一个MySQL查询,用于执行一个存储过程。
```CALL 存储过程名(参数);```45. 编写一个MySQL查询,用于创建一个触发器。
```CREATE TRIGGER 触发器名 BEFORE/AFTER INSERT/UPDATE/DELETE ON 表名FOR EACH ROW BEGINSQL 语句;END;```46. 编写一个MySQL查询,用于删除一个触发器。
DROP TRIGGER 触发器名;```47. 编写一个MySQL查询,用于创建一个新的用户。
```CREATE USER 用户名@主机名 IDENTIFIED BY '密码';```48. 编写一个MySQL查询,用于删除一个用户。
```DROP USER 用户名@主机名;```49. 编写一个MySQL查询,用于授予用户权限。
```GRANT 权限1, 权限2 ON 数据库名.表名 TO 用户名@主机名;```50. 编写一个MySQL查询,用于撤销用户权限。
```REVOKE 权限1, 权限2 ON 数据库名.表名 FROM 用户名@主机名;以上是50道MySQL练习题,涵盖了基本的查询、连接、数据操作、数据库管理和用户权限等知识点。
通过练习这些题目,可以提高对MySQL的理解和应用能力。
希望对你有帮助!。