数据库
首页 > 数据库> > MySql_多表查询

MySql_多表查询

作者:互联网

多表查询

查询多张表是如果出现同名的列,需要将表名标注到列名前面

非同名的列,表名可以不加,推荐加上

        可为表添加别名

        一般取首字母,特殊下取所代表的含义

        表的别名只在本次查询中生效

如果表与表进行关联查询时:不添加关联条件,查询的总记录数是a*b=笛卡尔积

多表查询的时候必须要加条件

        等值

        非等值

等值关联查询

-- 将user表与class表通过 uid 进行等值关联查询
select user.name, user.uid,class.grade,class.uid from user, class where user.uid=class.uid;

-- 添加别名
select u.name,u.uid,c.grade,c.uid from user u, class c where u.uid=c.uid;

非等值关联查询

-- 判断成绩优秀等级

SELECT * FROM classes c, leveled l WHERE c.grade BETWEEN l.low AND l.high;

表的关联条件和业务查询条件混为一起,新版本语法进行优化:

自然连接:

        自动选择列名相同并且类型相同的列

-- 92语法
select u.uname,d.dname from uuser u, cclass c where u.uid=c.uid and c.grade > 70

-- 99语法
select u.name,d.dname from uuser u natural join cclass c where c.grade > 70;

using

        可以指定等值连接的列

-- 指定uid为等值列,进行表的连接
select u.name,c.name from uuser u join cclass c using(uid) where c.grade > 70;

on

        指定两张表关联的条件,可以是非等值的操作,也可以是等值连接

-- 使用on() 进行非等值连接
select * from uuser u join llevel l on(u.uid BETWEEN l.low and l.high);

外连接

        两张表进行关联查询时,由于数据的原因,导致其中一张表中的数据无法完全查询出来

        外连接可以让没查询出来的数据也显示出来

                左外连接:显示左边表所有的数据

                右外连接:显示右边表所有的数据

-- 统计每个班级的人数

-- 左连接
select * from uuser u left join cclass c using(uid);

-- 右连接
select * from cclass c right join uuser u using(uid);

UNION / 全外连接

        1. 将多条查询语句的结果拼接在一起

        2. 将去掉重复的查询结果

        3. UNION ALL 可以显示重复的查询结果

-- 全连接
select u.name, c.name from uuser u left join cclass c using(uid);
union
select u.name, c.name from uuser u right join cclass c using(uid);

自连接

        查询的两个字段同时处于一张表上,只能将一张表当作含有不同意义的两张表处理

        给相同的表取不同的简称

-- 学生,老师都在一张表中
-- 查询每个学生的与其老师的名字及ID
select u.uid,u.name,uu.uid,uu.name from user u join user uu on(u.teach = uu.uid);

子链接

        把一个SQL语句的查询结果,作为另一个SQL语句的查询条件

        子链接往往查询结果只为一列,(多列时使用伪表)

        ALL:低于查询中的所有数据

        SOME/ANY:低于查询中的部分数据

        IN:处于查询中的数据

伪表查询

        所需要的查询条件 需要别的SQL语句提供

        需要多个查询条件,就要将所有的查询结果当作伪表进行管理

        需要把一些含有特殊符号的列名设置别名,然后给伪表设置一个别名

        

标签:等值,多表,uid,--,查询,MySql,select,name
来源: https://blog.csdn.net/Amazing_gl/article/details/120134528