MYSQL笔记(六)

一、mysql对库的基本操作

net start mysql 启动数据库服务
mysql -h localhost -a root -p 使用命令登陆
net stop mysql 关闭数据库服务
show databases 查看mysql中以存在的数据库
create database 数据库名,创建数据库
create database if not exists  数据库库名 	检查数据库名称是否存在,不存在创建该数据库,存在则不创建
use 数据库名,使用数据库

二、获取当前使用的数据库

drop database 数据库名 	删除数据库
drop database if exists 数据库名 判断数据库存在删除

三、mysql对表的操作

create table 表名 (字段名 数据类型 约束条件,....) 创建表
PRIMARY KEY 定义主键约束
AUTO_increment 定义自增属性
NOT NULL 不为空约束
unique 唯一约束

四、mysql对表中数据的基本操作

使用in关键字查询指定记录
select * from 表名 where 字段名 in (条件); 条件里面可以有多个逗号隔开,如(24,35,26)
    
使用NOT in 查询指定记录
select * from 表名 where 字段名 not in (条件查询所不能满足的数据多个条件用逗号隔开); 条件里面可以有多个逗号隔开,如(24,35,26)

带between and 的范围查询
select * from 表名 where 指定的字段名的名字 between 值 and 值

like的字符匹配查询
select * from 表名 where 指定的字段名 like 想要匹配的值

带有%和_结合like查询
select * from from 表名 where 字段名 like "_值"
select * from from 表名 where 字段名 like "%值"
_代表单个字符,%代表多个字符

查询空值
select * from 表名 where 字段 is null

查询非空值
select * from 表名 where 字段 is not null

使用and实现多条件查询
select * from 表名 where 字段名1 = 值1 and 字段名2 = 值2

使用or实现多条件查询
select * from 表名 where 字段名1 = 值1 or字段名2 = 值2

筛选重复的记录
select distinct 字段名 from 表名

五、对表中数据深入查询

1.对表中数据深入查询
方式一:select * from 表名 order by 排序字段
方式二: select * from 表名 order by 排序字段1,排序字段2
选排序第一个,然后排序后面的,从大到小,每个字段后面都要加上desc
	
2.指定排序的顺序
select * from 表名 order by 排序字段 desc/asc
asc从小到大,desc从大到小,如果查看多个字段则需要在每一个字段前都要加
 
3.分组查询(将相同的数据放入一组),分组查询中,select后只能跟分组的字段和聚合函数
select group_concat(可以多个字段名)from 表名 group by 分组字段

在这里插入图片描述
在这里插入图片描述

4.使用having过滤分组
select group_concat(可以多个字段名)as 别名 from 表名 group by 分组字段 having count(字段名)> 指定数
having是二次分组,判断大于指定数的记录,count(字段名)即记录数,指的是分组中的的个数

5.分组后统计(算上null)
select 字段名,count(*)as 别名 from 表名 group by 分组字段 with rollup
        
6.使用limit限制查询数量
select * from 表名 limit n,m(显示从n(n从0开始)+1行开始)总共显示m条数据
 
7.使用集合函数查询
    (1)sum()求和函数的使用
      select sum(字段名)as 别名 from 表名

    (2)avg()求平均值
      select avg(字段名)as 别名 from 表名

    (3)avg函数和group by一起使用求每个分组的平均值
       select 分组字段,avg(字段名)as 别名 from 表名 group by 分组字段

    (4)max()函数求指定列的最大值
       select max'(字段名)as 别名 from 表名

    (5)min()函数指定列最小值
       select min(字段名)as 别名 from 表名

8.使用case语句:
方式一:case 字段名 when 字段值 then 值1 else 值2 end 
方式二:case when 条件 then 值1 else 值2 end

MYSQL笔记(六)_第1张图片

六、连接查询

1.连接是关系型数据库模型的主要特点连接查询是关系型数据库中最主要的查询,主要包括内链接和外连接。以及复合条件查询,通过连接运算符可以实现多表查询
(1)内链接语法
连接查询是查询多个表中相关联的数据行,内链接返回查询结果集合中的仅是符合查询条件和连接条件的数据

