SQL多表查询

简介:

 

情况一:

我们现在两个表,一个学生Student表,一个性别Gender表。Student : id name gender 。Gender :: key value

 

有如下值:

Student :

001 xy 1

002 xyy 1

003 小红 0

 

Gender

0 女

1 男

2 其他

 

那么我们先看一个表 Student,我要查找性别为男的学生

select  id,name,gender from Student where gender = '1';

 

那我们多表查询,找到男学生,性别显示不再是0,1,2 而是汉字

select s.id,s.name,g,value

from Student s,Gender g

where s.gender = '1'

and g.key = s.gender (正确)// 两条记录

 

看到了吗?我们不仅要写s.gender = '1' 还要写g.key = s.gender。也就是不仅要判断值等于什么,而且要写出关联字段的相等关系。

 

select s.id,s.name,g,value

from Student s,Gender g

where s.gender = '1' (错误)// 2*3 = 6条记录 2个男学生*3个性别表记录(笛卡儿积)

 

 

 

select s.id,s.name,g,value

from Student s,Gender g

whereg.key = s.gender (错误)// 3条记录,3个学生,不分性别

 

 

情况二:

 

我们现在两个表,一个学生Student表,一个参数CS表。Student : id name gender , status。CS :: key value name

 

有如下值:

Student :

001 xy 1      0

002 xy 1      0

003 xh 0      0

 

CS

gender   0    女

gender   1    男

gender   2   其他

status     0   在校

status     1   离校

 

我现在要 取出姓名,性别,在校状态。

select s.name,xb.mc,zt.mc

from  Student s,

(select key value name from CS where key = 'gender') xb,

(select key value name from CS where key = 'status') zt

where s.gender = xb.value

and s.status = zt.value;

 

这就不能向情况一中一样简单的两表关联了。你不可能CS.key又等于gender又等于status吧。

 

 

目录
相关文章
|
4天前
|
SQL 关系型数据库 MySQL
六、SQL多表查询
六、SQL多表查询
31 0
|
7月前
|
SQL XML Java
Mybatis:SQL注入问题 like模糊查询 多表查询 动态SQL
Mybatis:SQL注入问题 like模糊查询 多表查询 动态SQL
105 0
|
4天前
|
SQL
SQL多表查询的几种连接方式
SQL多表查询时,主要使用以下几种连接方式
|
8月前
|
SQL 关系型数据库 MySQL
SQL99语法实现多表查询
SQL99语法实现多表查询
44 0
|
4天前
|
SQL
SQL语句多表查询练习
SQL语句多表查询练习
13 0
|
7月前
|
SQL
一条集多表查询、字段与字段拼接、合并每张表共同字段、新增列并赋值的SQL
一条集多表查询、字段与字段拼接、合并每张表共同字段、新增列并赋值的SQL
29 0
|
11月前
|
SQL Oracle 关系型数据库
[SQL Server]数据库入门之多表查询
[SQL Server]数据库入门之多表查询
164 0
|
12月前
|
SQL
SQL语句多表查询练习
SQL语句多表查询练习
|
SQL 关系型数据库 MySQL
软件测试最常用的 SQL 命令(二) | 高级 Join 多表查询
软件测试最常用的 SQL 命令(二) | 高级 Join 多表查询
84 0
|
SQL Java 关系型数据库
MyBatis【多表查询与动态SQL使用】
MyBatis【多表查询与动态SQL使用】
MyBatis【多表查询与动态SQL使用】