mysql多表查询简单使用


创建张表

mysql> select * from biao1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
| 1    | a    | one  |
| 1    | a    | one  |
| 1    | a    | one  |
| 1    | a    | one  |
| 1    | b    | two  |
| 1    | b    | two  |
| 1    | b    | two  |
| 1    | b    | two  |
| 1    | b    | two  |
+------+------+------+
9 rows in set (0.00 sec)

计算b出现的次数

mysql> select count(a),b from biao1 group by b;
+----------+------+
| count(a) | b    |
+----------+------+
|        4 | a    |
|        5 | b    |
+----------+------+
2 rows in set (0.00 sec)

count里仅仅是个别称,但不能为空

mysql> select c,count(0) from biao1 group by c; ##相当于将c当成一个组去统计
+------+----------+
| c    | count(0) |
+------+----------+
| one  |        4 |
| two  |        5 |
+------+----------+
mysql> select * from zuoye ;
+----+-------------+------+
| id | name        | age  |
+----+-------------+------+
|  1 | tom         |   20 |
|  2 | jerry       |   23 |
|  3 | wangqing    |   25 |
|  4 | sean        |   28 |
|  5 | zhangshan   |   26 |
|  7 | lisi        |   50 |
|  8 | chenshuo    |   10 |
|  9 | wangwu      |  100 |
| 10 | qiuyi       |   15 |
| 11 | qiuxiaotian |   20 |
+----+-------------+------+
10 rows in set (0.00 sec)

mysql>  select age,count(0) from zuoye group by age;
+------+----------+
| age  | count(0) |
+------+----------+
|   10 |        1 |
|   15 |        1 |
|   20 |        2 |
|   23 |        1 |
|   25 |        1 |
|   26 |        1 |
|   28 |        1 |
|   50 |        1 |
|  100 |        1 |
+------+----------+
9 rows in set (0.00 sec)

算平均数

mysql> select avg(age) from zuoye;
+----------+
| avg(age) |
+----------+
|  31.7000 |
+----------+
1 row in set (0.01 sec)

算总和

mysql> select sum(age) from zuoye;
+----------+
| sum(age) |
+----------+
|      317 |
+----------+
1 row in set (0.00 sec)
mysql> select count(age) from zuoye;
+------------+
| count(age) |
+------------+
|         10 |
+------------+
1 row in set (0.00 sec)
统计age的个数,重复的不会列入其中,所以只有10

多表查询

创建张表

mysql> select * from A;
+------+-------+
| id   | name  |
+------+-------+
|    1 | tom   |
|    2 | jerry |
|    3 | smith |
+------+-------+
3 rows in set (0.00 sec)

mysql> select * from b;
ERROR 1146 (42S02): Table 'test1.b' doesn't exist
mysql> select * from B;
+------+------+---------+
| id   | job  | some_id |
+------+------+---------+
|    1 |   20 |       1 |
|    2 |   34 |       2 |
|    3 |   34 |       4 |
+------+------+---------+
3 rows in set (0.00 sec)

内连接

取出A,B两张表中,A表的id=B表的some-id的所有数据,也就是取交集,因为是内部已经存在的数据所以称为内连接

mysql> select A.*,B.* from  A join B on A.id = B.some_id;
+------+-------+------+------+---------+
| id   | name  | id   | job  | some_id |
+------+-------+------+------+---------+
|    1 | tom   |    1 |   20 |       1 |
|    2 | jerry |    2 |   34 |       2 |
+------+-------+------+------+---------+
2 rows in set (0.00 sec)
# join可以写为inner join 不影响输出

左连接

取出A,B两张表中,A表的id=B表的some-id的所有数据,left(左)即以左表A为主表匹配B与a条件相同的,不同的显示为null

mysql> select A.*,B.* from  A left join B on A.id = B.some_id;
+------+-------+------+------+---------+
| id   | name  | id   | job  | some_id |
+------+-------+------+------+---------+
|    1 | tom   |    1 |   20 |       1 |
|    2 | jerry |    2 |   34 |       2 |
|    3 | smith | NULL | NULL |    NULL |
+------+-------+------+------+---------+
3 rows in set (0.01 sec)

右连接

mysql> select A.*,B.* from  A right join B on A.id = B.some_id;
+------+-------+------+------+---------+
| id   | name  | id   | job  | some_id |
+------+-------+------+------+---------+
|    1 | tom   |    1 |   20 |       1 |
|    2 | jerry |    2 |   34 |       2 |
| NULL | NULL  |    3 |   34 |       4 |
+------+-------+------+------+---------+
3 rows in set (0.00 sec)
右表数据不变,左表做补充

完全连接

将两表连在一起查

mysql> select A.*,B.* from  A left join B on A.id = B.some_id union select A.*,B.* from  A right join B on A.id = B.some_id;
+------+-------+------+------+---------+
| id   | name  | id   | job  | some_id |
+------+-------+------+------+---------+
|    1 | tom   |    1 |   20 |       1 |
|    2 | jerry |    2 |   34 |       2 |
|    3 | smith | NULL | NULL |    NULL |
| NULL | NULL  |    3 |   34 |       4 |
+------+-------+------+------+---------+
4 rows in set (0.00 sec)

相当于用union将左右两种查询语句连在一起查,因为mysql不支持full join
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值