MySQL--01

本文介绍了数据库、数据库管理系统DBMS和SQL的基本概念,重点讲解了MySQL的使用,包括启动关闭服务、本地登录、常用命令。详细阐述了SQL的分类及各种操作,如DQL、DML、DDL和TCL。还展示了简单的查询、条件查询、排序操作和数据处理函数的使用方法。此外,还探讨了分组函数如COUNT、SUM、AVG、MAX和MIN在数据分析中的应用。
摘要由CSDN通过智能技术生成

MySQL

1.概述

1.1 什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?
  • 数据库:英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据。
  • 数据库管理系统:DataBaseManagement,简称DBMS。数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。
    • 常见的数据库管理系统:MySQL、Oracle、MS SqlServer、DB2、sybase等…
  • SQL:结构化查询语言。程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查操作。SQL是一套标准,程序员主要学习的就是SQL语句,这个SQL在mysql中可以使用,同时在Oracle中也可以使用,在DB2中也可以使用。
  • 三者之间的关系
    DBMS–执行–> SQL --操作–> DB
1.2 在windows操作系统中如何使用命令启动关闭MySQL(MySQL80)服务?
net stop MySQL
net start MySQL
1.3 MySQL 的本地登录
//密码显示的方式登录
C:\Users\ASUS>mysql -uroot -p123456
//密码隐藏的方式
C:\Users\ASUS>mysql -uroot -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.26 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

1.4 MySQL的常用命令
  • 查询mysql版本:mysql -version

  • 退出mysql:exit

    mysql>exit
    
  • 查看数据库:show databases; (注意英文分号结尾)

    mysql>show databases; 
    
  • 选择使用某个数据库:use ###;

    mysql>use ###;
    
  • 创建数据库:create database ###;

    mysql>create database ###;
    
  • 导入数据:source ###.sql

    mysql>source ###.sql
    
  • 删除数据库:drop database ###;

    mysql> drop database ###;
    
  • 查询数据库版本:select database();

    mysql> select database();
    
  • 查询数据库版本:select version();

    mysql> select version();
    
  • 终止一条语句:\c

1.5 数据库中最基本的元素 表(table)

表(table)是一种结构化的文件,可以用来存储特定类型的数据,如:学生信息,课程信息,都可以放到表中。另外 表都有特定的名称,而且不能重复。表中具有几个概念:列、行、主键。 列叫做字段(Column),行叫做表中的记录,每一 个字段都有:字段名称/字段数据类型/字段约束/字段长度

1.6 SQL 的分类
  • 数据查询语言(DQL-Data Query Language)
    • 代表关键字:select
  • 数据操纵语言(DML-Data Manipulation Language)
    • 代表关键字:**insert(增),delete(删),update(改)**主要是对表中的数据进行操作
  • 数据定义语言(DDL-Data Definition Language)
    • 代表关键字:**create (新建),drop(删除),alter(修改)**主要是对表中的结构进行操作
  • 事务控制语言(TCL-Transactional Control Language)
    • 代表关键字:commit(事务提交) ,rollback(事务回滚);
  • 数据控制语言(DCL-Data Control Language)
    • 代表关键字:grant(授权),revoke(撤销权限)

2.简单查询

select后面可以跟某个表的字段名(可以等同看做变量名),也可以跟字面量/字面值(数据)

#1.查看数据库
show databases;
#2.查询数据库版本
select database();
#3.选择使用某个数据库
use bjpowernode;
#4.查看表中数据(注意:对表进行操作首先要选择要操作的数据库)
select * from dept;select * from emp;select * from salgrade;
#5.查看表的结构
desc dept;
#6.查询一个字段
select dname from dept;
#7.查询多个字段
select dname,deptno from dept;
#8.给查询的列起别名 as关键字,也可以省略(只是给查询的显示列名改变,不会改变数据库中表的字段名)
select dname as name from dept;
select dname name from dept;
#9.特殊名称用"" '' ``隔开
#在所有的数据库中,字符串统一使用单引号,Oracle中不能使用双引号
select dname "hello world" from dept;
select dname 'hello world' from dept;
select dname `hello world` from dept;
select ename,sal from emp;
#查询员工的年薪,即月工资*12
#(10字段可以使用数学表达式)
select ename,sal*12 from emp;
select ename,sal*12 as `年薪` from emp;
select ename,sal/30 as `日薪` from emp;

3.条件查询

3.1 概述

什么是条件查询?:不是将表中所有数据都查出来。是查询出来符合条件的。

语法格式:

select	字段1,字段2,字段3....from 	表名where	条件;
3.2 条件查询的条件
  1. 等于 : =
#查询收入为800的员工相关信息
select empno,ename,sal from emp where SAL = 800;
#查询姓名为SMITH的员工编号和工资
#查询字符串可以使用单引号和双引号,建议使用单引号
select empno,sal from emp where ename = 'SMITH'; 
select empno,sal from emp where ename = "SMITH"; 
#报错
select empno,sal from emp where ename = `SMITH`; 
  1. 不等于 : <>或!=
