365充值真人注册-super365体育官网下载-365bet体育开户

(Mysql)SQL语句全解!!初上手JDBC?不知道怎么敲SQL语句?不知道关键字?来看本篇文章!带你领悟近乎全部的SQL语句!

(Mysql)SQL语句全解!!初上手JDBC?不知道怎么敲SQL语句?不知道关键字?来看本篇文章!带你领悟近乎全部的SQL语句!

1. SQL查询命令详解代码语言:javascript复制SELECT 字段1,字段2,字段3 FROM 表文件名1.1 FROM命令1.执行顺序:mysql共有7个查询命令,FROM命令永远是第一个执行的查询命令

2.执行作用:FROM命令相当于一个读取流,分则将硬盘上表文件加载到内存中生成一个【临时表】

供后续查询命令使用

由于查询命令对临时表数据进行操作,因此查询命令执行时,不会修改表文件原有的数据

语句详解:

FROM 表文件名

创建出一个 【临时表1】

临时表名称会与硬盘表文件名称保持一致SELECT 字段1,字段2,字段3

1.select由于在FROM之后执行的,因此操作的是在内存中生成的【临时表1】

2.select会向指定字段下的所有数据读取出来,在内存中将读取的数据组成一个全新的临时表,得到【临时表2】1.2 临时表1.2.1 临时表的定义临时表是由查询命令在执行时,在内存中生成的表文件 临时表一般是隐藏文件,不必在意

每一个查询命令在执行时,实际上操作都是上一个查询命令生成的临时表1.2.2 临时表生命周期在当前查询命令执行完毕后,MySQL服务器自动将上一个查询命令生成的临时表从内存中销毁。用户最终看到的临时表只能是查询语句中,最后一个查询生成的临时表1.2.3 七个查询命令与临时表之间关系7个查询命令中,只有FROM命令不需要操作临时表,FROM负责将硬盘上表文件加载到内存中生成的一个临时表

剩下6个查询命令操作的都是上一个查询命令生成的临时表7个查询命令中,只有GROUP BY命令在执行完毕后,才有机会在内存中生成多个临时表。

其他5个查询命令在执行完毕后,只能在内存中生成一个临时表7个查询命令中,只有HAVING命令在执行完毕后,不会生成新临时表。负责将GROUP BY生成的临时表中不满足条件的临时表从内存中进行删除处理1.3 WHERE命令代码语言:javascript复制 SELECT 字段1,字段2 FROM 表文件名 WHERE 字段2=值执行顺序:代码语言:javascript复制 FROM==>WHERE>SELECT书写顺序:代码语言:javascript复制SELECT 字段名,函数,子查询

FROM 表文件名

WHERE 逻辑运算1.3.1 WHERE作用1.循环遍历临时表所有的数据和,每次得到一个数据和,根据数据和信息判断数据和是否需要被定位。

2.在循环完毕后,WHERE命令将所有定位的数据行读取出来在内存中生成一个临时表进行保存

1.3.2 ‘与’ 和 ‘或’ - and 和 orand:‘与’ 运算符

相当于 &&or:‘或’ 运算符

相当于 ||示例使用方法===↓↓=↓↓=

代码语言:javascript复制select * from 表文件名 字段名 = 某值 and(并且) 逻辑运算符

select * from 表文件名 where 字段名 = 某值 or(或者) 字段名 = 某值 or 字段名 = 某值1.3.3 in 运算符该运算符在筛选字段名相同情况下可以简化or运算符的运算代码语言:javascript复制from 表文件名 where 字段名 in(值,值,值,值,值)

# ============================================ #

where 字段名 in(值,值,值,值,值)

# 相当于:

where 字段名 = 值 or 字段名 = 值 or 字段名 = 值

# 本身in只需要一个或多个值就可以了,所以还可以这样子玩

from 表文件名 where 字段名 in(

select 值,值,值 from 表文件名

)1.3.4 not in 运算符该运算符翻译过来就是:不是或者不能代码语言:javascript复制from 表文件名 where 字段名 not in(值,值,值,值,值)

# ============================================ #

where 字段名 not in(值,值,值,值,值)

# 相当于:

where 字段名 != 值 and 字段名 != 值 and 字段名 != 值1.4 MySQL中的null值 在MySQL中null值,不表示空含义。它表示一个不确定的值,这个值既然是不确定的,因此无法进行任何运算

