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();
基本知识
-
表是数据库的基本单元,数据库中是以表格的模式存储数据的
-
任何一张表都有行和列
行(row):被称为数据/记录 列(column):被称为字段 -
每一个字段都有:字段名,数据类型,约束的属性
-
关于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;# 显示的列名会出现问题

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

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

条件查询
查询符合条件的数据
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';

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

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

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

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

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

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

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

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

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

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

排序
单个字段排序
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; # 指定升序 默认

多个字段排序
查询员工名字和薪资,要求按照薪资排序,如果薪资一样的话,再按照名字升序排列
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;
