1. 什么是SQL语句?
SQL:结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。
数据库是不认识JAVA语言的,但是我们同样要与数据库交互,这时就需要使用到数据库认识的语言—SQL语言。
2. SQL语句的作用?
通过SQL语句可以对数据库管理系统中的数据库,表,表中的数据进行增删改查。
3. SQL语句的分类?
1.DDL(Data Definition Language)数据定义语言
用来操作数据库和表
关键字:create,drop,alter等
2.DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改
关键字:insert,delete, update等
3.DQL(Data Query Language)数据查询语言
用来对数据库中表的数据进行查询
关键字:select,from,where等
4.DCL(Data Control Language)数据控制语言
用来定义数据库的访问权限和安全级别,及创建用户。
关键字:grant, revoke等
5.TCL(Transaction Control Language) 事务控制语言
用于控制数据库的事务操作
关键字: commit,rollback等
4. DDL操作数据库的语法?
1.创建数据库
创建数据库(掌握):create database 数据库名; 默认:utf-8
判断是否存在并创建数据库:create database if not exists 数据库名; 默认:utf-8
存在:不创建
不存在:创建
创建数据库指定字符集:create database 数据库名 character set 字符集(gbk);
2.查询数据库
查询所有数据库:show databases;
查看某个数据库的定义信息: show create database 数据库名称;
3.删除数据库
删除数据库:drop database 数据库名;
4.数据库的其他操作
查看当前使用的数据库:select database();
使用/切换数据库:use 数据库名;
注意:如果想要操作哪个库(创建表),就得先进入到该数据库中
5. DDL操作表的语法?
1.创建表
create table 表名(
字段名1 字段类型1(长度),
字段名2 字段类型2(长度)
…
)
ps:表名会有关键字 解决:换名,两边加上反引号``
ps:只有字符串类型需要手动加长度,其它类型都不需要加长度(默认有)
数据类型:
java的数据类型 mysql数据库的数据类型
int int
float float
double double
char/string varchar
date date yyyy-MM-dd
time HH:MM:SS
datetime YYYY-MM-DD HH:MM:SS
2.查看表
查看某个数据库中的所有表: show tables;
查看表结构: desc 表名称;
查询建表语句: show create table 表名;
快速创建表结构: create table 新表名 like 旧表名; 特点:2张表的结构一样
3.修改表结构
添加表列 : alter table 表名 add 列名 类型;
删除表列 : alter table 表名 drop 列名;
修改列名 : alter table 表名 change 旧名称 新名称 类型;
修改列类型: alter table 表名 modify 列名 新类型
修改表名称: rename table 表名 to 新表名;
4.删除表
直接删除表: drop table 表名;
判断表是否存在并删除表(了解): drop table if exists 表名;
存在就删 不存在就不删了
6. DML操作数据的语法?
1.插入记录
添加全部字段:insert into 表名 values (值1, 值2, 值3);
添加部分字段:insert into 表名 (字段名1, 字段名2, …) values(值1, 值2, …);
2.修改记录
不带条件修改数据:update 表名 set 字段名1 = 值1,字段名2 = 值2 ; 特点:全改
根据条件修改数据:update 表名 set 字段名1 = 值1,字段名2 = 值2 where 字段名=值; 特点:按条件改
关键字:
UPDATE: 修改数据
SET: 修改哪些字段
WHERE: 指定条件
3.删除记录
不带条件删除数据: delete from 表名; 特点:全删
根据条件删除数据: delete from 表名 where 字段名=值; 特点:按条件删
truncate删除表记录: truncate table 表名; 全删
7. delete和truncate删除数据的区别?
delete是将表中的数据一条一条删除;
truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样;
delete删除的数据能够找回,truncate删除的数据找不回来了。
delete 删除表中的数据,但不重置 auto_increment 的值 ;
truncate 摧毁表,重建表,auto_increment 重置为1 。
8. DQL查询数据的语法?
简单查询:
* 查询所有列: select * from 表名;
* 查询指定列: select 字段名1,字段名2... from 表名;
* 别名查询: select 字段名1 as 别名, 字段名2 as 别名... from 表名 as 表别名;
* 清除重复值: select distinct 字段名 from 表名;
清除重复值的关键字为 distinct ,一个 select 语句只能有一个 distinct ,而且只能写在 select 关键字的后面。它的执行流程为,是先将查询出来字段的数据进行组合,然后在对组合的结果进行检查是否存在重复值,如果存在,则只保留一条。
* 查询结果参与运算: select 列名1 + 固定值 from 表名;(参数运算的字段必须为数值型)
null值处理,ifnull(表达式1,表达式2) : 若表达式1的值为null,则返回表达式2的结果;若表达式1的值不为null,则返回表达式1的值。
条件查询:
select * from 表名 where 条件(各种运算符);
取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回。
运算查询:
> 大于
< 小于
<= 小于等于
>= 大于等于
= 等于
<> 、 != 不等于
and(&&) 多个条件同时满足
or(||) 多个条件其中一个满足
not(!) 不满足
范围查询:
&&=between 值1 and 值2
||=in
模糊查询:
like表示模糊查询 select * from 表名 where 字段名 like '通配符字符串',满足通配符字符串规则的数据就会 显示出来,所谓的通配符字符串就是含有通配符的字符串。
MySQL通配符有两个: % : 表示0个或多个字符(任意个字符)
_ : 表示一个字符。
排序查询:
通过 order by 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)。
语法:select * from 表名 where 条件 order by 字段名 [desc | asc] ;
组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。
select * from 表名 where 条件 order by 字段名 [desc | asc] , 字段名 [desc | asc] ;
asc(默认) : 升序 desc : 降序
聚合查询:
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是 对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值。
count() : 统计指定列记录数,记录为null的不统计 ifnull(字段,设置的值)
sum() : 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max() : 计算指定列的最大值
min() : 计算指定列的最小值
avg() : 计算指定列的平均值,如果不是数值类型,那么计算结果为0
聚合函数的使用:写在SQL语句select后字段名的地方 select 字段名... from 表名;
例:select count(age) from 表名;
分组查询:
分组查询是指使用 group by 语句对查询信息进行分组,相同数据作为一组。
group by 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。分组后聚合函数的作用不是操作所有数据,而是操作一组数据。
语法:select * from 表名 where 条件 group by 分组字段 [having 分组条件 ] ;
group by 分组字段 [having 条件]
分页查询:
limit 是限制的意思,所以limit的作用就是限制查询记录的条数。
语法:select * from 表名 limit 跳过条数,查询条数 ;
9. having与where的区别?
having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合函数
10. SQL解析顺序?
SQL书写顺序:
select distinct…from…where…group by…having…order by…limit a,b ;
MySQL解析器执行的顺序:
from:需要从哪个数据表获取数据
where:给出过滤数据表中数据的条件
group by:将过滤出的数据进行分组
having:给出对分组的数据进行过滤的条件
select:取出结果集中的某个列,或者某个列的计算结果
distinct:移除相同的行
order by:按照某种顺序对返回的数据进行排序
limit:限制查询记录的条数