create database 名字;
create database day01;
create database 名字 character set 字符集;
create database day01-1 character set utf8;
create database 名字 character set 字符集 collate 校对规则;
create database day01-2 character set utf8 collate utf8_bin;
查看的方式:
show databases; 查看所有的数据库
show create database 数据库的名字
show create database day01;
修改的方式:
修改数据库的字符集:
alter database 数据库的名字 character set 字符集
alter database day01 character set gbk;
删除数据库:
drop database 数据库名字;
drop database day01;
其他数据库操作指令:
切换数据库:
uer 数据库名字
use day01;
查看一下当前正在使用的数据库
select database();
创建表
create table 表名(
列名1 列的类型(长度) 约束,
列名2 列的类型 约束,
);
列的类型:
java sql
int int
char/string char/varchar
char:固定长度
varchar:可变长度
char(3): 中间只有一个字符的话,其他的是空格填满
varchar(3):不会填充长度代表的是字符的个数
double double
float float
boolean boolean
date date : YYYY-MM-DD
time : hh:mm:ss
datetime : YYYY-MM-DD hh:mm:ss 默认值是null
timestamp : YYYY-MM-DD hh:mm:ss 默认使用当前时间
text : 主要用来存放文本的
blob : 存放的是二进制
列的约束:
主键约束:primary Key
唯一约束:unique
非空约束:not null
实例:学生
1、名字
2、年龄
3、性别
4、学号
创建表:
create table student(
sname varchar(10),
age int,
sex int
);
create table student()charset=utf8;
查看所有的表:
show databases;
show tables;
查看表的创建过程:
show create databse 名字;
show create table 名字;
查看表的结构
desc student;
删除表:
drop table 名字;
添加表字段:
最后添加格式:
alter table 表名 add 字段名 类型;
alter table student add
最前面添加格式:
alter table 表名 add 字段名 类型 first;
alter table student add age int first;
xxx的后面添加格式:00
alter table 表名 add 字段名 类型 after xxx;
alter table student add address varchar(10) after math;
删除字段
格式:alter table 表名 drop 字段名
alter table student drop age;
修改字段名和类型
格式:alter table 表名 change 原名 新名 新类型;
alter table student change sname name int;
数据相关sql
create database newdb1 charater set utf8;
use newdb1;
create table emp(id int,name varchar(10),age int);
1.插入数据
1、全局插入数据
inset into 表名 values(值1,值2,值3);
inset into emp values (1,"tom",18);
2、指定字段格式:
insert into 表名(字段名1,字段名2)values(值1,值2);
insert into emp (name,age) values('jerry',15);
3、批量插入数据
insert into emp(name,age) values('刘备',50),('关羽',40),('张飞',30);
insert into emp values(4,'悟空',500),(5,'八戒',300),(6,'沙僧',20);
2.中文问题
insert into emp values(3,'刘德华',18);
如果报错执行下面语句即可:set name gbk;
3.查询数据
格式: select 字段信息 from 表名 where 条件;
1、查询所有员工的姓名
select name from emp;
2、查询室友员工的所有信息
select id,name,age emp;
select * from emp;
3、条件查询
select name,age from emp where age<100;
4.修改数据
格式:update 表名 set 字段名=值,字段名=值 where 条件
1、修改孙悟空名字为齐天大圣
update emp set name='齐天大圣' where name='孙悟空';
2、修改刘备的年龄为50岁
update emp set age=500 where age=50;
3、修改30岁以下的员工年龄为10岁
update emo set age=10 where age<30;
5.删除数据
格式:delete from 表名 where 条件
1、删除Tom
delete from emp where name='Tom';
2、删除年龄10岁的员工
delete from emp where age=10;
3、删除所有数据
delete from emp;
自增规则:历史最大值+1
格式:
create table t2(id int primary key auto_increment,name varchar(10));
insert into t2 values(null,'aaa'); 1
insert into t2 values(null,'bbb'); 2
insert into t2 values(10,'ccc'); 10
isnert into t2 values(11,'ddd'); 11
delete from t2 where id>=10;
insert into t2 values(null,'eee') 12
1、linux:
source /home/soft01/桌面/emp.sql;
2、window:
source d:emp.sql;
检查是否成功
show database;
use newdb3;
show tables;
select *from emp;
set names gbk;
is null 和 is not null
1、查询上级领导为空的员工姓名
select ename from emp where mgr is null
2、查询员工奖金为null的员工姓名,工资和奖金
select ename,sal,comm from emp where comm is null;
3、查询有上级领导的员工的姓名和工资
select ename sal from emp where mgr is not null;
去重
1、查询员工从事的职业有哪几种
select distinct job from emp;
比较运算符
1、查询工作不是销售的员工的姓名和工作
select ename job from emp where job!='销售';
select ename job from emp where job<>'销售';
and和or
and 类似java的 &&
or 类型Java的 ||
1、查询一号部门中工资低于1500的员工信息
select * from emp where deptno=1 and sal<1500;
2、查询二号部门员工或工资高于2000的员工姓名、工资和部门编号
select ename,sal,deptno from emp where deptno=2 or sal>2000;
between x and y 包含x和y
1、查询工资在2000到3000之间的员工信息
selecr * from emp where sal between 2000 and 3000;
in(x,y,z)
1、查询包含多个条件的信息
查询工资为800,3000,1500的员工信息
select * from emp where sal in(800,3000,1500);
模糊查询
%:代表0或多个未知字符
_: 代表一个未知字符
举例:
1.以x开头:x%
2.以y结尾:%y
3.以a开头b结尾:a%b
4.第二个字符是a:_a%
5.包含a: %a%
6.第二个字符是a倒数第三个是b: _a%b_;
1.查询名字以孙开头的员工姓名:
select ename from emp where ename like '孙%';
排序 order by
格式:order by 字段名 asc(升序,默认)/desc(降序)
1.查询每个员工的姓名和工资要求按照员工工资升序排序
select ename,sal from emp order by sal;
2.查询三号员工的姓名和工资按照工资的降序排序
select enam,sal from emp order by desc;
3.查询所有员工姓名工资和部门编号,按照部门编号降序排序
select enam,sal,deptno from emp order by deptno desc,sal;
分页查询
格式 limit 跳过的条数,请求的条数
举例:
1.请求第一页的三条数据 limit 0,3
2.第三页的五条数据 limit 10,5
3.第8页的6条数据 limit (8-1)*6,6
1.查询工资最高的前三名 姓名和工资
select ename,sal from emp order by sal desc limit 0,3;
2.查询按照工资升序排序第三页的两条员工信息
select * from emp order by sal limit 4,2;
3.查询工资在1000到3000之间的员工信息 按照工资降序第二页的三条数据
select * from emp where sal between 1000 and 3000 order by sal desc limit 3,3;
聚合查询
对多条数据进行统计查询
求和,平均值,最大值,最小值,计数
1.求和sum(字段名)
-查询一号部门的工资总和
select sum(sal) from emp where deptno=1;
2.平均值avg(字段名)
-查询二号部门的工资平均工资
select avg(sal) from emp where deptno=2;
3.最大值max(字段名)
-查询销售的最高工资
select max(sal) from emp where job='销售';
4.最小值min(字段名)
-查询二号部门工资的最小值
select min(sal) from emp where deptno=2;
5.计数 count(字段)
select count(*) from emp where deptno=2;
分组查询
1.查询每个部门的平均工资
select avg(sal) from emp group by deptno;
2.查询每个部门的工资总和
select sum(sal) from emp group by deptno;
3.查询每种工作的人数
select job,count(*) from emp group by job;
4.查询每个部门工资大于1500的员工人数
select deptno,count(*) from emp where sal>1500 group by deptno;
5.查询一号和3号部门中每个部门的最低工资的人数
select deptno,min(sal) from emp where deptno in(1,3) group by deptno;
having
where后面只能写普通字段条件
having结合group by 使用,后面写聚合函数的条件
关键字的顺序:
select...from 表名 ....where....group by....having...order by.....limit....;
1.查询每个部门的平均工资,要求平均工资大于2000
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
2.查询工资在1000-3000之间的员工,统计每个部门的编号,工资总和,平均工资,过滤掉平均工资低于1800的部门,最后按照平均工资升序排序。
select count(*),deptno,sum(sal),avg(sal) from emp where sal between 1000 and 3000 group by deptno having avg(sal)>2000 order by avg(sal) asc;
别名的方式
select deptno,sum(sal),avg(sal) a from emp where sal between 1000 and 3000 group by deptno having avg(sal)>2000 order by a;
3.查询有上级领导的员工,每个部门的编号,最高工资,最低工资,工资总和,要求工资总和大于5000,最后按照工资总和降序排序
select deptno,max(sal),min(sal),sum(sal),avg(sal) from emp where mgr is not null group by deptno having sum(sal)>5400 order by sum(sal) desc;