数据库分为关系型数据库(mYSQL,ORACLE)以及非关系型数据库(NoSQL/REDIS)

一、MySQL的语法

不区分大小写,以;结尾。
<>和!=都表示不等于,建议用<>
用as或者省略,可以对字段和表起别名

1.1crud(增删改查)

1.对库的操作

创库:create database if not exists 库名;
切库:use 库名;
删库:drop database 库名;
查库:select databa();

2.对表的操作

  1. 创表:create table表名(字段名 类型 约束);
  2. 查表:show tables;
  3. 删表:
// 只是删除表数据,但是会有记录,如以前id到了90,那就id从90开
drop table 表名;

// 删除表数据,以及以前的记录,如以前id到了90,那就id从1开
truncate table 表名;
  1. 修表:
// 新增字段(默认从最后出新增)
alter table 表名 add 字段名 类型:
// 修改字段类型
alter table 表名 modify 字段名 新类型
// 修类字段名和字段类型
alter table 表名 change 旧字段名 新字段名 新类型
// 删除列(字段)
alter table 表名 drop 字段名;
// 修改表的名称
rname table 旧表名 to 新表名;
  1. 查看表结构
    desc 表名;

key那一列就是索引情况

java model 非数据库字段 数据库非怎么表示_字段

3.对数据的操作

增数据:insert into 表名 values(字段1的值,,,),(),();
删数据:delete from 表名 where 条件;
修数据:update 表名 set 字段名 = 值;
查数据:select * from 表名;

1.2 关键字的顺序

where → grou by → having → order by 字段名 (desc降序、asc升序)→ limit indexStart len
注意:

  • where和having都是用来过滤的
    where,放在分组关键字前,不可以用聚合函数
    having,放在分组的关键字后,可以用聚合函数

1.3 表与表之间的关系

多方是从表,一方是主表;
一对一:主外键是同一个
一对多:多的外键对应一的主键
多对多:需要第三张表(2个外键)

1.4 多表查询

多表查询有两种实现方式:1.表连接 2.子查询

1.4.1表连接

  • 表连接 分为 内连接(隐式和显式) 和 外连接(左右外连接)-----这些都是解决了笛卡尔问题的
  • 笛卡儿积问题(4条数据表 * 15条数据表 = 60),会有无效的数据,所以需要过滤。
1内连接

隐式:select * from 表1,表2 where 过滤条件
显式:select * from 表1 [inner] join 表2 on 过滤条件

2外连接

左外:select * from 表1 left join 表2 on 过滤条件
右外:select * from 表1 right join 表2 on 过滤条件
左外连接,左边的表数据全部显式(包括null),同理右外连接。

1.4.2子查询

就是创建临时表(子表),也就是多个select的连接。
有三种情况
①子表是一个值(单行单列):where 字段 = (select…)
②子表是多个值(多行单列):where in/all/any (select…)
③子表是表(多行多列):where inner/right/left join(select…)

二、常用操作

①对于group by的进一步分析

分组,其实是把多个数据放在一个单元格里面,但是默认显式的是第一条数据,用聚合函数来操作的是一个单元格里面的所有数据

java model 非数据库字段 数据库非怎么表示_字段_02

select count(id) where name = “sela” group by name; // count(id) = 2
select sum(score) where name = “sela” group by name; // sum(score) = 100

同理group_concat也是这样与group by使用的。

②count()的介绍

count() 该行数据各个字段都是null的话就不参与计算个数,MYISAM存储引擎时效率比1的高
count(1) 该行数据各个字段都是null的话也参与计算个数 ,INNOB存储引擎时效率比
的高
count(字段名) null不参与计算个数 性能慢

③distinct 去重

  • 只用于select语句中,放在字段前select后,对所有展示的字段数值都相同菜去重;对null不过滤。
  • 若只想对某一个字段去重,有两种方法
    方法一:group_concat(distinct 字段1) as 字段1,字段2
    方法二:group_by

④selct 1 和exists()的连用

select 1 + exists()作为子查询中的判断子查询结果是否存在。。。。效率高
exists() 返回的时boolean
eg:
where exists(select 1 from table1 where…)

⑤union和union all的用法 (并集操作)

前提:各个select集合的结果要有相同的个数列,并且数据类型得一样的

作用:将2个select语句的结果作为一个整体显示出来。

区别:

union 去重; union all 不去重

eg:

select sname from student

union

select gname from grande

java model 非数据库字段 数据库非怎么表示_java_03

mysql把字段值相同的另一个字段值拼接起来

SELECT id, connect_id , GROUP_CONCAT(id SEPARATOR ‘,’) as aaa from pc_apply where connect_id != 0 GROUP BY connect_id

java model 非数据库字段 数据库非怎么表示_java_04