MYSQL基础

MYSQL基础

创建的三种方式:

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.整数:int(m) 和bigint(等效java中的long),m代表显示长度 需要结合zerofill关键字使用
	create table t_int(id int,age int(10) zerofill);
	insert into t_int values(1,20);
	select * from t_int;
2.浮点数:double(m,d) m代表总长度 d代表小数长度 m=5 d=3 23.456

主键约束

约束:创建表时给表字段添加的限制条件
主键:表示数据唯一性的字段称为主键
主键约束:用于限制字段的值必须唯一并且不能为null(唯一切非空)
列的约束:
	主键约束:primary Key
	唯一约束:unique
	非空约束:not null

主键约束+自增 primary key auto_increment

自增规则:历史最大值+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

添加注释

创建表时给字段添加注释
格式:
	create table t3(id int primary key auto_increment comment '这是主键',name varchar(10) comment '这是名字');
	select create table t3;

导入*.sql文件

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值