数据库操作
cmd进入数据库:
mysql -u账号 -p密码 charset utf8
查询已存在的数据库和数据表:
show databases;
show tables;
进入数据库语句:
use 数据库名称;
select database(); // 查看进入的是哪个数据库
创建删除数据库:
create database if not exists 数据库名称 charset utf8;
drop database if exists 数据库名称;
查看建库建表的语句:
show create database 数据库名称;
show create table 表名称;
创建表语句:
create table 表名称(
列名称 数据类型 primary key auto_increment,
列名称 数据类型 not null default 默认值,
列名称 数据类型 unique
); //字段约束的具体内容写在后面
desc 表名; //查看表结构
DML数据操作语言
插入(insert):
insert into 表名 (列名,列名,列名) values (数据值,数据值,数据值);
//如果不写列名则所有的数据值都要插入
修改(update):
update 表名 set 列名 = 数据值 where 条件;
//where 字句用于对数据进行筛选过滤,保留符合条件的记录,将不符合的条件剔除
删除(delete):
delete from 表名 where 条件;
//where 字句用于对数据进行筛选过滤,保留符合条件的记录,将不符合的条件剔除
DQL数据查询语句
select 列名 as 列别名,列名 as 列别名
//如果查询中存在大量的重复记录,可以使用distinct剔除重复的记录
from 表名 as 表别名,表名 as 表别名
where 条件 //在分组之前的筛选
//ifnull(a,b):判断指定的列a是否包含Null值,如果有,用数值b代替
group by 列名
having 条件 //在分组之后的筛选
order by 列名 //默认是升序asc,降序是desc
limit (页码-1), 每页显示的记录数
//以上是语句书写顺序,执行顺序有细微差别
//from -> where -> select ->...
//所以where 条件中不能使用列别名
例题:
- 查询emp表中总薪资(薪资+奖金)大于3500的所有员工,显示员工姓名、总薪资
select name as 姓名 , sal+ifnull(bonus,0) as 总薪资 from emp where sal+ifnull(bonus,0) >3500;
- 查询emp表中薪资在3000和4500之间的员工,显示员工姓名和薪资
select name, sal from emp where sal between 3000 and 4500;
//between...and... 在...和...之间
- 查询薪资不为1400、1600、1800的员工
select name, sal from emp where sal not in(1400,1600,1800);
//not in 用法
- 查询emp表中姓名中包含"涛"和以"刘"开头并且姓名为2个字的员工,分别显示员工姓名
select name from emp where name like '%涛%';
select name from emp where name like '刘_';
//%表示任意0个或者多个,下划线_表示任意一个
- 对emp表按照职位进行分组, 并统计每个职位的人数, 显示职位和对应人数
select job,count(*) from emp group by job;
//聚合函数:count()、max()、sum()、avg()统计分组之后数据
- 查询本月过生日的所有员工
select name,birthday from emp where month(curdate())=month(birthday);
//curdate()表示获取当前的日期年月日,curtime()表示获取当前时间时分秒,sysdata()=curdate()+curtime()
//-- month(curdate()) 获取当前月份 -- month(birthday) 获取员工出生的月份
- 查询emp表中的所有记录,分页显示:每页显示3条记录,返回第 2 页。
select * from emp limit 3, 3;
//第一个三表示第四条记录,按照每页三天记录就是第二页的第一条
- 列出薪资比’王海涛’薪资高的所有员工,显示姓名、薪资
select name,sal
from emp
where sal>( select sal from emp where name='王海涛' );
//做查询时一步一步来,拆分再合并
- 明天补…