1.内连接查询
在实际项目中,往往会联合多个表进行查询,比如 班级表和学生表联合起来就可以看到班级,老师 和学员的信息。

班级ID

名称

班主任

1

一班

小红

2

二班

小明

3

三班

小刚

一个班级对应多个学生 ,下面是与之对应的学生表:

ID

姓名

班级ID

性别

101

翠花

1

W

102

熊大

1

M

103

光头强

2

M

104

熊二

3

M

将两个表相同的ID记录联合起来组成一个新表 这就是联合查询

班级ID

名称

班主任

ID

姓名

班级ID

性别

1

一班

小红

101

翠花

1

W

1

一班

小红

102

熊大

1

M

2

二班

小明

103

光头强

2

M

3

三班

小刚

104

熊二

3

M

只有两张表中靠匹配的行才能显示的连接方式在MySQL中成为内连接:INNER JOIN
创造表1:
CREATE TABLE class(id int NOT NULL AUTO_INCREMENT,
name varchar(128) DEFAULT NULL,
teacher varchar(64) DEFAULT NULL,
UNIQUE KEY _id(id));

创造表2:

CREATE TABLE student(

id int NOT NULL AUTO_INCREMENT UNIQUE,

Name varchar(64)DEFAULT NULL,

Class_id int DEFAULT NULL,

Sex ENUM(‘F’,‘M’) DEFAULT NULL

);

语法如下:

mysql根据班级统计人数 mysql查询班级_mysql


2:内连接查询中存在一种特殊的等值连接–连接的表是自身

比如查找和熊大在一个班级的人

select * from student s1 inner join student s2 on s1.class_id=s2.class_id and s2.name!=‘熊大’;

注意这里已经把as省略

mysql根据班级统计人数 mysql查询班级_mysql根据班级统计人数_02

3:外连接的语法:

select * from tablename1 (as)a left(right) join on tablename2 (as) b on CONDITION;

下面是例子:依次用两个表进行左右连接:

mysql根据班级统计人数 mysql查询班级_查询语句_03

mysql根据班级统计人数 mysql查询班级_mysql_04


上面例子可以得出结论 做左连接的表里面的内容会被全部展现出来 对应另一张表中没有的内容会被用NULL显示出

4:合并查询数据记录
在Mysql中通过关键字UNION来实现操作 将多个select语句查询结果合并在一起 组成新的关系 语法如下:
select field1,field2…,field FROM tablename1 union|union all
select field1,field2…,field FROM tablename2 (union|union all)
5:子查询
所谓子查询 是指在一个查询中嵌套了其他查询 ,即在一个select查询语句的where或from子句中包含另一个select
查询语句,在查询语句中,外层的select语句被称为主查询 where子句的select查询语句被称为子查询 也称为嵌套查询

**例子:**找到熊大的班主任

mysql根据班级统计人数 mysql查询班级_mysql根据班级统计人数_05


id= 后面的语句称为子查询语句

注意: 使用比较运算符时 select 自居获得的记录数不能大于1条

子查询中容易搞混的几个关键字:

*************************************************带EXISTS的子查询

EXISTS表示存在 后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一杠 那么EXISTS的结果为true 此时外层语句进行查询 如果子查询没有任何行,那么EXISTS返回的结果是FALSE,此时外层语句不查询:例子: 如果四班存在学生记录 就查询4版的班级信息记录,

mysql根据班级统计人数 mysql查询班级_子查询_06

这里四班没有同学 EXISTS返回FALSE 所以主语句不查询

mysql根据班级统计人数 mysql查询班级_mysql_07


把子查询语句里面的句子设置为3班的 EXISTS返回TRUE

主语句查询并把结果返回出来

*******************************************************带any的子查询

any表示满足子查询语句中的任意一条 就可以把相关的子查询语句列出来

先创造一个奖学金的等级表

mysql根据班级统计人数 mysql查询班级_子查询_08


再创造一个学生成绩表

mysql根据班级统计人数 mysql查询班级_mysql根据班级统计人数_09


例子如下:挑出学生中获得奖学金的名额 只需要大于子查询中的任意一条即可

mysql根据班级统计人数 mysql查询班级_mysql根据班级统计人数_10

*****************************************************带all的子查询

例子如下:挑出学生中获得奖学金的名额 必须需要大于子查询中的任何一条:

mysql根据班级统计人数 mysql查询班级_连接查询_11


如上获得一等奖的只有光头强一人


【骑牛学院】