连表查询

227 阅读2分钟

目标

练习联表查询,准备创建一个user_table,一个dog_table。查出用户和狗狗的联系。比如说袁李拥有那条狗。

创建数据库

字符集

image.png

创建数据库

手动创建

image.png

sql语句创建

create database 数据库名 charset utf8; 

创建2个表

image.png

sql语句建表

自己写的

create table user_table1 (id INT NOT NULL PRIMARY KEY  AUTO_INCREMENT, name VARCHAR(20) NOT NULL) 
charset utf8 ; 

下面navicat自己创建的

CREATE TABLE `user_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

填充数据

INSERT INTO user_table 
(name)
VALUES 
('袁李')
;

INSERT INTO user_table 
(name)
VALUES 
('袁如国')
;


INSERT INTO user_table 
(name)
VALUES 
('王盼盼')
;

INSERT INTO dog_table 
(name)
VALUES 
('小花')
;


INSERT INTO dog_table 
(name)
VALUES 
('摩斯')
;


规定:用户只能拥有一条狗 用户可以有多个狗 那么狗字段就是集合类型

-- 让你姐拥有一条狗

因为 你姐的数据已经创建了 只是 dogId 字段是空的,所以不能用insert into 因为insert into 是创建一个新的数据,新数据和你姐没关系了。 拿到你姐的数据 修改

image.png

UPDATE user_table SET dogId = 1 WHERE id = 1;

null -〉 2

增:insert into

删:delete from 表 条件

改:update 表 set 字段=xxx where

查:

查询单个表

查询

你可以不使用 * 因为* 代表所有字段,如果字段很多,你只想查个别字段,那就单独写几个字段就行了。

image.png

连表

image.png

image.png

起别名

单个表查询 对字段起别名挺好的,可以更形象。 表起别名没啥意思。根本没用到

SELECT dt.name dog_name FROM dog_table dt;

寻找联系关系

image.png

连表

jion 把2个表 联系在一起

image.png

jion

image.png

用户表3个数据。dog 表2 个数据 3 x 2 = 6

image.png

去重

去掉重复 摩斯只属于谁 小花属于谁 比如 袁如国没有小狗 那么后面狗就是空的 不能有值的。

根据条件 180 有多少人 超过190 有多人

寻找联系关系

image.png

image.png

image.png

image.png

别名改了

image.png

image.png

还是错误的 id 也是不明确的

image.png

修改后

image.png

image.png

image.png

image.png

image.png

image.png

SELECT 
user_table.id, 
user_table.name, 
user_table.dogId user_table_dogId,
dog_table.id dog_table_id,
dog_table.name dog_name
FROM user_table
 JOIN
 dog_table 
 
 WHERE user_table.dogId = dog_table.id 
 ;