以下为《第2章 DML操作及简单查询》的无排版文字预览,完整内容请下载
第2章 DML操作及简单查询如何一次插入多条数据?
将查询结果集插入新表的语法是什么?
哪个关键字可以按指定行数返回查询结果集?
如何实现查询多表数据?
预习检查2/51回顾及作业点评配置MySQL需要注意哪几个问题?
如何使用root账号登录MySQL?
创建表、查看表、查看表定义、删除表的SQL语句是什么?
MyISAM和InnoDB存储引擎的应用场景各是什么?
3/51本章任务使用SQL语句为成绩表添加主、外键
使用SQL语句实现数据添加、修改、查询
查询指定学生考试成绩
查询某学期开设的课程
查询某课程最近一次考试缺考的学生名单
4/51本章目标掌握使用SQL语句修改、删除表
掌握添加/删除约束的SQL语句
掌握简单子查询的用法
掌握IN子查询的用法5/51修改表2-1#修改表名
ALTER TABLE 旧表名 RENAME [TO] 新表名;#添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [属性];#修改字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];#删除字段
ALTER TABLE 表名 DROP 字段名;6/51修改表2-2DROP TABLE IF EXISTS `demo01`;
#创建表
CREATE TABLE `demo01`(
`id` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(8) NOT NULL
);
#修改表名
ALTER TABLE `demo01` RENAME `demo02`;
#添加字段
ALTER TABLE ` demo02 ` ADD `password` VARCHAR(32) NOT NULL;
#修改字段
ALTER TABLE ` demo02 ` CHANGE `name` `username`CHAR(10) NOT NULL;
#删除字段
ALTER TABLE ` demo02 ` DROP `password`;7/51添加主键ALTER TABLE 表名 ADD CONSTRAINT 主键名
PRIMARY KEY 表名(主键字段);ALTER TABLE `grade` ADD CONSTRAINT `pk_grade` PRIMARY KEY `grade`(`gradeId`);如何设置grade表中gradeId字段为主键?8/51添加外键ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段)
REFERENCES 关联表名(关联字段);如何将student表的gradeId字段和grade表的gradeId字段建立外键关联?ALTER TABLE `student` ADD CONSTRAINT fk_student_grade FOREIGN KEY(`gradeId`)
REFERENCES `grade` (`gradeId`);9/51小结阅读以下代码,哪些SQL语句可以实现修改表?1)ALTER TABLE mybook RENAME book;
2)ALTER TABLE book ADD author varchar(10) NOT NULL;
3)ALTER TABLE `book` ADD `pk_book` PRIMARY KEY `book`(`bookId`);
4)ALTER TABLE `book` DROP ·author `;修改表名添加字段删除字段10/51学员操作—创建数据表并实现对表的修改操作需求说明
在test数据库中创建person表
将表名修改为tb_person
删除出生日期字段
添加出生日期字段,数据类型为DATE类型
修改序号字段名(number)为id,类型为BIGINT类型11/51需求说明
result表需要添加的内容
主键约束:学号、课程编号和日期构成组合主键
外键约束:主表student和从表result通过studentNo字段建立主外键关联
学员操作—添加成绩表主外键12/51常见问题及解决办法
代码规范问题
调试技巧
共性问题集中讲解13/51DML语句——插入单条数据记录INSERT INTO 表名 [(字段名列表)] VALUES (值列表);字段名是可选的,如省略则依次插入所有字段
多个列表和多个值之间使用逗号分隔
值列表和字段名列表一一对应
如插入的是表中部分数据,字段名列表必填INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)
VALUES('123','黄某某',1,'***','1996-5-8');14/51 INSERT INTO 新表(字段名列表)
VALUES(值列表1),(值列表2),……,(值列表n);DML语句——插入多条数据记录INSERT INTO `subject`(`subjectName`,`classHour`,`gradeID`)
VALUES('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2);为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!15/51DML语句——将查询结果插入新表INSERT INTO 新表(字段1,字段2……)
SELECT字段1,字段2……
FROM 原某某;SQL ServerMySQLINSERT INTO 新表(字段1,字段2……)
SELECT字段1,字段2……
FROM 原某某;相同SELECT字段1,字段2……
INTO 新表
FROM 原某某;CREATE TABLE 新表(SELECT 字段1,字段2
……
FROM 原某某);不同事先创建且与插入数据字段相符无须事先创建16/51DML语句——将查询结果插入新表CREATE TABLE `phoneList`(
SELECT `studentName`,`phone`
FROM `student`);如新表已存在,将会报错!!编写SQL语句实现从学生表提取姓名、手机号两列数据存储到通讯录表中17/51DML语句——数据更新、删除UPDATE 表名
SET 字段1=值1,字段2=值2,…,字段n=值n
[WHERE 条件]; DELETE FROM 表名 [WHERE条件]; TRUNCATE TABLE 表名;更新数据记录
删除数据记录 TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快!18/51小结MySQL中如何使用一条INSERT语句插入多条数据?
MySQL中将查询结果集插入新表的两种方式是什么?两者的区别是什么?
删除数据时使用DELETE和TRUNCATE的区别是什么?
19/51DQL语句回顾SELECT
FROM
[WHERE ]
[GROUP BY ]
[HAVING ]
[ORDER BY [ASC 或 DESC]]SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate`
FROM `student`
WHERE `gradeId` = 1
ORDER BY studentNo;SQL Server中查询语句在MySQL中同样支持20/51LIMIT子句2-1MySQL查询语句中使用LIMIT子句限制结果集
SELECT
FROM
[WHERE ]
[GROUP BY ]
[ORDER BY [ASC 或 DESC]]
[LIMIT [位置偏移量, ]行数];21/51查询所有年级编号为1的学员信息,按学号升序排序
显示前4条记录
每页4条,显示第2页,即从第5条记录开始显示4条数据LIMIT子句2-2SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate`
FROM `student`
WHERE `gradeId` = 1
ORDER BY studentNo
LIMIT 4; 显示前4条LIMIT 4,4; 从第5条开始显示4条 使用LIMIT子句时,注意第1条记录的位置是0!!22/51常用函数——聚合函数23/51常用函数——字符串函数24/51常用函数——时间日期函数25/51常用函数——数学函数26/51学员操作—为学生表、科目表、成绩表添加数据需求说明
为科目表添加数据,要求使用一条INSERT语句
为学生表添加数据(参考学生用书表3-3)
使用提供的SQL脚本为成绩表添加数据27/51学员操作—修改学生表、科目表数据需求说明
将学生表中学号为20000的学生的邮箱修改为stu20000@163.com,***
将科目表中课时数大于200且年级编号为1的科目的课时减少10
将所有年级编号为1的学员姓名、性别、出生日期、手机号码信息保存到新表student_grade1中28/51需求说明
查询2016年2月17日考试前5名的学员的学号和分数
将所有女学生按年龄从大到小排序,从第2条记录开始显示6名女学生的姓名、年龄、出生日期、手机号信息
按出生年份分组统计学生人数,将各组中人数达到2人的年份和人数显示出来
查询参加2016年2月17日考试的所有学员的最高分、最低分、平均分
学员操作—查询学生信息29/51共性问题集中讲解常见问题及解决办法
代码规范问题
调试技巧
30/51什么是子查询3-1编写SQL语句,查看年龄比“李某某”小的学生,要求显示这些学生的信息 第一步:查询得到“李某某”的出生日期
第二步:利用WHERE语句,筛选出生日期比“李某某”大的学生31/51什么是子查询3-2实现方法一:分两步实现
查找出“李某某”的出生日期
利用WHERE语句筛选出生日期比“李某某”大的学生
SELECT `studentNo`, `studentName`,`sex`,`bornDate`,`address` FROM `student` WHERE bornDate > '1993-07-23';SELECT `bornDate` FROM `student` WHERE `studentName` = '李某某';32/51什么是子查询3-3实现方法二:采用子查询实现
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询
子查询在WHERE语句中的一般用法SELECT `studentNo`,`studentName`,`sex`,`bornDate`,`address`
FROM `student`
WHERE `bornDate` >
(SELECT `bornDate` FROM `student` WHERE `studentName`='李某某');父查询子查询先执行子查询,返回所有来自子查询的结果
再执行外围的父查询,返回查询的最终结果SELECT … FROM 表1 WHERE 字段1 比较运算符(子查询)33/51将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个!使用子查询替换表连接3-1查询“Logic Java”课程至少一次考试刚好等于60分的学生成绩表数据学生表数据34/51使用子查询替换表连接3-2实现方法一:采用表连接 SELECT `studentName` FROM `student` stu
INNER JOIN `result` r ON stu.studentNO = r.studentNo
INNER JOIN `subject` sub ON r.subjectNo = sub.subjectNo
WHERE `studentResult` = 60 AND `subjectName` = 'Logic Java';内连接(等值连接)35/51使用子查询替换表连接3-3SELECT `studentName` FROM `student` WHERE `studentNo` = (
SELECT `studentNo` FROM `result`
INNER JOIN `Subject` ON result.subjectNo= subject.subjectNo
WHERE `studentResult`=60 AND `subjectName`='Logic Java'
);子查询实现方法二:采用子查询
子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据
表连接更适合于查看多表的数据
36/51学员操作——查询指定学生成绩2-1训练要点
使用子查询返回单条记录
需求说明
查询参加最近一次Logic Java考试成绩的学生的最高分和最低分37/51学员操作——查询指定学生成绩2-2实现思路
查询获得“Logic Java”课程的课程编号
查询获得“Logic Java”课程最近一次的考试日期
根据课程编号查询考试成绩的最高分和最低分
SELECT MAX(`studentResult`) AS 最高分,
MIN(`studentResult`) AS 最低分
FROM `result`
WHERE `subjectNo`=
(SELECT `subjectNo` FROM `subject`
WHERE `subjectName`='Logic Java' ) AND
`examDate`=(SELECT MAX(`examDate`) FROM `result`
WHERE `subjectNo`=(SELECT `subjectNo` FROM `subject`
WHERE `subjectName`='Logic Java' ) );38/51IN子查询4-1查询“Logic Java”课程考试成绩为60分的学生名单
解决方法:采用 IN 子查询
子查询返回不止1个值时,
使用比较运算符会出错39/51SELECT `studentName` FROM `student`
WHERE `studentNo` IN(
SELECT `studentNo` FROM `result`
WHERE `subjectNo` = (
SELECT `subjectNo` FROM `subject`
WHERE `subjectName`='Logic Java'
)AND `studentResult` = 60
);将=号改为IN这是一个三层嵌套的子查询常用IN替换等于(=)的子查询
IN后面的子查询可以返回多条记录IN子查询4-240/51IN子查询4-3查询参加“Logic Java”课程最近一次考试的在读学生名单
实现步骤获得 “Logic Java”课程的课程编号SELECT `subjectNo` FROM `subject`
WHERE `subjectName`='Logic Java';SELECT MAX(`examDate`) FROM 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 47/51总结
DML语句
查询语句中
LIMIT子句
查询多表数据
插入数据记录(INSERT)
更新数据记录(UPDATE)
删除数据记录(DELETE/TRUNCATE)
更新数据记录(UPDATE)DML及查询
表连接
子查询对查询结果进行限定
可指定查询起始位置和条数比较运算符:子查询只能返回单个数值
IN/NOT IN:子查询可返回多条记录48/51插入数据记录(INSERT)
更新数据记录(UPDATE)
删除数据记录(DELETE/TRUNCATE)
更新数据记录(UPDATE)表连接
子查询对查询结果进行限定
可指定查询起始位置和条数比较运算符:子查询只能返回单个数值
IN/NOT IN:子查询可返回多条记录[文章尾部最后500字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。
以上为《第2章 DML操作及简单查询》的无排版文字预览,完整内容请下载
第2章 DML操作及简单查询由用户“lcjwyyan”分享发布,转载请注明出处