1.4.1 is null 运算符该运算符是MySQL专门给null值查询创建的关键字代码语言:javascript复制select * from 表文件 where 字段 = null #无法得到真实数据

from 表文件 where 字段名 is null1.4.2 is not null 运算符查询**【不为null】**代码语言:javascript复制select * from 表文件 where 字段 != null #无法得到真实数据

from 表文件 where 字段名 is not null1.5 模糊查询like 模糊查询代码语言:javascript复制select * from 表文件名 where 字段 like 值以s开头的字符串【前置条件模糊查询】: s%

% 是一个通配符,表示一个长度的任意字符串以s结尾的字符串【后置条件模糊查询】:**%s**某字符串中包含了s : %s%字符串中第二个字符是A : _A%

_下划线是通配符,表示一个任意字符例如:

代码语言:javascript复制# 查找出存在 s字符的所有数据

select * from 表文件名 where 字符 like '%s%'1.6 聚合函数用于对临时表指定字符按下【所有内容】进行统计的函数包含方法为: max(字段)、min(字段)、sum(字段)、avg(字段)、count(字段)max(字段): 返回指定字段下最大值

代码语言:javascript复制select max(字段名) from 表文件名 where 字段名 = 值max(字段): 返回指定字段下最小值

代码语言:javascript复制select min(字段名) from 表文件名 where 字段名 = 值sum(字段): 返回指定字段下所有数据相加之和

代码语言:javascript复制select sum(字段名) from 表文件名 where 字段名 = 值avg(字段): 返回指定字段下所有的数据平均值

代码语言:javascript复制select avg(字段名) from 表文件名 where 字段名 = 值count(字段): 返回指定字段下内容不等于null的数据个数

代码语言:javascript复制select avg(字段名) from 表文件名 count(*) //统计临时表下所有数据行个数,不考虑数据是否存在null

1.7 group by 命令 - 分组分组查询命令代码语言:javascript复制select * from 表文件名 group by 依据执行顺序代码语言:javascript复制FROM==>WHERE==>GROUP BY==>SELECT示例代码语言:javascript复制SELECT 字段名,函数名,子查询

FROM 表名称

WHERE 定位数据行条件

GROUP BY 分组字段如果同时出现 WHERE 与 GROUP BY,那么 GROUP BY 应该再 WHERE 之后1.7.1 执行原理GROUP BY 执行时

首先根据分组字段种类,将临时表中的数据行进行分类

然后将具有相同特征的数据行读取出来保存到一个全新的临时表中

七各查询命令中,只有GROUP BY有机会再执行完毕后,一次生成多个临时表

1.7.2 多字段分组代码语言:javascript复制SELECT 字段名,字段名 FROM 表文件名 GROUP BY 多字段规则:

1.多字段分组时,分组字段出现顺序对于最终查询结果是没有任何影响的。

代码语言:javascript复制GROUP BY 字段1,字段2 # GROUP BY 字段2,字段1 两者结果是一样的2.多字段分组时,GROUP BY 一次只能对一个分组字段进行分组

代码语言:javascript复制GROUP BY 字段1,字段2 # 该语句需要执行两次,一次分字段1,一次分字段23.多字段分组时,从第二个分组字段开始,操作的是上一个分组字段生成的临时表

代码语言:javascript复制GROUP BY 字段1,字段2 # 当执行GROUP BY 字段2时,操作的临时表由GROUP BY 字段1生成的1.8 order by 命令 - 排序sql命令的查询,默认是升序排序代码语言:javascript复制select 字段名1,字段名2,字段名3 from 表文件名 order by 排序依据 desc(降序)1.9 having 命令通过统计临时表决定是否删除临时表

代码语言:javascript复制select 字段名1,cunt(*) from 表文件名 group by 字段名1 having 依据执行顺序:

代码语言:javascript复制FROM==>WHERE==>GROUP BY==>HAVING==>SELECT HAVING 命令不能独立出现在查询语句,只能出现在GROUP BY后面

执行原理:HAVING命令在GROUP BY之后执行的。

它负责将GROUP BY生成临时表中不满足条件的临时表从内存中删除掉

七个查询命令中,只有HAVING命令不会生成临时表,不但不生成,若条件不满足还会删除临时表

