单表查询:如何从数据库中获取你需要的数据
多表查询:实际开发中,需要进行2张表以上进行操作
2-1-1.单表查询
//建立表studentcreate table student(id int not null auto_increment,name varchar(20) not null,grade float,primary key(id));//插入数据insert into student (name,grade) values("howie1",40),("howie1",50),("howie2",50),("howie3",60),("howie4",70),("howie5",80),("howie6",null);//查询全部select * from student;//查询某个字段select name from student;//条件查询,查询id=2学生的信息select * from student where id=2;//in关键字查询,也可以使用not inselect * from student where id IN(1,2,3);//between and关键字查询select * from student where id between 2 and 5;//空值(NULL)查询,使用IS NULL来判断select * from student where grade is null;//distinct关键字查询select distinct name from student;//like关键字查询,查询以h开头,e结尾的数据select * from student where name like "h%e";//and关键字多条件查询,or关键字的使用也是类似select * from student where id>5 and grade>60;
2-1-2.高级查询
//聚合函数//count()函数,sum()函数,avg()函数,max()函数,min()函数select count(*) from student;select sum(grade) from student;select avg(grade) from student;select max(grade) from student;select min(grade) from student;//对查询结果进行排序select * from student order by grade;//分组查询//1.单独使用group by分组select * from student group by grade;//2.和聚合函数一起使用select count(*),grade from student group by grade;//3.和having关键字一起使用select sum(grade),name from student group by grade having sum(grade) >100;//使用limit限制查询结果的数量select * from student limit 5;select * from student limit 2,2;select * from student order by grade desc limit 2,2;//函数,mysql提供了许多函数select concat(id,':',name,':',grade) from student;//为表取别名select * from student as stu where stu.name="howie";//为字段取别名,as关键字也可以不写select name as stu_name,grade stu_grade from student;
2-2.多表操作
1.了解外键
2.了解关联关系
3.了解各种连接查询多表的数据
4.了解子查询,会使用各种关键字以及比较运算符查询多表中的数据
2-2-1.外键
外键是指引用另一个表中的一列或者多列,被引用的列应该具有主键约束或者唯一性约束,用于建立和加强两个数据表之间的连接。
//创建表class,studentcreate table class(id int not null primary key,classname varchar(20) not null)ENGINE=InnoDB;create table student(stu_id int not null primary key,stu_name varchar(20) not null,cid int not null -- 表示班级id,它就是class表的外键)ENGINE=InnoDB;//添加外键约束alter table student add constraint FK_ID foreign key(cid) references class(id);//删除外键约束alter table student drop foreign key FK_ID;
2-2-2.操作关联表
//数据表有三种关联关系,多对一、多对多、一对一//学生(student)和班级(class)是多对一关系,添加数据//首选添加外键约束alter table student add constraint FK_ID foreign key(cid) references class(id);//添加数据,这两个表便有了关联若插入中文在终端显示空白,可设置set names 'gbk';insert into class values(1,"软件一班"),(2,"软件二班");insert into student values(1,"howie",1),(2,"howie1",2),(3,"howie2",1),(4,"howie3",2);//交叉连接select * from student cross join class;//内连接,该功能也可以使用where语句实现select student.stu_name,class.classname from student join class on class.id=student.cid;//外连接//首先在student,class表中插入数据insert into class values(3,"软件三班");//左连接,右连接select s.stu_id,s.stu_name,c.classname from student s left join class c on c.id=s.cid;select s.stu_id,s.stu_name,c.classname from student s right join class c on c.id=s.cid;//复合条件连接查询就是添加过滤条件//子查询//in关键字子查询跟上面的in关键字查询类似select * from student where cid in(select id from class where id=2);//exists关键字查询,相当于测试,不产生数据,只返回true或者false,只有返回true,外层才会执行,具体看下图select * from student where exists(select id from class where id=12); -- 外层不会执行select * from student where exists(select id from class where id=1); -- 外层会执行//any关键字查询select * from student where cid>any(select id from class);//all关键字查询select * from student where cid=any(select id from class);
