数据库笔记

数据库笔记,第1张

数据库笔记

 

数据库分为
关系型        :Oracle,MySQL,SQLServer,Access

非关系型     :MongoDB,Redis,Solr,ElasticSearch,Hive,Hbase

关系型:建立在紧密关系基础之上(父子,师生)以行和列的形式存储数据,关系模型可以简单理解为二维表格模型
一个关系型数据库由二维表及其之间的关系组成一个数据集合

非关系型:建立在松散关系之上

安装数据库的时候需要记得开启MariaDB服务
在任务管理器最后一栏的服务中找到


DML:数据 *** 纵语言,包括insert,delect,update,select,增删改查

DDL:数据库定义语言,包括create table,create database

DCL:数据库控制语言,包括grant,deny,revoke等,只有管理员才有相应的权限

DQL:数据库查询语言,包括select语法

查询表格属性:desc 表名

增加属性:alter table 表名 add column 属性  属性类型(x) 

查询语法:select * from 表名

插入语法:insert into 表名 valuse(属性值需要填很多,没有的用null,使用逗号隔开)

修改语法:update 表名 set 属性=新值(老值会被全部覆盖) , 属性=新值


数字:
tinyint ,int 整数类型
float,double 小树类型
numeric(5,2) decimal(5,2)一般也表示小数,表示共有5位,其中可以有两位小数
decimal和numeric表示精确的整数数字

日期:
date 包含年月日
time 时分秒
datetime 包含年月日和时分秒
timestamp 时间戳,不是日期,从1970.1.1到指定日期的毫秒数

图片:
blob 二进制数据


约束:
唯一约束:unique 唯一约束
主键约束:primary key 主键(拥有非空约束和唯一约束的功能)
非空约束:not null
自增:auto_increment

create table 表名 (属性  属性类型(x) unique(唯一约束),属性  属性类型(x) not null(不能为空));

dept表  

emp表

user表

#基本函数:
#upper(),名字转为大写
#查询emp标所有员工的数据
SELECT * FROM emp;
#查询所有员工的名字
#select ename xxx from emp;//给字段设置别名
SELECt ename,job FROM emp;
SELECt ename,UPPER(ename) FROM emp;  #转大写
#lower()转小写
SELECt ename,LOWER('XYZ') FROM emp;
#length 查询长度
SELECt job,LENGTH(job) FROM emp;
#substr()截取SUBSTr(字段,从第几位开始截取,截几位)
SELECt ename,SUBSTr(ename,2,1) FROM emp;
#concat 拼接
SELECt ename, CONCAt(ename,'把','烈儿杀了') FROM emp;
#replace替换
SELECT ename,REPLACE(ename,'a','t') FROM emp;
#ifnull如果是null就替换
SELECt comm,IFNULL(comm,100) FROM emp;
#小数:round&ceil&floor
SELECt comm,ROUND(comm,1) FROM emp;#四舍五入,第二个参数是保留位数
SELECt comm,CEIL(comm) FROM emp;#向上取整
SELECt comm,FLOOR(comm) FROM emp;#向下取整
#now &year&month&day&hour&minute&second
SELECt NOW(),YEAR('2021-11-25'),YEAR(NOW()),MonTH(NOW());
#转义字符
SELECT 'xian';



#条件查询
#distinct去重
#查询部门地址
SELECT loc FROM dept;
SELECt DISTINCT(loc) FROM dept;
#where:条件满足查询
#select 字段名 from 表名 where 字段名=字段值
SELECt * FROM dept WHERe loc='一区';
#查询2号部门的所有数据
SELECt * FROM dept WHERe deptno=2;
#查询办公地址在二区的部门名称
SELECt dname FROM dept WHERe loc='二区';
#查询地址在二区的编号是3号的部门名称,多条查询用AND连接
SELECt dname FROM dept WHERe loc='二区'AND deptno=3;
#查询编号是1或者2的部门名称
SELECt dname FROM dept WHERe deptno=1 OR deptno=2;
SELECt dname FROM dept WHERe dootno= IN (1,2);#效果同上
#查询地址在一区,或者,编号是3的部门名称
SELECt dname FROM deuserpt WHERe loc='一区' OR deptno=3;
#修该3号用户的密码
UPDATe user SET pwd=123456 WHERe id=3;
#修改密码是123,age=20的用户名
UPDATE user SET name='lier' WHERe pwd=123 AND age=20;
#删除5号用户
DELETE FROM user WHERe id=5;
#like模糊查询
#练习查询名字里以t开头的员工姓名和岗位,%通配符字母和数字
SELECt ename,job FROM emp WHERe ename LIKE 't%';
#练习查询名字包含o的员工姓名和编号
SELECt ename,empno FROM emp WHERe ename LIKE '%o%';
#null 对null特殊处理
SELECt ename,job FROM emp WHERe comm IS NULL;#没有奖金
#查询有奖金的
SELECt ename,job FROM emp WHERe comm IS NOT NULL;#有奖金

