Mysql

学习MySQL

学习来源:B站-老杜带你学_mysql入门基础(mysql基础视频+数据库实战)

一、DB,DBMS,SQL关系

DBMS 通过执行 SQL语句 操作 DB (增删改查)

​ SQL是一门标准程序设计语言,程序员使用SQL语句,可应用于不同DBMS

二、MYSQL安装与卸载

1. 安装

在这里插入图片描述
在这里插入图片描述

2. 卸载

在这里插入图片描述

三、MYSQL服务与登录

1. 启动与停止Mysql服务

  • 界面配置方法
  • 计算机管理–>右键–>管理服务和应用程序–>服务–>Mysql服务
  • 默认“启动”状态
  • 点击更改
  • 命令行配置方法
  • 打开 cmd
  • 启动Mysql服务:net start mysql(可更改服务名称操作其他服务)
  • 关闭Mysql服务:net stop mysql (可更改服务名称操作其他服务)

2. Mysql登录及常用命令

  • 使用bin目录下mysql.exe命令连接mysql数据库服务器 (我的无法直接打开)

  • 解决方法:直接打开cmd,输入命令行

    • 本地登录显示密码型
  • -uroot -p123456 (注意格式)

  • 本地登录隐藏密码型

    • -uroot -p (注意格式)
  • 常用命令(注意+英文分号\g ,命令不区分大小写 )

    • 查看mysql数据库版本号:select version();
    • 查看当前使用的哪个数据库:select database();
    • 退出mysql:exit;
    • 查看mysql中有哪些数据库:show databases;
    • 选择使用具体数据库:use 数据库名;
    • 查看该数据库有哪些表:show tables;
    • 查看具体表内容:select * from 表名;
    • 查看表结构:desc 表名;
    • 创建数据库:create 数据库名;

四、表、SQL语句分类及导入数据

  1. 数据库基本单元表示数据----表table
  • 任何表都有行和列
    • row:被称为 数据/记录
    • column:被称为 字段
      • 每个字段都有字段名,数据类型,约束等属性
        • 约束:比如唯一性约束,约束该字段的数据不能重复
  1. SQL语句分类

    • DQL 数据查询语言 (表内数据)

      • select ...
    • DML 数据操作语言 (表内数据)

      • insert ... delete ... update ...
    • DDL 数据定义语言 (表结构)

      • create... drop... alter...
    • DCL 数据控制语言

      • grant... revoke...
    • TCL 事务控制语言

      • commit... rollback...
  2. 导入数据

    • 登录sql
    • 输入命令 source 数据路径.sql (注意路径不带中文)

五、示例数据

  mysql> desc dept;
  mysql> select * from dept
  • FieldTypeNullKeyDefaultExtra
    DEPTNOint(11)NOPRINULL
    DNAMEvarchar(255)YESNULL
    LOCvarchar(255)YESNULL
  • DEPTNODNAMELOC
    10ACCOUNTINGNEW YORK
    20RESEARCHDALLAS
    30SALESCHICAGO
    40OPERATIONSBOSTON
  mysql> desc emp;
  mysql> select * from emp;
  • FieldTypeNullKeyDefaultExtra
    EMPNOint(255)NOPRINULL
    ENAMEvarchar(255)YESNULL
    JOBvarchar(255)YESNULL
    MGRint(255)YESNULL
    HIREDATEdateYESNULL
    SALint(255)YESNULL
    COMMint(255)YESNULL
    DEPTNOint(255)YESNULL
  • EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
    7369SMITHCLERK79021980-12-17800NULL20
    7499ALIENSALESMAN76981981-02-20160030030
    7521WARDSALESMAN76981981-02-22125050030
    7566JONESMANAGER78391981-04-022975NULL20
    7654MARTINSALESMAN76981981-09-281250140030
    7698BLAKEMANAGER78391981-05-012850NULL30
    7782CLARKMANAGER78391981-06-092450NULL10
    7788SCOTTANALYST75661987-04-193000NULL20
    7839KINGPRESIDENTNULL1981-11-175000NULL10
    7844TURNERSALESMAN76981981-09-081500030
    7876ADAMSCLERK77881987-05-231100NULL20
    7900JAMESCLERK76981981-12-03950NULL30
    7902FORDANALYST75661981-12-033000NULL20
    7934MILLERCLERK77821982-01-231300NULL10
  mysql> desc salgrade;
  mysql> select * from salgrade;
  • FieldTypeNullKeyDefaultExtra
    GRADEint(255)YESNULL
    LOSALint(255)YESNULL
    HISALint(255)YESNULL
  • GRADELOSALHISAL
    17001200
    212011400
    314012000
    420013000
    530019999

