朝花夕拾之MYSQL-01
学习配套视频:老杜带你学_mysql入门基础(mysql基础视频+数据库实战)https://www.bilibili.com/video/BV1Vy4y1z7EX?spm_id_from=333.337.search-card.all.click&vd_source=bf4eb9e00649104ee4ec443e363be4b6
1 数据库概述
- mysql登录不上去
(84条消息) 解决ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)_柚子橘子的博客-CSDN博客
- 数据库含义
- 数据库:按照一定格式存储数据的一些文件的组合。
- 数据库管理系统:专门用来管理数据库中数据的,管理体现在增删改查。
- SQL:结构化查询语言,程序员在数据库管理系统负责执行SQL完成数据的增删改查
- MYSQL的安装
- 端口号通常和IP地址在一块,IP地址用来定位计算机的,端口号port是用来定位计算机上某个服务的/某个应用的!
- mysql数据库启动的时候,这个服务占有的默认端口号是3306 !!这个大家都知道,不能不知道!
- MYSQL的服务
- 计算机–>右键–>管理–>服务和应用程序–>服务–>找mysql服务
- 看下是不是“正在运行”状态 然后是“自动”
- 对应wimdow上cmd的命令是:
net stop 服务名称;
net start 服务名称;
2 常用命令
- 登录/退出MYSQL
登录:mysql -uroot -pxxxxxx
退出:exit
- 数据库操作
查看数据库:show databases;
创建数据库:create database bjpowernode;
选择使用数据库:use test;
查看使用哪一个数据库:select database(); 记得带括号
- 表的操作
show tables;
- 导入数据
source 加目录
source D:\course\03-MySQL\document\bjpowernode.sql
- 其他
- 必须有分号,;表示结束
- \c表示终止一条命令的输入
3 SQL语句的分类
- DQL:数据查询语言
- select
- DML:数据操作语言
- insert 增
- delete 删
- update 改
- DDL:数据定义语言
- create
- drop
- alter
- TCL:事务控制语言
- 事务提交:commit
- 事务回滚:rollback
- DCL:数据控制语言
- 授权grant
- 撤销权限revoke
4 DQL语句
4.1 查看表内容与结构
- 查看表中的数据
select * from 表名;
select * from emp;
- 查看表的结构
desc 表名;
desc dept;
4.2 简单查询
- 查询一个字段
select 字段名 from 表名;
select dname from dept;
- 查询多个字段
select 字段名,字段名 from 表名;
select deptno,dname from dept;
- 查询所有字段
select * from 表名;
select * from dept;
- 给查询字段的列取别名
select deptno,dname as deptname from dept;
select deptno,dname deptname from dept;
- 起别名有空格用双引号
select 字段 “dept name” from 表名;
select 字段 “dept name” from dept;
- 简单计算
select 字段*12 from 表名;
select name,sal*12 yearsal from emp;
4.3 条件查询
一个套路:where 字段 符号 值/文字
- 等于=
select 字段 from 表名 where 字段 = 值/文字;
select empno,ename from emp where sal = 800;
- 不等于<>=/!=
select 字段 from 表名 where 字段 <>= 值/文字;
select empno,ename from emp where sal <>= 800;
- 小于等于<=
select 字段 from 表名 where 字段 <= 值/文字;
select empno,ename from emp where sal <= 3000;
- 大于等于>=
select 字段 from 表名 where 字段 >= 值/文字;
select empno,ename from emp where sal >= 3000;
- 介于between … and …
select 字段 from 表名 where 字段 >= 值 and 字段 <= 值;
select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;
select 字段 from 表名 where 字段 between 值 and 值;
select empno,ename,sal from emp where sal between 2450 and 3000;
- 为空 is null ,不为空is not null
select 字段 from 表名 where 字段 is null;
select empno,ename,sal from emp where comm is null;
select 字段 from 表名 where 字段 is null;
select empno,ename,sal from emp where comm is not null;
- 包含in,不包含not in
select 字段 from 表名 where 字段 in (值/文字);
->select empno,ename,job
->from emp
->where job in ('manager','salesman');
select 字段 from 表名 where 字段 in (值/文字);
->select empno,ename,job
->from emp
->where job not in ('manager','salesman');
4.4 逻辑查询
- 并且and
select 字段 from 表名 where 条件 and 条件;
select empno,ename from emp where job = 'MANAGER' and sal > 2500;
- 或者or
select 字段 from 表名 where 条件 or 条件;
-> select empno,ename
-> from emp
-> where job = 'manager'or job = 'salesman';
- 多个逻辑and和or并存,用括号
- and和or同时出现,and优先级较高。如果想让or先执行,需要加“小括号”
以后在开发中,如果不确定优先级,就加小括号就行了。
select 字段 from 表名 where 条件 and (条件 or 条件);
-> select empno,ename
-> from emp
-> where sal > 2500 and (deptno = 10 or deptno = 20);
- case…when…then…when…then…else…end
case 字段 when 条件 then 程序 when 条件 then 程序 else 程序 end -> select-> ename,-> job,-> sal as oldsal,-> (case job when 'manager' then sal*1.1 when 'salesman' then sal*1.5 else sal end) as newsal-> from -> emp;
4.5 模糊查询
- %:匹配任意多个字符
select 字段 from 表名 where like '%值/文字%';
select ename from emp where ename like '%o%'; 找出名字中含有O的?
select 字段 from 表名 where like '%值/文字';
select ename from emp where ename like '%T'; 找出名字以T结尾的?
select 字段 from 表名 where like '%值/文字';
select ename from emp where ename like 'K%'; 找出名字以K开始的?
- _:任意一个字符
select 字段 from 表名 where like '_值/文字%';
select ename from emp where ename like '_A%'; 找出第二个字每是A的?
select 字段 from 表名 where like '__值/文字%';
select ename from emp where ename like '__R%'; 找出第二个字每是R的?
3, %与/的查询使用转义字符\
select 字段 from 表名 where like '%\_值/文字%';select name from t_student where name like '%\_%';
4.6 排序查询
- 升序asc
select 字段 from 表名 order by 排序字段 asc;
select ename,sal from emp order by sal asc; asc可加可不加,默认升序
- 降序desc
select 字段 from 表名 order by 排序字段 desc;
select ename,sal from emp order by sal desc;
- 多个字段排序
select 字段 from 表名 order by 排序字段 asc, 排序字段desc;
select ename,sal from emp order by sal asc,ename desc;> select ename,sal from emp
-> where sal between 1250 and 3000
-> order by sal desc;
4.7 数据处理函数(单行函数处理)查询
- lower 转换小写
select low(字段) from 表名 ;
select lower(ename) from emp;
- upper 转换大写
select upper(字段) from 表名 ;
select upper(name) from t_student;
- substr截取
select substr(字段,起始下标,截取的长度) from 表名 ;
select substr(ename,1,1 from emp;
select ename from emp where substr(ename,1,1) = 'A';
- concat 拼接
select concat(字段,字段) from 表名 ;
select concat(empno,ename) from emp;
- length取长度
select length(字段) from 表名 ;
select length(ename) from emp;
- trim去空格
select trim(字段) from 表名 ;
select trim(ename) from emp;
select * from emp where ename =trim( ' king');
select * from emp where trim(ename) ='king';
- 日期转换 str_to_date,str_to_date
STR_TO_DATE(str,format);将字符串转换成日期
DATE_FORMAT(date,format);格式化日期
str_to_date:(86条消息) MySQL的STR_TO_DATE()函数将指定格式的字符串转为Date_秃秃爱健身的博客-CSDN博客_mysql字符串转日期函数
date_format:(86条消息) MySQL的DATE_FORMAT()函数将Date转为字符串_秃秃爱健身的博客-CSDN博客_mysqldate转字符串
- round四舍五入
select round(数字,保留小数个数) from 表名;
select round(123.554,-2) as result from emp;
- rand生成随机数
select rand()*100 from 表名;
select round(rand()*100,2) from emp;
- ifnull 将 null 转换成一个具体值
select ifnull(有null的字段,保留值) from 表名;
select ename,(sal+ifnull(comm,0))*12 monthsal from emp;
- distinct去重查询
select distinct 字段 from 表名;
select distinct job from emp;
select distinct job,deptno from emp; 表示两个字段联合起来去重。
select count(distinct job) from emp;
4.8 分组函数查询(多行处理函数)
- count 计数
- count()和count(具体字段)有什么区别:count(具体字段)表示统计该字段下所有不为NULL的元素的总数,count()统计表当中的总行数
select count(字段) from 表名 ;
select count(sal) from emp;
- sum 求和
select sum(字段) from 表名 ;
select sum(sal) from emp;
- avg 平均值
select avg(字段) from 表名 ;
select avg(sal) from emp;
- max 最大值
select max(字段) from 表名 ;
select max(sal) from emp;
- min 最小值
select min(字段) from 表名 ;
select min(sal) from emp;
4.9 分组查询
- 执行顺序
select...from...where...group by...order by...执行顺序: 1. from2. where3. group by4. select5. order by
- 要点
- 问:为什么分组函数不能直接使用在where后面?
select ename,sal from emp where sal > min(sal);//报错。 - 答:因为分组函数在使用的时候必须先分组之后才能使用。
where执行的时候,还没有分组。所以where后面不能出现分组函数。
- 案例
按照工作岗位分组,然后对工资求和。
select job,sum(sal) from emp group by job;找出每个部门的最高薪资
select deptno,max(sal) from emp group by deptno;每个部门,不同工作岗位”的最高薪资
select deptno,job,max(sal) from emp group by deptno,job;
- having在分组上进行过滤
select 字段,分组函数(字段) from 表名 group by 字段 having 条件;
mysql> select-> deptno,-> job,-> max(sal)-> from-> emp-> group by deptno,job-> having max(sal) > 3000;
- 综合例子来一个
找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER岗位之外,要求按照平均薪资降序排。
mysql> select-> job,-> avg(sal) as avgsal-> from-> emp-> where-> job != 'manager'-> group by -> job-> having -> avg(sal) > 1500->limit 1;
4.10 连接查询
- 类型
根据表连接的方式分类:内连接:等值连接非等值连接自连接外连接:左外连接(左连接)右外连接(右连接)全连接(不讲)
- 内连接之等值连接
select ...fromajoinbona和b的连接条件where a.筛选条件=b.筛选条件
查询每个员工所在部门名称,显示员工名和部门名?
mysql> select e.ename,d.dname-> from emp e-> join dept d-> on e.deptno = d.deptno;
- 内连接之非等值连接
select ...fromajoinbona和b的连接条件where a条件不等于(可能是介于)b条件
找出每个员工的薪资等级,要求显示员工名、薪资、薪资等级?
mysql> select e.ename,e.sal,s.grade-> from emp e-> join salgrade s-> on e.sal between s.losal and s.hisal;
- 内查询之自连接
一张表看成两张表select ...fromajoinbona和b的连接条件where 条件
查询员工的上级领导,要求显示员工名和对应的领导名?
mysql> select a.ename,b.ename-> from emp a-> join emp b-> on a.mgr = b.empno;
- 外连接的左/右连接
select ...fromaleft joinbona和b的连接条件where a.筛选条件=b.筛选条件
查询每个员工所在部门名称,显示员工名和部门名?
mysql> select e.ename,d.dname-> from emp e-> left/right join dept d-> on e.deptno = d.deptno;
- 多张表的连接
select ...fromajoinbona和b的连接条件joincona和c的连接条件right joindona和d的连接条件
案例:找出每个员工的部门名称以及工资等级,要求显示员工名、部门名、薪资、薪资等级?
mysql> select e.ename,e.sal,d.dname,s.grade-> from emp e-> left join dept d-> on e.deptno = d.deptno-> left join salgrade s-> on e.sal between s.losal and s.hisal;
案例:找出每个员工的部门名称以及工资等级,还有上级领导,要求显示员工名、领导名、部门名、薪资、薪资等级?
mysql> select e.ename,e.sal,d.dname,s.grade-> from emp e-> left join dept d-> on e.deptno = d.deptno-> left join salgrade s-> on e.sal between s.losal and s.hisal;-> left join emp l-> on e.mgr = l.empno;
4.11 子查询
- where中的子查询
- 语法
select 字段from表名 where(select 语句)
- 案例
找出比最低工资高的员工姓名和工资?
错误用法:select ename,salfromemp wheresal > min(sal);ERROR 1111 (HY000): Invalid use of group functionwhere子句中不能直接使用分组函数
正确用法:
select ename,sal
from emp
where sal > (select min(sal) from emp);
- from中的子查询
- 语法
select 字段from(select 语句)where条件
- 案例
找出每个岗位的平均工资的薪资等级。
mysql> select t.*,s.grade-> from-> ( select job,avg(sal) avgsal from emp group by job ) t (记得给avg(sal)起别名)-> left join salgrade s-> on t.avgsal between s.losal and s.hisal;
- select后面出现的子查询
- 语法
select 字段,(select 语句)from表名where条件
- 案例
找出每个员工的部门名称,要求显示员工名,部门名?select e.ename,e.deptno,(select d.dname from dept d where e.deptno = d.deptno) as dname from emp e;
- union 合并查询
- 语法:和union all的区别是union去交集,去重过
select 语句
union
select 语句
- 案例
mysql> select ename,job from emp where job = 'manager'-> union-> select ename,job from emp where job = 'salesman';
- limit 用法
- 语法
limit startIndex, length startIndex是起始下标,length是长度。
- 案例
按照薪资降序,取出排名在前5名的员工?
select ename,sal from emp order by sal desc limit 0,5取出工资排名在[3-5]名的员工?select ename,sal from emp order by sal desc limit 2,3;
- 额外功能:分页
每页显示3条记录第1页:limit 0,3 [0 1 2]第2页:limit 3,3 [3 4 5]第3页:limit 6,3 [6 7 8]第4页:limit 9,3 [9 10 11]第pageNo页:limit (pageNo - 1) * pageSize , pageSize
4.12 DQL语言执行顺序
select ...from...where...group by...having...order by...limit...执行顺序?1.from2.where3.group by4.having5.select6.order by7.limit..
自己的小tip:
1. and/or前后要写全
2. and和or同时出现,用括号区分优先级
3. is null/is not null
4. in/not in
朝花夕拾之MYSQL-01相关推荐
- linux 指定库名 登录mysql_数据库学习笔记之MySQL(01)
目录 01. 什么是数据库? 02. 常见数据库 03. MySQL简介 04. 数据库系统(Database System)的组成 05. SQL语言 06. SQL语言组成 07. MySQL的常 ...
- MySQL—01—MySQL介绍和安装
一. MySQL 简介 1 什么是 MySQL MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司.MySQL 是一种关系型数据库管理系统,关系型 ...
- Python Day10 MySQL 01
MySQL数据库基本管理 Window版本安装 1.下载:MySQL Community Server 5.7.16 http://dev.mysql.com/downloads/mysql/ 2.解 ...
- for语句的执行过程_深入学习MySQL 01 一条查询语句的执行过程
在学习SpringCloud的同时,也在深入学习MySq中,听着,,看着<高性能MySQL>,本系列文章是本人学习过程的总结,水平有限,仅供参考,若有不对之处或有啥建议都可与我联系,感谢! ...
- MySQL 01:数据库,MySQL基础
一.数据库 1.数据储存 大家在自己日常中,存储信息大多用的是文本文档,或者是电子表格,但是对于大量数据的情况下,这样的速度非常慢,所以需要有一种专门管理数据的软件来管理数据 2.数据库 数据库就类似 ...
- MySQL 01 什么是数据库(关系型数据库?)
1.1 为什么要学数据库 JavaEE:企业级 Java 开发,主要做的是 Web 开发.(需要结合 前端 后台 数据库 三大必备技能.) 前端:页面,用来展示数据. 后台:作为一个连接点,中转站.与 ...
- mysql 默认当前时间_复制信息记录表|全方位认识 mysql 系统库
在上一期<时区信息记录表|全方位认识 mysql 系统库>中,我们详细介绍了mysql系统库中的时区信息记录表,本期我们将为大家带来系列第七篇<复制信息记录表|全方位认识 mysql ...
- MySQL性能调优与架构设计——第4章 MySQL安全管理
第4章 MySQL安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切 ...
- 【数据库】Navicat Premium12远程连接MySQL数据库
00. 目录 文章目录 00. 目录 01. 环境介绍 02. Navicat安装 03. MySQL开启远程登录权限 04. Navicat连接MySQL 01. 环境介绍 Navicat版本: N ...
- mysql 单表字段多少合适_复制信息记录表|全方位认识 mysql 系统库
在上一期<时区信息记录表|全方位认识 mysql 系统库>中,我们详细介绍了mysql系统库中的时区信息记录表,本期我们将为大家带来系列第七篇<复制信息记录表|全方位认识 mysql ...
最新文章
- CVPR 2020: 移动端机器学习的研究实现
- (转)Activity的四种launchMode
- 说一说Android事件分发中的requestDisallowInterceptTouchEvent
- TypeScript Mixins 概念介绍
- po3580SuperMemo(splay)
- 由A* = A^T推导问题
- 在virtualbox上安装64位centos7和virtual增强工具以及设置共享文件夹
- Xcode9 调整模拟器大小
- SpringBoot 生产中 16 条最佳实践
- 基础矩阵F和本质矩阵E
- Linux命令学习(1) cat命令详解
- 快速沃尔什变换学习笔记
- 【Axure基础教程】第19章 树节点
- 2013-8-17 上周工作总结
- Rust 数据内存布局
- note10 android10,「上手」都说它是年度Android机皇,Galaxy Note10到底怎么样?
- 信息科学前沿计算机,基于信息时代背景分析计算机科学技术前沿发展策略
- 微信小程序头脑风暴2答题辅助
- 2021各地区数字中国发展成效评价
- Android小问题解决办法记录
热门文章
- 搜狐获得北京奥运会互联网视频转播权
- poi 操作excel 2007 设置 字体样式 插入图片
- 2018年台湾人口增加1.8万人 增长率创新低
- 查询计算机关机方式,查看Win10系统电脑上次的关机方式的方法介绍
- 5ATM防水等级是什么意思?手表防水等级讲解
- 19.继承和多态的知识点以及“多态测试南北方人案例“和“final“关键字
- IOS企业证书到期问题总结
- Java面试题(1)
- 心电MIT预测算法Android,基于Android系统的心电智能诊断终端算法设计与软件实现...
- 连接服务器出现黑屏怎么解决