一、SQL入门
概念理解:instance实例>DB库>table表
1,MySQL建库
create database ;
2,删库
drop database ;
3,建表
create table
(
int NOT NULL AUTO_INCREMENT,
char(50) NOT NULL,
char(255) NULL,
PRIMARY KEY (,)
) engine=InnoDB default charset=utf8;
注:常见的字段类型有:int, char, float(double), bool, date
主键值必须唯一。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。主键只能使用不允许NULL值的列。允许NULL值的列不能作为唯一标识。
AUTO_INCREMENT 告诉MySQL,本列每当增加一行自动增量。
常见存储引擎有三种:InnoDB(多用于商业订单场景,但不支持全文本搜索),MEMORY(数据存储在内存而不是磁盘上,速度快,适合于临时表),MyISAM(性能极高支持全文本搜索)
alter table后要给出更改表名,应尽量避免更改表,可以重新建表。
4,删除表
drop table ;
5,重命名表
rename table ;
二、SQL处理数据基本方法
数据检索
1,查看表中的字段信息
desc ;
2,检索某表中所有的数据内容
select * from ;
3,检索某表中部分字段的数据内容
select ,, from ;
4,检索某表中某一字段的不重复数据内容
select distinct from ;
5,限定检索某表中前3行的数据内容
select * from limit 3;
6,限定检索某表中第4行之后的3行数据内容
select * from limit 3,3;
数据排序
7,按照单个字段(字段1)从小到大排序
select * from order by ;
8,按照单个字段(字段1)从大到小排序(降序)
select * from order by desc;
注:若排序的内容是数字则按数字大小排序,若是字符内容则按首位(数字
9,多个字段的排序(在字段1的基础上如果有重复,再按字段2排序)
select * from order by ,;
10,当查询多个字段,若部分信息内容一致,建议增加多个字段排序
select , from order by ,;
注:排序字段(字段2)可不在查询字段(字段1,3)中
11,找出最贵产品top1
select * from order by desc limit 1;
数据过滤
12,筛选表中满足条件的数据(操作符针对已知值)
select * from where != 1;
注:where条件的操作符有=, >, =, <=, <>, !=, between 1 and 8, in (1,2,3), not in (2),
13,筛选表中满足条件的数据(通配符找字符串)
select * from where like 'jet%';
注:where条件的 like通配符 %模糊匹配, _逐字匹配,
14,筛选表中满足条件的数据(正则表达式匹配文本字符串)
select * from where REGEXP '.000';
注:正则表达式中 '.'代表任意字符,'|'代表or,'[1-2]'代表1-2的范围,'[^2]'代表非2,'\\.'代表真正的'.'字符,'?'代表任何一个字符,'[0-9]'代表所有的数字,'[a-zA-Z]'代表所有的字符串,'[0-9]{4}'代表4位数字,'[[:digit:]]{4}'代表4位数字。
15,空值检查(找字段1中值为空的行)
select * from where is NULL;
16,组合筛选条件
select * from where and/or ;
注:若 and 和 or 连用会有计算次序的问题,一般先and后or,或先括号内后括号外部条件。
数据处理
17,字段的拼接
select * concat(, '-', ) from ;
18,使用字段别名
select * concat(, '-', ) as from ;
19,处理文本串函数(如:删除或填充值,转换值为大写或小写)
# trim为去掉相关空格,ltrim去掉左边空格,rtrim去掉右边空格
select * ltrim ( rtrim() ) as from ;
# 定义字符串全部大写/小写,upper函数为全部大写,lower函数为全部小写
select ,upper() as from ;
# 字符串截位处理,截取字段1中字符串从1-5的内容
select ,substring(,1,5) from ;
# 发音匹配函数,soundex功能,中文中可能不太适用
select * from where soundex()=soundex('li');
20,算数操作的数值函数(如:返回绝对值,进行代数运算+-*/)
select * + as from ;
注:取余mod(), 0-1之间的随机数rand(),随机种子:rand(1)确定的随机值,指数2的3次方pow(2,3),向上取整ceil(),向下取整floor(),四舍五入round(),绝对值abs()。
21,日期和时间函数(如:返回两个日期之差,检查日期有效性)
#筛选日期时间字段中2015年9月份的所有数据
select * from where date() between '2015-09-01' and '2015-09-30';
#筛选日期时间字段中2015年9月份的所有数据
select * from where year()=2015 and month()=9;
#返回两个日期之差,用于检查日期有效
select datediff('2017-01-01','2016-01-01');
注:常见的时间处理函数:year(), month(), day(), 当前日期curdate(), 当前时间curtime(), 添加日期adddate(), 添加时间addtime(), 日期之差datediff()。
22,系统函数(返回用户登录信息,检查版本细节)
#没有实际案例
select * * as from ;
数据汇总
23,行数,行组中的和,表列中的最大值/最小值/平均值
#求表1中,字段1的平均值
select avg() from ;
#求表1中,行数
select count(*) from ;
#求表1中,字段1的最大/最小值
select max(),min() from ;
#求表1中,字段1的数据之和
select sum() from ;
注:常见的汇总函数:平均值avg(), count(), max(), min(), sum()。