六、SQL语句

(1)单表查询语句

1. 简单查询
  • ​ 查询一个字段: select 字段名 from 表名
 #不区分大小写,以分号结尾
  select sal from emp;
  select dname from dept;
  SELECT DNAME FROM DEPT;
  • ​ 查询多个字段: select 字段名1,字段名2,字段名3 from 表名
 #不区分大小写,以分号结尾,逗号隔开
  select dname,loc from dept;
  • ​ 查询全部字段: select 字段名1,字段名2,字段名3 from 表名
## 不区分大小写,以分号结尾,*表示所有,或写上所有字段名,逗号隔开
 1方式.select * from dept; 
   #效率低,可读性差
 2方式.select dname,loc,deptno from dept;
   #实际开发中用这种方式
  • ​ 给查询的列起别名: select 字段名1,字段名2 as 别名 from 表名
## 不区分大小写,以分号结尾,as关键字起别名 或者直接省略as
#### 别名为中文时用 ’‘ 表示
1方式.select dname,loc,dept as info from dept;
  #输出时该列名显示为别名,原表列名不变
  #select语句永远不会改变内容
2方式.select dname,loc,dept info from dept;
  #省略as
  select dname,loc,dept info mation from dept;
  #别名里有空格,编译报错
  #解决:给别名加 单或双引号
   select dname,loc,dept ’info mation‘ from dept; #标准
   select dname,loc,dept “info mation” from dept;
  • ​ 列参与数学运算: select 字段名1,字段名2*数值 from 表名
## 不区分大小写,以分号结尾,逗号隔开
 select ename,sal*12 from emp;
  #该字段所有数据参与运算并显示
  #列名变为用数学表达式表示,不习惯可用别名
2. 条件查询
  • ​ 查询一个字段: select 字段名.. from 表名 where 条件

  • 条件种类

范围判断逻辑范围空判断匹配判断
= 等于and并且is null 为空like 模糊查询,支持%或下划线匹配
<> 或!=不等于or或者is not null不为空%匹配任意多个字符
< 小于not可取非,主要用在is或in中__匹配任意一个字符
> 大于in 相当于多个or
>= 大于等于not in 则反之
<= 小于等于
between…and…
  • 示例
## 不区分大小写,以分号结尾,合理使用()合并优先级为一个条件

#####范围判断
 select ename,sal from emp where sal =800;
 select ename,sal from emp where sal !=800;
 select ename,sal from emp where sal >800;
 select ename,sal from emp where sal between 800 and 1000;#左小右大,闭区间
 select ename,sal from emp where ename='SMITH';
#####空判断
 select ename,sal from emp where comm is NULL;# =NULL是不行的
 select ename,sal from emp where comm is not NULL;#包含=0
#####逻辑范围判断
  select ename,sal from emp where ename='SMITH' or ename ='JONES';
  select ename,sal from emp where ename in ('SMITH','JONES');
   select ename,sal from emp where ename not in ('SMITH','JONES');
######值匹配查询
  select ename from emp where ename like '%o%';
  select ename from emp where ename like '_o%';
  select ename from emp where ename like '%t';
  select ename from emp where ename like 'K%';
  select ename from emp where ename like '%_%';#名字中有下划线的
    ### 用 \转义字符,转义关键字为一般类型
    select ename from emp where ename like '%\_%';
3. 排序
  • ​ 按某字段排序: select 字段名 from 表名 order by 字段名
## 不区分大小写,以分号结尾,逗号隔开,order by 关键字

 select ename,sal from emp order by sal;#默认升序
 select ename,sal from emp order by sal desc; #指定降序
 select ename,sal from emp order by sal asc; #指定降序
  • ​ 按多字段排序: select 字段名 from 表名 order by 字段名1,字段名2
## 不区分大小写,以分号结尾,逗号隔开,order by 关键字

###当前一种条件排序后,在相等情况下才会进行后一条件排序
 select ename,sal from emp order by sal,ename;#默认升序
 select ename,sal from emp order by sal desc,ename desc; #指定降序
 select ename,sal from emp order by sal asc,ename desc; #指定降序
  • ​ 按字段位置排序: select 字段名顺序 from 表名 order by 字段位置
## 不区分大小写,以分号结尾,逗号隔开,order by 关键字

 select ename,sal from emp order by 1;#默认ename升序
 select ename,sal from emp order by 2; #默认sal降升序
 select ename,sal from emp order by 1 desc; #指定ename降序
  #在开发中不建议这样使用,因为不健壮,列顺序很容易变化
  • ​ 综合查询: select 字段名 from 表名 where 条件 order by 字段
