zoukankan      html  css  js  c++  java
  • Mysql高级查询

    EXISTSNOT EXISTS子查询

    EXISTS 子查询

    语法:

    SELECT * FROM 表名 WHERE EXISTS(子查询);

    EXISTS关键字后面可以有任意的子查询,如果有返回结果则为true 否则为false;

    EXISTS跟NOT EXISTS语法一样,不过是相同取反操作.

    子查询注意事项:

    1):子查询语句可以嵌套在任何表达式出现的位置.

    例:嵌套在SELECT语句的SELECT子句中的子查询语句:

    SELECT  (子查询)  FROM 表名;

    子查询结果为单行单列,但不必指定列别名;

    例:前台在SELECT语句的FROM子句中的子查询语句:

    SELECT *FROM  (子查询)  AS 表的别名;

    必须为表指定别名,一般返回对行多列数据记录,可以当做一张临时表.

    2):只出现在子查询中而没有出现在父查询中的表不能包含在输出列中.

    分组查询

    使用group by 进行分组查询

    #查看每个学员考试的平均分 (根据学员编号来计算平均分)

    SELECT studentNo 学员编号 , AVG(StudentResult) 平均成绩 FROM result GROUP BY StudentNo;

     

    进行多列分组查询

    #查询每个班班男同学和女同学的人数

    SELECT COUNT(*) 人数,sex 性别,gradeID FROM students GROUP BY sex,gradeID;

     

    使用HAVING子句进行分组筛选

    #计算平均成绩大于80分以上的学生

    SELECT studentNo 学号, AVG(StudentResult) 平均成绩

    FROM result GROUP BY studentNo HAVING AVG(StudentResult)>80;

     

    HAVING和WHERE 语句可以在同一个SELECT语句中一起使用,使用顺序如图所示

    WHER——>  GROUP BY ——>  HAVING

    在SELECT语句中, WHERE , GROUP BY , HAVING子句和聚合函数执行顺序次序如下,WHERE子句从数据源中去掉不符合其搜索条件的数据,group by 子句搜索数据行到各个组中,统计函数为各个组计算统计值;HAVING子句去掉不符合其组搜索条件的各组数据行.

    多表连接查询

    多表连接查询的分类

    1):内连接查询

    a)        在WHERE子句中指定连接条件.

    例如:查询全部学生的学习成绩

    SELECT students.StudentNo学号,students.StudentName 姓名,result.StudentResult 分数FROM students,result WHERE students.`studentNo`=result.`StudentNo`;

     

    b)        在FROM子句中使用INNER JOIN...ON

    SELECT students.StudentNo学号,students.StudentName 姓名,result.StudentResult 分数FROM students INNER JOIN  result ON(students.`studentNo`=result.`StudentNo`)

    在上面的内连接查询

    (1):INNER JOIN用来连接两个表

    (2):INNER可以省略

    (3):ON用来设置条件

    (4):AS用来指定表的 ’别名’ .可写/也可不写.

    2):外连接查询

    与内连接查询相对的方式称为外连接查询,在外连接中参与连接的表有主从之分,以主表的每行数据匹配从表的数据列,将符合连接条件数据直接返回到结果集中,对那些不符合连接条件的列.将被填上null值后在返回到结果集中.

    左外连接查询

    左外连接查询的结果集包括LEFT JOIN子句中指定的左表的所有行,而不仅仅是连接列所匹配的行.

    左外链接查询使用LEFT JOIN...ON或LEFT OUTER JOIN...ON关键字来进行表之间的关联.

    右外连接查询

    右外连接查询与左外连接查询类似,只不过要包含右表中所有匹配的行.若右表中有的项在左表中没有对应的项,则以null填充.

    右外链接查询使用RIGHT JOIN...ON或RIGHT OUTER JOIN...ON关键字来进行表之间的关联.

    模糊查询LIKE

    SELECT * FROM students WHERE studentName like '%李%'; 查询名字包含李的所有学生信息.

  • 相关阅读:
    tr 字符转换命令
    Log4cpp配置文件及动态调整日志级别的方法
    Ubuntu使用总结
    vim安装与配置(进阶版)
    [转载] Linux CC与GCC的区别
    C语言基础总结
    VIM之ctags & Taglist 插件
    vim之基础配置
    使用问题:Chrome卡死崩溃
    Ubuntu16.10安装之后的软件安装
  • 原文地址:https://www.cnblogs.com/it-xiaoBai/p/10813727.html
Copyright © 2011-2022 走看看