MySQL 学习笔记

MySQL学习笔记

一. 安装和配置

略过,网络上泛滥了

二. 基本使用

基础命令

进入mysql数据库:

mysql -uroot -proot(root为密码) #显示密码明文式登录
mysql -uroot -p #下方会显示一个password输入行,输入不会有反应,为正常现象

退出

exit #退出不多BB

显示数据库

show databases; # 注意以分号结尾,不见“;”不执行
# 此时不执行时,可用  \c  终止一条SQL语句的输入

创建数据库

create database [数据库名];

使用某个数据库

use [数据库名]; # 反馈是显示database changed

查看哪些数据库下有哪些表

show tables;

从sql文件中导入数据

mysql> source F:\BDDD\bjpowernode.sql #路径中不要有中文 

查看表中的数据

select * from [表名]; 

不看表的数据,只看表的结构

desc [表名];

查看mysql数据库的版本号

select version();

查看当前使用的数据库

select database();

基本知识

  1. 表是数据库的基本单元,数据库中是以表格的模式存储数据的

  2. 任何一张表都有行和列

    行(row):被称为数据/记录
    列(column):被称为字段
  3. 每一个字段都有:字段名,数据类型,约束的属性

  4. 关于SQL语句的分类

    DQL:数据查询语言,凡是带有select关键字的都是查询语句
    select...
    DML:数据操作语言(凡是对表当中的数据进行增删改的都是DML)
    insert delete update
    insert 增
    delete 删
    update 改
    DDL:数据定义语言
    凡是带有create、drop、alter的都是DDL。
    DDL主要操作的是表的结构,不是表的数据。
    create:新建
    drop:删除
    alter:修改
    TCL:事务控制控制语言
    包括:
        事物提交:commit
        事物回滚:rollback
    DCL:数据控制语言
    授权:grant
    撤销权限:revoke

基本命令

简单查询语句

查询一个字段
select [字段名] from [表名]; # sql语句不区分大小写
查询两个或多个字段
select [字段名],[字段名] from [表名];
查询所有字段
select [],[],[],[],[],... from [表名];#第一种
select * from [表名];# 第二种
# 第二种效率比较低,可读性比较差,会先把*转换成字段名
给查询的列起别名
select [字段名] as [别名],[]... from [表名];# 使用as关键字起别名,不会进行修改操作
# as 可以省略
# 起别名的时候,别名中有空格会编译报错
# 解决方法: 使用引号将“别名”引起来(""和‘’都可以)
select deptno,dname "dept name" from dept;# 示例
select deptno,dname 'dept name' from dept;# 示例,建议使用单引号,在所有的数据库中都可以使用。
使用表中的数据进行计算
# 字段是可以参加加减乘除运算的
select ename,sal from emp;
select ename,sal*12 from emp;# 显示的列名会出现问题

image-20210519204943497

# 此时可以用起别名的方式
select ename,sal*12 as yearsal from emp;

image-20210519205225022

# 如果要将别名设为中文的
select ename,sal*12 as '年薪' from emp;

image-20210519205523066

条件查询

查询符合条件的数据

1. 有哪些条件
 = 
 !=或<> # 不等号
 <
 <=
 >=
 between ... and ... 两个值之间,等同于>= and <=
 and 并且
 or 或者
 in 包含
 not 取非,主要用在is或in中
 like 模糊查询,支持%或下划线匹配
 % 匹配任意个字符
 _ 一个下划线只匹配一个字符
2.查询薪资等于800的员工姓名和编号
select ename,empno from emp where sal=800;

# 查询不等于800的
select ename,empno from emp where sal != 800;

# 查询SMITH的的编号和薪资
select empno,sal from emp where ename = 'SMITH';

image-20210521223615837

3.查询薪资在2450和3000之间的员工信息,使用 and
select * from emp where sal<=3000 and sal>=2450;

image-20210521224350104

4.使用betweed...and...
select * from emp where sal between 2450 and 3000;# 必须遵循 and 左小右大

image-20210521224750221

5.查询哪些员工的津贴/补助为空
select * from emp where comm is not null;

image-20210521225321941

# 这里不能使用where comm =或者!= null
# 在数据库中null不能使用等号衡量
6.查询工作岗位是MANAGER并且工资大于2500的员工信息
select * from emp where job='MANAGER' and sal > 2500;

image-20210521230251508

7. 查询工作岗位是 MANAGER或 SALESMAN的员工
select * from emp where job = 'MANAGER' or 'SALESMAN';

image-20210521230850303

8. and和or的优先级,and和or同时出现,and的优先级比较高,要使or先执行,要使用()括起来。
select
 *
from 
 emp
where
 sal > 2500 and (deptno = 10 or deptno = 20);

image-20210521231636393

9. in,相当于多个or,但不是一个区间
# 查询薪资是800和5000的员工信息
select
    *
from
    emp
where
    sal
    in (800,5000);# 找出800和5000

image-20210521232242861

10. not
# not 可以取非,主要用于is或者 in中
    is null
    is not null
    in
    not in
11. like
# 模糊查询,支持%和下划线匹配
# 查询名字中带有'O'的
select ename from emp where ename like '%O%';

image-20210521235929585

# 找出名字以'T'结尾的
select ename from emp where ename like '%T';

image-20210522000143852

# 找出名字以K开始的
select ename from emp where ename like 'K%';

image-20210522000404041

排序

单个字段排序
mysql> select
    ->  ename,sal
    -> from emp
    -> order by sal;
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; # 指定升序 默认

image-20211020223309258

多个字段排序
查询员工名字和薪资,要求按照薪资排序,如果薪资一样的话,再按照名字升序排列
select ename,sal from emp order by sal asc, ename asc;
了解:根据字段的位置也可以排序
select ename,sal from emp order by 2;
# 按照查询结果的第二列sal排序,不建议这样写,健壮性低,因为顺序变换之后失效
综合练习
# 找出工资在1250到3000之间的员工信息,要求按照薪资降序排列。
select * from emp where sal>1250 and sal<3000 order by sal desc;

image-20211020230117483

下一篇 数据库-mysql