php联合查询,多表联合查询多表联合查询
指针指向结构体数组第二个表连接
当需要查询多个表中的字段时,就可以使⽤表连接来实现。表联接分为内连接和外连接。
1. 内连接:将两个表中存在连接关系的字段符合连接关系的那些记录形成记录集的连接。
2. 外连接:会选出其他不匹配的记录,分为外左连接和外右连接。
在学习实验前,我为⼤家准备了两个模拟的数据表:
网页留言板1. ⽤户表,存放⽤户信息
2. 订单表,存放哪个⽤户购买过哪个商品
user表创建语句CREATE TABLE IF NOT EXISTS user (joomla 多个站功能
uid int(11) NOT NULL,
username varchar(30) NOT NULL,
password char(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS order_goods (
oid int(11) NOT NULL,
uid int(11) NOT NULL,
name varchar(50) NOT NULL,
buytime int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql语句多表查询user表数据如下:
注意: 在上表order_goods表中uid是指user表中的uid字段。上表中oid为1的数据⾏,uid为10的⽤户。为user表中uid为10的⽤户:⾼⼩峰。该⽤户购买了商品为苹果⿏标。购买时间buytime为⼀个unix时间戳。
内连接
注:下例中from 表使⽤到了表别名。
由于表名太长,每次写的时候容易写错。我们可以在表后直接跟上⼀个简写英⽂字符串。在前⾯拼接字段时,直接使⽤简写字符串.字段即
可。
mysql> select u.uid ,u.username as username,o.oid,o.uid,o.name as shopname from user u,order_g
oods o where u.uid = o.uid;
+-----+-----------+-----+-----+---------------+
| uid | username | oid | uid | shopname |
+-----+-----------+-----+-----+---------------+
| 10 | ⾼⼩峰 | 1 | 10 | 苹果⿏标 |
| 3 | 李⽂凯 | 2 | 3 | iphone 12s |
| 12 | 李⼩超 | 3 | 12 | 雪碧 |
| 15 | 佟⼩刚 | 4 | 15 | |
| 3 | 李⽂凯 | 5 | 3 | iphone 键盘 |
+-----+-----------+-----+-----+---------------+
5 rows in set (0.00 sec)
基本语法⼆:
结果与基本语法1中⼀致。
表单的使用mysql> select user.uid ,user.username as username,order_goods.oid,order_goods.uid,order_goods.name as shopname from user in
+-----+-----------+-----+-----+---------------+
| uid | username | oid | uid | shopname |
+-----+-----------+-----+-----+---------------+
| 10 | ⾼⼩峰 | 1 | 10 | 苹果⿏标 |
| 3 | 李⽂凯 | 2 | 3 | iphone 12s |
| 12 | 李⼩超 | 3 | 12 | 雪碧 |
| 15 | 佟⼩刚 | 4 | 15 | |
| 3 | 李⽂凯 | 5 | 3 | iphone 键盘 |
+-----+-----------+-----+-----+---------------+
5 rows in set (0.00 sec)
外连接
外连接⼜分为左连接和右链接,具体定义如下。
左连接:包含所有的左边表中的记录甚⾄是右边表中没有和它匹配的记录
mysql> select * from user left join order_goods on user.uid = order_goods.uid; +-----+-----------+---------
---+------+------+---------------+-----------+
| uid | username | password | oid | uid | name | buytime |
+-----+-----------+------------+------+------+---------------+-----------+
| 10 | ⾼⼩峰 | 3124qwqw | 1 | 10 | 苹果⿏标 | 1212313 |
| 3 | 李⽂凯 | 1235531 | 2 | 3 | iphone 12s | 123121241 |
| 12 | 李⼩超 | 311aqqee | 3 | 12 | 雪碧 | 13232333 |
| 15 | 佟⼩刚 | 3cxvdfs | 4 | 15 | | 34242123 |
| 3 | 李⽂凯 | 1235531 | 5 | 3 | iphone 键盘 | 12123413 |
| 1 | 景甜 | 123456 | NULL | NULL | NULL | NULL |
| 2 | 王⼩⼆ | 245667 | NULL | NULL | NULL | NULL |
| 4 | 井柏然 | 123455 | NULL | NULL | NULL | NULL |
| 5 | 范冰冰 | 5abcwa | NULL | NULL | NULL | NULL |
| 6 | 黄晓明 | abcdeef | NULL | NULL | NULL | NULL |
| 7 | anglebaby | caption | NULL | NULL | NULL | NULL |
| 8 | TFBOYS | abcdwww | NULL | NULL | NULL | NULL |
| 9 | 安⼩超 | 12tfddwd | NULL | NULL | NULL | NULL |
| 11 | 李⼩强 | 323fxfvdvd | NULL | NULL | NULL | NULL |
| 13 | 韩⼩平 | 121rcfwrfq | NULL | NULL | NULL | NULL |
| 14 | 宋⼩康 | 123123tcsd | NULL | NULL | NULL | NULL |
+-----+-----------+------------+------+------+---------------+-----------+
16 rows in set (0.00 sec)
右连接:包含所有的右边表中的记录甚⾄是右边表中没有和它匹配的记录js数组查指定元素
mysql> select * from user right join order_goods on user.uid = order_goods.uid;
+------+-----------+----------+-----+-----+---------------+-----------+
| uid | username | password | oid | uid | name | buytime |
+------+-----------+----------+-----+-----+---------------+-----------+
| 10 | ⾼⼩峰 | 3124qwqw | 1 | 10 | 苹果⿏标 | 1212313 |
| 3 | 李⽂凯 | 1235531 | 2 | 3 | iphone 12s | 123121241 |
| 12 | 李⼩超 | 311aqqee | 3 | 12 | 雪碧 | 13232333 |
| 15 | 佟⼩刚 | 3cxvdfs | 4 | 15 | | 34242123 |
| 3 | 李⽂凯 | 1235531 | 5 | 3 | iphone 键盘 | 12123413 |
+------+-----------+----------+-----+-----+---------------+-----------+
5 rows in set (0.00 sec)
⼦查询
有时候,当我们查询的时候,需要的条件是另外⼀个select语句的结果,这时就需要使⽤⼦查询。⽤于⼦查询的关键字包括in、not in、=、!=、exists、not exists等。
⽰例1:mysql> select * from user where uid in (1,3,4);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论