DAY3.MySQL进阶2

一.多表查询

语法规则:

SELECT    table1.column, table2.column

FROM table1, table2

WHERE    table1.column1 = table2.column2;

为了连接n个表,至少需要n-1个连接条件

点击了解:笛卡儿积

连接种类:      等值连接       非等值链接         多于两个表的连接

二.表连接(点击了解:表连接图解,及语法)

通过join连接表,通过on字句限定连接条件

交叉连接CROSS JOIN

交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合,交叉联接也称作笛卡尔积.

自然连接NATURAL JOIN

  •   NATURAL JOIN子句基于两个表中列名完全相同的列产生连接
    • 两个表有相同名字的列
    • 数据类型相同
    • 从两个表中选出连接列的值相等的所有行自然连接的结果不保留重复的属性

外联接-------外联接可以是左向外联接、右向外联接或完整外部联接。     
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     
1)LEFT  JOIN或LEFT OUTER JOIN     
左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。       

2)RIGHT  JOIN 或 RIGHT  OUTER  JOIN     
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。       

3)FULL  JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。   

自连接

将一张 表视为一张表,并进行连接

全连接  FULL  JOIN

              Mysql没有全连接

Union :  将字段及其结果完全一样的值   融合,不同值时,不融合

Union all: 将字段及其结果  都不融合,添加在一起,作为新的结果

----------------连接使用详解:点击直达-------------------------------------------

三.子查询

 SQL允许多层嵌套。子查询,即嵌套在其他查询中的查询。

语法:

SELECT     select_list

FROM table

WHERE    expr operator

(SELECT  select_list  FROM     table);

注意事项:

  • 理解子查询的关键在于把子查询当作一张表来看待。外层的语句可以把内嵌的子查询返回的结果当成一张表使用。
  • 子查询要用括号括起来
  • 将子查询放在比较运算符的右边(增强可读性)

子查询的种类:

单行子查询

  •   子查询返回一行记录
  •  使用单行记录比较运算符

   = > <   >=  <=  !=   <>

多行子查询

  • 子查询返回多行行记录
  • 使用集合比较运算符

    常用in  some  all

    示例代码:


1.使用in运算符 
eg:在emp表中查询不是销售(sales)部门员工的信息
   select empno,ename,sal where deptno in 
     (select depno from dept where dname <> 'sales');
2.使用any运算符
eg:查询工资大于10号部门的任意一个员工工资的其他部门的员工信息
   select depno,ename,sal,from emp where sal > any 
     (select sal from emp where depno =10) and depno <> 10;
3.使用all运算符
eg:在emp表中,查询工资大于部门编号为30的所有员工工资的员工信息
   select depno,ename,sal from emp where sal > all 
                                               (select sal from emp where deptno=30);


关联子查询

内查询和外查询是相互关联的
eg: 在emp表中,使用“关联子查询”检索工资大于同职位的平均工资的员工信息
   select depno,ename,sal from emp f where sal >
                                               (select avg(sal) from emp where job=f.job)
                                                group by job;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值