美文网首页
SQL 语句总结 & MYSQL 常用数据类型

SQL 语句总结 & MYSQL 常用数据类型

作者: thisfeng | 来源:发表于2018-03-15 21:36 被阅读25次

      最近在处理一个餐厅内部排队叫号系统,在 Android 端使用 JDBC 连接操作 MySQL 的业务逻辑一大堆。这里就当回顾下整理以前学的 SQL语句好了

    MYSQL 常用数据类型

    文本:
    CHAR(*):最多255个字节的定长字符串,它的长度必须在创建时指定
    
    VARCHAR(*):最多255个字节的可变长度字符串,它的长度必须在创建时指定
    
    TEXT:最大长度为64K字符的变长文本
    
    TINYTEXT:最大长度为255字符的变长文本
    
    MEDUIMTEXT:最大长度为16K字符的变长文本
    
    LONGTEXT:最大长度为4GB字符的变长文本
    
    整数(考虑数据取值后选择尽可能小的类型)
    tinyint:1字节。有符号值:-128 到127;无符号值:0到255
    
    smallint:2字节。有符号值:-32768 到32767;无符号值:0到65535
    
    mediumint:3字节。
    
    int:4字节
    
    bigint:8字节
    
    
    小数(需要指定长度和小数点,也就是显示宽度和小数位数):
    decimal:精确存储的小数,在内部用字符串存储,适合金额等要求精确的类型。别名:NUMERIC
    
    float:4字节,单精度。会近似存储(*),效率比decimal高。
    
    double:8字节,双精度。会近似存储(*),效率比decimal高。
    
    
    日期时间:
    DATE:4字节。范围:1000-01-01——9999-12-31
    
    TIME:3字节。范围:-838:59:59——838:59:59
    
    DATETIME:8字节。范围:1000-01-01 00:00:00——9999-12-31 23:59:59
    
    二进制大数据:
    TITYBLOB:最大长度为255字节
    
    BLOB:最大长度为64KB
    
    MEDIUMBLOB:最大长度为16MB
    
    LONGBLOB:最大长度为4GB
    

    SQL 语法

     Select * from 表  查询某张表的全部内容 
     Insert into 表(表字段)values(对应的值) 插入新数据 
    
    Update 数据更新
            1、更新一个列:UPDATE T_Persons Set Age=30
    
            2、更新多个列: UPDATE T_Persons Set Age=30,Name='tom'
    
            3、表达式:UPDATE T_Persons Set Age=Age+1
    
            4、更新一部分数据: UPDATE T_Persons Set Age=30 where Name='tom',用where语句表示只更新Name是'tom'的行,注意SQL中等于判断用单      个=,而不是==。
    
            5、Where中还可以使用复杂的逻辑判断UPDATE T_Persons Set Age=30 where Name='tom' or Age<25,or相当于Java中的||
    
            where (Age>20 and Age<30) or(Age=80)
    
            6、Where中可以使用的其他逻辑运算符:or、and、not、<、>、>=、<=、!=(或<>)等
    
    删除数据
       删除表中全部数据:DELETE FROM T_Persons。
    
       Delete 也可以带 where 子句来删除一部分数据:DELETE FROM T_Persons WHERE Age > 20
    
       Delete 只是删除数据,表还在。(*)Drop table T_Persons
    
    数据的检索

    就是根据 where 条件获取到想要获取到的字段数据
    语法:

        1、简单的数据检索 :SELECT * FROM T_Employees
    
        2、只检索需要的列 :SELECT Number FROM T_Employees 、SELECT Name,Age FROM T_Employees
    
        3、列别名:SELECT Number AS 编号,Name AS 姓名,Age AS Age111 FROM T_Employees  写不写AS都行
    
        4、计算列:SELECT Number 编号,Name 姓名,Age Age111,Age+10 十年后的年龄,1+1,now() FROM T_Employees
    
        5、使用where检索符合条件的数据:SELECT Name FROM T_Employees WHERE Salary<5000。故事:新员工的数据检索噩梦
    
        6、还可以检索不与任何表关联的数据:select 1+1;select now();
    
    聚合函数
        1、SQL聚合函数:MAX(最大值)、MIN(最小值)、AVG (平均值)、SUM (和)、COUNT(数量)
    
        2、大于25岁的员工的最高工资 :SELECT MAX(Salary) FROM T_Employees WHERE Age>25 
    
        3、最低工资和最高工资:SELECT MIN(Salary),MAX(Salary) FROM  T_Employees
    
        4、大于25岁的员工人数:SELECT COUNT(*) FROM  T_Employees  WHERE Age>25 
    
        5、全体员工的工资总和平均工资:SELECT SUM(Salary),AVG (Salary) FROM  T_Employee
    
    升序降序
        1、ORDER BY子句位于SELECT语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列,ASC)还是降序(从    大到小排列,DESC) 
    
        2、按照年龄升序排序所有员工信息的列表:SELECT * FROM  T_Employees ORDER BY Age ASC 
    
        3、按照年龄从大到小排序,如果年龄相同则按照工资从大到小排序 :SELECT * FROM  T_Employees ORDER BY Age DESC,Salary DESC
    
        4、RDER BY子句要放到WHERE子句之后 :SELECT * FROM T_Employees WHERE Age>23 ORDER BY Age DESC,Salary DESC 
    
    通配符过滤使用 LIKE 。
        1、单字符匹配的通配符为半角下划线“_”,它匹配单个出现的字符。以任意字符开头,剩余部分为“erry” :SELECT * FROM T_Employees WHERE        Name LIKE '_erry' 
    
        2、多字符匹配的通配符为半角百分号“%”,它匹配任意次数(零或多个)出现的任意字符。 “k%”匹配以“k”开头、任意长度的字符串。检索姓        名中包含字母“n”的员工信息 :SELECT * FROM T_Employees WHERE Name LIKE '%n%' 
    
        3、Like性能较差,很容易造成全表扫描,谨慎使用。后面会讲数据库优化(索引等),项目中做搜索用全文检索。
    
    数据库空值处理
        数据库中,一个列如果没有指定值,那么值就位null 表示"不知道",而不是没有
    
        SQL中使用is null、is not null来进行空值判断: 
    
        select * from 表 where Name is null     为空
    
        select * from 表 where Name is not null 不为空
    
    limit 返回结果集
        1、LIMIT关键字用来限制返回的结果集, LIMIT放在SELECT语句的最后位置,语法为“LIMIT  首行行号,要返回的结果集的最大数目” 。比如下面      
        SQL语句将返回Name不为空的、按照工资降序排列的从第二行开始(行号从0开始)的最多五条记录:
    
        SELECT * FROM T_Employees
        where Name is not null 
        ORDER BY Salary DESC  
        LIMIT 2,5 
    
        2、limit一定要放到所有的语句的最后
    
    group by 分组查询
        1、数据分组用来将数据分为多个逻辑组,从而可以对每个组进行聚合运算。SQL语句中使用GROUP BY子句进行分组,使用方式为“GROUP BY  分组字        段”。分组语句一般和聚合函数一起使用,GROUP BY子句负责将数据分成逻辑组,而聚合函数则对每一个组进行统计计算。AVG Min MAX
    
    left join 联合查询
         /*查询每张订单的订单号、价格、对应的客户姓名以及客户年龄*/
        select o.Id 订单号,o.Price 价格,c.Name 姓名, c.Age 年龄
        from T_Orders o
        left join T_Customers c
        on o.CustomerId=c.Id
        /*添加where语句(显示价格>=150元的订单)*/
        where Price>=150
    
    外键约束

      外键 (FK) 是用于在两个表中的数据之间建立和加强链接的一列或多列的组合,可控制可在外键表中存储的数据。 在外键引用中,当包含一个表的主 键值的一个或多个列被另一个表中的一个或多个列引用时,就在这两个表之间创建了链接。 这个列就成为第二个表的外键

    1、如果删除/更新T_Customers一行记录,那么就可能会导致T_Orders中存在CustomerId为非法值的数据,使得程序逻辑错误。一般不会更新主键Id的值,所以谈外键约束的时候只谈“删除T_Customers时”。
    
    2、外键约束:当删除T_Customers中一条数据的时候,如何处理T_Orders等存在指向T_Customers外键的行。外键约束建立在外键字段***Id的表上(t_orders)。
    
    3、建外键约束的方法:新建或者修改表的时候“外键”→“添加外键”。名:自动命名即可;栏位名:CustomerId;参考表:t_customers;外栏位名:Id;删除时、更新时:一般默认RESTRICT(CASCADE:删除T_Customers一行时把它的订单也删除了;SET NULL:删除T_Customers一行时把它的订单CustomerId设置为NULL;NO ACTION/RESTRICT:拒绝删除)。
    
    4、有的公司不习惯建外键,而是通过程序进行数据合法性控制,对于初学者先不建议这样,都把外键加上。
    

    相关文章

      网友评论

          本文标题:SQL 语句总结 & MYSQL 常用数据类型

          本文链接:https://www.haomeiwen.com/subject/jfdkqftx.html