insert into stu2 values(‘2017001’,‘张三’,‘10000000000’,1);
在指定字段插入数据(自增长字段)
– 向班级表中插入如下数据:
±------------------------------------------+
|class_no class_name department_name|
±------------------------------------------+
| 1 ‘2017自动化1班’ ‘机电工程’ |
| 2 ‘2017自动化2班’ ‘机电工程’ |
| 3 ‘2017自动化3班’ ‘机电工程’ |
±------------------------------------------+
– SQL语句如下:
insert into classes values(null,‘2017自动化1班’,‘机电工程’);
insert into classes(class_name,department_name)
values(‘2017自动化2班’,‘机电工程’);
insert into classes values(3,‘2017自动化3班’,‘机电工程’);
在insert语句中使用默认值
– 向课程表course中插入如下数据:
±---------------------------------------------------+
|course_name up_limit description status teacher_no |
±---------------------------------------------------+
| ‘Java语言’ 60 ‘暂无’ ‘已审核’ ‘001’ |
|‘MySQL数据库’ 150 ‘暂无’ ‘已审核’ ‘002’ |
| ‘C语言’ 230 ‘暂无’ ‘已审核’ ‘003’ |
±---------------------------------------------------+
– SQL语句如下:
insert into course values(null,‘Java语言’,default,‘暂无’,‘已审核’,‘001’);
或
insert into course
(course_name,description,status,teacher_no)
values(‘Java语言’,‘暂无’,‘已审核’,‘001’);
insert into course values(null,‘MySQL数据库’,150,‘暂无’,‘已审核’,‘002’);
insert into course values(null,‘C语言’,230,‘暂无’,‘已审核’,‘003’);
#错误 违反了外键约束
insert into course values(null,‘C#’,150,‘暂无’,default,‘007’);
#错误 违反了唯一约束
insert into course values(null,‘C#’,150,‘暂无’,default,‘002’);
– 向教师表teacher中插入一行数据
insert into teacher values(‘004’,‘刘老师’,‘14000000000’);
– 向课程表中插入数据 teacher_no字段使用’004’
insert into course values(null,‘C#’,150,‘暂无’,default,‘004’); – 成功执行后,自增长字段的值为6
2.1.4 批量掺入多行数据
– 语法
insert into 表名[(字段列表)] values
(值列表1),
(值列表2),
…
(值列表n);
– 示例:使用批量插入的语句向学生表student中插入以下数据:
---------------------------------------------------
student_no student_name student_contact class_no
---------------------------------------------------
‘2017001’ ‘张三’ ‘15000000000’ 1
‘2017002’ ‘李四’ ‘16000000000’ 1
‘2017003’ ‘王五’ ‘17000000000’ 3
‘2017004’ ‘马六’ ‘18000000000’ 2
‘2017005’ ‘田七’ ‘19000000000’ 2
---------------------------------------------------
– SQL语句如下:
insert into student values
(‘2017001’,‘张三’,‘15000000000’,1),
(‘2017002’,‘李四’,‘16000000000’,1),
(‘2017003’,‘王五’,‘17000000000’,3),
(‘2017004’,‘马六’,‘18000000000’,2),
(‘2017005’,‘田七’,‘19000000000’,2);
2.1.5 使用insert…select语句插入结果集
– 语法
insert into 目标表名[(字段列表1)] select 字段列表2 from 源表名[ where子句];
– 示例:把学生表student中的数据插入到stu2中
insert into stu2 select * from student;
2.2 update语句
2.2.1 作用
根据条件修改表中的数据
2.2.2 语法
update 表名 set 字段名=新值[,字段名=新值,…] [where 条件];
2.2.3 示例
– 创建成绩表
create table exam_score(
stu_no int auto_increment primary key,
e_score tinyint unsigned,
a_score tinyint unsigned,
c_no int
);
– 插入测试数据
insert into exam_score values(null,55,80,1);
insert into exam_score values(null,98,95,1);
insert into exam_score values(null,85,90,1);
insert into exam_score values(null,25,80,1);
insert into exam_score values(null,52,80,1);
– 所有学生的成绩加5分(没有where子句)
update exam_score set e_score=e_score+5;
– 将成绩大于100的,改为100
update exam_score set e_score=100 where e_score>100;
– 成绩处于[55,59]之间的,改为60
update exam_score set e_score=60
where e_score>=55 and e_score<=59;
– 更改学生表student,把’张三’的班号改为4
#错误 违反了外键约束 classes表中不存在class_no=4的数据
update student set class_no=4 where student_name=‘张三’;
– 更改班级表classes,将class_no=1的更改为class_no=4
#错误 违反了外键约束 主表中class_no=1的数据被子表引用
update classes set class_no=4 where class_no=1;
– 将stu1中 学号为’2017004’的姓名改为’马六’、班号改为1
update stu1 set student_name=‘马六’,class_no=1
where student_no=‘2017004’;
2.3 delete语句
2.3.1 作用
根据条件删除表中复合条件的数据行
2.3.2 语法
delete from 表名 [where 条件表达式];
2.3.3 示例
3.1.2 使用select子句指定字段列表
字段列表的指定方式:
: 代表数据源中的全部字段
字段列表: 逗号隔开的多个字段,指定需要检索的若干个字段
表名.: 多表查询中,指定某个表的全部字段
表名.字段: 多表查询中,指定某个表的某个字段
表达式: 表达式中可以包含算数运算、函数等
3.2 基本查询语句
3.3 使用 distinct 排重
select distinct 字段列表 from 表名;
– 设置当前数据库为information_schema
use information_schema;
– 查看所有表
show tables;
– 查看表tables的表结构
desc tables;
– 列出表table中的table_type字段(单列排重)
select table_type from information_schema.tables;
select distinct table_type from tables;
– 列出表table中的table_schema,table_type字段(多列排重)
select distinct table_schema,table_type from tables;
3.4 使用limit实现分页
3.4.1 语法
select 字段列表 from 表名
limit [start,] length;
其中:
start 表示从第几行数据开始检索,默认为0,表示第一行
length 表示要检索的行数 (每页的行数)
3.4.2 示例
– 列出information_schema.tables表中的前10行
显示table_schema,table_name
select table_schema,table_name
from information_schema.tables
limit 10;
– 列出information_schema.tables表中的第7页(每页10行)
select table_schema,table_name
from information_schema.tables
limit 60,10;
3.5 多表查询
3.2.1 多表查询的类型
内连接:符合关联条件的数据行被检索到结果集中,不符合条件的被过滤掉
外连接:外连接的结果集=内连接的结果集+匹配不上的数据
3.2.2 内连接
select student.student_no,student.student_name,
classes.class_name,classes.department_name
from student join classes
on student.class_no=classes.class_no;
-- 向学生表student中插入一行数据
insert into student
values('2017006','小王','20000000000',null);
-- 向班级表classes中插入一行数据
insert into classes values(null,'2017电子信息工程','信息学院');
-- 如果关联的两张表中,有重名字段,则该字段必须用表名修饰
select student_no,student_name,
class_name,department_name
from student join classes
on student.class_no=classes.class_no;
练习:列出教师及其所授课程的信息,包括教师姓名、课程名和人数
select t.teacher_name 姓名,c.course_name 课程,c.up_limit 人数
from teacher t join course c
on t.teacher_no=c.teacher_no;
3.2.3 外连接
3.2.4 三表内连接
insert into choose values(null,‘2017001’,1,40,‘2018-12-30 11:30:30’);
insert into choose values(null,‘2017001’,3,50,‘2018-12-30 10:30:30’);
insert into choose values(null,‘2017002’,4,60,‘2018-12-30 09:30:30’);
insert into choose values(null,‘2017002’,7,70,‘2018-12-30 08:30:30’);
insert into choose values(null,‘2017003’,3,80,‘2018-12-30 12:30:30’);
insert into choose values(null,‘2017004’,1,90,‘2018-12-30 13:30:30’);
insert into choose values(null,‘2017005’,3,null,‘2018-12-30 14:30:30’);
insert into choose values(null,‘2017005’,4,null,‘2018-12-30 15:30:30’);
2.使用表连接列出教师及其所授课程的信息,包括教师工号、姓名、课程名和人数
– 向教师表teacher中插入一行数据
– 分别使用内连接、左外连接和右外连接查询结果
3.列出学生的学号、姓名、班级名称和考试成绩