MySQL-6-多表操作

news/2024/10/30 23:24:07/

一、复制表

  • 格式
create table 表名 select查询语句
  • 注意:复制成新表时,键值(pri,index等等)索引不会同步复制
  • 案例
mysql> create table t2 select name,sex,age from user;

二、多表查询

2.1、 多表查询–>连接查询

  • 将2个或2个以上的表按某个条件连接起来,从中选取需要的数据,表中包含某种相同意义的字段

  • 交叉连接(交叉查询)如果查询不加where条件,则结果被称为笛卡尔集

  • 自然连接(自己连自己)没啥意义

  • 内连接:

  • 外连接(使用的比较多,查表中重复的数值),外连接又分为:左连接和右连接

  • 内外连接详解

2.2、交叉查询

  • 交叉查询格式1:
select 字段名列表 from 表a,表b;
  • 交叉查询格式2:
select 字段名列表 from 表a,表b where 条件
  • 不加where时查询结果叫笛卡尔积(查询结果总条目数=表a的记录数*表b的记录数)

2.3、外连接:左连接,右连接

  • 左连接:当条件成立时,以左表为主显示查询结果(当条件成立,将左表记录显示出来)
  • on 匹配条件必须加
格式:select 字段名列表 from 表1 left join 表2 on 条件; 	# 表1为左表
  • 右连接:当条件成立时,已右表为主显示查询结果(条件成立时显示右表的信息,如果左表没有匹配则显示null)
格式:select 字段名列表 from 表1 right join 表2 on 条件;

2.4、内连接

  • 隐式内连接:select * from a,b where 条件;
  • 显示内连接:select * from a inner join b on 条件;
  • 与外连接类似(输出不同表的重复值)

2.5、where嵌套查询–>又叫where子查询

  • 把内层的查询结果作为外层的查询条件,类似:ps aux |grep http
  • 可以是同库同表,可以是不同库不同表
  • 格式
select 字段名列表 from 表 where 条件(select 内层查询)
  • 案例:查询表格中薪资大于平均薪资的人姓名
mysql> select name,pay from user where pay > (select avg(pay) from user);

2.6、案例:

  • 多表查询案例-交叉查询1(笛卡尔集)
mysql> desc t5;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(20) | NO   |     | NULL    |       |
| uid   | int(2)   | YES  |     | NULL    |       |
| shell | char(50) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)mysql> desc t6;
+---------+----------+------+-----+---------+-------+
| Field   | Type     | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| name    | char(20) | NO   |     | NULL    |       |
| uid     | int(2)   | YES  |     | NULL    |       |
| gid     | int(2)   | YES  |     | NULL    |       |
| homedir | char(50) | YES  |     | NULL    |       |
+---------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> select * from t5,t6;
+------+------+---------------+------+------+------+----------------+
| name | uid  | shell         | name | uid  | gid  | homedir        |
+------+------+---------------+------+------+------+----------------+
| bin  |    1 | /sbin/nologin | bin  |    1 |    1 | /sbin/nologin  |
| adm  |    3 | /sbin/nologin | bin  |    1 |    1 | /sbin/nologin  |
| bin  |    1 | /sbin/nologin | adm  |    3 |    4 | /var/adm       |
| adm  |    3 | /sbin/nologin | adm  |    3 |    4 | /var/adm       |
| bin  |    1 | /sbin/nologin | lp   |    4 |    7 | /var/spool/lpd |
| adm  |    3 | /sbin/nologin | lp   |    4 |    7 | /var/spool/lpd |
| bin  |    1 | /sbin/nologin | sync |    5 |    0 | /sbin/nologin  |
| adm  |    3 | /sbin/nologin | sync |    5 |    0 | /sbin/nologin  |
+------+------+---------------+------+------+------+----------------+
8 rows in set (0.00 sec)
  • 交叉查询2
mysql> select t6.*,t5.shell from t5,t6 where t5.uid=t6.uid;
+------+------+------+---------------+---------------+
| name | uid  | gid  | homedir       | shell         |
+------+------+------+---------------+---------------+
| bin  |    1 |    1 | /sbin/nologin | /sbin/nologin |
| adm  |    3 |    4 | /var/adm      | /sbin/nologin |
+------+------+------+---------------+---------------+
2 rows in set (0.00 sec)
  • 外连接查询案例1:两表中显示显示重复的值
mysql> select * from t7;
+----------+------+----------------+
| name     | uid  | shell          |
+----------+------+----------------+
| bin      |    1 | /sbin/nologin  |
| adm      |    3 | /sbin/nologin  |
| lp       |    4 | /sbin/nologin  |
| sync     |    5 | /bin/sync      |
| shutdown |    6 | /sbin/shutdown |
+----------+------+----------------+
5 rows in set (0.00 sec)mysql> select * from t8;
+----------+------+----------------+
| name     | uid  | shell          |
+----------+------+----------------+
| bin      |    1 | /sbin/nologin  |
| adm      |    3 | /sbin/nologin  |
| lp       |    4 | /sbin/nologin  |
| sync     |    5 | /bin/sync      |
| shutdown |    6 | /sbin/shutdown |
| halt     |    7 | /sbin/halt     |
| mail     |    8 | /sbin/nologin  |
| operator |   11 | /sbin/nologin  |
+----------+------+----------------+
8 rows in set (0.00 sec)
  • 以左连接查询显示两表中重复的数值1
