MySQL注释:(1)#开头 (2)--空格 开头 (3)/* 多行注释 */
操作数据库:
显示数据库:show databases
创建数据库:create database [ if not exists ] <数据库名>;
删除数据库:drop database [ if not exists ] <数据库名>;
查看当前使用的数据库:select database();
退出:quit 或 exit
查看服务器中的数据库,并把数据库的字符集修改为utf8:alter database <数据库名> character set utf8;
操作表:
创建表:create table [ if not exists ] 表名(字段1 字段类型(长度)约束,.....)[ charset=utf8 ];
常用约束:
主键约束:primary key(保证数据唯一性),不能重复,不能为null
唯一约束:unique [key] ,不能重复,可以为null
非空约束:not null
默认约束:default
外键约束:foreign key 添加方式:constraint 外键名 foreign key(列名) references 表名2(列名2);
自动增长:auto_increment
删除表:drop table [ if not exists ] <表名>;
查看表的字段信息:desc 表名;
查看所有表:show tables;
添加字段:alter table 表名 add 字段名 字段类型(长度)约束;
修改字段:alter table 表名 modify 字段名 字段类型(长度)约束;
修改字段名称:alter table 表名 change 字段名 字段类型(长度)约束;
删除字段:alter table 表名 drop 字段名;
修改表名:rename table 表名 to 新表名;
查看表的创建细节:show create table 表名;
修改表的字符集:alter table 表名 character set gbk;
在MySQL中,字符串类型和日期类型都要用单引号括起来,空值:null
1)插入操作:insert
语法:insert into 表名(列名1,列名2 ...)values (列值1,列值2...);
注意:列名和列值的类型、个数、顺序要一一对应
可以把列名当做java中的形参,把列值当做实参,参数不要超出列定义的长度
如果不能添加中文数据:
查看数据库编码的具体信息:show variables like ‘character%’;
临时更改客户端和服务器结果集的编码:set character_set_client=gbk;
set character_set_results=gbk;
set NAMES ‘gbk’;
2)修改操作:update
语法:update 表名 set 列名1=列值1,列名2=列值2 ..... where 列名=值;
3)删除操作:delete
语法:delete from 表名 [ where 列名=值 ];
删除表中所有记录:delete from 表名;
使用 truncate 删除表中记录,(先把表删除,然后再创建空表)
语法:truncate table 表名;
delete 删除表中的数据,表结构还在,删除后的数据使用日志可以找回
truncate 删除是把表直接 drop 掉,然后再创建一个同样的新表
truncate 删除的数据不能找回,执行速度比 delete 快
4)数据查询:select
语句不会对数据进行改变,而是让数据库发送结果集给客户端,查询返回的结果集是一张虚拟表
语法:select 列名 from 表名 [ where -- group by -- having -- order by -- limit ];
group by 对结果进行分组
having 分组后的筛选条件
order by 对结果排序 asc 升序 desc 降序
limit 结果限定 限定查询结果的起始行,以及总行数
having与where 的区别:
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数),where后边不可以
查询语句执行顺序:from 表 where - group by - having - select - order by - limit
5)模糊查询:关键字 like
通配符:_ 任意一个字符 % :任意0~n个字符
去除重复记录:distinct
NULL转换成数值0的函数IFNULL:ifnull(列名,0);
6)聚合函数
count():统计指定列不为null的记录行数
max():计算指定列最大值,如果列为字符串类型,那么使用字符串排序运算
min():计算指定列最小值,如果列为字符串类型,那么使用字符串排序运算
sum():计算指定列数值和,如果列不是数值类型,结果为 0
avg():计算指定列平均值,如果列不是数值类型,结果为 0
多表查询:
1,合并结果集
union:去除重复记录 select * from t1 union select * from t2;
union all:不去除重复记录 select * from t1 union all select * from t2;
注意:被合并的两个结果:列数必须相同,列类型可以不同
2,内连接
select * from 表1,表2 where 表1.字段1 = 表2.字段2;
标准的内连接:
select * from 表1 inner join 表2 on 表1.字段=表2.字段; on后面是主外键关系
3、外连接
包括左连接和右连接,外连接的特点:查询出的结果存在不满足条件的可能
左连接:以左表为主表,右表为从表
select * from 表1 left outer join 表2 on 表1.字段=表2.字段;
左连接是先查询出左表,然后查询右表,左表中满足和不满足条件都显示出来,右表不满足条件的显示null
右连接:
先把右表中所有记录查询出来,然后左表满足条件的显示,不满足显示null
连接查询总结:
连接不限于两张表,连接查询也可以是三张、四张,甚至N张表的连接查询,通常连接查询不可能需要整个笛卡尔 积,而只是需要其中一部分,那么这时就需要使用条件来去除不需要的记录,这个条件大多数情况下都是使用主外键关系去除
子查询:
一个select语句中包含另一个完整的select语句
子查询出现的位置:
where后,作为被查询的条件的一部分
from后,作临时表
子查询出现在where后作为条件时,还可以使用 any all 关键字
查询条件:工资高于30部门所有人工资,其中30部门所有人工资是子查询。高于所有需要使用all关键字