#查询收入为800的员工相关信息
select empno,ename,sal from emp where SAL = 800;
#查询姓名为SMITH的员工编号和工资
#查询字符串可以使用单引号和双引号,建议使用单引号
select empno,sal from emp where ename = 'SMITH'; 
select empno,sal from emp where ename = "SMITH"; 
#报错
select empno,sal from emp where ename = `SMITH`; 
  1. 小于:<

  2. 大于:>

  3. 小于等于:<=

  4. 大于等于:>=

#查询收入小于2000的相关员工信息
select empno,ename,sal from emp where SAL < 2000;
#查询收入小于等于3000的相关员工信息
select empno,ename,sal from emp where SAL <= 3000;
#查询收入大于2000的相关员工信息
select empno,ename,sal from emp where SAL > 2000;
#查询收入大于等于3000的相关员工信息
select empno,ename,sal from emp where SAL >= 3000;
  1. **between … and …**等同于 >= and <=

    使用between and的时候,必须遵循左小右大。
    between and是闭区间,包括两端的值。

#查询收入大于等于2450,小于等于3000的相关员工信息
#1.between ... and ...
select 
  empno,ename,sal 	
from 
  emp     
where 
  SAL between 2450 and 3000;
  
#2.>= and <=
select 
  empno,ename,sal 	
from 
  emp     
where 
  SAL >= 2450 and SAL <= 3000; 
  1. is null 为 null(is not null 不为空)

    在数据库当中null不能使用等号进行衡量。需要使用is null。因为数据库中的null代表什么也没有,它不是一个值,所以不能使用等号衡量。

#查询哪些员工的津贴为null
select 
   empno,ename,sal,comm 
from 
   emp 
where 
   comm is null;

#不能使用=
select 
   empno,ename,sal,comm 
from 
   emp 
where 
   comm = null;

#查询哪些员工的津贴不为null
select 
   empno,ename,sal,comm 	
from 
   emp     
where 
   comm is not null;
  1. 并且:and
#查询工作岗位是MANAGER并且工资大于2500的员工信息
select 	
	empno,ename,job,sal 
from 	
	emp 
where 	
	job = 'MANAGER' and sal > 2500;
  1. 或者:or
#查询工作岗位是MANGER或者是SALEMAN的员工信息
select 	
	empno,ename,jobfrom	emp
where 
#注意:不能写成job = 'MANAGER' or  'SALESMAN'	
	job = 'MANAGER' or job = 'SALESMAN';
  1. and 和 or同时出现的优先级问题

    and和or同时出现,and优先级较高。如果想让or先执行,需要加“小括号”。以后在开发中,如果不确定优先级,就加小括号就行了。

#查询工资大于2500,并且部门编号为10或20部门的员工
select 	
	empno,ename,job,deptno
from	
	emp
where 
	SAL > 2500 and (deptno = 10 or deptno = 20);
  1. 包含:in 不包含:not in

    相当于多个or

#查询部门编号为10,20,30的员工
select 	
	empno,ename,job,deptno
from	
	emp
where 
	deptno in (10,20,30);
	
#查询部门编号不为10,20的员工
select 	
	empno,ename,job,deptno
from
	emp
where 
	deptno not in (10,20);
  1. not

    not 可以取非,主要用在 is 或 in 中
    is null
    is not null
    in
    not in

  2. 模糊查询:like

    • 称为模糊查询,支持%或下划线匹配
    • %匹配任意多个字符
    • 下划线:任意一个字符。
    • (%是一个特殊的符号,_ 也是一个特殊符号)
#查询员工姓名中含有字母O的信息
select	
	empno,ename,job,deptno
from
	emp
where	
	ename like '%o%';	
#查询员工姓名中首字母为J的信息
select 
	empno,ename,job,deptno 
from 
	emp 
where 
	ename like 'J%';
#查询员工姓名中尾字母为S的信息
select 
	empno,ename,job,deptno 
from 
	emp 
where 
	ename like '%S';
#查询员工姓名中第二个字母为A的信息
select 
	empno,ename,job,deptno 
from 
	emp 
where 
	ename like '_A%';

4.排序操作(ORDER BY语句)

  • 默认为升序:asc,降序:desc
  • 两个或多个字段进行排序时,优先级为从左到右
  • 根据字段的位置也可以排序
    select ename,sal from emp order by 2; // 2表示第二列。第二列是sal
  • 关键字顺序不能变:
    select

    from

    where

    order by
  • 语句的执行顺序必须掌握:
    第一步:from
    第二步:where
    第三步:select
    第四步:order by(排序总是在最后执行!)
use bjpowernode;
#按照工资升序(从低往高),找出相关员工信息
select 
	ename,sal 
from 
    emp 
#默认升序asc
order by 
    sal;
    
#按照工资降序,找出相关员工信息
select 
	ename,sal 
from 
    emp 
order by 
	sal desc;
    
