一、基础操作
SQL语句不区分大小写
SHOW DATABASES; 展示可用的数据库
SHOW TABLES; 返回某个数据库内的表
USE databasesname; 用这个数据库
SHOW CREATE DATABASE; SHOW CREATE TABLE; 显示创建特定数据库或表的MYSQL语句
SHOW ERRORS ;SHOW WARNINGS 显示服务器错误或警告消息
SHOW COLUMN FROM tablename 返回表的每一列的信息
SHOW GRANTS 显示授予用户的安全权限
SHOW STATUS 显示服务器状态信息
二、检索数据
select column from table; 从表中搜索某一列,搜索多个列用逗号隔开
select * from table; 检索所有的列
select DISTINCT column from table;将列中相同的值剔除
select * from table limit 4; 显示前4行信息 limit 2,3 显示从第二行开始的后三行
select * from table order by column; 根据某一列排序 按多个列排序用逗号隔开,优先按照第一个列排,第一列值相同时按照第二列排依次类推 默认按照升序排练
select * from table order by column1 desc ,column2 列1按照降序排列,列2按照升序排列
三、过滤数据
select * from table where column='q'; 检索某一列的值为q的数据
where 子句操作符: = 等于 < > 不等于 != 不等于 <小于 >大于 <=小于等于 >=大于等于 BETWEEN and在指定的的两个值之间包含指定的两个值
select * from table where colum is null; 检查空值
select * from table where column in(A,B)检索出某列的值在A和B之间的数据包括A,B not in 不在A,B之间的数据
select * from table where A and B ; 组合筛选 也可以用OR 表示满足其中的一个条件即可
计算次序: where A or B and C 满足A 或者 B且C的数据 (这是因为and的优先级大于or)
where (A or B) and C 满足A或者B 并且符合C条件的数据
where column like ‘jet%’ ; %通配符,检索以jet起头的词
where column like ‘_ton anvil’; _通配符 与%用途一样,但是只匹配一个字符
四、mysql 正则表达式
where column REGEXP ‘A’ ;检索某列包含文本A的数据 REGEXP ‘.A’ .表示匹配任意一个字符
where column REGEXP ‘A|B’ 检索包含A或B的数据,类似于or
REGEXP '[abc]'检索匹配a或b或c
REGEXP '[^ABC]'匹配除这些字外的任何东西
REGEXP ‘[123456]’=REGEXP '[1-6]'
匹配特殊字符时需要加\\比如 匹配. REGEXP '\\.'
五、使用函数
concat()函数 : 拼接字段 例:select concat (column1,‘( ’,column2,‘ )’) from column;
RTrim()函数: 去掉右边的所有空格
select concat (column1,‘( ’,column2,‘ )’) from column as A 将拼接的字段起别名 为A
select column1*column2 as A from table; 计算列1和列2的乘积以别名A显示出来 + - * /
upper() 函数 :将文本转化为大写 lower():转换为小写
length()函数:返回串的长度
聚集函数:运行在行组上,计算和返回单个值的函数
AVG()返回某列的平均值
COUNT()返回某列的行数 1.count(列名) 计算某列的行数忽略null值 2.count(*)计算表中行的数目,包含null的也计算在内
MAX()返回某列的最大值
MIN() 返回某列的最小值
SUM()返回某列值之和
分组数据:使用group by 进行分组
例:select column,count(*)from table group by column with rollup; 统计出某一列相同的值有多少
with rollup 起到汇总总共有多少行的作用
过滤分组:HAVING ,与where使用方法类似,where过滤的是行
例:select column ,count(*)from table group by column having count(*)>2; 过滤出汇总大于2个的数据
select 子句的使用顺序:select /from /where/ group by/having/order by/limit
六、多个表之间的查询
子查询:
select column1 from table1 where column2 in (select column2 from table2 where column3='A');
筛选出列2中值为A的 列1的值
1. in 也可以换为 = > < 等 2.一条语句里可以嵌套多个 子查询
作为计算字段使用子查询:
select column1,(select count(*) from table2 where tabel2.column=table1.column) from table1;
计算列1中的值在表2中出现了几次
联结表:
select column1,column2 from table1,table2 where table1.column=table2.column
检索列1和列2 ,这两个列分别在两个表中,where后面指定了两个表中共同的列. 也可以用此方法联结多个表
inner join on 可达到相同的效果:select column1, column2 from table1 inner join table2 on table1.column=table2.column
给表使用别名:select column1,column2 from table1 as A,table2 as B where A.column=B.column
自联结:
select p1.column1, p1.column2 from table1 as p1,table2 as p2 where p1.column2=p2.column2 and column1='A'
table1和table2为同一个表 已知A这个值,找到对应的列2中的值,然后找到该表中与列2值一样的列1的值
组合查询:union 两个select语句之间加入union 使两个查询结果组合到一起,查询结果会自动去除重复的值
select column1 from table1 where A
union
selct column1 from table1 where B;
union all 显示所有的查询结果,包括重复的
七、插入数据(insert into values)
插入完整的一行:insert into table values('values1','values2','values3')
也可以这样实现:insert into table (column1,column2,column3) values ('values1','values2','values3')
插入多行:insert into table (column1,column2,column3) values ('values1','values2','values3');
insert into table (column1,column2,column3) values ('values4','values5','values6')
或者insert into table (column1,column2,column3) values ('values1','values2','values3');
values ('values1','values2','values3')
插入检索出的数据:insert into table1 (column1,column2,column3) select (column1,column2,column3) from table2
八、更新数据(update set)
update table set column1='A' where cloumn2='B';
updata table set column1='A', column2='B' where column3='C';更新多个数据
九、删除数据(delete from)
delete from table where column='A' ; 删除某列值为A的一行 如果省略where子句则删除表中的每一行但不删除表
truncate table 删除整个表然后新建一个空表 速度比delete from table快
十、创建/更新/删除表
创建表:create table tablename(
column1 int not null auto_increment ,
column2 char(50) not null defaul 'a',
column3 char(50) null
primary key (column1) )
engine=InnoDB;
更新表:
alter table tablename add column char(20); 给表添加一列
alter table tablename drop column columnname; 删除某一列
删除表:drop table tablename;删除整个表
重命名表: rename table tablename1 to tablename2;
更改表中字段类型:alter table tablenme modify cloumnname 新字段类型;
修改列名:alter table tablename change 旧列名 新列名 列类型;