最近在处理一个餐厅内部排队叫号系统,在 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、有的公司不习惯建外键,而是通过程序进行数据合法性控制,对于初学者先不建议这样,都把外键加上。