三.DQL多表查询
我们在查询表格的过程中,往往需要将 多个表组合使用,并且要实现多个表之间的数据查询,例如:查询学生成绩,需要将学生表和成绩表连接起来,查询满足的条件的数据,这个时候就需要用到多表查询;
1.测试数据表的创建
创建学生,班级,教师的关系表:
use db_2; -- 教师表; create table teacher( t_id int primary key auto_increment, t_name varchar(20) not null, t_sex varchar(4), t_age int ); -- 班级表; create table class( c_id int primary key auto_increment, c_name varchar(20) not null, c_tid int, c_stunum int default 0, constraint for_CT foreign key(c_tid) references teacher (t_id) ); -- 学生表 create table student( s_id int primary key auto_increment, s_name varchar(20) not null, s_cid int, s_sex varchar(4), s_age int, constraint for_SC foreign key (s_cid) references class(c_id) ); 后面进行数据的插入,读者根据自己的想法进行数据插入;
2.交叉连接
交叉连接是基本的多表连接查询。
不带where条件子句的交叉连接,将会产生连接表的笛卡尔积,返回结果集的行数等于参与连接的表的行数的积。
带where的条件子句的交叉连接,往往会产生两个或者多个表行数乘积的笛卡尔级数据表,然后才根据where后的条件约束挑选相匹配的数据。
交叉连接的基本格式:
select <表名1.属性名1>,<表名1.属性名2>·······from <表名2.属性名1>,<表名2.属性名2>
交叉连接会产生笛卡尔积,再进行条件筛选,效率比较慢,将连接表格的所有元组都互相匹配一次,产生一个包含所有情况的大表
;
3.内连接
交叉连接产生的笛卡尔积会进行额外的判断和比较,如果要查询较多的数据,交叉连接查询的效率相当低下,所以有了一个高效率的查询;
内连接的图示:
内连接的关键字:inner join
基本格式:
select [表名1.属性名1,表名2.属性名2,表名n.属性名n······] from [数据库名.表名1]inner join [数据库名.表名2] on 连接条件
例如:
内连接时先筛选满足条件的数据,然后再进行连接,避免了很多不必要的冲突,极大的增加了效率。
4.外连接
①.左外连接
左连接是以左表为基准,显示左表查询字段的所有记录,没有匹配的用null代替。
关键字:left join
②.右外连接
右连接是以右表为基准,左表只是记录,没有匹配的用null代替。
关键字:right join
左右连接的表是可以互换的,也就是可以相互的替换。
③.全外连接
全外连接左右表不被限制,显示全部数据,没有匹配的数据用null代替;
关键字:full join
select student.s_name,student.s_id,class.c_name from student full join class where student.s_cid=class.c_id;
5.多表连接查询
一般来说,我们在使用多表查询的时候,最好不要超过4个,如果超过4个,很有可能是数据表的设置有问题。
二.力扣题目讲解
点击此处题目直达
1.基础查询
①.查询所有列
题目解答答案:SELECT id,device_id,gender,age,university,province from user_profile;
②.查询多列
题目解答答案:SELECT device_id,gender,age,university from user_profile;
简单处理查询结果
①.查询结果去重
我们在去重的时候可以用关键字 distinct,使用该关键字就可以去重,如图中的第一句。
当然也可以使用分组查询来进行去重。第二句就是使用分组查询进行的去重,两句答案都可以通过。
②.查询结果限制返回查询结果
使用分页查询可以获得不同范围类的数据;
答案再现:select device_id from user_profile limit 0,2;
③.将查询后的结果重新命名
利用关键字as给查询的结果起一个别名;
答案再现:select device_id as user_infos_example from user_profile limit 0,2;
三.条件查询
①.查找学校是北大的学生信息
使用关键字where就可以进行条件查询;
答案:select device_id,university from user_profile where university="北京大学";
②.查找后排序
使用关键字order by进行排序,如果是降序,就在后面加一个desc;
③.操作符的混合使用
答案:select device_id,gender,age,university,gpa from user_profile where (gpa>3.5 and university="山东大学") or (gpa>3.8 and university="复旦大学");
这里的题目我选择了一部分讲解,其余的后面学到了会继续讲解,如果有不会的,可以私聊博主,我会尽快为你解答的。
总结
本节我们学习了DQL数据查询语言,无论是单表查询,还是多表查询,都是非常重要的知识,后面也讲解了部分力扣网站上的题目,只是选择几个比较有价值的讲解了的,如果想要彻底掌握,还是要多刷题,以及多想。不要怕不会做,如有不会可以私聊博主,博主会尽快为你解答。祝各位小伙伴学有所成。