文章目录

  • 前言
  • 一、建立表
  • 二、多表查询
  • 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

子查询就是相当于嵌套查询,一个表查完之后的结果在进行查询

总结

内连接相当于两个表的交集,左连接相当于左表加上两个表的交集,右连接相当于右表加上两个表的交集,内连接应该使用频率较高,还有一个交叉连接即查询两个(多个)表的笛卡儿积,用的很少,查询数据太多容易损坏服务器。