1.10 limit 命令MySQL服务器中,表文件字段位置从1开始计算,表文件数据行位置从0开始计算代码语言:javascript复制select * from 表文件名 order by 依据字段 desc limit 0,1执行顺序:代码语言:javascript复制FROM ==> WHERE ==> GROUP BY ==> HAVING ==> SELECT ==> ORDER BY ==> LIMIT示例:

代码语言:javascript复制SELECT 字段,函数,子查询

FROM 表

WHERE 定位数据行条件【逻辑运算/特殊运算符】

GROUP BY 分组字段,多个分组字段以 ‘,’ 号隔开

HAVING 对临时表进行删除判断条件

ORDER BY 排序字段

LIMIT 起始行位置,从起始行开始向下截取的行数执行原理:

从临时表中指定位置的数据行开始,向下截取指定数量的数据行。

将截取出来的数据行保存到一个全新的临时表2. 联表2.1 多表查询概述:多张表数据行合并到同一个临时表,然后使用【六个查询命令】根据需求对临时表进行定位分组排序等操作。

最终为用户提供需要的数据的查询过程

关键点:如何将多张表的信息合并到一张表?

2.2 连接查询合并方案首先确保两张表之间存在【隶属关系】,才可以使用连接查询合并方案将两张表数据行沿着水平方向进行拼接,最终可以得到一个拥有【完整隶属关系】新数据行2.3 联合查询合并方案 / 内连接不需要两张表之间之间存在【隶属关系】将两张表中数据行沿着垂直方案进行堆上代码语言:javascript复制from 一方表 join 多方表

from 多方表 join 一方表

on 条件过滤 where 逻辑运算符2.4 外连接过滤方案需要被帮助表:不要被帮助表:执行原理:如果【需要被帮助表】中某行数据与【不需要被帮助表】所有的数据行都无法拼接为合法数据

此时依然将这个数据作为一个独立的数据行存入到新的临时表

2.4.1 左外连接过滤方案 / 左外连接查询代码语言:javascript复制FROM 需要被帮助的表 LEFT JOIN 不需要被帮助的表

ON 合法数据行定位条件2.4.2 右外连接过滤方案 / 右外连接查询代码语言:javascript复制FROM 不需要被帮助的表 RIGHT JOIN 需要被帮助的表

ON 合法数据行定位条件3. 子查询:代码语言:javascript复制select 字段名,函数 from (子查询)from 将硬盘上表文件加载道内存中生成一个临时表

指向内存中已经存在的临时表,此时可以借助于子查询提供这个临时表示例:

代码语言:javascript复制select 字段名1,字段名2 from(子查询语句) as 自定义表名where 可以通过子查询得到进行判断数据

示例:

代码语言:javascript复制select 字段名1,字段名2 from 表名 where 字段名 判断条件 (子查询语句)group by 不可以通过子查询得到数据,但是可以通过分组字段进行分组

having 可以通过子查询得到删除临时表时需要的数据

示例:

代码语言:javascript复制select 字段名,函数

from 表名

group by 字段名

having 函数 判断条件 (子查询语句)order by 不可以通过子查询得到数据,只能进行排序字段对表进行排序limit 也不可以通过子查询得到数据。4. 数据类型4.1 整数类型通常就是:int 类型

4.2 字符串类型分类:varchar 与 char4.2.1 varchar(m) :定长可变字符串可以规定字符的最大存储个数

代码语言:javascript复制ename varchar(3) 3表示ename字符按可以存储3个英文字符或者3个中文字符

描述:

定长:当前字段可以存储的字符个数是固定的可变:字段在硬盘上存储字符空间可以根据实际情况进行【缩小】

!可变的字段值只能是比设置最大值的小或者相等;

实际值 <= m代码语言:javascript复制ename varchar(3)

insert into test1 values('abc') // 硬盘 【a】 【b】 【c】

insert into test1 values('de') // 硬盘 【d】 【e】

insert into test1 values('defg') // 报错!超出规定范围4.2.2 char(m):定长不可变字符串代码语言:javascript复制sex char(1) // 1表示可以存储1个英文字符或者1个中文字符不可变:字段在硬盘上存储空间是固定的代码语言:javascript复制sex char(3)

insert into test1 values('abc') // 硬盘 【a】 【b】 【c】

insert into test1 values('de') // 硬盘 【d】 【e】 【空格】 针对char类型字段数据读取时,MySql服务器自动将字符串中结尾处空格去掉

