mysql简单介绍与使用

MySQL

关系型数据库

​ oracle db2 mysql sql

非关系型数据库

​ redis memche mongodb nosql

cmd进入

mysql -uroot -p

打密码

sql语句分类

DML

​ 添加、修改、删除、查询

DCL

​ 用户、权限、事务

DDL

​ 逻辑表、数据表、视图、索引

用户管理DCL

添加用户、设置权限

表操作DDL

#查全部表
show tables;
#查某表
desc xxx;
#创建表
CREATE TABLE student(
	列名 数据类型 [约束] [注释] 
	id INT UNSIGNED PRIMARY KEY,
	name VARCHAR(20) NOT NULL,
	sex CHAR(1) NOT NULL,
	birthday DATE NOT NULL,
	tel CHAR(11) NOT NULL,
	type ENUM("","","") NOT NULL,  #选择输入
	INDEX [索引名称] (列名)
	INDEX idx_type(name)  #创建索引
)[注释];

#插入数据
insert into student values(1,"","","","","");
#删除表
drop table xxx;

#插入列
alter table student
	列1 数据类型 [约束] [注释]
add address VARCHAR(200) NOT NULL,
add home CHAR(11) NOT NULL;

modify home VARCHAR(20) NOT NULL; #修改列数据类型
change 列名 新列名 数据类型 [约束] [注释],...;#修改列名称
change home home_add VARCHAR(200) NOT NULL;
drop1,...;#删除列

CREATE INDEX 索引名称 ON 表名();	#创建表索引
ALTER TABLE 表名 ADD INDEX [索引名](列名);	#增加表索引
SHOW INDEX FROM 表名;	#查看表索引
DROP INDEX 索引名称 ON 表名; 	#删除表索引

字段约束

第一范式:原子性

​ 第一范式是数据库的基本要求,不满足这一点就不是关系数据库

​ 数据表的每一列都是不可分割的基本数据项, 同一列中不能有多个值,也不能存在重复的属性。

第二范式:唯一性

​ 数据表中的每条记录必须是唯一的。为了实现区分,通常要为表加上一个列用来存储唯一标识,这个唯一属性列被称作主键列

第三范式:关联性

​ 每列都与主键有直接关系,不存在传递依赖

​ 依照第三范式,数据可以拆分保存到不同的数据表,彼此保持关联

约束名称关键字描述
主键约束PRIMARY KEY字段值唯一,且不能为NULL(一定要使用数字,检索快)
非空约束NOT NULL字段值不能为NULL
唯一约束UNIQUE字段值唯一,且可以为NULL
外键约束FOREIGN KEY保持关联数据的逻辑性

库查询DDL

#使用某库
use xxx;
#创建库
create database xx;
#显示某库
show database xx;

基本查询DML

查什么看最后的输出要求,其他都是限定条件

select *(全部列) from t_emp();
select empno,ename,sal(想要的列) from t_emp;
#起别名
select 
	empno,
	sal*12 as "income"  
from t_emp;
#顺序 from-->select
#数据分页
select ... from ... limit 起始位置,偏移位置;
select empno,ename from t_emp LIMIT 1,10; #从1开始输出10条
select empno,ename from t_emp LIMIT 10;#默认起始0,输出10
#顺序 from-->select-->limit
#排序 order by
select ... from ... order by ...
select empno,ename from t_emp order by empno(要排序的列,可以多个列) ASC;  #ASC代表升序,DESC代表降序
#排序加分页 limit,order by
select empno,ename from t_emp order by empno ASC limit 5;
#顺序 from-->select-->order by-->limit
#去重关键字
select DISTINCT job from t_emp;#只能加最前面,只能使用一次

库高级查询

#聚合函数---永远不能出现在where字句里
AVG() 非空值的平均值
SUM() 总和
MAX() MIN() 非空的最大值 最小
COUNT(*) 包含空值的记录数 COUNT(列名)包含非空值的记录数

#分组查询---有group by字句,select中只能出现聚合函数,或者group by的分组列(防止数量不匹配)
select deptno,AVG(sal) from t_emp group by deptno;  #group by 结果按部门编号分组

SELECT deptno, job, COUNT(*) , AVG(sal) FROM t_emp GROUP BY deptno, job ORDER BY deptno;#group by,orderby 逐级分组

SELECT deptno, COUNT(*),AVG(sal) ,MAX(sal) , MIN(sal) FROM t_emp GROUP BY deptno WITH ROLLUP; #WITH ROLLUP 对分组结果再次汇总运算

SELECT deptno, GROUP_CONCAT (ename) , COUNT (*) EROM t_emp WHERE sal>=2000 GROUP BY deptno;#group_concat 拼接列里面的数据
#顺序 from-->where-->group by-->select-->order by-->limit

#having 字句---依赖group by存在,当group by出现时,聚合函数无法使用在where,因此可以用having使用
select deptno from t_emp group by deptno having AVG(sal)>=2000;
SELECT deptno, COUNT(*) FROM t_emp GROUP BY 1;  
SELECT deptno, COUNT(*) FROM t_emp GROUP BY 1 having deptno in(10,20)  #按照数字1分组,会依据having字句中列进行分组

#表连接查询,需要规定连接条件,否则会任意匹配,出现笛卡尔积
select  ... from ...1 join2 on 连接条件;  #内连接1
select  ... from ...1 join2 where 连接条件;  #内连接2
select  ... from ...1,2 where 连接条件;  #内连接3
SELECT e.empnO, e.ename,d.dname FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno;  #起别名后规定连接条件部门编号相等

#查询每个员工的工号、姓名、部门名称、底薪、职位、工资等级
SELECT
	e.empno, e.ename, d.deptno,e.sal,e.job, s.grade
FROM t_emp e
JOIN t_dept d ON e.deptno=d.deptno
JOIN t_salgrade s ON e.sal BETWEEN s.losal AND s.hisal;  #不一定要同名列,有逻辑关系就行
#查询与scott同部门的人
SELECT GROUP_CONCAT(t2.ename) 
from t_emp t1 join t_emp t2 on t1.deptno=t2.deptno #相同数据表做表连接
where t1.ename="SCOTT";
#查询高于平均薪水的人
SELECT e.empno, e.ename, e. sal 
FROM t_emp e JOIN (SELECT AVG(sal) avg FROM t_emp) t  #join内加入新的查询字句,然后别名调用
ON e.sal>=t.avg;

数据基本操作

基本函数使用

综合应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值