mysql中union,左连接,右连接,与内连接
来源:互联网 发布:怎样在淘宝查注册时间 编辑:程序博客网 时间:2024/06/07 19:06
- union
1).作用: 把俩次或者多次查询结果合并起来2).要求 俩次查询的列数一致 对于组合查询结果排序: select语句的输出用order by子句排序。在用union组合查询时,只能使用一条order by子句,它必须出现在最后一条select语句 之后。对于结果集,不存在用一种方式排序一部分,而又用另一部分方式排序另一部分的情况,因此不允许使用多条order by子句。3).推荐: 查询的每一列,相对应的列类型也一样。可以来自多张表。 多次sql语句取出的列名可以不一致,此时以第一个sql的列名为准 如果不同的的语句中取出的行,有完全相同(每个列的值都相同),那么相同的行将会合并(去重复) 如果不去重复,可以加all来指定 (select * from ta) union all (select * from tb);4).order by 的用法: 如果语句中有order by limit,需加()包起来,推荐放到所有子句之后,即-对最终合并后的结果来排序。 (select goods_id,cat_id,goods_name,shop_price from goods where cat_id = 4 order by shop_price desc) union (select goods_id,cat_id,goods_name,shop_price from goods where cat_id = 5 order by shop_price desc) order by shop_price desc; 在子句中order by配合limit使用才有意义,如果order by不配合limit使用,会被语法分析器优化分析时时去除 (select goods_id,cat_id,goods_name,shop_price from goods where cat_id = 3 order by shop_price desc limit 3) union (select goods_id,cat_id,goods_name,shop_price from goods where cat_id = 4 order by shop_price desc limit 2);5).案例 select*from ta union select*from tb;+------+------+| id | num |+------+------+| a | 5 || b | 10 || c | 15 || d | 10 || b | 5 || d | 20 || e | 99 |+------+------+ select id,sum(num) from (select * from ta union select * from tb) as temp group by id;+------+----------+| id | sum(num) |+------+----------+| a | 5 || b | 15 || c | 15 || d | 30 || e | 99 |+------+----------+
2.连接查询
1).表的分析 A表有9行,B表有10行 两表相乘有:9*10=90 行2).左连接: select 列1,列2,列n from tableA left join tableB ON tableA列 = tableB (此处连接成一张大表,完全当成普通表看) Where group having ... 照常写3).右连接: select 列1,列2,列n from tableA right join tableB ON tableA列 = tableB (此处连接成一张大表,完全当成普通表看) Where group having ... 照常写4).内连接: 内连接:查询左右变都有的数据,即不要左右中null的那一部分。内连接是左右连接的交集。 select 列1,列2,列n from tableA inner join tableB ON tableA列 = tableB (此处连接成一张大表,完全当成普通表看) Where group having ... 照常写5).左右连接的区别: 左右连接: 以左表为准,去右表找匹配的数据,找不到匹配,用null补齐。 如何记忆: ①.左右连接可以互相转化。 ②.可以把右连接转化为左连接来使用(并推荐使用左连接代替右连接,兼容性好一些) A站在B的左边 ===> B站在A的右边 A left join B ===> B right join A6).思考: 能否查出左右连接的并集呢? 答:目前不能,目前的mysql不支持外连接.outer join 但是可以用 Union 来达到目的。 练习题: select boy.* , girl.* from -> boy left join girl -> on boy.flower = girl.flower;+--------+----------+--------+--------+| name | flower | name | flower |+--------+----------+--------+--------+| 林书豪 | 玫瑰 | 艾薇儿 | 玫瑰 || 刘翔 | 桃花 | 居里夫 | 桃花 || 周杰伦 | 茉莉花 | 芙蓉姐 | 茉莉花 || 周杰伦 | 茉莉花 | 凤姐 | 茉莉花 || 犀利哥 | 荷花 | 林志玲 | 荷花 || 刘德华 | 狗尾巴花 | NULL | NULL |+--------+----------+--------+--------+ select * from -> boy right join girl -> on boy.flower = girl.flower;+--------+--------+--------+----------+| name | flower | name | flower |+--------+--------+--------+----------+| 林书豪 | 玫瑰 | 艾薇儿 | 玫瑰 || 刘翔 | 桃花 | 居里夫 | 桃花 || 周杰伦 | 茉莉花 | 芙蓉姐 | 茉莉花 || 周杰伦 | 茉莉花 | 凤姐 | 茉莉花 || 犀利哥 | 荷花 | 林志玲 | 荷花 || NULL | NULL | 大S | 火爆腰花 |+--------+--------+--------+----------+ (select boy.*,girl.* from boy left join girl on boy.flower = girl.flower) -> union -> (select boy.*,girl.* from boy right join girl on boy.flower = girl.flower);+--------+----------+--------+----------+| name | flower | name | flower |+--------+----------+--------+----------+| 林书豪 | 玫瑰 | 艾薇儿 | 玫瑰 || 刘翔 | 桃花 | 居里夫 | 桃花 || 周杰伦 | 茉莉花 | 芙蓉姐 | 茉莉花 || 周杰伦 | 茉莉花 | 凤姐 | 茉莉花 || 犀利哥 | 荷花 | 林志玲 | 荷花 || 刘德华 | 狗尾巴花 | NULL | NULL || NULL | NULL | 大S | 火爆腰花 |+--------+----------+--------+----------+ (select boy.*,girl.* from boy left join girl on boy.flower = girl.flower) -> union all -> (select boy.*,girl.* from boy right join girl on boy.flower = girl.flower);+--------+----------+--------+----------+| name | flower | name | flower |+--------+----------+--------+----------+| 林书豪 | 玫瑰 | 艾薇儿 | 玫瑰 || 刘翔 | 桃花 | 居里夫 | 桃花 || 周杰伦 | 茉莉花 | 芙蓉姐 | 茉莉花 || 周杰伦 | 茉莉花 | 凤姐 | 茉莉花 || 犀利哥 | 荷花 | 林志玲 | 荷花 || 刘德华 | 狗尾巴花 | NULL | NULL || 林书豪 | 玫瑰 | 艾薇儿 | 玫瑰 || 刘翔 | 桃花 | 居里夫 | 桃花 || 周杰伦 | 茉莉花 | 芙蓉姐 | 茉莉花 || 周杰伦 | 茉莉花 | 凤姐 | 茉莉花 || 犀利哥 | 荷花 | 林志玲 | 荷花 || NULL | NULL | 大S | 火爆腰花 |+--------+----------+--------+----------+
3 . 连接笔试题
查出2006-6-1到2006-7-1之间举行的所有比赛,并且用以下形式列出:拜仁 2 :0 不莱梅 2006-2-21select*from t;+------+----------+| tid | tname |+------+----------+| 1 | 国安 || 2 | 申花 || 3 | 传智联队 |+------+----------+ select*from m;+-----+------+------+------+------------+| mid | hid | gid | mres | matime |+-----+------+------+------+------------+| 1 | 1 | 2 | 2:0 | 2006-05-21 || 2 | 1 | 3 | 1:2 | 2006-06-21 || 3 | 2 | 3 | 2:5 | 2006-06-25 || 4 | 2 | 1 | 3:2 | 2006-07-21 |+-----+------+------+------+------------+ select mid,hid,tname,mres,gid,matime from m left join t on m.hid = t.tid;+-----+------+-------+------+------+------------+| mid | hid | tname | mres | gid | matime |+-----+------+-------+------+------+------------+| 1 | 1 | 国安 | 2:0 | 2 | 2006-05-21 || 2 | 1 | 国安 | 1:2 | 3 | 2006-06-21 || 3 | 2 | 申花 | 2:5 | 3 | 2006-06-25 || 4 | 2 | 申花 | 3:2 | 1 | 2006-07-21 |+-----+------+-------+------+------+------------+select mid,hid,t1.tname as hname,mres,gid,t2.tname as gname,matime from m left join t as t1 on m.hid = t1.tid -> left join t as t2 -> on m.gid = t2.tid;+-----+------+-------+------+------+----------+------------+| mid | hid | hname | mres | gid | gname | matime |+-----+------+-------+------+------+----------+------------+| 4 | 2 | 申花 | 3:2 | 1 | 国安 | 2006-07-21 || 1 | 1 | 国安 | 2:0 | 2 | 申花 | 2006-05-21 || 2 | 1 | 国安 | 1:2 | 3 | 传智联队 | 2006-06-21 || 3 | 2 | 申花 | 2:5 | 3 | 传智联队 | 2006-06-25 |+-----+------+-------+------+------+----------+------------+ select t1.tname,mres,t2.tname as gname,matime from m left join t as t1 on m.hid = t1.tid -> left join t as t2 -> on m.gid = t2.tid -> where m.matime between '2006-06-1' and '2006-7-01';+-------+------+----------+------------+| tname | mres | gname | matime |+-------+------+----------+------------+| 国安 | 1:2 | 传智联队 | 2006-06-21 || 申花 | 2:5 | 传智联队 | 2006-06-25 |+-------+------+----------+------------+
阅读全文
1 0
- mysql中union,左连接,右连接,与内连接
- MySQL左连接,右连接,内连接,union
- mysql 左连接 右连接 内连接 union
- Mysql左连接left join on与右连接 right join on,内连接union区别
- 左连接、右连接、内连接、外连接、union连接
- MySQL左连接、右连接、内连接
- mysql数据库中实现内连接、左连接、右连接
- mysql数据库中实现内连接、左连接、右连接
- MySQL 内连接 左连接 右连接 外连接(union组合查询)
- mysql左/右/内连接
- mysql连接内连接、左连接、右连接、全连接
- mysql连接内连接、左连接、右连接、全连接
- mysql中左连接,右连接,内连接查询,以及与where之间关系
- mysql中左连接,右连接,内连接查询,以及与where之间关系
- mysql连接查询 左,右,内连接
- Mysql表连接:外连接(左连接右连接)与内连接
- mysql 内连接、左连接、右连接、全连接
- MySQL内连接、左连接、右连接、全连接
- 中北大学NUC2017新生赛1010/NOJ-1990
- 配置防火墙端口访问
- cpp:变量的定义与Java中的不同
- 常见的五类排序算法图解和实现(交换类:冒泡排序,递归的快速排序)
- Android 性能优化系列
- mysql中union,左连接,右连接,与内连接
- 数论之旅(一): 逆元逆元!
- vue前端开发项目框架搭建(node+webpack+vue)
- HOJ 3200 No Game School(多个完全背包)
- 习题7.1
- 牛客网网络程序赛低年级组之求最大值
- notepad的wp
- 文件路径
- 运算符,常量和变量,强制类型转换