#between and 区间范围两头都包
#查询工资在5000~10000员工姓名和入职日期
SELECt ename,hiredate FROM emp WHERe sal>5000 AND sal<10000;
SELECt ename,hiredate FROM emp WHERe sal BETWEEN 5000 AND 10000;
#查询在2019年入职的员工姓名
SELECt ename FROM emp WHERe YEAR(hiredate) BETWEEN 2019 AND 2019;
#limit分页
#展示前两个员工的信息
#select * from emp limit ?(从第n+1条数据开始),?(取几条)
SELECt * FROM emp LIMIT 1,3;

#order by排序
#升序
SELECt * FROM emp ORDER BY sal;
#降序
SELECt * FROM emp ORDER BY sal DESC;
SELECt * FROM emp ORDER BY ename;
SELECt * FROM emp ORDER BY hiredate;
SELECt * FROM emp ORDER BY job;

#模拟用户登录过程
SELECt * FROM USER  WHERe NAME='jack' AND pwd=123;
SELECt * FROM USER  WHERe NAME='rose' AND pwd=123;

#模拟用户注册
INSERT INTO USER VALUES(NULL,'lier',123,20);

#统计部门每个月的工资支出
SELECt sal,comm,sal+IFNULL(comm,0) FROM emp;
SELECt sal,comm,(sal+IFNULL(comm,0))*12 FROM emp;


#聚合函数:max min sum avg coumt
#求最高薪水
SELECt MAX(sal) FROM emp;
#求最低薪水
SELECt MIN(sal) FROM emp;
#求薪水合
SELECt SUM(sal) FROM emp;
#求平均工资
SELECt AVG(sal) FROM emp;
#求个数
SELECt COUNT(*) FROM emp;
SELECt COUNT(comm) FROM emp;
#count(1) = count(*),但是1高效
SELECt COUNT(1) FROM emp;
#统计2019年前入职的员工信息
SELECt * FROM emp WHERe YEAR(hiredate)<2019;
#统计2019以前入职的平均工资
SELECt AVG(sal) FROM emp WHERe YEAR(hiredate)<2019;
#统计2号部门的最高薪水
SELECt MAX(sal) FROM emp WHERe deptno=2;
#统计岗位是员工的平均工资
SELECt AVG(sal) FROM emp WHERe job='员工';


#当查询结果中,出现了混合列的时候,必须分组!!!!
#聚合列使用了聚合函数,非聚合列,没有用聚合列
#group by 表示分组,having 子句类似where
#统计每个岗位的平均工资
SELECt job,AVG(sal) FROM emp GROUP BY job;#按岗位分组
#统计每个岗位的员工工人数并排序
SELECt job,COUNT(1) a FROM emp GROUP BY job ORDER BY a DESC;

#统计每个部门的最高薪
SELECt deptno,MAX(sal) FROM emp GROUP BY deptno;
#统计每个部门的总人数
SELECt deptno,COUNT(1) FROM emp GROUP BY deptno;
#统计每年入职的总人数
SELECt YEAR(hiredate),COUNT(1) FROM emp GROUP BY YEAR(hiredate);
#统计每年入职的平均工资
SELECt YEAR(hiredate),AVG(sal) FROM emp GROUP BY YEAR(hiredate) ORDER BY sal;



#分组后的过滤 使用having来进行筛选

#统计每年入职工资的总支出,2015年以后的
SELECt YEAR(hiredate) a,SUM(sal) FROM emp 
GROUP BY a
HAVINg a>2015;

#统计每个部门的总人数,只要人数>2的数据
SELECt deptno,COUNT(1) a FROM emp GROUP BY deptno HAVINg a>2

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5604975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存