#综合                             执行顺序:
select *                         #第一步: from        
from emp                         #第二步: where
where sal between 1250 and 3000  #第三步: select
order by sal desc;               #第四步: order by
4. 数据处理函数/单行处理函数
函数功能SQL语句示例
lower转换小写select lower(ename) as ename from emp;
upper转换大写select upper(ename) as ename from emp;
substr取子串(母串,起始下标(从1开始),截取长度)select substr(ename,1,2) as ename from emp;
length取长度select length(ename) as ename from emp;
trim去空格select * from emp where ename=trim(’ King‘);
str_to_date字符串转为日期
date_format格式化日期为字符串
format设置千分位select format(sal,2) as salcomm from emp;
round四舍五入select round(28.54,-1) as result from emp ;
rand生成随机数select round(rand()*100,0) from emp;
Ifnull将null转换为一个具体值select ename,sal+Ifnull(comm,0) as salcomm from emp;
concat进行字符串的拼接select concat(ename,sal) as ename from emp;
case…when…then…when…then…else…end分情况处理
##case..when..then..when..then..else..end
##相当于if、开关语句,分情况显示处理后的数据结果
 select ename,job,sal,
  (case job 
   when 'SALESMAN' then sal*1.1 
   when 'MANAGER' then sal*1.5
   else sal 
   end) as newsal
   from emp;
5.分组函数/多行处理函数
分组函数功能SQL语句示例
count计数select count(sal) from emp;
sum求和select sum(sal) from emp;
avg平均值select avg(sal) from emp;
max最大值select max(sal) from emp;
min最小值select min(sal) from emp;
6.分组查询语句
  • ​ 按单字段分组后查询: select 字段名 from 表名 group by 字段名
## 不区分大小写,以分号结尾,逗号隔开,group by 关键字

###将分组后的每组内多行数据处理,显示一个输出
 select job,max(sal) from emp group by job;#默认升序
  • ​ 综合查询: select 字段名 from 表名 where 条件 group by 字段名 order by 字段名
###顺序不可颠倒         执行顺序
select 字段名         #第一步 from
 from 表名            #第二步 where
  where 条件          #第三步 group by
   group by 字段名    #第四步 select
 order by 字段名      #第五步 order by             

在一条select语句中,若有group by语句,select后只能跟:参与分组的字段,以及分组函数,其他的一律不能跟(mysql中无意义,oracle中报错!)

  • ​ 按多字段分组后查询: select 字段名 from 表名 group by 字段1,字段2
## 不区分大小写,以分号结尾,逗号隔开,group by 关键字

###先按字段1分组,再按字段2分组,再select
#select 参加分组字段,分组函数 from 表名 group by 字段1,字段2..
  select deptno,job,max(sal) from emp group by deptno,job;
  • ​ 使用having:对分组后的数据再次过滤,不能单独使用,需和group by联合使用,不能代替where

select 字段 from 表名 group by 字段 having 条件

## 找出各部门最高薪资,并显示最高薪资>3000的部门

 ##分析:最初未想到使用having,使用的where 
 ##(逻辑错误❌,但效率更高,结果准确)
 select deptno,max(sal) from emp where sal>=3000 group by  deptno; #先找出sal>3000,再按部门分组,输出部门和该部门薪资最大值

 ##(正确逻辑✔,但效率较低)
 select deptno,max(sal) from emp group by deptno having max(sal)>3000;#
##比如:找出每个部门平均薪资,要求显示平均薪资>2500的
  #错误❌
  select deptno,avg(sal) from emp where avg(sal)>2500 group by deptno;
##分析,与max不同,不能先通过where筛选>2500的,因为要遍历;
##不能在where里使用分组函数
  #正确:需使用having✔
  select deptno,avg(sal) from emp group by deptno having avg(sal)>2500;
7.单表查询总结
###顺序不可颠倒            执行顺序
select 字段名            #第一步 from
 from 表名               #第二步 where
  where 条件             #第三步 group by
   group by 字段名       #第四步 having
    having 分组函数判断   #第五步 select
 order by 字段名         #第六步 order by

#找出每个岗位平均薪资,要求显示平均薪资>1500,除‘MANAGER’岗位外
 select job,avg(sal) as aveg 
  from emp 
   where job !='MANAGER' 
    group by job
     having avg(sal)>1500
  order by aveg desc;   

Mysql第一天学习结束啦,谢谢动力节点老师!

在写博客时,中间丢过一些记录,复盘时没仔细看,如果有错误还望大家多多指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值