DML-数据库操作语言
插入数据
insert into student values(null,‘字段名’…);
查询所有
select * from student;
删除单条数据
delete from student whrere id=?;
删除所有数据
delete from student;
摧毁表
truncate table student;
修改数据
修改数据为张三的改为zhangsan
update student set name=‘张三’ where name=‘zhangsan’;
修改王五的salery和出生日期
update studnet set salery=100.01,birthday=‘1999-02-18’ where name=‘王五’
DQL-数据库查询语言
创建数据表
create table student(id int primary key auto_increment,name varchar(20) unique not null,chinese float,english float,math float);
添加几条数据
insert into student values(1,’张三’,90,80,80);
insert into student values(2,’李四’,90,87,60);
insert into student values(3,’王五’,70,60,69);
insert into student values(4,’赵六’,99,90,87);
查询所有学生信息
select * from student;
查询id为1的学生姓名
select name from student where =1;
查询数学成绩大于80的同学成绩
select * from student where math>80;
查询所有学生成绩,并输出效果为 姓名 语文 英语 数学 效果
select name as 名字,select name as 姓名,chinese as 语文,english as 英语,math as 数学 from student
查询所有成绩及数学分+10分
select *,(math+10) from student;
统计每个学生的总分
select * (chinese+english+math)as 总分 from student;
查询总分大于230分的同学
select name from student where (chinese+english+math)>230;
查询数学成绩在80-90之间的同学
select name from student whrere math>=80 and math<90;
查询数学语文英语都大于80的同学成绩
select * from student whrere chinese>80 and math>80 and english<80;
查询数学成绩在 80 60 90内的同学
select * from student where math in(80,60,90)
查询所有姓名中包含张的同学
select * from student like name=’%张%’
按照数学成绩从小到大查询(小-大)
select * from student oredr by math;
按照数学成绩从大到小查询(大-小)
select * from student oredr by math desc;
limit是mysql的语法
select * from student limit m,n
其中m是指记录从m+1开始
,N代表取n条记录。
select * from student limit 2,4
即取出第3条至第6条,4条记录
查询出数学成绩由高到低前两名
select * from student order by math desc limit 0,2;
创建一个订单表
create table employee(id int,name varchar(20),sex varchar(20),age int);
insert into employee values(1,‘sunsan’,‘男’,18);
insert into employee values(2,‘lisi’,‘男’,18);
insert into employee values(3,‘wangwu’,‘女’,19);
insert into employee values(4,‘zhaoliu’,‘男’,15);
分组查询
select * from 表名 group by 字段;
分组查询加条件
select * from employee group by sex having age>18;
(1) having 条件表达式:用来分组查询后指定一些条件来输出查询结果
(2) having作用和where一样,但having只能用于group by
count 个数
sum 总数
avg 平均数
max 最大值
min 最小值
统计班级里边有多少学生
select count(*)from student;
统计总成绩大于250分的人数
select count(*)from student where (math+english+chinese)>250;
统计班级里边各科总成绩
select sum(math),sum(english),sum(chinese) from student
统计所有科目的总成绩
select sum(math+english+chinese) from student;
统计一下语文平均成绩
select sum(chinese)/count(*) from student;
select avg(chinese) from student;
统计一下班级语文最高分和最低分
select max(chinese) from student;
select min(chinese) from student;
报表查询订单根据名称合并后,总价格>10000的商品
select * from orders group by product having sum(price) >7000
一对一
指的是一个实体的某个数据与另外一个实体的多个数据有关联关系, 一对多的关系在设计的时候,需要设计表的外键
create table class(id int primary key auto_increment,name varchar(20));
create table student(id int primary key auto_increment,name varchar(20),sex varchar(20),class_id int,constraint foreign key(class_id) references class(id));
insert into class values(1,‘ceshiban’);
insert into class values(2,‘kaifa’);
insert into student values(1,‘zhangsan’,‘nan’,1);
insert into student values(2,‘lisi’,‘nan’,2);
insert into student values(3,‘jingjing’,‘nan’,2);
子查询
select * from 表名 where 表1.id=(select 表2.id from 表2 where 表2.id=2);
多对多
一个实体的数据对应另外一个实体的多个数据,另外实体的数据也同样对应当前实体的多个数据。
一个学生可以有多个老师,一个老师可以教多个学生
解决方案:创建一个中间表,专门用来维护多表之间的对应关系,通常是能够唯一标识出数据的字段(主键)
create table teacher(id int primary key,name varchar(100));
create table student (id int primary key,name varchar(100));
create table teacher_student(teacher_id int,student_id int,constraint foreign key(teacher_id) references teacher(id),constraint foreign key(student_id) references student(id));
insert into teacher values(1,‘梁老师’);
insert into teacher values(2,‘李老师’);
insert into student values(1,”张三”);
insert into student values(2,”李四”);
insert into teacher_student values(1,1);
insert into teacher_student values(1,2);
insert into teacher_student values(2,1);
insert into teacher_student values(2,2);
查询李老师所教的学生
select id from teacher where name=’李老师’
select student_id from teacher_student where teacher_id=id
select * from student where id in(select student_id from teacher_student where teacher_id =(select id from teacher where name=‘李老师’));
查询张三的所有老师
select * from teacher where id in(select teacher_id from teacher_student where student_id=(select id from student where name=‘张三’));
内连接
内连接,inner join on 查询两张表,设定条件,将两张表中对应的数据查询出来
不会产生笛卡尔积,不会产生临时表,性能高
select * from 主表名 a innerjoin 附表名 o on a.id=o.customer_id
左外连接
left join on 设定条件,将两张表对应的数据查询出来,同时将左表自己没有关联的数据也查询出来
注意:join前面是左,后面是右
select * from student a join orders o on a.id=o.customer_id
右外连接
右外连接 right join on 设定条件,将两张表对应的数据查询出来,同时将右表自己没有关联的所有数据查询出来
select * from student a right join orders o on a.id=o.customer_id