zoukankan      html  css  js  c++  java
  • MySQL学习笔记——多表连接和子查询

    多表连接查询

    # 返回的是两张表的乘积
    SELECT * FROM tb_emp,tb_dept
    SELECT COUNT(*) FROM tb_emp,tb_dept
    
    # 标准写法,每个数据库都能这么写
    SELECT * FROM tb_emp CROSS JOIN tb_dept
    
    # 内连接 只列出这些连接表中与连接条件相匹配的数据行
    SELECT * FROM tb_emp e,tb_dept d WHERE e.NAME = d.NAME
    
    SELECT * FROM tb_emp INNER JOIN tb_dept
    ON tb_emp.NAME = tb_dept.NAME
    
    # 外链接 不仅列出与连接条件相匹配的行,还列出左表(左外连接),右表(右外连接)或两个表(全外连接)中所有符合where过滤条件的数据行
    # 左外连接 在外连接中,某些不满足条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行
    # 左边的表作为主表,左边的表会全部显示
    SELECT * FROM tb_emp LEFT JOIN tb_dept
    ON tb_emp.NAME = tb_dept.NAME
    
    #oracle语法,左连接加号在左边
    SELECT * FROM tb_emp e,tb_dept d WHERE e.NAME=d.NAME(+)
    
    #右外连接
    SELECT * FROM tb_emp RIGHT JOIN tb_dept
    ON tb_emp.NAME = tb_dept.NAME
    
    #全外连接 MySQL不支持 OUTER
    
    #自连接
    SELECT c.NAME '部门名字',c2.NAME '其他部门'
    FROM tb_dept c LEFT JOIN tb_dept c2
    ON c.description=c2.id

    子查询

     某些情况下,当运行查询的时候,需要的条件是另外一个select语句的结果,这个时候,就要用到子查询

    #子查询
    SELECT * FROM tb_emp
    
    #查询年龄是22的人名
    SELECT age FROM tb_emp WHERE sex=''
    SELECT * FROM tb_emp WHERE age>23
    
    SELECT * 
    FROM tb_emp 
    WHERE age> (
    SELECT age
    FROM tb_emp
    WHERE NAME='Tom'
    )
    
    #IN 与列表中的任一成员相等
    SELECT *
    FROM tb_emp
    WHERE age IN (
    SELECT age
    FROM tb_emp
    WHERE sex=''
    )
    
    #ANY 与列表中的每一成员比较,小于最大的
    SELECT *
    FROM tb_emp
    WHERE age < ANY (
    SELECT age
    FROM tb_emp
    WHERE sex=''
    )
  • 相关阅读:
    [VC++]轻松搞VC之定时器(Timer)
    [VC++]VC中如何获得当前系统时间
    [VC++]如何利用this获得窗口句柄
    SMART原则
    SQL配置
    术语百科
    关于SQL锁问题
    第六代OA办公理念(摘录)
    心动机型
    SQL2008R2的索引重建
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/4661097.html
Copyright © 2011-2022 走看看