A.select 表名1.字段名1,表名1.字段名2,表名2.字段名1,表名2.字段名2 from 表名1, 表名2 where 表名1.字段名? = 表名2.字段名?
字段名?代表两张表共有的字段名
B.select 表名1.字段名,表名2.字段名 from 表名1 inner join 表名2 on 表名1.字段名? = 表名2.字段名?
字段名?代表两张表共有的字段名

(2)外联接查询
在内链接中我们知道内连接查询仅是符合查询条件和连接条件的数据,但有时候需要包含没有关联的行中数据即返回查询结果集合中的不仅包含符合连接条件的行,而且还包括左表,右表中的所有数据行外联接分为:左连接 右连接(主表)左连接的结果包括left outer关键字语句中指定的左表的所有行。而不仅仅是连接列所匹配的行,如果左表的某行在右表中没有匹配的行。右表的所有选择列均为空值
语法:

(左)
select 表名1.字段名,表名2.字段名 from 表名1 left outer join 表名2 on  表名1.字段名? = 表名2.字段名? 
(右)
select 表名1.字段名,表名2.字段名 from 表名1 right outer join 表名2 on  表名1.字段名? = 表名2.字段名?

七、外键约束

foreign key 外键约束,外键作用保证数据的唯一一致性和完整性

子表外键字段必须和主表中主键字段数据类型保持一致
(1)建表时,设置外键
	一,constraint 外键名称 foreign key (外键字段)references 主表名(主键字段名称)
	二,foreign key (外键字段)references 主表名(主键字段名称)
	constraint 外键名称 可选默认mysql会自动创建
            
(2)删除外键
	alter table 表名 drop foreign key 外键名

(3)动态添加外键
	alter table 表名 add foreign key (外键名称)references 主表名(主键字段)
	在添加外键时必须确认表中数据合法

八、子查询

子查询就是指在一个select语句中嵌套另一个select语句。

(1)带exists的子查询
	select * from 表名 where exists (子查询语句);
	子查询只要查询出的记录>=,则执行外部查询

(2)带in关键字的子查询
	select * from 表名 where 字段名 in (子查询语句)
	相同数值匹配,显示相同的数值
         
(3)带比较运算符的子查询
	select 字段名 from 子表名 where 字段名 > | = | < (子查询语句)
	子查询语句里面得出的结果只能是一条,否则无法比较
              
 (4)带any、some、all关键字的子查询
 	select 字段名 from 表名1 where 字段名 > any(select 字段名 from 表名2)
             
      运算符 	any 	some 	all
     >   >= 	最小值 	最小值 	最大值
     <   <= 	最大值 	最大值 	最小值
     =         	任意值 	任意值 	 
     !=               	  	  	任意值

 与any、some不同的是all需要用时满足所有内层的查询条件

九、联合查询

联合查询结果(查询两个表指定字段合并起来的数据)(合并时两个表对应的列数和数据类型必须要相同)
    select 字段名 from 表名1 union all select 字段名 from 表名2
加了all显示重复的数据,不加则不显示重复的数据

索引的功能就是加快对表中的数据的查询速度(优化数据库)
(1)创建索引

a. 创建表时创建索引 index 索引名(指定字段)
b. 添加索引 create  index 索引名 on 表名(指定字段)
c. 删除索引 rop  index  索引名 on  表名
b. 查看索引 show index  from 表名

十、mysql存储过程概念

存储过程就是在数据库中定义一些sql语句的集合,然后之间调用这些存储过程来执行sql语句,功能就是避免开发人员重复编写sql语句。从而可以减少客户端和服务器端的数据传输

(1)创建存储过程的语法
    create procedure 存储过程(参数列表)
         begin //开始
         存储过程体(一种合法有效的sql语句)
         end //代表结束

其他

获取当前时间戳

java:
// pure java
(int) (System.currentTimeMillis() / 1000)

// joda
(int) (DateTime.now().getMillis() / 1000)

JavaScript:
Math.round(new Date() / 1000)

MySQL:
SELECT unix_timestamp(now())

timestamp
时间戳

你可能感兴趣的:(笔记)