zoukankan      html  css  js  c++  java
  • Mysqlday02(导入外部sql文件,order by,group by,having,多表联查,查元数据,数值类型,日期类型,字符数据类型)

    一、导入外部sql文件

      如果想要导入多条数据可以使用一下方法

    1、创建一个.sql的文件,在内部编写sql语句,注意每一句sql语句之后都要添加分号;

    2、mysql中使用指令 source 路径/xxx.sql 就可以引入

      

     二、order by、limit

      排序和限制

      基本语法:

        SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2 [DESC|ASC] , ... fieldn [DESC|ASC]];

        select * from 表名 (可以有where条件)order by 字段名称(表示根据谁排序) desc|asc

        DESC:降序排列

        ASC:升序排列,默认方式

      

    • 对于排序后的记录,如果希望只显示一部分,而不是全部,则可以使用LIMIT关键字来实现:
      • SELECT ... ... [LIMIT offset_start,row_count];
      • select * from 表名limit 1,2;
      • 1:显示数据的起始位置  值2 显示多少条数据
      • offset_start:表示记录的起始偏移量
      • row_count:表示显示的行数
      • 注意:
      • LIMIT经常和order by一起配合使用来进行记录的分页显示

      LIMIT属于在MySQL扩展SQL92后的语法,在其他数据库上不能使用。

      

    三、聚合

    • 基本语法:
      • SELECT [field1,field2,...,fieldn] fun_name from tablename

          [WHERE where_contition] 

          [GROUP BY field1,field2,...,fieldn [WITH ROLLUP]]

          [HAVING where_contition]

    • fun_name:表示要做的聚合操作,也就是聚合函数,常用的有sum(求和)、count(*)(记录数)、avg(平均值)、max(最大值)、min(最小值)
    • GROUP BY:关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数据,部门就应该写在GROUP BY后面
    • WITH ROLLUP:是可选参数,表明是否对分类聚合后的结果进行再汇总
    • HAVING:关键字表示对分类后的结果再进行条件的过滤
    • 注意:
      • HAVINGWHERE的区别在于,HAVING是对聚合后的结果进行条件的过滤,而WHERE是在聚合前就对记录进行过滤。如果逻辑允许,我们尽可能用WHERE先过滤记录,因为这样的结果集减小,聚合的效率将大大提高,最后再根据逻辑看是否用HAVING进行再过滤。
      • 根据部门进行分组 查看部门人数:

       

      根据部门进行分组,每个部门的最高工资和最低工资是什么 平均工资是多少

        

      每个字段可以起别名

      select 字段名 as 自定义名称 ,字段名2 as 自定义名称2 ..... from表名

       

      可以省略掉as

      

    四、查询元数据 

      元数据指的是数据的数据,比如表名、列名、列类型、索引名等表的各种属性名称。

       %:0~n个字符

       _:1个字符

      

       

    • 在日常工作中,可能经常会遇到类似下面的应用场景:
      • 删除数据库test1下所有前缀为tmp的表;
      • 将数据库test1下所有存储引擎为myisam的表改为innodb;

      对于这类需求,在MySQL5.0之前只能通过show table、show create table或者show table status等命令来得到指定数据库下的表名和存储引擎,但通过这些命令显示的内容有限且不适合进行字符串的批量编辑。如果表很多,则操作起来非常低效。

      MySQL5.0之后提供了一个新的数据库information_schema,用来记录MySQL中的元数据信息。

      元数据指的是数据的数据,比如表名、列名、列类型、索引名等表的各种属性名称。

      可以简单地通过两个命令得到需要的SQL语句:

      select concat('drop table test1.',table_name,';') from tables where table_schema='test1' and table_name like 'tmp%';

      select concat('alter table test1.',table_name,' engine=innodb;') from tables where table_schema='test1' and engine='MyISAM';

    • 比较常用的视图:
      • SCHEMATA:该表提供了当前MySQL实例中所有数据库的信息,show databases的结果取之此表。
      • TABLES:该表提供了关于数据库中的表的信息(包括视图),详细表述了某个表属于哪个schema、表类型、表引擎、创建时间等信息。show tables from schemaname的结果取之此表。
      • COLUMNS:该表提供了表中的列信息,详细表述了某张表的所有列以及每个列的信息,show columns from schemaname.tablename的结果取之此表。
      • STATISTICS:该表提供了关于表索引的信息。show index from schemaname.tablename的结果取之此表。

       

    五、数值类型

      MySQL提供了多种数据类型,主要包括:

        数值型

        字符串类型

        日期和时间类型

      标准SQL中的数值类型:

        严格数值类型:INTEGER,SMALLINT,DECIMAL,和NUMERRIC

        近似数值类型:FLOAT,REAL,DOUBLE和PRECISIO

      扩展后增加的类型:

        TINYINT,MEDIUMINT,BIGINT,BIT

      注意:INT 是INTEGER 的同名词,DEC 和 DECIMAL 一样。

      

     六、日期类型

      

    • 如果要用来表示年月日,通常用DATE来表示;
    • 如果要用来表示年月日时分秒,通常用DATETIME或者TIMESTAMP表示;
    • 如果只用来表示时分秒,通常用TIME来表示;
    • 如果只是表示年份, 可以用YEAR来表示,它比DATE占用更少的空间。YEAR有2位或4位格式的年。默认是4位格式中,允许的值是1901~2155和0000在2位格式中,允许的值是70~69,表示从1970~2069年。MySQL以YYYY格式显示YEAR值(从5.5.27开始,2位格式的year已经不被支持)。

    注意:每种日期时间类型都有一个有效值范围,如果超出这个范围,在默认的SQLMode下,系统会进行错误提示,

    并将以零值来进行存储。

    七、字符数据类型

      

    • CHAR和VARCHAR类型:
      • 两者的主要区别在于存储方式不同:
        • CHAR列的长度固定为创建表时声明的长度,而VARCHAR列中的值为可变长字符串;
        • 在检查的时候,CHAR列删除尾部的空格,而VARCHAR则保留这些空格 

      

    • BINARY和VARBINARY类型:
      • BINARYT和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不包含非二进制字符串。
    • ENUM类型:
      • ENUM中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显示指定,对1~255个成同的枚举需要1个字节存储,对于255~65535个成员,需要2个字节来存储。最多允许65535个成员。 
    • 注意:
      • 忽略大小写
      • 插入不在ENUM范围内的值时,插入的是第一个值(高版本会检测)
      • 只允许从值集合中选取单个值,不能一次取多个值

       

      

      

      

    • SET类型:
      • SET和ENUM类型非常类似,也是一个字符串对象,里面可以包含0~64个成员。根据成员的不同,存储上也有所不同。
        • 1~8成员的集合,占1个字节
        • 9~16成员的集合,占2个字节
        • 17~24成员的集合,占3个字节
        • 25~32成员的集合,占4个字节
        • 33~64成员的集合,占8个字节

       

    • 注意:
      • SET和ENUM除了存储以外,最主要的区别在于SET类型一次可以行取多个成员,而ENUM则只能选一个

       

         

      SET中重复值只取一次,超出范围的内值不允许插入操作

      

      超出set范围内的值不可以添加

       

  • 相关阅读:
    oracle a:=100 和 b=:c 区别
    Oracle为表或字段添加备注
    oracle删除表字段和oracle表增加字段
    oracle数据库的一个表中,怎么设置字段的默认值
    VS2015密钥
    C# 调用WebApi
    OCX ClassId查看
    C++ 调用类的函数
    如何做一个标记为安全的ACTIVEX控件
    Java内存通道
  • 原文地址:https://www.cnblogs.com/heureuxl/p/13546750.html
Copyright © 2011-2022 走看看