若是插入字符串以空格结尾,不要添加道由char类型修饰的字段

4.3 日期与时间类型MySQL允许对TIME、DATETIME 和 TIMESTAMP 使用小数秒,精度最高可达微秒(6位小数)。要定义包含小数秒日期和时间数据类型的列

示例:

代码语言:javascript复制TIME(3)

DATETIME(6)

TIMESTAMP(0)4. 约束约束是mysql服务器中提供的一个工具,它确保每一项数据都是有意义

4.1 非空约束要求管理的字段不能存储null值代码语言:javascript复制CREATE TABLE test1(

字段名 字段类型,

字段名 字段类型 NOT NULL // 为当前行字段添加非空约束

)4.2 唯一性约束要求管理的字段存储值不能有重复,但是可以存储null值代码语言:javascript复制CREATE TABLE test2(

字段名 字段类型,

字段名 字段类型 unique // 为当前行字段添加唯一性约束

)4.3 主键约束管理主键字段,要求主键字段内容不能为null同时也不能出现重复值代码语言:javascript复制CREATE TABLE test3(

字段名 字段类型 PRIMARY KEY // 为当前行字段添加主键约束

)4.4 外键约束管理外键字段,要求外键字段的值应该来自于关联的一方表中主键字段的值,但是可以存储null值代码语言:javascript复制ALTER TABLE 多方表名

ADD CONSTRAINT 外键约束对象名(自定义) foreign key(外键字段名)

REFERENCES 一方表(主键字段)5. 索引5.1 查询速度问题由于表文件存放数据行会随着时间推移,会越来越多。

where命令在指向时选哟对表文件所有的数据行进行遍历

所以时间越久,数据行越大,where命令执行时消耗时间就会不断增加

5.2 索引作用在表文件数据行增加时候,不会大幅度降低查询语句执行效率

索引工作原理:代码语言:javascript复制数据1 【100,80,20,50,90,120,30】 20

数据2 【11,15,19,22,56,66,181】 15分别从两组数据得到最小值,通过实验可发现:

从数据2得到最小值消耗时间相对较少从数据1进行判断时,首先将数据进行一次排序,然后根据排序顺序定位最小值由于数据2实现排好了顺序,因此直接从第一位抓取数据,避免排序过程,因此执行效率高 翻译为人话就是:

事先将字段中内容进行排序,在WHERE命令进行定位时,避免在表中所有的数据行进行遍历将会提升查询速度5.3 索引管理:将字段内容交给某个索引进行管理代码语言:javascript复制create index 索引名 on 表名(字段)查询表文件关联的索引代码语言:javascript复制show index from 表名 在为表文件绑定【主键约束】,【唯一性约束】,【外键约束】时

mysql服务器自动将当前字段数据进行排序交给指定索引管理

删除表文件指定索引代码语言:javascript复制DROP INDEX 索引名 ON 表名6. 执行计划命令格式:exlian 查询语句6.1 作用展示当前查询得到结果是否通过索引来进行定位

DBA通过执行计划了解在本次查询过程,是否使用预先创建好的索引6.2 执行计划对于查询语句执行效率判断-在执行计划中,通过type属性展示查询语句执行效率

如下介绍属性由:5.2.1 》 代表执行效率分类:【慢----快】6.2.1 ALLwhere对表文件所有的数据进行遍历,才得到了查询结果

这种级别查询语句,随着数据行增加导致执行速度大幅度降低 (对于DBA来说,会极力避免这种级别查询)

6.2.2 typewhere 对表文件所有的数据进行遍历,在select抓取字段内容时,从索引中抓取。

这种级别虽然在抓取数据速度有所提升,但是依然面对随着数据行增加导致执行速度大幅度降低的问题代码语言:javascript复制select ename from emp; // all

create index name_index on emp(ename)

select ename from emp; // type,此时对于查询速度提升是非常微小的 (对于DBA来说,会极力避免这种级别查询)

6.2.3 rangewhere 不会对表文件数据行进行遍历,而是直接从索引中得到需要定位的数据行行数,将大幅度提升查询效率。这是DBA进行SQL优化时要保证的最低级别。代码语言:javascript复制explain select * from 表名 where 判断条件 // all

create index name_index on 表名(字段)

