第2章 DML操作及简单查询

本文由用户“lcjwyyan”分享发布 更新时间:2020-04-17 19:48:55 举报文档

以下为《第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字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。

  1. 升本VFP基础知识填空题06
  2. 3.Mysql索引管理
  3. 动介搭配内容
  4. 图书借阅系统表结构
  5. 公司员工面试题考察sql
  6. 暗黑高端商务极简PPT
  7. 《病句辨析专项复习》试卷
  8. 人工智能ppt模版
  9. 如何给视频添加画面风格
  10. 修改意见3.18
  11. 子宫内的DNA疫苗接种:诱导新生儿保护性免疫的新方法
  12. 矢量道路添加编码规范

以上为《第2章 DML操作及简单查询》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

图片预览