淘先锋技术网

首页 1 2 3 4 5 6 7

目录

对数据库的操作

对表的操作

对数据/记录的操作

字段约束

基础函数

全转小写: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 外表(主表)名(外表主键)

基础函数

全转小写:lower

SELECT lower(ename) FROM emp;

全转大写:upper

SELECT upper(ename) FROM emp;

获取长度:length

一个字母、数字长度为1,一个汉字为3。跟底层编码表有关

SELECT dname,LENGTH(dname) FROM dept;

concat:拼接字符串

SELECT concat(dname,'hello') FROM dept;
	

substr:截取字符串

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:替换字符

### replace(1,2,3):替换字符 1:字段名  把2替换成3
SELECT dname,REPLACE(dname,'a','666') FROM dept;

ifnull:判断是否为空

#ifnull(1,2)----判断1是否为null,为null,替换为2.不为null,不管
SELECT comm,IFNULL(comm,200) FROM emp;
	

round:四舍五入

SELECT comm,ROUND(comm)FROM emp;

ceil 向上取整

SELECT comm,CEIL(comm) FROM emp;

floor 向下取整

	SELECT comm,FLOOR(comm) FROM emp;

时间函数:

  • now()----------------获取当前时间(年月日时分秒)

  • year(now())--------获取当前时间的年份

  • month(now())------获取当前时间的月份

  • day(now())---------获取当前时间的日份

  • hour(now())--------获取当前时间的时份

  • minute(now())-----获取当前时间的分份

  • second(now())-----获取当前时间的秒份

条件查询

distinct:去重

SELECT distinct 字段名 FROM tablename;

where条件:

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)

模糊查询:like

SELECT * FROM tablename WHERE 字段名 LIKE '%o%';#低效
SELECT * FROM tablename WHERE 字段名 LIKE 'o%';#最高效
SELECT * FROM tablename WHERE 字段名 LIKE '%o';#高效
SELECT * FROM tablename WHERE 字段名 LIKE'l__';

null操作空数据

SELECT * FROM tablename WHERE 字段名 IS NULL;
SELECT * FROM tablename WHERE 字段名 IS  not NULL;

区间范围:between...and...是包含的关系

SELECT * FROM tablename WHERE 字段名 BETWEEN 3000 AND 10000;#等效包含3000、10000

分页:limit

#查询表中前两条信息
	SELECT * FROM tablename limit 2;	
#从第二行,展示两条信息
	SELECT * FROM tablename LIMIT 1,2;#从n+1行开始展示,要展示的行数

排序:order by

SELECT * FROM tablename ORDER BY 字段名;#默认升序
SELECT * FROM tablename ORDER BY 字段名 DESC;#降序
#查询的是数字---按照数字排序
#查询的是字母---按照字母的顺序
#查询的是生日---按照数值排序
#查询的是汉字---按照汉字对应在utf8编码表中数字进行排序

聚合函数

查最大值:max

SELECT MAX(字段名)  FROM tablename;

查最小值:min

SELECT MIN(字段名)  FROM tablename;

查平均值:avg

SELECT AVG(字段名) 平均工资 FROM tablename;

求和:sum

SELECT SUM(字段名) 求和 FROM tablename;

统计个数count

SELECT COUNT(1) FROM tablename;

分组: group by

查询时,出现了混合列(聚合列跟非聚合列)的现象是不行的,必须分组

#查询每个部门的最高薪---部门编号deptno---薪水sal	
SELECT deptno, MAX(sal) FROM emp GROUP BY deptno;
#		非聚合列,聚合列

having:完成分组后过滤

#查询每个部门的人数,人数>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;