explain select * from 表名 where 判断条件 // range 但是这种级别存在【不稳定性】,当字段内容发生变化时,导致索引失效

mysql 服务器如果发现从索引得到数据行行数达到了表文件总行数的1/3时,此时考虑成本问题将会放弃使用索引

6.2.4 refwhere 不会对表文件数据行进行遍历

而是直接从索引中得到需要定位的数据行行数,同时在这种情况下根据定位条件一次只能得到一个数据行,属性比较稳定执行效率,DBA努力达到的优化程度6.2.5 const根据主键字段上索引进行定位,是执行效率最快的。 但是在实际使用过程中,是基本不会用到的

7. 视图7.1 定义是MySql服务器中的一个对象,用于存储查询语句。

目的提供查询语句使用效率,避免在多处地方重复性开发相同查询语句

7.2 命令将查询语句交给一个视图对象管理

代码语言:javascript复制CREATE VIEW 视图对象名 AS 查询语句通过视图对象调用管理查询语句

代码语言:javascript复制SELECT * FROM 视图对象名7.3 额外功能视图对象存储一个查询语句,同时视图对象拥有对当前查询语句关联的表文件操作能力

通过视图对象对关联表文件数据行进行查询通过视图对象对关联表文件数据行进行删除通过视图对象对关联表文件数据行进行更新7.4 视图作用提高了查询语句复用性,避免了在多出地方重复进行查询语句开发行为隐藏业务中涉及表关系,开发人员通过视图进行操作时是不会知道其具体操作的表8. 存储引擎8.1 定义是MySql服务器对于表文件内容管理方式。

目前MySql服务器主要采用两种方式:

INNODB (安全性)MyIsam (执行速度)8.2 管理命令查看MySql服务器支持存储引擎种类

代码语言:javascript复制show engines;设置表文件依赖存储引擎

代码语言:javascript复制show create table 表名

alter table 表名 engine = myisam8.3 MyIsam 存储引擎特征1.在对表文件内容机械能修改时,不会进行备份操作

提高操作执行效率,但是在操作完毕后无法取消本次操作

MyIsam存储引擎 :使用三个文件存储表文件信息 test1.frm: 存储表文件文件信息test1.myd: 存储表文件数据行信息test1.myi: 存储表文件字段关联的索引信息8.4 INNODB 存储引擎:在对表文件的内容进行修改时,首先进行一次备份

在进行相关操作,因此执行效率相对较慢。

但是在执行完毕后,由于有备份的存在,可以使用备份取消当前操作。

这样可以增加数据的安全性INNODB存储引擎:使用一个文件存储表文件信息

test1.from: 存储表文件字段信息,

存储表文件数据行信息,

存储表文件字段关联的索引信息9. 事务:事务是MySql服务器提供一个管理对象,用于对当前表文件备份进行管理当多个用户同时请求修改某个数据时,通过事务可以保证数据从一个一致性状态变更为另外一个一致性的状态

例如:A用户给B用户转10000元, 需要在A用户帐户中减少10000元,在B用户的帐户中增加10000元,这两个操作应该是一个原子操作,要么两个都修改成功,要么这两个操作都没发生

在MySQL数据库中的InnoDB 存储引擎支持事务, MyISAM 不支持事务

9.1 ACID特性:原子性(Atomicity) :把事务中所有的操作看作是一个整体,事务对数据的修改要么完全提交要么回滚一致性(Consistency) :在事务完成时,必须使所有的数据从一个一致性状态变更为另外一个一致性状态隔离性(Isolation) :一个事务中的操作语句对数据所做的修改必须与其他事务所做的修改相隔离.持久性(Durability) :在事务完成后,所做的修改是永久的9.2 使用指令代码语言:javascript复制start transaction; // 通知MySql服务器提供一个事务对象,这个事务对象对接下来操作产生所有备份机械能管理

delete from 表名 where 判断条件 // 生成备份文件:表名.bak

rollback; // 通知MySql服务器将本次操作中所有备份信息覆盖道表文件,来取消本次操作

commit; // 通知MySql服务器将本次操作中生成所有的备份信息进行删除,称之为提交操作10. 👍Mysql 专栏 - 前篇回顾👍(Mysql)系统性带你认识 Mysql 数据库!本文带你了解数据库的概念与基本对表(数据库)操作的SQL语句!

相关推荐