Mysql基础用法(四)

版权声明:秉承开源精神,博主博文可以随机转载,但请注明出处! https://blog.csdn.net/zisefeizhu/article/details/81911775

本篇是系列性,由浅入深,主要是为了本人日后回看时再学习,如果道友对Mysql也是零基础的话,强烈建议从头开始看

Mysql基本用法(一)

SELECT:
  Query  Cache  
  查询执行路径中的组件:查询缓存,解析器,预处理器,优化器,
  SELECT语句的执行流程:
   FROM Clause --> WHERE clause -->Group BY -->HAVING Clause --> ORDER BY --> SELECT -->LIMIT
  单表查询
  Syntax:
   SELECT
    [ALL | DISTINCT | DISTINCTROW ]
      [HIGH_PRIORITY]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr [, select_expr ...]
    [FROM table_references
    [WHERE where_condition]
    [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]
    [HAVING where_condition]
    [ORDER BY {col_name | expr | position}
      [ASC | DESC], ...]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    
     [FOR UPDATE | LOCK IN SHARE MODE]]

    DISTINCT:数据去重,
    SQL_CACHE:显示指定存储查询结果于缓存之中;
    SQL_NO_CACHE:显示查询结果不予缓存;
    quary_cache_type的值为'ON'时,查询缓存功能打开;
     SELECT的结果符合缓存条件即会缓存,否则,不予缓存;
     显示指定SQL_NO_CACHE,不予缓存;
    quary_cache_type的值为“DEMAND”时,查询缓存功能按需进行;
     显示指定SQL_CACHE的SELECT语句才会缓存,其它均不予缓存;
     
   字段显示可以使用别名:
    col1 AS alias1,col2 AS alias2, ...
    
   WHERE子句,指明过滤条件以实现“选择”的功能;
    过滤条件,布尔型表达式;
    
    算术操作符:+ - * / %
    比较操作符:=  !=等于<>  <=>  >  >=  <  <=
    
     BETWEEN min_num AND max_num
     IN (element1,element2,...)
     IS NULL:
     IS NOT NULL
     LIKE
      % :任意长度的任意字符
      _:任意单个字符
     RLIKE:
     REGEXP:匹配字符串可用正则表达式书写模式;
    逻辑操作符:
     
     NOT
     AND
     OR
     XOR:异或
    
                 GROUP:根据指定的条件把查询结果进行“分组”以用于“聚合”运算;
      avg(),max(),min(),count(),sum()
     HAYING:对分组聚合运算后的结果指定过滤条件;
    ORDER BY:根据指定的字段对查询结果进行排序
      升序:ASC
      降序:DESC
    LINIT [[offset,]row_count],对查询的结果进行输出行数,数量限制
      
     对查询的结果中的数据请求施加“锁”;
     FOR  UPDATE:写锁
     LOCK IN SHARE MODE:读锁,共享锁
    
   练习:导入hellodb.sql生成数据库
   (1)在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄;
   (2)以ClassID为分组依据,显示每组的平均年龄;
   (3)显示第2题中平均年龄大于30的分组及平均年龄;
   (4)显示以L开头的名字的同学的信息;
   (5)显示TeacherID非空的同学的相关信息;
   (6)以年龄拍寻后,显示年龄最大的前10位同学的信息;
   (7)查询年龄大于等于20岁,小于等于25岁的同学的信息,用三种方法;

 1)  在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄;

        

    2)  以ClassID为分组依据,显示每组的平均年龄;

        

    3)  显示第2题中平均年龄大于30的分组及平均年龄;

    4)  显示以L开头的名字的同学的信息;

        

    5)  显示TeacherID非空的同学的相关信息;

        

    6)  以年龄排序后,显示年龄最大的前10位同学的信息;

        

    7)  查询年龄大于等于20岁,小于等于25岁的同学的信息,用三种方法;

        方法一:

            

        方法二:

                      

        方法三:

            

       多表查询:
                                交叉连接,笛卡尔乘积;
                                    内连接:
                                                等值连接:让表之间的字段以“等值”建立连接关系;
                                                不等值连接
                                                自然连接;
                                                    自连接;
                                    外连接:
                                                    左外连接:
                                                            FROM tb1 LEFT JOIN tb2 ON tb1.col=tb2.col
                                                    右外连接:
                                                            FROM tb1 RIGHT JOIN tb2 ON tb1.col=tb2.col
                        子查询:在查询语句嵌套着查询语句
                            基于某语句的查询结果再次进行查询
                            用在WHERE子句中的子查询:
1)      用于比较表达式中的子查询;子查询仅能返回单个值:
SELECT Name,Age FROM students WHERE Age>(SELECT avg(Age) FROM students);
2)      用于IN中的子查询:子查询应该单键查询并返回一个或多个值构成列表;
SELECT Name,Age FROM students WHERE Age IN (SELECT Age FROM teachers);
3)      用于EXISTS;
                            用于FROM子句中的子查询:
                                    使用格式:SELECT tb_alias.col1,... FROM (SELECT clause) AS tb_alias WHERE Clause;
                        联合查询:UNION将两外或多个返回值字段相同的查询的结果合并输出
                            SELECT Name,Age FROM students UNION SELECT Name,Age FROM teachers;

练习2:导入hellodb.sql,以下在students表上进行;

    1)  以ClassID分组,显示每班的同学的人数;

        

    2)  以Gender分组,显示其年龄之和;  

         

    3)  以ClassID分组,显示其平均年龄大于25的班级;           4)  以Gender分组,显示各组中年龄大于25的学员的年龄之和;   

猜你喜欢

转载自blog.csdn.net/zisefeizhu/article/details/81911775