#按照工资升序排列,如果工资一样,按照姓名的降序排列
select
	ename,sal
from
	emp
order by
	sal asc, ename desc;

#找出工资在1250到3000之间的员工信息,要求按照薪资降序排列。
select 
	ename,sal
from
	emp
where
	sal between 1250 and 3000
order by
	sal desc;

5.数据处理函数

  • 数据处理函数又被称为单行处理函数

  • 单行处理函数的特点:一个输入对应一个输出。

  • 和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!)

  1. lower():转换小写

  2. upper():转换为大写

  3. substr():取子串

    第一个参数为字段名,第二个为截取子串的开始(注意:SQL中数组以1开始),第三个参数为截取子串的结束位置,默认为末位

  4. contat():字符串拼接

  5. length():取长度

  6. trim():去空格

  7. str_to_date() 将字符串转换成日期

  8. date_format() 格式化日期

  9. **now()😗*现在的时间

  10. format() 设置千分位

  11. round():四舍五入

  12. rand():生成随机数,数值大小为0~1

  13. ifnull():可以将 null 转换成一个具体值

    在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL,为了避免这个现象,需要使用ifnull函数

    ifnull函数用法:ifnull(数据, 被当做哪个值)

    如果“数据”为NULL的时候,把这个数据结构当做哪个值。

测试:

use bjpowernode;
#1.lower():转换小写
#将员工姓名转换为小写
select lower(ename) as '小写姓名' from emp;

#2.upper():转换为大写
select upper(ename) as '大写姓名' from emp;

#3.substr():取子串
#substr():第一个参数为字段名,第二个为截取子串的开始(注意:SQL中数组以1开始),第三个参数为截取子串的结束位置,默认为末位
#去掉姓名首字母
select substr(ename,1) as '去掉姓名首字母' from emp;
#获取姓名的前两个字母
select substr(ename,1,2) as 'ename' from emp;

#4.contat():字符串拼接
#拼接员工编号和员工姓名
select concat(empno,'+',ename) from emp;

#5.length():取长度
select length(ename) as '姓名的长度' from emp;

#6.trim():去空格
#相当于查询员工姓名为KING的员工信息
select * from emp where ename = trim('   KING');

#7.str_to_date() 将字符串转换成日期
SELECT STR_TO_DATE('29,11,2000','%d,%m,%y') as '日期';

#8.date_format() 格式化日期
#9.now():现在的时间
select DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p') as '现在的时间';

#9.format() 设置千分位
#结果为:14,500.202
SELECT FORMAT(14500.2018, 3);


#10.round():四舍五入
#保留整数位
select round(1236.567, 0) as result;
#保留小数位
select round(1236.567, 1) as result;
#保留到十位(即个位为0)
select round(1236.567, -1) as result;

#11.rand():生成随机数,数值大小为0~1
# 100以内的随机整数
select round(rand()*100,0);

#12.ifnull():可以将 null 转换成一个具体值
#在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL,为了避免这个现象,需要使用ifnull函数
select ename, sal + comm as salcomm from emp;
#计算员工的年薪:年薪 = (月薪 + 月补助) * 12
select ename, (sal + comm) * 12 as '年薪' from emp;
#ifnull函数用法:ifnull(数据, 被当做哪个值)
#如果“数据”为NULL的时候,把这个数据结构当做哪个值。
select ename, (sal + ifnull(comm, 0)) * 12 as '年薪' from emp;

6.分组函数(多行处理函数)

多行处理函数的特点:输入多行,最终输出一行。

  • 注意
    • 分组函数在使用的时候必须先进行分组,然后才能用。
    • 如果你没有对数据进行分组,整张表默认为一组。
    • 分组函数使用的时候自动忽略null(注意是忽略,而不是把null当做0处理)
    • 分组函数不能够直接使用在where子句中
    • 所有的分组函数可以组合起来一起用。

五个基本的分组函数

  1. count 计数
select * from emp;
#count():计数
#使用count()函数的时候要注意,如果参数为具体字段,它会忽略值为null的行,不会进行统计
select count(comm) from emp;
#当count()函数中的参数为*时,就可以认为他是统计表的行数
select count(*) from emp;
  1. sum 求和

    #sum():求和
    select sum(sal) as '员工的工资总和' from emp;
    
  2. avg 平均值

    #avg():平均数
    select round(avg(sal),0) as '员工的工资平均数' from emp;
    
  3. max 最大值

    #max():最大值
    select round(max(sal),0) as '员工的工资最大值' from emp;
    
  4. min 最小值

    #min():最小值
    select round(min(sal),0) as '员工的工资最小值' from emp;
    

分组函数还可以同时使用:

#分组函数可以一起使用
select 
	sum(sal) as '员工的工资总和',
    round(avg(sal),0) as '员工的工资平均数',
    round(max(sal),0) as '员工的工资最大值',
    round(min(sal),0) as '员工的工资最小值',
    count(*) as '员工的总数'
from
	emp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值