目标
练习联表查询,准备创建一个user_table,一个dog_table。查出用户和狗狗的联系。比如说袁李拥有那条狗。
创建数据库
字符集
创建数据库
手动创建
sql语句创建
create database 数据库名 charset utf8;
创建2个表
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 是创建一个新的数据,新数据和你姐没关系了。 拿到你姐的数据 修改
UPDATE user_table SET dogId = 1 WHERE id = 1;
null -〉 2
增:insert into
删:delete from 表 条件
改:update 表 set 字段=xxx where
查:
查询单个表
查询
你可以不使用 * 因为* 代表所有字段,如果字段很多,你只想查个别字段,那就单独写几个字段就行了。
连表
起别名
单个表查询 对字段起别名挺好的,可以更形象。 表起别名没啥意思。根本没用到
SELECT dt.name dog_name FROM dog_table dt;
寻找联系关系
连表
jion 把2个表 联系在一起
jion
用户表3个数据。dog 表2 个数据 3 x 2 = 6
去重
去掉重复 摩斯只属于谁 小花属于谁 比如 袁如国没有小狗 那么后面狗就是空的 不能有值的。
根据条件 180 有多少人 超过190 有多人
寻找联系关系
别名改了
还是错误的 id 也是不明确的
修改后
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
;