zoukankan      html  css  js  c++  java
  • mysql 复杂查询

      聚合函数

      函数是一个功能体,提供若干数据,产出结果-饺子机

      COUNT(...)数量

      SUM(...) 求和

      AVG(...)平均

      MAX (...)最大

      MIN(...) 最小

      聚合查询/分组查询

      查询出所有员工的数量

      SELECT COUNT(eid) FROM emp;

      SELECT COUNT(*) FROM emp; #推荐写法;

      查询出工资8000以上女员工姓名性别生日按工资降序排列,取前三个人

      SELECT ename,sex,birthday,salary FROM emp WHERE salary >8000 AND sex=0  

      ORDER BY salary DESC

      LIMIT 0,3;

      查询所有员工的工资总和

      SELECT SUM(salary) FROM emp;

      查询所有员工的平均工资

      SELECT SUM(salary)/COUNT(*) FROM emp;

      SELECT AVG(salary) FROM emp;

      查询男员工工资最高的

      SELECT ename,MAX(salary) FROM emp WHERE sex=1;

      查询出年龄最大的员工

      SELECT MIN(birthday),ename FROM emp;

      分组查询:只能查询分组条件和聚合函数

      *查询男女员工的平均工资,最高工资

      SELECT sex,AVG(salary),MAX(salary) FROM emp  GROUP BY sex;

      查询每个部门的员工数量,最高工资,最低工资;

      SELECT deptId,COUNT(*),MAX(salary),MIN(salary) FROM emp GROUP BY deptId ;

      函数补充

      YEAR() 获取日期中的年份

      MONTH() 获取日期中的月份

      查询出1993年出生的员工所有列

      SELECT*FROM emp WHERE YEAR(birthday)=1993;

      查询5月出生的所有列

      SELECT*FROM emp WHERE MONTH(birthday)=5;

    子查询

      查询出研发部员工所有的列

      SELECT * FROM emp WHERE deptId=(SELECT did FROM dept WHERE dname='研发部');

      查询出比tom工资高的员工有哪些;

      SELECT * FROM emp WHERE salary>(SELECT salary FROM emp WHERE ename='tom');

      查询出和TOM同一年的员工

      SELECT*FROM emp WHERE YEAR(birthday)=(SELECT YEAR(birthday) FROM emp WHERE ename='tom' );

    多表查询

      查询所有员工姓名及其部门名称;

      SELECT ename,dname FROM emp,dept WHERE did=deptId;

      上述多表查询语法是SQL-92中的,无法查询出没有部门的员工,也没法查出没有员工的部门。

      SQL-99中提出了新的多表查询语法

      内连接 INNER JOIN ...ON

      SELECT ename,dname FROM emp INNER JOIN dept ON deptId=did;

      左外连接 LEFT OUTER JOIN ..ON

      SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptId= did;

      查询结果是左侧所有的记录都显示;

      OUTER 可以省略

      SELECT ename,dname FROM emp LEFT JOIN dept ON deptId =did;

      右外连接 RIGHT OUTER JOIN...ON

      SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did;

      查询右侧所有的记录都显示;

      全连接  FULL JOIN

      显示左侧和右侧所有的记录--mysql 不支持

      UNION 合并相同的项

      UNION ALL 不合并相同的项

       (select ename,dname from emp left join dept on deptid=did)

       UNION ALL

       (SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did);

       这个出来的有重复项,是左外连接和右外连接合并的

      (select ename,dname from emp left join dept on deptid=did)

       UNION

       (SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did);

  • 相关阅读:
    E3-1230和E3-1230 V2有多神?
    自己制作 SPx N合1 自动安装盘(x86)
    ARP防火墙绑定网关MAC地址预防ARP攻击和P2P终结者
    完全备份、差异备份和增量备份的权威解释!!!
    Win7 SP1语言包微软官方下载地址及使用方法 2
    Windows 7 不同安装模式简要区别(图解)
    Windows PE3.0制作方法(从Win7中提取制作)
    摄影初学者挑选相机的常见问题 FAQ
    提升域用户帐户在本地计算机上的权限
    Oracle重置序列
  • 原文地址:https://www.cnblogs.com/sugartang/p/10967435.html
Copyright © 2011-2022 走看看