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

  最近在处理一个餐厅内部排队叫号系统,在 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、有的公司不习惯建外键,而是通过程序进行数据合法性控制,对于初学者先不建议这样,都把外键加上。
    原文作者:thisfeng
    原文地址: https://www.jianshu.com/p/e10261c978c3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