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
);
语法如下:
2:内连接查询中存在一种特殊的等值连接–连接的表是自身
比如查找和熊大在一个班级的人
select * from student s1 inner join student s2 on s1.class_id=s2.class_id and s2.name!=‘熊大’;
注意这里已经把as省略
3:外连接的语法:
select * from tablename1 (as)a left(right) join on tablename2 (as) b on CONDITION;
下面是例子:依次用两个表进行左右连接:
上面例子可以得出结论 做左连接的表里面的内容会被全部展现出来 对应另一张表中没有的内容会被用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查询语句被称为子查询 也称为嵌套查询
**例子:**找到熊大的班主任
id= 后面的语句称为子查询语句
注意: 使用比较运算符时 select 自居获得的记录数不能大于1条
子查询中容易搞混的几个关键字:
*************************************************带EXISTS的子查询
EXISTS表示存在 后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一杠 那么EXISTS的结果为true 此时外层语句进行查询 如果子查询没有任何行,那么EXISTS返回的结果是FALSE,此时外层语句不查询:例子: 如果四班存在学生记录 就查询4版的班级信息记录,
这里四班没有同学 EXISTS返回FALSE 所以主语句不查询
把子查询语句里面的句子设置为3班的 EXISTS返回TRUE
主语句查询并把结果返回出来
*******************************************************带any的子查询
any表示满足子查询语句中的任意一条 就可以把相关的子查询语句列出来
先创造一个奖学金的等级表
再创造一个学生成绩表
例子如下:挑出学生中获得奖学金的名额 只需要大于子查询中的任意一条即可
*****************************************************带all的子查询
例子如下:挑出学生中获得奖学金的名额 必须需要大于子查询中的任何一条:
、
如上获得一等奖的只有光头强一人
【骑牛学院】