MySQL基础学习(⼀)
⼀、常⽤命令
⼀般命令不区分⼤⼩写
启停服务:
net start mysql
net stop mysql
登录命令:
mysql -uroot -p[password]or mysql -uroot -p
mysql -uroot -p//隐藏密码
Enter password: *******
查看有哪些数据库:
show databases;
选择要使⽤的数据库:
use[database-name];
创建数据库:
create database[database-name];
查看某个数据库下有哪些表:
show tables;
导⼊数据表:
source [⽂件路径];
后缀为sql的⽂件被称为sql脚本⽂件,其中编写了⼤量的SQL语句,执⾏时,该⽂件中的语句会全部执⾏查看表中的所有数据:
select*from表名;
查看表的结构:
desc表名;//describe
查看当前数据库版本号
select version();
查看当前使⽤的是哪个数据库?
select database();
MySQL不见分号不结束命令的执⾏,此时输⼊\c or crtl+c可结束当前输⼊
⼆、概念
数据库中的最基本的单元是表(table)
数据库当中是以表格的形式存储数据的,因为表⽐较直观。
任何⼀张表都有⾏和列:
⾏(row):被称为数据/记录
列(column):被称为字段
姓名字段、年龄字段、性别字段
每个字段都有:字段名、数据类型、约束等属性
三、SQL语句的分类
DQL:数据查询语⾔(凡是带有select关键字的都是查询语⾔)
DML:数据操作语⾔(凡是对表中的数据进⾏增删改查的都是DML)
insert 增
delete 删
update 改
DML主要操作的是表中的数据data
DDL:数据定义语⾔(凡是带有create、drop、alter的都是DDL)
DDL主要操作的是表的结构,不是表中的数据
TCL:事务控制语⾔
事物提交:commit;
事物回滚:rollback;
DCL:数据控制语⾔
例如:授权grant、撤销权限revoke…
四、DQL查询语句
简单查询
查询⼀个字段?
select字段名from表名;
其中要注意:select和from都是关键字,字段名和表名都是标识符
查询多个字段怎么办?(*是全部)
select字段名1,字段名2,… from表名;
如何给查询的列起别名?
select字段名as别名from表名;
select字段名别名from表名;
Q:别名⾥⾯有空格怎么办?
A:可以⽤单双引号把别名括起来,注意:在所有数据库中,字符串统⼀⽤单引号括起来,单引号是标准。注意:select语句永远不会进⾏修改操作
实操演练
基本的sql语句有哪些计算员⼯年薪?
select ename as Name,sal*12'Annual Salary'from emp;
注意:此处只是进⾏运算后输出,并没有修改
条件查询
查询出符合条件的记录
select字段1,字段2,字段3… from表名where条件;
条件
=:等于
<>、!=:不等于
<:⼩于
‘’>‘’ :⼤于
‘’>=‘’:⼤于等于
between …and…:介于两个值之间,等同于>= and <=
is null:为空
is not null:不为空
and:并且
or:或者
in:包含
not in:不包含
select*from emp where job in('Manager','Salesman');
select*from emp where job ='Manager'or job ='Saleman';
模糊查询
like :称为模糊查询,⽀持%或下划线匹配
%匹配任意个字符,⼀个下划线只能匹配⼀个字符
and优先级⽐or⾼
出名字中含有o的员⼯信息
select*from emp where ename like'%o%';
出名字中含有下划线的员⼯信息
select*from emp where ename like'%\_%';
当查询特殊字符时,前⾯加上\,作为转义字符
排序
select ename,sal from emp order by sal;//默认升序
select ename,sal from emp order by sal asc;//指定升序:ascend
select ename,sal from emp order by sal desc;//降序:descend
多个字段排序?
查询员⼯名字和薪资,要求按照薪资升序,如果薪资相同,按照名字升序select ename,sal from emp order by sal,ename asc;
也可以根据字段的位置进⾏排序,不建议开发中使⽤,因为列顺序会改变select*from emp order by2;//2表⽰第⼆列,第⼆列是sal
数据处理函数
数据处理函数⼜被称为单⾏处理函数
单⾏处理函数的特点:⼀个输⼊对应⼀个输出
和单⾏处理函数相对的是:多⾏处理函数(多个输⼊对应⼀个输出)
lower 转换⼩写
upper 转换⼤写
substr 取⼦串(substr(被截取的字符串,起始下标,截取的长度),起始下标从1开始)length 取长度
trim 去空格
str_to_date 将字符串转换成⽇期
date_format 格式化⽇期
format 设置千分位
round(数字,⼩数位) 四舍五⼊
rand() ⽣成随机数
Ifnull 可以将 null 转换成⼀个具体值(NULL主要参与运算,结果就是NULL)
CASE column
WHEN condition1 THEN value
WHEN condition2 THEN value
ELSE value END;
select concat(upper(substr(ename,1,1)),lower(substr(ename,2,length(ename)-1)))from emp; select round((rand()*100)%32+1,0) rand from emp;//随机值范围在1-32
select ename,sal+ifnull(comm,0) Sum from emp;
select ename,
job,
(case job when'MANAGER'then sal*1.1when'SALESMAN'then sal*1.5else sal end)'New Salary' from emp;
分组函数(多⾏处理函数)
多⾏处理函数(多个输⼊对应⼀个输出)
count 计数
sum 求和
avg 平均值
max 最⼤值
min 最⼩值
分组函数⾃动忽略null,不需要对null进⾏提前处理
select count(*)from emp;//统计所有记录个数
select count(comm)from emp;//统计不为null的记录个数
分组查询
在实际应⽤中,可能需要对数据先进⾏分组,再对每⼀组的数据进⾏操作。
计算每个部分的⼯资和?
计算每个⼯作岗位的平均薪资?
出每个⼯作岗位的最⾼薪资?
select
from
where
group by
having//分完组后根据条件进⾏过滤
order by
语句执⾏顺序
from——where——group by——having——select——order by
为什么分组函数不能直接使⽤在where后⾯?
select ename,sal from emp where sal >min(sal);//报错
因为分组函数在使⽤时必须先分组之后才能使⽤
where执⾏的时候,还没有分组。
select deptno,max(sal)from emp
group by deptno having max(sal)>3000order by max(sal)desc;//低效
select deptno,max(sal)from emp where sal>3000group by deptno;
//出每个部门最⾼薪资,要求显⽰薪资⼤于3000的
优化策略:where和having,优先选择where
distinct关键字
把查询结果去除重复记录,原表数据不会被修改
select distinct job from emp;
select distinct job,deptno from emp;//两个字段联合起来去重
连接查询
多张表联合起来查询数据,这种跨表查询,被称为连接查询
主要学习SQL99语法
表连接⽅式
内连接:完全能够匹配上该条件的数据查询出来
等值连接
⾮等值连接
⾃连接
外连接:
左外连接(左连接)
右外连接(右连接)
全连接
笛卡尔积现象
当两张表连接查询,没有任何条件限制,最终查询结果条数,是两张表条数的乘积,这种现象被称为笛卡尔积现象

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。