mysql> select  * from t7 left join t8 on t7.uid=t8.uid;
+----------+------+----------------+----------+------+----------------+
| name     | uid  | shell          | name     | uid  | shell          |
+----------+------+----------------+----------+------+----------------+
| bin      |    1 | /sbin/nologin  | bin      |    1 | /sbin/nologin  |
| adm      |    3 | /sbin/nologin  | adm      |    3 | /sbin/nologin  |
| lp       |    4 | /sbin/nologin  | lp       |    4 | /sbin/nologin  |
| sync     |    5 | /bin/sync      | sync     |    5 | /bin/sync      |
| shutdown |    6 | /sbin/shutdown | shutdown |    6 | /sbin/shutdown |
+----------+------+----------------+----------+------+----------------+
  • 以左连接查询输出两表中相同的数值2(以表值少的为主表)
mysql> select t7.* from t7 left join t8 on t7.uid=t8.uid;
+----------+------+----------------+
| name     | uid  | shell          |
+----------+------+----------------+
| bin      |    1 | /sbin/nologin  |
| adm      |    3 | /sbin/nologin  |
| lp       |    4 | /sbin/nologin  |
| sync     |    5 | /bin/sync      |
| shutdown |    6 | /sbin/shutdown |
+----------+------+----------------+
5 rows in set (0.00 sec)
  • 以左连接查询输出两表中重复的值与不重复的值;(表值多的为主表)
mysql> select * from t8 left join t7 on t8.uid=t7.uid;
+----------+------+----------------+----------+------+----------------+
| name     | uid  | shell          | name     | uid  | shell          |
+----------+------+----------------+----------+------+----------------+
| bin      |    1 | /sbin/nologin  | bin      |    1 | /sbin/nologin  |
| adm      |    3 | /sbin/nologin  | adm      |    3 | /sbin/nologin  |
| lp       |    4 | /sbin/nologin  | lp       |    4 | /sbin/nologin  |
| sync     |    5 | /bin/sync      | sync     |    5 | /bin/sync      |
| shutdown |    6 | /sbin/shutdown | shutdown |    6 | /sbin/shutdown |
| halt     |    7 | /sbin/halt     | NULL     | NULL | NULL           |
| mail     |    8 | /sbin/nologin  | NULL     | NULL | NULL           |
| operator |   11 | /sbin/nologin  | NULL     | NULL | NULL           |
+----------+------+----------------+----------+------+----------------+

三、MySQL图形化管理工具,phpmyadmin使用教程

基本没人使用,就不记录了

http://www.ppmy.cn/news/133168.html

相关文章

用Pillow处理图像:Python中的实践指南

一、引言 Pillow,是Python Imaging Library (PIL)的一个分支,用于处理图像。它是Python编程语言中最常用的图像处理库,提供广泛的图像处理功能,包括显示、操作和保存图片等。Pillow库的目标是使得图片处理在Python中更加容易进行…

R语言:集卡活动概率测算模拟

背景:以支付宝集五福活动为代表的集卡类营销活动背后,每张卡出现的概率测算是非常重要的,假设我们可以预估有多少人参与活动以及大致每人能抽多少次,且限定一共有多少人能够集齐,在这些限定条件下,每张卡出…

浅谈高等学校能源监控管理体系建设

摘要:现代高校担当着人才培养,社会服务和文化传承与创新的光荣使命。高校低碳节能工作是加快建设“和谐社会”、“绿色校园”的重要举措 。当前高校以“数字化能源监测平台”为重心 ,积极推动能源管理的转型 。该文总结高校能源监管平台建设的…

今天不讨论技术

-- 今天不讨论技术,写写更高尚的东西,什么是生活 ,什么会影响人生,什么是人生意义,什么是爱情,什么是选择。 -- 入行这么多年,依稀记得当时在某个大城市因为写代码不太好,身为小白的…

Excel 电子表格运用技巧汇总

Excel电子表格运用技巧汇总 Leo 2005-4-2513:53 Excel XP的八则快速输入技巧  如果我们在用Excel XP处理庞大的数据信息时,不注意讲究技巧和方法的话,很可能会花费很大的精力。因此如何巧用Excel XP,来快速输入信息就成为各个Excel XP用户…

Moto Z6 手机 联通GSM卡上网设置, 使用技巧及疑难问题解决

本篇主要内容 一. Moto Z6 手机 联通GSM卡 上网设置二. 联通GPRS业务相关三. 联通活动四. UP新势力使用常识五.“新势力”相关使用规则六. 实用功能介绍七. 使用技巧及疑难问题解决 获取Motorola手机最新软件: http://direct.motorola.com/CHI/SoftwareUpdateSelect.asp?count…

[技术] 【技术支持】深度解剖S60内部资料,6600为例

S60资料大全之一诺基亚字符串计世网智能手机俱乐部2 _" F3 B; [& v. J% P- B7 i *#06#:显示IMEI码。  手机,智能手机,手机软件,手机游戏,铃声,主题,图片,电子书,手机报价,下载,智能手机测评,使用心得,N95,N73,N76,E61i3 Y* Y% B5 n% {" ^* M* H! U…

Excel操作大全

【一投行哥哥的Excel操作大全】 快捷键之在工作表中移动和滚动向上、下、左或右移动单元格箭头键 移动到当前数据区域的边缘:CTRL 箭头键 移动到行首:HOME 移动到工作表的开头:CTRLHOME 移动到工作表的最后一个单元格。:CTRL…