MySQL操作数据库语法

## 创作不易点点关注,这样我才有更大的动力!****

操作数据库

结构化查询语句分类

名称 解释 命令
DDL(数据定义语言) 定义和管理数据对象,如数据库,数据表等 CREATE、DROP、ALTER
DML(数据定义语言) 用于操作数据库对象中所包含的数据 INSERT、UPDATE、DELETE
DQL(数据定义语言) 用于查询数据库数据 SELECT
DCL(数据定义语言) 用于管理数据库的语言,包括管理权限及数 GRANT、COMMIT、ROLLBACK

DDL

创建数据表语法

create table [if not exists] `表名`(
'字段名1' 列类型 [属性][索引][注释],
'字段名2' 列类型 [属性][索引][注释],
#...
'字段名n' 列类型 [属性][索引][注释]
)[表类型][表字符集][注释];-- 说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键).

测试

-- 目标︰创建一个schoo1数据库-创建学生表(列,字段)
-- 学号int登录密码varchar(20)姓名,性别varchar(2),出生日期(datatime) ,家庭住址, emai1
-- 创建表之前,一定要先选择数据库CREATE DATABASE IF NOT EXISTS `school`;
-- 创建一个school数据库
USE `school`;-- 创建学生表
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`(
`studentno` INT(4) NOT NULL COMMENT '学号',
`loginpwd` VARCHAR(20) DEFAULT NULL,
`studentname` VARCHAR(20) DEFAULT NULL COMMENT '学生姓名',
`sex` TINYINT(1) DEFAULT NULL COMMENT '性别,0或1',
`gradeid` INT(11) DEFAULT NULL COMMENT '年级编号',
`phone` VARCHAR(50) NOT NULL COMMENT '联系电话,允许为空',
`address` VARCHAR(255) NOT NULL COMMENT '地址,允许为空',
`borndate` DATETIME DEFAULT NULL COMMENT '出生时间',
`email` VARCHAR (50) NOT NULL COMMENT '邮箱账号允许为空',
`identitycard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
PRIMARY KEY (`studentno`),
UNIQUE KEY `identitycard`(`identitycard`),
KEY `email` (`email`)
)ENGINE=MYISAM DEFAULT CHARSET=utf8;-- 创建年级表
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade`(`gradeid` INT(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号',`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',PRIMARY KEY (`gradeid`)
) ENGINE=INNODB AUTO_INCREMENT = 6 DEFAULT CHARSET = utf8;-- 创建科目表
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject`(`subjectno`INT(11) NOT NULL AUTO_INCREMENT COMMENT '课程编号',`subjectname` VARCHAR(50) DEFAULT NULL COMMENT '课程名称',`classhour` INT(4) DEFAULT NULL COMMENT '学时',`gradeid` INT(4) DEFAULT NULL COMMENT '年级编号',PRIMARY KEY (`subjectno`)
)ENGINE = INNODB AUTO_INCREMENT = 19 DEFAULT CHARSET = utf8;-- 创建成绩表
DROP TABLE IF EXISTS `result`;
CREATE TABLE `result`(`studentno` INT(4) NOT NULL COMMENT '学号',`subjectno` INT(4) NOT NULL COMMENT '课程编号',`examdate` DATETIME NOT NULL COMMENT '考试日期',`studentresult` INT (4) NOT NULL COMMENT '考试成绩',KEY `subjectno` (`subjectno`)
)ENGINE = INNODB DEFAULT CHARSET = utf8;

DML

添加数据

INSERT

语法: INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES ('值1','值2','值3')

插入数据

-- 插入科目数据
INSERT INTO `subject`(`subjectno`,`subjectname`,`classhour`,`gradeid`)VALUES
(1,'高等数学-1',110,1),
(2,'高等数学-2',110,2),
(3,'高等数学-3',100,3),
(4,'高等数学-4',130,4),
(5,'C语言-1',110,1),
(6,'C语言-2',110,2),
(7,'C语言-3',100,3),
(8,'C语言-4',130,4),
(9,'Java程序设计-1',110,1),
(10,'Java程序设计-2',110,2),
(11,'Java程序设计-3',100,3),
(12,'Java程序设计-4',130,4),
(13,'数据库结构-1',110,1),
(14,'数据库结构-2',110,2),
(15,'数据库结构-3',100,3),
(16,'数据库结构-4',130,4),
(17,'C#基础',130,1);-- 插入学生数据 其余自行添加 这里只添加了2行
INSERT INTO `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`)
VALUES
(1000,'123456','张伟',0,2,'13800001234','北京朝阳','1980-1-1','text123@qq.com','123456198001011234'),
(1001,'123456','赵强',1,3,'13800002222','广东深圳','1990-1-1','text111@qq.com','123456199001011233');
-- 插入成绩数据  这里仅插入了一组,其余自行添加
INSERT INTO `result`(`studentno`,`subjectno`,`examdate`,`studentresult`)
VALUES
(1000,1,'2013-11-11 16:00:00',85),
(1000,2,'2013-11-12 16:00:00',70),
(1000,3,'2013-11-11 09:00:00',68),
(1000,4,'2013-11-13 16:00:00',98),
(1000,5,'2013-11-14 16:00:00',58),
(1001,5,'2013-11-14 16:00:00',58),
(1002,5,'2013-11-14 16:00:00',58),
(1005,5,'2013-11-14 16:00:00',58),
(1008,5,'2013-11-14 16:00:00',58),
(1005,5,'2013-11-14 16:00:00',58),
(1003,5,'2013-11-14 16:00:00',58),
(1002,5,'2013-11-14 16:00:00',58);-- 插入年级数据
INSERT INTO `grade` (`gradeid`,`gradename`) VALUES(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'预科班');

删除数据

DELETE

DELETE FROM 表名 [WHERE condition];
--注意:condition为筛选条件 , 如不指定则删除该表的所有列数据
-- 删除最后一个数据
DELETE FROM grade WHERE gradeid = 5

TRUNCATE

作用:用于完全清空表数据 , 但表结构 , 索引 , 约束等不变 ;
语法:
TRUNCATE [TABLE] table_name;
-- 清空年级表
TRUNCATE grade

注意;

区别于DELETE命令

相同 : 都能删除数据 , 不删除表结构 , 但TRUNCATE速度更快

不同 :

使用TRUNCATE TABLE 重新设置AUTO_INCREMENT计数器

使用TRUNCATE TABLE不会对事务有影响 (事务后面会说)

测试

-- 创建一个测试表
CREATE TABLE `test` (
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
-- 插入几个测试数据
INSERT INTO test(coll) VALUES('row1'),('row2'),('row3');
-- 删除表数据(不带where条件的delete)
DELETE FROM test;
-- 结论:如不指定Where则删除该表的所有列数据,自增当前值依然从原来基础上进行,会记录日志.-- 删除表数据(truncate)TRUNCATE TABLE test;-- 结论:truncate删除数据,自增当前值会恢复到初始值重新开始;不会记录日志.-- 同样使用DELETE清空不同引擎的数据库表数据.重启数据库服务后-- InnoDB : 自增列从初始值重新开始 (因为是存储在内存中,断电即失)-- MyISAM : 自增列依然从上一个自增数据基础上开始 (存在文件中,不会丢失)

update命令

语法:UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE
condition];注意:
-- column_name 为要更改的数据列
-- value 为修改后的数据 , 可以为变量 , 具体指 , 表达式或者嵌套的SELECT结果
-- condition 为筛选条件 , 如不指定则修改该表的所有列数据

测试

-- 修改年级信息
UPDATE grade SET gradename = '高中' WHERE gradeid = 1;

DQL

SELECT语法

SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,...]]}
FROM table_name [as table_alias]
[left | right | inner join table_name2] -- 联合查询
[WHERE ...] -- 指定结果需满足的条件
[GROUP BY ...] -- 指定结果按照哪几个字段来分组
[HAVING] -- 过滤分组的记录必须满足的次要条件
[ORDER BY ...] -- 指定查询记录按一个或多个条件排序
[LIMIT {[offset,]row_count | row_countOFFSET offset}];
-- 指定查询的记录从哪条至哪条注意 : [ ] 括号代表可选的 , { }括号代表必选得

查询

SELECT `subjectno`,`subjectname` FROM `subject`;
SELECT `subjectno` AS 科目编号,`subjectname` AS 学科科目 FROM `subject`;
SELECT `subjectno` AS 科目编号, `subjectname` AS 学科科目, CONCAT('学科科目:',`subjectname`) AS `新的` FROM `subject`;
SELECT * FROM `result`;SELECT `studentno`,`studentresult` FROM `result`;
-- 去重复的数据
SELECT DISTINCT `studentno` FROM `result`;
SELECT DISTINCT `studentresult` FROM `result`;
-- 表达式
SELECT 1+1 AS 计算结果;
-- 获取自动增量
SELECT @@auto_increment_increment;
-- 查看版本
SELECT VERSION();
-- 给学生成绩全部加一
SELECT `studentresult`+1 AS 新的成绩 FROM `result`;-- 查询学号不等于1000的信息
SELECT `studentno`, `studentresult` FROM `result` WHERE `studentno`!=1000;
SELECT `studentno`, `studentresult` FROM `result` WHERE NOT `studentno`=1000;-- 查询学号大于1000的学生信息
SELECT `studentno`,`studentresult` FROM `result` WHERE `studentno`>1000;
-- 查询学号小于1003的学生信息
SELECT `studentno`,`studentresult` FROM `result` WHERE `studentno`<1003;
-- 查询学号在1003到1005之间的信息  -- 这样存在一些问题,会把1005的数据输出出来
SELECT `studentno`,`studentresult` FROM `result` WHERE `studentno`>1003 AND `studentresult`<1005;
-- 查询数据在1003和1005之间的信息(包括1003和1005)
SELECT `studentno`,`studentresult` FROM `result` WHERE `studentno` BETWEEN 1003 AND 1005;

MySQL面试题及答案

– 1、查询“c001”课程比“c002”课程成绩高的所有学生的学号;

– 2、查询平均成绩大于60 分的同学的学号和平均成绩;

– 3、查询所有同学的学号、姓名、选课数、总成绩;

– 4、查询姓“刘”的老师的个数;

– 5、查询没学过“谌燕”老师课的同学的学号、姓名;

– 6、查询学过“c001”并且也学过编号“c002”课程的同学的学号、姓名;

– 7、查询学过“谌燕”老师所教的所有课的同学的学号、姓名;

– 8、查询课程编号“c002”的成绩比课程编号“c001”课程低的所有同学的学号、姓名;

– 9、查询所有课程成绩小于60 分的同学的学号、姓名;

– 10、查询没有学全所有课的同学的学号、姓名;

– 11、查询至少有一门课与学号为“s001”的同学所学相同的同学的学号和姓名;

– 12、查询至少学过学号为“s001”同学所有一门课的其他同学学号和姓名;

– 13、把“SC”表中“谌燕”老师教的课的成绩都更改为此课程的平均成绩;

– 14、查询和“s001”号的同学学习的课程完全相同的其他同学学号和姓名;

– 15、删除学习“谌燕”老师课的SC 表记录;

– 16、向SC 表中插入一些记录,这些记录要求符合以下条件:没有上过编号“c002”课程的同学学号、“c002”号课的平均成绩;

– 17、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

– 18、按各科平均成绩从低到高和及格率的百分数从高到低顺序

– 19、查询不同老师所教不同课程平均分从高到低显示

– 20、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]

– 21、查询各科成绩前三名的记录:(不考虑成绩并列情况)

– 22、查询每门课程被选修的学生数

– 23、查询出只选修了一门课程的全部学生的学号和姓名

– 24、查询男生、女生人数

– 25、查询姓“张”的学生名单

– 26、查询同名同性学生名单,并统计同名人数

– 27、1981 年出生的学生名单(注:Student 表中Sage 列的类型是number)

– 28、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

– 29、查询平均成绩大于85 的所有学生的学号、姓名和平均成绩

– 30、查询课程名称为“数据库”,且分数低于60 的学生姓名和分数

– 31、查询所有学生的选课情况;

– 32、查询任何一门课程成绩在70 分以上的姓名、课程名称和分数;

– 33、查询不及格的课程,并按课程号从大到小排列

– 34、查询课程编号为c001 且课程成绩在80 分以上的学生的学号和姓名;

– 35、求选了课程的学生人数

– 36、查询选修“谌燕”老师所授课程的学生中,成绩最高的学生姓名及其成绩

– 37、查询各个课程及相应的选修人数

– 38、查询不同课程成绩相同的学生的学号、课程号、学生成绩

– 39、查询每门功课成绩最好的前两名

– 40、统计每门课程的学生选修人数(超过10 人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

– 41、检索至少选修两门课程的学生学号

– 42、查询全部学生都选修的课程的课程号和课程名

– 43、查询没学过“谌燕”老师讲授的任一门课程的学生姓名

– 44、查询两门以上不及格课程的同学的学号及其平均成绩

– 45、检索“c004”课程分数小于60,按分数降序排列的同学学号

– 46、删除“s002”同学的“c001”课程的成绩

数据

建库语句

DROP TABLE IF EXISTS test;
CREATE DATABASE IF NOT EXISTS test DEFAULT CHARACTER SET utf8;
USE test;

建表语句

/*******建学生表******/
CREATE TABLE student(
sno CHAR(10) PRIMARY KEY,
sname CHAR(20),
sage INT(2),
ssex CHAR(5)
);
/*******建教师表******/
CREATE TABLE teacher(
tno CHAR(10) PRIMARY KEY,
tname VARCHAR(20)
);
/*******建课程表******/
CREATE TABLE course(
cno CHAR(10),
cname VARCHAR(20),
tno CHAR(20)
);
/*******建成绩表******/
CREATE TABLE sc(
sno CHAR(10),
cno CHAR(10),
score DOUBLE(4,2)
);

插入数据

/*******初始化学生表的数据******/
INSERT INTO student(sno,sname,sage,ssex) VALUES ('s001','张三',23,'男');
INSERT INTO student VALUES ('s002','李四',23,'男');
INSERT INTO student VALUES ('s003','吴鹏',25,'男');
INSERT INTO student VALUES ('s004','琴沁',20,'女');
INSERT INTO student VALUES ('s005','王丽',20,'女');
INSERT INTO student VALUES ('s006','李波',21,'男');
INSERT INTO student VALUES ('s007','刘玉',21,'男');
INSERT INTO student VALUES ('s008','萧蓉',21,'女');
INSERT INTO student VALUES ('s009','陈萧晓',23,'女');
INSERT INTO student VALUES ('s010','陈美',22,'女');
COMMIT;
/******************初始化教师表***********************/
INSERT INTO teacher VALUES ('t001', '刘阳');
INSERT INTO teacher VALUES ('t002', '谌燕');
INSERT INTO teacher VALUES ('t003', '胡明星');
COMMIT;
/***************初始化课程表****************************/
INSERT INTO course VALUES ('c001','J2SE','t002');
INSERT INTO course VALUES ('c002','Java Web','t002');
INSERT INTO course VALUES ('c003','SSH','t001');
INSERT INTO course VALUES ('c004','Oracle','t001');
INSERT INTO course VALUES ('c005','SQL SERVER 2005','t003');
INSERT INTO course VALUES ('c006','C#','t003');
INSERT INTO course VALUES ('c007','JavaScript','t002');
INSERT INTO course VALUES ('c008','DIV+CSS','t001');
INSERT INTO course VALUES ('c009','PHP','t003');
INSERT INTO course VALUES ('c010','EJB3.0','t002');
COMMIT;
/***************初始化成绩表***********************/
INSERT INTO sc VALUES ('s001','c001',78.9);
INSERT INTO sc VALUES ('s002','c001',80.9);
INSERT INTO sc VALUES ('s003','c001',81.9);
INSERT INTO sc VALUES ('s004','c001',60.9);
INSERT INTO sc VALUES ('s001','c002',82.9);
INSERT INTO sc VALUES ('s002','c002',72.9);
INSERT INTO sc VALUES ('s003','c002',81.9);
INSERT INTO sc VALUES ('s001','c003',59);
COMMIT;

查看数据

/***************查询学生表***********************/
SELECT * FROM student
/***************查询成绩表***********************/
SELECT * FROM course
/***************查询教师表***********************/
SELECT * FROM teacher/***************查询成绩表***********************/
SELECT * FROM sc

1、查询“c001”课程比“c002”课程成绩高的所有学生的学号;

SELECT * FROM
(SELECT * FROM sc  WHERE cno='c001')a,
(SELECT * FROM sc  WHERE cno='c002')b
WHERE a.sno=b.sno AND a.score>b.score;

2、查询平均成绩大于60 分的同学的学号和平均成绩;

SELECT sno,AVG(score)平均成绩 FROM sc
GROUP BY sno
HAVING AVG(score)>60

3、查询所有同学的学号、姓名、选课数、总成绩;

SELECT a.*,s.sname FROM
(SELECT sno 学号,SUM(score)总成绩,COUNT(cno)选课数 FROM sc
GROUP BY sno) a ,student s WHERE a.sno=s.sno

4、查询姓“刘”的老师的个数;

SELECT COUNT(tname) FROM teacher
WHERE tname LIKE '刘%'

5、查询没学过“谌燕”老师课的同学的学号、姓名;

SELECT * FROM student st WHERE st.sno NOT IN
(SELECT DISTINCT sno FROM sc s JOIN course c ON s.cno=c.cno
JOIN teacher t ON c.tno=t.tno WHERE tname='谌燕')

6、查询学过“c001”并且也学过编号“c002”课程的同学的学号、姓名;

SELECT * FROM student WHERE sno IN
(SELECT a.sno FROM(SELECT sno FROM sc s WHERE s.cno='c001')a
,(SELECT sno FROM sc s WHERE s.cno='c002')b WHERE a.sno=b.sno);

7、查询学过“谌燕”老师所教的所有课的同学的学号、姓名;

SELECT * FROM student st WHERE st.sno  IN
(SELECT DISTINCT sno FROM sc s JOIN course c ON s.cno=c.cno
JOIN teacher t ON c.tno=t.tno WHERE tname='谌燕')

8、查询课程编号“c002”的成绩比课程编号“c001”课程低的所有同学的学号、姓名;

SELECT * FROM student st
JOIN sc a ON st.sno=a.sno
JOIN sc b ON st.sno=b.sno
WHERE a.cno='c002' AND b.cno='c001' AND a.score < b.score

9、查询所有课程成绩小于60 分的同学的学号、姓名;

SELECT st.*,s.score FROM student st
JOIN sc s ON st.sno=s.sno
JOIN course c ON s.cno=c.cno
WHERE s.score <60

10、查询没有学全所有课的同学的学号、姓名;

SELECT stu.sno,stu.sname,COUNT(sc.cno) FROM student stu
LEFT JOIN sc ON stu.sno=sc.sno
GROUP BY stu.sno,stu.sname
HAVING COUNT(sc.cno)<(SELECT COUNT(DISTINCT cno)FROM course)

11、查询至少有一门课与学号为“s001”的同学所学相同的同学的学号和姓名;

SELECT st.* FROM student st,
(SELECT DISTINCT a.sno FROM
(SELECT * FROM sc) a,
(SELECT * FROM sc WHERE sc.sno='s001') b
WHERE a.cno=b.cno) h
WHERE st.sno=h.sno AND st.sno<>'s001'

12、查询至少学过学号为“s001”同学所有一门课的其他同学学号和姓名;

SELECT * FROM sc
LEFT JOIN student st
ON st.sno=sc.sno
WHERE sc.sno<>'s001'
AND sc.cno IN
(SELECT cno FROM sc
WHERE sno='s001')

13、把“SC”表中“谌燕”老师教的课的成绩都更改为此课程的平均成绩;

UPDATE sc c1 SET score=(
SELECT AVG(s.score) score FROM teacher t,course c,sc s WHERE t.tno=c.tno AND t.tname='谌燕' AND s.cno=c.cno GROUP BY c.cno)
WHERE c1.cno IN(
SELECT cno FROM course a,teacher b
WHERE a.tno=b.tno
AND b.tname='谌燕');

14、查询和“s001”号的同学学习的课程完全相同的其他同学学号和姓名;

 SELECT sno FROM SC WHERE sno<>'s001'AND cno IN (SELECT cno FROM SC WHERE sno='s001')
GROUP BY sno HAVING COUNT(SC.cno)=(SELECT COUNT(*) FROM SC WHERE sno='s001');

15、删除学习“谌燕”老师课的SC 表记录;

DELETE FROM sc
WHERE sc.cno IN
(
SELECT cno FROM course c
LEFT JOIN teacher t  on  c.tno=t.tno
WHERE t.tname='谌燕'
)

16、向SC 表中插入一些记录,这些记录要求符合以下条件:没有上过编号“c002”课程的同学学号、“c002”号课的平均成绩;

INSERT INTO sc (sno,cno,score)
SELECT DISTINCT st.sno,sc.cno,(SELECT AVG(score)FROM sc WHERE cno='c002')
FROM student st,sc
WHERE NOT EXISTS
(SELECT * FROM sc WHERE cno='c002' AND sc.sno=st.sno) AND sc.cno='c002';

17、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

SELECT cno 课程ID ,MAX(score) 最高分,MIN(score)最低分 FROM sc GROUP BY cno;

18、按各科平均成绩从低到高和及格率的百分数从高到低顺序

SELECT cno,AVG(score),SUM(CASE WHEN score>=60 THEN 1 ELSE 0 END)/COUNT(*)
AS 及格率
FROM sc GROUP BY cno
ORDER BY AVG(score) , 及格率 DESC

19、查询不同老师所教不同课程平均分从高到低显示

SELECT MAX(t.tno),MAX(t.tname),MAX(c.cno),MAX(c.cname),c.cno,AVG(score) FROM sc , course c,teacher t
WHERE sc.cno=c.cno AND c.tno=t.tno
GROUP BY c.cno
ORDER BY AVG(score) DESC

20、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]

SELECT sc.cno,c.cname,
SUM(case  WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS "[100-85]",
SUM(case  WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS "[85-70]",
SUM(case  WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS "[70-60]",
SUM(case  WHEN score <60 THEN 1 ELSE 0 END) AS "[<60]"
FROM sc, course c
WHERE sc.cno=c.cno
GROUP BY sc.cno ,c.cname;

21、查询各科成绩前三名的记录:(不考虑成绩并列情况)

SELECT * FROM
(SELECT sno,cno,score,row_number()over(PARTITION BY cno ORDER BY score DESC) rn FROM sc)
WHERE rn<4

22、查询每门课程被选修的学生数

SELECT cno,COUNT(sno)FROM sc GROUP BY cno;

23、查询出只选修了一门课程的全部学生的学号和姓名

SELECT sc.sno,st.sname,COUNT(cno) FROM student st
LEFT JOIN sc
ON sc.sno=st.sno
GROUP BY st.sname,sc.sno HAVING COUNT(cno)=1;

24、查询男生、女生人数

SELECT ssex,COUNT(*)FROM student GROUP BY ssex;

25、查询姓“张”的学生名单

SELECT * FROM student WHERE sname LIKE '张%';

26、查询同名同性学生名单,并统计同名人数

SELECT sname,COUNT(*)FROM student GROUP BY sname HAVING COUNT(*)>1;

27、1981 年出生的学生名单(注:Student 表中Sage 列的类型是number)

SELECT sno,sname,sage,ssex FROM student t WHERE to_char(SYSDATE,'yyyy')-sage =1988

28、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

SELECT cno,AVG(score) FROM sc GROUP BY cno ORDER BY AVG(score)ASC,cno DESC;

29、查询平均成绩大于85 的所有学生的学号、姓名和平均成绩

SELECT st.sno,st.sname,AVG(score) FROM student st
LEFT JOIN sc
ON sc.sno=st.sno
GROUP BY st.sno,st.sname HAVING AVG(score)>85;

30、查询课程名称为“数据库”,且分数低于60 的学生姓名和分数

SELECT sname,score FROM student st,sc,course c
WHERE st.sno=sc.sno AND sc.cno=c.cno AND c.cname='Oracle' AND sc.score<60

31、查询所有学生的选课情况;

SELECT st.sno,st.sname,c.cname FROM student st,sc,course c
WHERE sc.sno=st.sno AND sc.cno=c.cno;

32、查询任何一门课程成绩在70 分以上的姓名、课程名称和分数;

SELECT st.sname,c.cname,sc.score FROM student st,sc,course c
WHERE sc.sno=st.sno AND sc.cno=c.cno AND sc.score>70

33、查询不及格的课程,并按课程号从大到小排列

SELECT sc.sno,c.cname,sc.score FROM sc,course c
WHERE sc.cno=c.cno AND sc.score<60 ORDER BY sc.cno DESC;

34、查询课程编号为c001 且课程成绩在80 分以上的学生的学号和姓名;

SELECT st.sno,st.sname,sc.score FROM sc,student st
WHERE sc.sno=st.sno AND cno='c001' AND score>80;

35、求选了课程的学生人数

SELECT COUNT(DISTINCT sno) FROM sc;

36、查询选修“谌燕”老师所授课程的学生中,成绩最高的学生姓名及其成绩

SELECT st.sname,score FROM student st,sc ,course c,teacher t
WHERE
st.sno=sc.sno AND sc.cno=c.cno AND c.tno=t.tno
AND t.tname='谌燕' AND sc.score=
(SELECT MAX(score)FROM sc WHERE sc.cno=c.cno)

37、查询各个课程及相应的选修人数

SELECT cno,COUNT(sno) FROM sc GROUP BY cno;

38、查询不同课程成绩相同的学生的学号、课程号、学生成绩

SELECT a.* FROM sc a ,sc b WHERE a.score=b.score AND a.cno<>b.cno

39、查询每门功课成绩最好的前两名

SELECT * FROM (
SELECT sno,cno,score,row_number()over(PARTITION BY cno ORDER BY score DESC) my_rn FROM sc t
)
WHERE my_rn<=2

40、统计每门课程的学生选修人数(超过10 人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

SELECT cno,COUNT(sno) FROM sc GROUP BY cno
HAVING COUNT(sno)>10
ORDER BY COUNT(sno) DESC,cno ASC;

41、检索至少选修两门课程的学生学号

SELECT sno FROM sc GROUP BY sno HAVING COUNT(sno)>1;

42、查询全部学生都选修的课程的课程号和课程名

SELECT DISTINCT(c.cno),c.cname FROM course c ,sc
WHERE sc.cno=c.cno

43、查询没学过“谌燕”老师讲授的任一门课程的学生姓名

SELECT st.sname FROM student st
WHERE st.sno NOT IN
(SELECT DISTINCT sc.sno FROM sc,course c,teacher t
WHERE sc.cno=c.cno AND c.tno=t.tno AND t.tname='谌燕')

44、查询两门以上不及格课程的同学的学号及其平均成绩

SELECT sno,AVG(score)FROM sc
WHERE sno IN
(SELECT sno FROM sc WHERE sc.score<60
GROUP BY sno HAVING COUNT(sno)>1
) GROUP BY sno

45、检索“c004”课程分数小于60,按分数降序排列的同学学号

SELECT sno FROM sc WHERE cno='c004' AND score<90 ORDER BY score DESC;

46、删除“s002”同学的“c001”课程的成绩

DELETE FROM sc WHERE sno='s002' AND cno='c001';

下面来介绍一下csdn云IDE
云IDE是CSDN开发云为开发者打造的一款低代码开发产品,云端预制了常见的开发环境,无需下载安装,一键创建项目,灵活配置代码仓和云主机。同时支持在线安装 VSCode 插件来增强使用体验,支持从基础组件快速构建高阶组件,无需重新编写组件,提高研发效率。随时随地开发编码,拥有媲美本地IDE 的流畅编码体验。
▲免费试用方法:
方法一,点击链接 https://mydev.csdn.net/product/ide/dashboard,即可开始创建工作空间啦~
方法二,进入CSDN PC端首页,点击【云服务】进入CSDN【开发云】平台,在页面选择【免费体验云IDE】,即可开始创建工作空间啦~

MySQL操作数据库语法及常见MySQL面试题与答案相关推荐

  1. shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机...

    shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机备份mysql中的库或者表mysqldump 常用参数详解: -u 用户名 -p 密码 -h 服务 ...

  2. Python操作数据库及Python实现mysql数据库连接池源代码

    简介 pymysql:纯Python实现的一个驱动.因为是纯Python编写的,因此执行效率不如MySQL-python.并且也因为是纯Python编写的,因此可以和Python代码无缝衔接. MyS ...

  3. 100 道常见 Hadoop 面试题及答案解析

    100 道常见 Hadoop 面试题及答案解析 目录 1 单选题 ................................................................... ...

  4. MySQL操作数据库--与MySQL零距离接触1-7

    第一章 1-7操作数据库 数据库是一个集合:表 索引等. MySQL语句规范: 关键字与函数名称全部大写 数据库名称.表名称.字段名称全部小写 SQL语句必须以分号结尾 语法结构:       {}: ...

  5. mysql操作数据库语句大全_常用的Mysql数据库操作语句大全整理

    一.用户管理: 1.新建用户: >create user name identified by 'ssapdrow'; 2.更改密码: >set password for name=pas ...

  6. mysql操作常见问题_MySQL:常见使用问题

    1.Linux 上安装MySQL 安装步骤: 1)解压 tar.gz文件shell> tar -zxvf mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz 2)初 ...

  7. MYSQL操作数据库-------查看、删除数据库

    上篇我们学习了如何去创建数据库,本篇我们来学习如何查看和删除数据库 1.查看数据库 数据库的查看包含三个方面:查看MYSQL中存在的所有数据库.查看当前MySQL命令行所使用的数据库.查看MySQL中 ...

  8. mysql操作及语法

    文章目录 操作日常记录 1.创建数据库 2.删除数据库 3.选择数据库 4.创建表 5.删除表 6.外键 7. 修改列 8. 修改列约束 9. 添加列 10.删除列 11.删除主键 12.添加主键 1 ...

  9. 二、MySQL操作数据库

    二.1.操作数据库 1.操作数据库 CREATE DATABASE IF NOT EXISTS westos 2.-- 删除一个数据库 DROP DATABASE IF EXISTS westos 3 ...

最新文章

  1. CKPT进程工作机制
  2. [bug] uni-app 支付宝小程序 上传文件uni.uploadFile 报错 errMsg: “uploadFile:fail 无效参数“
  3. python自带模块可以控制鼠标吗_python自带模块模拟鼠标和键盘操作
  4. TensorFlow:偏微分方程
  5. .net5 不支持winform_.NET 5.0 RC 2 发布,正式版将在11月.NET Conf大会上发布
  6. webpack资源的输入与输出
  7. 关于java中equals与==的区别的小实验
  8. BUG Error:Execution failed for task ':app:dexDebug'.
  9. 深度装机大师一键重装_做好电脑重装系统前后的这些注意事项,让你从此摆脱装机忧愁!...
  10. 数字转为大写金额(C#)
  11. java awt canvas_java.awt 类 Canvas - Java 中文参考手册
  12. 年后跳槽全过程总结(上)——从面试准备到拿到offer
  13. 我现在必须new一个对象!!!
  14. 欧洲哲学发展趋势与中国哲学的机遇
  15. FastDFS图片服务器(分布式文件系统)学习。
  16. python 练习题目
  17. 5个有效的华为(HUAWEI)手机数据恢复方法
  18. 南邮CTF web题目总结
  19. Python编译过程图解
  20. HBuilderX打包,常用android权限配置

热门文章

  1. Visual Studio 好用的插件
  2. CSS3:clip-path详解
  3. BCD码的作用和实现
  4. LoadLibrary()动态调用dll失败,GetLastError()返回126
  5. C++实现内存“垃圾”回收机制
  6. 【c语言学习课堂笔记第三天】:int函数有符号整型和无符号整型
  7. excel下拉菜单vba_一站式提供不同的Excel下拉菜单
  8. POI实现 Excel插入图片
  9. 怎么样跑步才会消耗掉脂肪而不是肌肉和水分呢
  10. PCA降维(主成分分析法)