一,概念
简而言之,就是存储数据,管理数据的仓库
二,结构:数据库--》表--》数据(字段,字段的值)
三,Sql语言
是一种数据库查询和程序设计语言,用于存取数据及查询,更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名
分类:DML:数据库操纵语言
如:insert delete update select(插入,删除,修改,检查)简称CRUD操新增Create
DDL:数据定义源,是指创建的SQL语法
DCL:数据控制语言,是值权限的分配
DQL:数据库查询语言,是指对数据的各种查询语法
1,常用操作:
对数据库的操作,对表的操作,对数据的操作/对表的操作
①查看所有数据库
show databases;
②创建表
create database 数据库名;
③设置编码
create database 数据库名 default character set utf-8 ;
④删除数据库
drop database 数据库名;
⑥创建表列
create table 表名(
字段1,
字段2,
字段3
);
⑦查看表
show tables;
⑧删除表
drop table 表名;
⑨查看表结构
desc 表名;
2.修改表结构
alter table 表名 add column 列名 字段类型(字段长度,小数位数);
3.查询表记录
select*from 表名;
插入表数据
insert into 表名 values (字段1,字段2);
防止中文乱码
set names gbk;
4.修改表
update 表名 set 字段名 where 字段名
5,删除表中带有字符段的数据
delete from 表名 where 字符段;
6,删除表记录
delete from 表名;
7约束
CREATE TABLE a(id INT)
CREATE TABLE b(id INT PRIMARY KEY)#主键(唯一+非空)
#AUTO_INCREMENT自增
CREATE TABLE c(id INT PRIMARY KEY AUTO_INCREMENT)#主键自增
#非空约束
CREATE TABLE d(NAME VARCHAR(10))
#唯一约束unique
CREATE TABLE f(tel VARCHAR(11))
CREATE TABLE g(tel VARCHAR(11) UNIQUE)
8.函数
为了方便的操作数据库里的数据,MySQL提供了很多函数
常见的有:lower,upper length substr concat 日期
①lower:全转小写 upper 全转大写
select 数据列1,数据列2 lower(数据列1),upper(数据列2)from 表名;
②length获取长度
select 字段,length(字段)from 表名;
③concat拼接字符串
select 字段,concat(字段,“连接的串”,....)from 表名;
④substr截取字符串
select 字段,substr(字段,3)from 表名;
⑤replace(1,2,3)替换1是字段,要把2换成3
select 字段,replace(字段,‘a’,‘666’)from 表名
⑥ifnull判断是否为null,是就替换200
select 字段,ifnull(字段,200)from 表名
⑦求和
select 字段1,字段2,字段1+字段2 from 表名;
⑧round四舍五入,ceil向上取整,floor向下取整
select 字段1,round(字段1),ceil(字段1),floor(字段1)from 表名;
⑨日期
#now year month day hour minute second
select now()
9.条件查询
①distinct关键字,去除重复的记录行
select disinct 字段1 from 表名
②where关键字
select * from 表名 where id=1 or deptno;#查询id=1并且depton的数据
select * from 表名 where id in(2,3);#查询id=1的数据
③like模糊查询
select * from 表名 where 字符段 like '%o%'#判断字符段列是否包含o
select * from 表名 where 字符段 like '%o'#判断字符段列是否以o结束
select * from 表名 where 字符段 like 'o%'#判断字符段列是否以o开始,最高效。
④null操作空数据
select * from 表名 where 字符段 is null;查是null
select * from 表名 where 字符段 is not null;查不是null
⑤between and
select * from 表名 where 字符段>100 and 字符段<60;
select * from 表名 where btween100 and 60;
⑥去重
distinct
select distinct 字段 from 表名
10.
分页
①limit
select * from limit 2#只展示两条数据
select *from limit n,m#1代表从第n+1行开始2代表第m行
②order by 排序(默认升序)
select * from 表名 order by 字段名
select *from 表名 order by 字段名 desc #降序
查询2017年以前入职的员工信息
select *from emp where year(hiredate)<2017
计算入职年份
select *,year(now())-year(hiredate)as year from emp;#as起别名
统计年薪
select *,sal*13+ifnull(comm,0) *13 as 年薪 from emp;
11,聚合函数
指把一列的值聚合在一起,在做分析
聚合函数:max() min() avg()sum()count()
查最高薪资
select max(sal)from emp;
查最低薪资
select min(sal)from emp;
查平均薪资
select avg(sal)from emp;
查工资总和
select sum(sal)from emp;
统计个数
select count(*)from emp;
select count(1) from emp;
select count(empno) from emp;#尽量不要用,null不在统计范围
12grop up分组
查询每个部门的最高薪‘
select ma(sal) from emp grop by deptno;
查询每个岗位的平均工资
select avg(sal)from emp grop up jop;
注:口诀:当查询时出现聚合列和非聚合列,最后就按非聚合列分组
查询每年入职的人数
select dept,count(1) from emp grop up year(hiredate);
查询每个部门的人数,人数>1的部门
having完成分组后的过滤
select count(1) ,deptno from emp grop up deptno having count(1)>1;
查询每个岗位的平均工资,只要大于8000的
select job,avg(sal)from emp grop up job avg(sal)>8000;
select job avg(sal) from emp where avg()sal grop up jpb;#这种方式效率高
查询每年入职的人数,只要人数》1的
select year(day),count(1) from emp grop up year(day) having count(1)>1;za