目录
对数据库的操作
对表的操作
对数据/记录的操作
字段约束
基础函数
全转小写:lower
全转大写:upper
获取长度:length
concat:拼接字符串
substr:截取字符串
replace:替换字符
ifnull:判断是否为空
round:四舍五入
ceil 向上取整
floor 向下取整
时间函数:
条件查询
distinct:去重
where条件:
模糊查询:like
null操作空数据
区间范围:between...and...是包含的关系
分页:limit
排序:order by
聚合函数
查最大值:max
查最小值:min
查平均值:avg
求和:sum
统计个数count
分组: group by
having:完成分组后过滤
事务
开始事务
结束事务之提交事务
结束事务之回滚事务
索引
查看索引
创建单值索引
创建唯一索引
创建复合索引
删除索引
使用普通索引,唯一索引
使用复合索引
多表联查
笛卡尔积
连接查询
子查询
视图
创建视图
使用视图
连接数据库:mysql -u root -p
mysql -u root -p
创建数据库:
create database database_name default character set utf8;
查看数据库:
show databases;
用数据库:
use database_name ;
删除数据库:
drop database database_name ;
创建表:
create table tablename(字段名1 字段类型1(字段长度),字段名2 字段类型2(字段长度));
查看表:
show tables;
查看表结构
desc tablename;
删除表
drop table tablename;
修改表
alter table tablename xxx(操作)
修改列名
alter table tablename change 原列名 想改成的列名 列类型;
修改表的名字
alter table tablename rename 新表名 ;
修改列的类型
alter table tablename modify 列名 想改的类型;
增加某列
alter table tablename add 列名 类型;
删除某列
alter table tablename drop 列名;
查询记录
select * from 表名;
插入表记录
insert into tablename values(值1,值2,...); #值的个数、顺序要和字段的个数、顺序一样 insert into tablename.列名1,tablename.列名2 values(值1,值2);#给某一列添加数据
修改表记录
update tablename set 字段名 = 值;
删除表记录
delete from tablename;---删除全部表记录(表还在)
防止中文乱码
set name gbk;
主键约束
create table tablename(字段名1 字段类型1(字段长度) primary key auto_increment, 字段名2 字段类型2(字段长度));
非空约束
create table tablename(字段名1 字段类型1(字段长度), 字段名2 字段类型2(字段长度) not null );
唯一约束
create table tablename(字段名1 字段类型1(字段长度), 字段名2 字段类型2(字段长度) unique );
默认约束
sex CHAR(2) DEFAULT '男'
检查约束
create table tablename( age INT, CHECK (age>0 AND age<=200) );
外检约束
FOREIGN KEY (本表(子表)主键) REFERENCES 外表(主表)名(外表主键)
SELECT lower(ename) FROM emp;
SELECT upper(ename) FROM emp;
一个字母、数字长度为1,一个汉字为3。跟底层编码表有关
SELECT dname,LENGTH(dname) FROM dept;
SELECT concat(dname,'hello') FROM dept;
substr(1,2) 1:字段名 2:从那个字符开始 SELECT substr(dname,3) FROM dept;---------从第三个字母后开始截取,直到结束 substr(1,2,3) 1:字段名 2:从那个字符开始 3:截取长度 SELECT substr(dname,3,2) FROM dept;-------从第三个字母后开始截取,截取两个字母
### replace(1,2,3):替换字符 1:字段名 把2替换成3 SELECT dname,REPLACE(dname,'a','666') FROM dept;
#ifnull(1,2)----判断1是否为null,为null,替换为2.不为null,不管 SELECT comm,IFNULL(comm,200) FROM emp;
SELECT comm,ROUND(comm)FROM emp;
SELECT comm,CEIL(comm) FROM emp;
SELECT comm,FLOOR(comm) FROM emp;
now()----------------获取当前时间(年月日时分秒)
year(now())--------获取当前时间的年份
month(now())------获取当前时间的月份
day(now())---------获取当前时间的日份
hour(now())--------获取当前时间的时份
minute(now())-----获取当前时间的分份
second(now())-----获取当前时间的秒份
SELECT distinct 字段名 FROM tablename;
SELECT * FROM tablename WHERE 字段名1 = 条件1 and 字段名2 = 条件2; SELECT * FROM tablename WHERE 字段名1 = 条件1 or 字段名2 = 条件2; SELECT * FROM tablename WHERE 字段名 in (条件1,条件2)
SELECT * FROM tablename WHERE 字段名 LIKE '%o%';#低效 SELECT * FROM tablename WHERE 字段名 LIKE 'o%';#最高效 SELECT * FROM tablename WHERE 字段名 LIKE '%o';#高效 SELECT * FROM tablename WHERE 字段名 LIKE'l__';
SELECT * FROM tablename WHERE 字段名 IS NULL; SELECT * FROM tablename WHERE 字段名 IS not NULL;
SELECT * FROM tablename WHERE 字段名 BETWEEN 3000 AND 10000;#等效包含3000、10000
#查询表中前两条信息 SELECT * FROM tablename limit 2; #从第二行,展示两条信息 SELECT * FROM tablename LIMIT 1,2;#从n+1行开始展示,要展示的行数
SELECT * FROM tablename ORDER BY 字段名;#默认升序 SELECT * FROM tablename ORDER BY 字段名 DESC;#降序 #查询的是数字---按照数字排序 #查询的是字母---按照字母的顺序 #查询的是生日---按照数值排序 #查询的是汉字---按照汉字对应在utf8编码表中数字进行排序
SELECT MAX(字段名) FROM tablename;
SELECT MIN(字段名) FROM tablename;
SELECT AVG(字段名) 平均工资 FROM tablename;
SELECT SUM(字段名) 求和 FROM tablename;
SELECT COUNT(1) FROM tablename;
查询时,出现了混合列(聚合列跟非聚合列)的现象是不行的,必须分组
#查询每个部门的最高薪---部门编号deptno---薪水sal SELECT deptno, MAX(sal) FROM emp GROUP BY deptno; # 非聚合列,聚合列
#查询每个部门的人数,人数>1的部门 SELECT deptno,COUNT(1) FROM emp GROUP BY deptno HAVING COUNT(1) >1;
start transaction
commit
rollback
show index from 表名;
create index 索引名字 on 表名(字段名);
create unique index indexname on tablename(字段名);
create index indexname on tablename(字段名1, 字段名2);
alter table tablename drop index indexname;
explain select * from tablename where 字段名 = 字段值;
explain select * from tablename where 字段名1 = 字段值 and 字段名2 = 字段值;
select * from tablename1,tablename2 where tablename1.字段名 = tablename2.字段名#表关系 and tablename1.字段名2 = 字段值;#业务关系
内连接-----inner join: 取两个表的交集
SELECT * FROM tablename1 INNER JOIN tablename2 ON tablename1.`deptno` = tablename2.`deptno`#表关系 where tablename1.字段名2 = 字段值;#业务关系
外左连接-----left join :左表的所有和右表满足条件的,不满足是null
SELECT * FROM tablename1 left JOIN tablename2 ON tablename1.`deptno` = tablename2.`deptno`#表关系 where tablename1.字段名1 = 字段值;#业务关系
外右连接-----right join :右表的所有和左表满足条件的,不满足是null
SELECT * FROM tablename1 right JOIN tablename2 ON tablename1.`deptno` = tablename2.`deptno`#表关系 where tablename1.字段名2 = 字段值;#业务关系
SELECT * FROM tablename1 WHERE 字段名1 IN (SELECT 字段名1 FROM tablename2 WHERE 字段名2 = '字段值');
create view view_name as SQL查询语句
select * from view_name;