MySQL之联表查询,聚合、常用函数

一、笛卡尔集:


                          1、笛卡尔集会在下面条件下产生:
                                                        – 省略连接条件
                                                        – 连接条件无效
                                                        – 所有表中的所有行互相连接
                                                        • 为了避免笛卡尔集, 可以在 WHERE 加入有 效的连接条件。

二、等值/连接连接 :


1、使用连接在多个表中查询数据 :
• 在 WHERE 子句中写入连接条件。 
• 在表中有相同列时,在列名之前加上表名前缀


2、区分重复的列名:     
• 在不同表中具有相同列名的列可以用表的别名加以区分。
• 如果使用了表别名,则在select语句中需要使用表别名代替表名
 • 表别名最多支持32个字符长度,但建议越少越好            
 3、表的别名:
• 使用别名可以简化查询。
 • 使用表名前缀可以提高执行效率。
 4、连接多个表 :
 • 连接 n个表,至少需要 n-1个连接条件。 例如:连接三个表,至少需要两个连接条件。
5、连接查询案例 :

含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询.
笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行.


发生原因:没有有效的连接条件.
如何避免:添加有效的连接条件.


分类:
按年代分类:
sql92标准:仅仅支持内连接
sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接

 分类:
                                                按年代分类:
                                                      sql92标准:仅仅支持内连接
                                                      sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接
                                                按功能分类:
                                                       内连接:
                                                       等值连接
                                                       非等值连接
                                                       自连接
                                                       外连接:
                                                       左外连接
                                                       右外连接
                                                       全外连接
                                                       交叉文件  

    5.1、等值连接:
                                  ① 多表等值连接的结果为多表的交集部分
                                  ②n表连接,至少需要n-1个连接条件
                                  ③ 多表的顺序没有要求
                                  ④一般需要为表起别名
                                  ⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选

#案例1:查询女生名和对应的男生名
SELECT NAME,boyName
FROM boys,beauty
WHERE beauty.boyfriend_id= boys.id;

5.2、非等值连接: 

#案例1:查询员工的工资和工资级别
 
SELECT salary,grade_level
FROM t_mysql_employees e,t_mysql_job_grades g
WHERE salary BETWEEN g.`lowest_sal` AND g.`highest_sal`
AND g.`grade_level`='A';

  5.3、自连接:

#案例:查询 员工名和上级的名称
 
SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
FROM t_mysql_employees e,t_mysql_employees m
WHERE e.`manager_id`=m.`employee_id`;

三、join连接: 

  内连接 [inner] join on
                        外连接
                        左外连接 left [outer] join on
                        右外连接 right [outer] join on

1、使用ON 子句创建连接 :
                     自然连接中是以具有相同名字的列为连接条件的。
                     可以使用 ON 子句指定额外的连接条件。
                     这个连接条件是与其它条件分开的。
                     ON 子句使语句具有更高的易读性。
2、join案例 :     
2.1语法:
         select 查询列表 from 表1 别名 【连接类型】 join 表2 别名 on 连接条件
                  【where 筛选条件】
                  【group by 分组】
                  【having 筛选条件】
                  【order by 排序列表】 

 2.1.1内连接 ,左外连接,右外连接:

– 内连接 [inner] join on
– 外连接
• 左外连接 left [outer] join on
• 右外连接 right [outer] join on

常见函数

1、字符函数

作用函数结果
转小写LOWER('SQL Course')sql course
转大写UPPER('SQL Course')SQL COURSE
拼接CONCAT('Hello', 'World')HelloWorld
截取SUBSTR('HelloWorld',1,5)Hello
长度LENGTH('HelloWorld')10
字符出现索引值INSTR('HelloWorld', 'W')6
字符截取后半段TRIM('H' FROM 'HelloWorld')elloWorld
字符替换REPLACE('abcd','b','m')amcd

 2、数字函数

作用函数结果
四舍五入ROUND(45.926, 2)45.93
截断TRUNC(45.926, 2)45.92
求余MOD(1600, 300)100

 3、日期函数 

 

作用函数结果
获取当前日期now()
将日期格式的字符转换成指定格式的日期STR_TO_DATE('9-13-1999','%m-%d-%Y')1999-09-13
将日期转换成字符DATE_FORMAT(‘2018/6/6’,‘%Y年%m月%d日’)2018年06月06日

五、聚合函数(SUM/COUNT/AVG/MAX/MIN)


   1) SUM():求和。常与GROUP BY一起使用,也可单独使用,
   2) AVG():求平均值。常与GROUP BY一起使用,也可单独使用
   3) MAX():求最大值。常与GROUP BY一起使用,也可单独使用
   4) MIN():求最小值。常与GROUP BY一起使用,也可单独使用
   5) COUNT():统计记录的条数。常与GROUP BY一起使用,也可单独使用如果有筛选的条件加关键字having
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值