文章目录
- 前言
- 一、建立表
- 二、多表查询
- 1.内连接
- 查询当前用户喜欢的音乐(即同一user_id下在lovemusic中又在music中的音乐)
- 隐式内连接
- 显示内连接
- 2.外连接
- 左(外)连接
- 右(外)连接
- 三、联合查询
- 四、子查询
- 总结
前言
很多时候,一个项目会有很多张表,类似于淘宝商城中购物时用户信息表、商品信息表、购物车表等等 需要建立很多表,在对这些表操作过程中用简单的单表查询是不够的,往往需要两个或者多个相关联的表结合查询
一、建立表
以两张表的操作为例,先建立两张表
音乐表(music) | 喜欢的音乐表(lovemusic) |
id | id |
title | music_id |
singer | user_id |
userId | — |
二、多表查询
1.内连接
查询当前用户喜欢的音乐(即同一user_id下在lovemusic中又在music中的音乐)
隐式内连接
代码如下(示例):
select m.id ,title,singer from lovemusic lm, music m where lm.music_id=m.id and user_id = ?
然后?传入想查询的用户id就可以
显示内连接
select m.id ,title,singer from lovemusic lm inner join music m on lm.music_id=m.id and user_id = ?
2.外连接
左(外)连接
代码如下(示例):
select * from lovemusic lm left outer join music m on lm.user_id=m.userId
显示左表lovemusic中的所有行,并把右表music中符合条件加到左表lovemusic中;右表music中不符合条件,就不用加入结果表中,并且NULL表示。
右(外)连接
代码如下(示例):
select * from lovemusic lm right outer join music m on lm.user_id=m.userId
显示右表music中的所有行,并把左表lovemusic中符合条件加到右表music中;右表lovemusic中不符合条件,就不用加入结果表中,并且NULL表示。
三、联合查询
select 查询列表 from 表1 where 筛选条件 union select 查询列表 from 表2 where 筛选条件
union可加distinct关键字去重(默认),也可加All关键字 表示不去重
四、子查询
select e.title ,e.singer from (select * from music where userId > 5) e
子查询就是相当于嵌套查询,一个表查完之后的结果在进行查询
总结
内连接相当于两个表的交集,左连接相当于左表加上两个表的交集,右连接相当于右表加上两个表的交集,内连接应该使用频率较高,还有一个交叉连接即查询两个(多个)表的笛卡儿积,用的很少,查询数据太多容易损坏服务器。