MySQL基础之数据管理【3】
MySQL中的多表联查
--查询emp的id username age depName
create table emp(
id int unsigned auto_increment key,
username varchar(20) not null unique comment '编号',
age tinyint unsigned not null default 18 comment '年龄',
sex enum('男','女','保密') not null default '保密' comment '性别',
addr varchar(20) not null default '北京',
depId tinyint unsigned not null comment '部门对应的编号'
)engine=innodb charset=utf8;
insert emp(username,age,depId) values('king',24,1),
('queen',25,2),
('imooc',26,1),
('lily',27,1),
('rose',28,3),
('john',29,3);
create table dep(
id tinyint unsigned auto_increment key,
depName varchar(50) not null unique,
depDesc varchar(100) not null
)engine=innodb charset=utf8;
insert dep(depName,depDesc) values('PHP教学部','研发PHP课件'),
('JAVA教学部','研发JAVA课件'),
('WEB教学部','研发WEB课件'),
('IOS教学部','研发IOS课件');
笛卡尔积的形式(不常用)
select emp.id,emp.username,emp.age,dep.depName from emp,dep;
--显示
+----+----------+-----+------------+
| id | username | age | depName |
+----+----------+-----+------------+
| 1 | king | 24 | IOS教学部 |
| 1 | king | 24 | JAVA教学部 |
| 1 | king | 24 | PHP教学部 |
| 1 | king | 24 | WEB教学部 |
| 2 | queen | 25 | IOS教学部 |
| 2 | queen | 25 | JAVA教学部 |
| 2 | queen | 25 | PHP教学部 |
| 2 | queen | 25 | WEB教学部 |
| 3 | imooc | 26 | IOS教学部 |
| 3 | imooc | 26 | JAVA教学部 |
| 3 | imooc | 26 | PHP教学部 |
| 3 | imooc | 26 | WEB教学部 |
| 4 | lily | 27 | IOS教学部 |
| 4 | lily | 27 | JAVA教学部 |
| 4 | lily | 27 | PHP教学部 |
| 4 | lily | 27 | WEB教学部 |
| 5 | rose | 28 | IOS教学部 |
| 5 | rose | 28 | JAVA教学部 |
| 5 | rose | 28 | PHP教学部 |
| 5 | rose | 28 | WEB教学部 |
| 6 | john | 29 | IOS教学部 |
| 6 | john | 29 | JAVA教学部 |
| 6 | john | 29 | PHP教学部 |
| 6 | john | 29 | WEB教学部 |
+----+----------+-----+------------+
内连接的形式(查询两个表中符合连接条件的记录)
--select 字段名称,... from tbl_name1 [inner] join tbl_name2 on 连接条件;
select e.id,e.username,e.age,d.depName
from emp as e
inner join dep as d
on e.depId=d.id;
--显示
+----+----------+-----+------------+
| id | username | age | depName |
+----+----------+-----+------------+
| 1 | king | 24 | PHP教学部 |
| 2 | queen | 25 | JAVA教学部 |
| 3 | imooc | 26 | PHP教学部 |
| 4 | lily | 27 | PHP教学部 |
| 5 | rose | 28 | WEB教学部 |
| 6 | john | 29 | WEB教学部 |
+----+----------+-----+------------+
外连接的形式
--左外连接(select 字段名称,... from tbl_name1 left [outer] join tbl_name2 on 条件;)
--先显示左表中的全部记录,再去右表中查询符合条件的记录,不符合的以null代替
select e.id,e.username,e.age,d.depName,d.depDesc
from emp as e
left outer join dep as d
on e.depId=d.id;
--显示
+----+----------+-----+------------+--------------+
| id | username | age | depName | depDesc |
+----+----------+-----+------------+--------------+
| 1 | king | 24 | PHP教学部 | 研发PHP课件 |
| 2 | queen | 25 | JAVA教学部 | 研发JAVA课件 |
| 3 | imooc | 26 | PHP教学部 | 研发PHP课件 |
| 4 | lily | 27 | PHP教学部 | 研发PHP课件 |
| 5 | rose | 28 | WEB教学部 | 研发WEB课件 |
| 6 | john | 29 | WEB教学部 | 研发WEB课件 |
+----+----------+-----+------------+--------------+
--右外连接(select 字段名称,... from tbl_name1 right [outer] join tbl_name2 on 条件;)
--先显示右表中的全部记录,再去左表中查询符合条件的记录,不符合的以null代替
select e.id,e.username,e.age,d.depName
from emp as e
right outer join dep as d
on e.depId=d.id;
--显示
+------+----------+------+------------+
| id | username | age | depName |
+------+----------+------+------------+
| 1 | king | 24 | PHP教学部 |
| 2 | queen | 25 | JAVA教学部 |
| 3 | imooc | 26 | PHP教学部 |
| 4 | lily | 27 | PHP教学部 |
| 5 | rose | 28 | WEB教学部 |
| 6 | john | 29 | WEB教学部 |
| NULL | NULL | NULL | IOS教学部 |
+------+----------+------+------------+
多表联查的操作
create table user(
id tinyint unsigned auto_increment key comment '编号',
username varchar(20) not null unique comment '用户名',
email varchar(50) not null default '2214@qq.com' comment '邮箱',
proId tinyint unsigned not null comment '用户所在省份的编号'
)engine=innodb charset=utf8;
insert user(username,proId) values('a','1'),
('b','1'),
('c','1'),
('d','2'),
('e','3'),
('f','1'),
('g','1');
create table pro(
id tinyint unsigned auto_increment key comment '编号',
proName varchar(10) not null unique comment '省份名称'
)engine=innodb charset=utf8;
insert pro(proName) values('北京'),('上海'),('深圳');
--查询user: id,username pro: proName
select u.id,u.username,p.proName
from user as u
join pro as p
on u.proId=p.id;
--显示
+----+----------+---------+
| id | username | proName |
+----+----------+---------+
| 1 | a | 北京 |
| 2 | b | 北京 |
| 3 | c | 北京 |
| 4 | d | 上海 |
| 5 | e | 深圳 |
| 6 | f | 北京 |
| 7 | g | 北京 |
+----+----------+---------+
--修改北京为首都
update pro set proName='首都' where id=1;
--显示
+----+----------+---------+
| id | username | proName |
+----+----------+---------+
| 1 | a | 首都 |
| 2 | b | 首都 |
| 3 | c | 首都 |
| 4 | d | 上海 |
| 5 | e | 深圳 |
| 6 | f | 首都 |
| 7 | g | 首都 |
+----+----------+---------+
四个表关联的查询
create table pro2(
id tinyint unsigned not null auto_increment key comment '编号',
proName varchar(10) not null unique comment '省份名称'
)engine=innodb charset=utf8;
insert pro2(proName) values('北京'),('上海'),('深圳');
create table admin(
id tinyint unsigned auto_increment key comment '编号',
username varchar(20) not null unique comment '用户名',
email varchar(50) not null default '24235@qq.com' comment '邮箱',
proId tinyint unsigned not null comment '用户所在省份的编号'
)engine=innodb charset=utf8;
insert admin(username,proId) values('king',1),('queen',2);
create table cate(
id tinyint unsigned auto_increment key comment '编号',
cateName varchar(50) unique comment '商品分类名称',
cateDesc varchar(100) not null default '好东西' comment '商品分类描述'
)engine=innodb charset=utf8;
insert cate(cateName) values('母婴'),('服装'),('电子');
create table product(
id int unsigned auto_increment key comment '编号',
productName varchar(50) not null unique comment '商品名称',
price float(8,2) not null default '12' comment '价格',
cateId tinyint unsigned not null comment '商品所在分类的编号',
adminId tinyint unsigned not null comment '管理员编号'
)engine=innodb charset=utf8;
insert product(productName,price,cateId,adminId) values('iphone9',9888,3,1),
('adidas',388,2,2),
('nike',888,2,2),
('奶瓶',288,1,1);
--查询product:id productName price cate:catename(两个表)
select p.id,p.productName,p.price,c.cateName
from product as p
join cate as c
on p.cateId=c.id;
--查询管理员 id username email pro:proName(两个表)
select a.id,a.username,a.email,p.proName
from admin as a
join pro2 as p
on a.proId=p.id;
--查询product:id productName price
--cate:cateName
--admin:username email
--pro2:proName(四表查询)
select p.id,p.productName,p.price,c.cateName,a.username,a.email,pr.proName
from product as p
join admin as a
on p.adminId=a.id
join cate as c
on p.cateId=c.id
join pro2 as pr
on a.proId=pr.Id
where p.price<1000
order by p.price desc
limit 0,2;
--显示
+----+-------------+--------+----------+----------+--------------+---------+
| id | productName | price | cateName | username | email | proName |
+----+-------------+--------+----------+----------+--------------+---------+
| 3 | nike | 888.00 | 服装 | queen | 24235@qq.com | 上海 |
| 2 | adidas | 388.00 | 服装 | queen | 24235@qq.com | 上海 |
+----+-------------+--------+----------+----------+--------------+---------+
MySQL基础之数据管理【3】的更多相关文章
- MySQL基础之数据管理【4】
外键约束的使用(只有InnoDB存储引擎支持外键) create table news_cate( id tinyint unsigned auto_increment key comment '编号 ...
- MySQL基础之数据管理【5】
子查询的使用 select 字段名称 from tbl_name where col_name=(select col_name from tbl_name); --内层语句查询的结果可以作为外层语句 ...
- MySQL基础之数据管理【2】
where条件筛选记录 select id,username,age from uesr where id=5; alter table user add userDesc varchar(100); ...
- MySQL基础之数据管理【1】
添加记录 insert [into] tbl_name[(col_name,...)] {value|values}(values...); --不指定字段名称时需要按照建表时的字段顺序给每一个字段赋 ...
- MySQL基础----py全栈
目录 MySQL基础----py全栈 一.引言 1.什么是数据? 2.什么是数据库(DB)? 3.什么是数据库管理系统(DBMS)? 4.什么是数据库系统? 5.数据库管理系统由来 6.什么是数据模型 ...
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- 【夯实Mysql基础】记一次mysql语句的优化过程
1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...
- MySQL基础(非常全)
MySQL基础 一.MySQL概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access ...
随机推荐
- C#基本语法<二>_线程
线程 多线程和异步函数 当异步线程在工作完成时如何通知调用线程 当异步线程出现异常的时候该如何处理 异步线程工作的进度如何实时的通知调用线程 如何在调用线程中取消正在工作的异步线程,并进行回滚操作 异 ...
- Servlet、Jsp
一.Servlet 1.什么是Servlet? (1)由sun公司(被oracle公司收购)制定的一种用来扩展web服务器功能的组件规范.简单的讲就是一种用来开发动态Web的技术. 扩展web服务器功 ...
- JS 简介
JS 简介 JavaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. avaScript 是脚本语言 J ...
- Android ndk 加载简单的gif 图像
首先获取一个安卓权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> ...
- 通过官网模板轻松实现Grafana的可视化界面配置(以MySQL监控项为例)
我们知道可视化是监控的一个重要环节,所以往往我们这个环节花费大量的时间和精力.可是如果可以借鉴前辈的经验和成果,可以事半功倍.Grafana 有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编 ...
- Linux自动同步时间
一.安装时间同步工具 yum -y install ntp 二.同步时间 1.修改时区 cp -y /usr/share/zoneinfo/Asia/Shanghai /etc/localtime v ...
- Windows 10 任务栏添加网易云音乐控制按钮
软件背景: 算是老帖新发,之前有朋友分享过一个很好用的工具,但可能是因为网易云软件更新后,导致控件失灵了,只剩下歌词控件有用了,所以今天用python重新写了一个小工具,发出来分享给大家,附上之前 ...
- 9. java API使用 - Scanner类
一.API概述和使用 1. 概述 API(应用程序编程接口).Java API是一本程序员字典,是JDK提供给我们使用的类的说明文档.这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实 ...
- 新手springmvc web简单搭建过程-caidachun
第一次做整了一天,中间各种报错,大佬肯定要嘲笑我了,但还是很有成就敢,现在只知道怎么装配,还不知道为什么,还需要学习.加油 1.新建动态web项目 2. 添加jar包,可以到网上下载,commons- ...
- Day5- Python基础5 模块导入、time、datetime、random、os、sys、hashlib、json&pickle
本节目录: 1.模块的分类 2.模块的导入 3.time模块 4.datetime模块 5.random 6.os模块 7.sys模块 8.hashlib 9.json&pickle 一.模块 ...