MySQL学习笔记(旭玖)

MySQL学习笔记


旭玖的学习笔记,后续随缘更新!


day01笔记

1、四个问题

什么是数据库、数据库管理系统、sql,三者之间的关系?

1.数据库:

database 简称DB

2.数据库管理系统:

database’man’agement 简称DBMS

常见的数据库管理系统:

MySQL、Oracle、MS Sqlserver、DB2、sybase等

3.SQl:

​ 结构化查询语言,是一套标准,可以在多个数据库管理系统中使用。通过编写SQL语句,然后DBMS执行SQL语句,最终完成数据库中的增删改查操作

4.三者之间的关系:

DBMS ——执行——> SQL ——操作——> DB

2、笔记

1.数据表

在任何一张数据表中,都存在行和列

行(row):数据/记录

列(column):字段

3、mysql常用命令

  1. 退出mysql:

exit

quit

ctrl+c

  1. 查看mysql中的数据库

show databases;

  1. 查看mysql中数据库内的数据表

show tables;

  1. 查看表中的所有数据

select * from 表名

  1. 使用数据库

use

  1. 创建数据库

create database 数据库名

  1. 查看表结构

desc 表名

  1. 查看当前使用的数据库

select database();

  1. 终止命令输入

\c

  1. 导入数据库(还原数据库)

source 路径及文件名

注意:路径内不能有中文!!!

11.输入数据

insert into 表名 values

4、SQL语句的分类

1.数据查询语言 DQL

带有select关键字的都是查询语句

select

2.数据操作语言 DML

对表内数据进行增删改的都是DML

insert:增

delete:删

update:改

3.数据定义语言 DDL

对表的结构进行操作,与DML不同,不对表的数据进行操作

create:新建

drop:删除

alter:修改

4.事务控制语言 TCL

commit:事务提交

rollback:事务回滚

5.数据控制语言 DCL

grant:授权

revoke:撤销权限

5、查询

1.简单查询

1.1 查询一个字段

select  字段名  from  表名;

注意:select 和 from 都是关键字

​ 字段名和表名都是标识符

1.2 查询多个字段

使用’,'逗号隔开

select  字段名1,字段名2  from  表名;

1.3 查询所有字段

第一种方式:将所有字段名写出

select  字段名1,字段名2,字段名3,字段名...  from  表名;

第二种方式:使用"*"号

select  *  from 表名;

缺点:

1、效率低

2、可读性差


不建议在实际开发中使用!

1.4 列(字段)起别名

第一种方式:使用关键字 as

select 字段名 as 别名 from 表名;

第二种方式:使用空格 " "

select 字段名 别名 from 表名;

注意:

若别名内含有空格或中文时,可使用’单引号’将别名括起来

1.5 列(字段)参与运算

可使用数学运算

‘+’ ‘-’ ‘*’ ‘/’

select 字段名*10 from 表名;
2.条件查询

2.1 语法格式

select 字段名 from 表名 where 条件;

2.2 条件

等于 =

select 字段1 from 表名 where 字段1 = 10;
select 字段2 from 表名 where 字段2 = 'sql';

不等于 <> 或 !=

select 字段1 from 表名 where 字段1 <> 10;
select 字段1 from 表名 where 字段1 != 10;

小于 <

select 字段1 from 表名 where 字段1 < 10;

大于 >

select 字段1 from 表名 where 字段1 > 10;

小于等于 <=

大于等于 >=

两个值之间 between … and … 等同于>= and <=

注意:

  1. and:并且

    1. 使用between…and…时必须左小右大
      2. between…and…是闭区间,包括左右两边的值

查询为null(空)的数据 is null (is not null :不为空)

注意:

​ null不能使用等号衡量

and 并且

select 字段名1,字段名2,字段名3 from 表名 where 字段名1 = 10 and 字段名2 > 20;

or 或者

select 字段1,字段2 from 表名 where 字段1 = 10 or 字段2 = 20;

注意:

​ 1.and 与 or 同时出现,and优先级较高,如果想要优先使用or,需加(括号)

​ 2.以后使用中,在不确定优先级的情况下可以添加小括号

in 包含

select 字段1 from 表名 where 字段1 in (800,100);

注意:

​ 1.in不是一个区间,是一个具体的值

​ 2.in相当于多个or

not in 不包含

select 字段1 from 表名 where 字段1 not in (800,500,300);
3.模糊查询

like 模糊查询

支持%或下划线匹配

%:匹配任意多个字符

下划线:匹配任意一个字符

select 字段1 from 表名 where like '%x%'

注意:

​ 1.数据中有下划线的可以添加转义字符 \ (反斜杠)来查找该数据

4.排序 order by

1.默认排序 order by

select 字段1 from 表名 order by 字段1;

按照字段1默认排序(升序)


2.指定降序 order by desc

select * from 表名 order by 字段1 desc;

3.指定升序 order by asc

select * from 表名 order by 字段2 asc;

4.多字段排序

select * from 表名 order by 字段1 asc,字段2 asc;

注意:

​ 哪个字段在前哪个字段就起主导作用

5.循环执行顺序

  1. from
  2. where
  3. select
  4. order by(排序总是在最后执行)

6、 数据处理函数

1.数据处理函数/单行处理函数

又称为:单行处理函数

特点:一个输入对应一个输出


相对的是:多行处理函数

特点:多个输入对应1个输出

2.常见的单行处理函数
  1. lower 转换小写
select lower(字段1) from 表名;
  1. upper 转化大写
select upper(字段1) from 表名;
  1. substr 取字符串
select substr(字段1,1,2) from 表名;

注意:

1. substr(被截取的字段,起始下标,截取的长度)
2. 起始下标从1开始,不能为0
  1. concat 字符串拼接
select concat(字段1,字段2) from 表名;
  1. length 取长度
select length(字段1) from 表名;
  1. trim 去空格
select * from 表名 where 字段1 = trim('    526 ');

可以去除前后空格

7.round 四舍五入

select round(字段1,0) from 表名;

注意:

  1. 字段1处可填写字面量或字面值

  2. round(字段1,保留的小数位/整数位)

    • 2: 保留2位小数

    • 0: 保留到个位

    • -1: 保留到十位

    • -2: 保留到百位

8.rand 生成随机数

select rand() from 表名; 

可与round组合使用

select round(rand()*100,0) from 表名;

9.ifnull 可以将NULL值转化成具体值

select ifnull(字段1,0) from 表名;

注意:

  1. ifnull(字段1,0),0为NULL的替代值

10.类判断语句

case when then when then else end

case when then when then else end
select 字段1,字段2(case 字段1 when '150' then 字段2*1.5 when '540' 字段2*2.0 else 字段1 end) as new字段1 from 表名;

类似于选择判断语句

7、分组函数

1.分组函数/聚合函数/多行处理函数

特点:输入多行,输出一行

2.五个分组函数

注意:

  1. 分组函数使用时必须先对数据进行分组,然后才能使用
  2. 如果不对数据分组,整张表默认为一组
  3. 分组函数自动忽略NULL,我们不需要提前对NULL进行处理
  4. 分组函数不能直接写在在where中
  5. 所有分组函数都可以组合起来一起使用

  1. count 计数
select count(字段1) from 表名;

注意:

  1. count(具体字段):表示统计该字段下不为NULL的元素的总数
  2. count(*):统计表当中的总行数,有NULL也不影响
  1. sum 求和
select sum(字段1) from 表名;
  1. avg 平均值
select avg(字段1) from 表名;
  1. max 最大值
select max(字段1) from 表名;
  1. min 最小值
select min(字段1) from 表名;

8、分组查询

1.分组查询 group by
select 字段2,sum(字段1) from 表名 group by 字段2; 

注意:

  1. 在select语句中,如果存在group by语句的话,select后面只能添加参加分组的字段及分组函数
  2. where后不能写分组函数
2.分组联合
select 字段1,字段2,max(字段3) from 表名 group by 字段1,字段2;
3.分组后再过滤 having
select 字段1,max(字段2) from 表名 group by 字段1 having max(字段2) > 200;

注意:

  1. where 和 having,优先使用where,where实在完成不了时可使用having

9、总结

1.SQL编写顺序
select		#查询

from		#数据来源

where		#条件筛选

group by	#分组

having		#过滤/筛选

order by	#排序
2.SQL执行顺序
from
where
group by
having
select
order by

注意:

  1. 以上关键字只能按照这个顺序执行,不能颠倒

10、实际操作

1.创建数据
数据轮廓
1.	3个department 'yy','xs','kf' 运营,销售,客服
2.	5个job:'zy','zz','jl','kz','bz'	职员,组长,经理,科长,部长
create database lianxi;

create table aa(id int(10),name char(10),age int(3),department char(20),job char(10),wages int(10));

alter table aa add gender char (10);#增加字段 性别

alter table aa modify column id int(3) not null auto_increment primary key;#id设置自增

insert into aa value (1,'XuJiu',19,'yy','bz',30000,'man');
insert into aa value (2,'LiHua',25,'xs','zy',2000,'man');
insert into aa value (3,'WangFen',29,'xs','jl',10000,'man');
insert into aa value (4,'TonZifen',25,'yy','jl',10000,'man');
insert into aa value (5,'MaZihan',18,'kf','zy',4000,'woman');
insert into aa value (6,'HeYahui',21,'yy','jl',9000,'woman');
insert into aa value (7,'ZhouYuxuan',22,'kf','zz',6000,'woman');
insert into aa value (8,'SunYun',20,'kf','zy',3000,'woman');
insert into aa value (9,'YangHuihui',31,'yy','kz',20000,'woman');
insert into aa value (10,'LiKai',27,'xs','bz',30000,'man');
insert into aa value (11,'HuangKun',18,'kf','zz',5000,'man');
insert into aa value (12,'WangXiaxi',25,'yy','jl',15000,'man');
insert into aa value (13,'DaiZhui',27,'xs','jl',15000,'woman');
insert into aa value (14,'ZhaoWei',25,'kf','jl',15000,'man');
insert into aa value (15,'LiZiqi',25,'kf','bz',20000,'woman');
+----+------------+------+------------+------+-------+--------+
| id | name       | age  | department | job  | wages | gender |
+----+------------+------+------------+------+-------+--------+
|  1 | XuJiu      |   19 | yy         | bz   | 30000 | man    |
|  2 | LiHua      |   25 | xs         | zy   |  2000 | man    |
|  3 | WangFen    |   29 | xs         | jl   | 10000 | man    |
|  4 | TonZifen   |   25 | yy         | jl   | 10000 | man    |
|  5 | MaZihan    |   18 | kf         | zy   |  4000 | woman  |
|  6 | HeYahui    |   21 | yy         | jl   |  9000 | woman  |
|  7 | ZhouYuxuan |   22 | kf         | zz   |  6000 | woman  |
|  8 | SunYun     |   20 | kf         | zy   |  3000 | woman  |
|  9 | YangHuihui |   31 | yy         | kz   | 20000 | woman  |
| 10 | LiKai      |   27 | xs         | bz   | 30000 | man    |
| 11 | HuangKun   |   18 | kf         | zz   |  5000 | man    |
| 12 | WangXiaxi  |   25 | yy         | jl   | 15000 | man    |
| 13 | DaiZhui    |   27 | xs         | jl   | 15000 | woman  |
| 14 | ZhaoWei    |   25 | kf         | jl   | 15000 | man    |
| 15 | LiZiqi     |   25 | kf         | bz   | 20000 | woman  |
+----+------------+------+------------+------+-------+--------+
2.数据操作
select id,name,job,wages,gender from aa where department = 'yy';

+----+------------+------+-------+--------+
| id | name       | job  | wages | gender |
+----+------------+------+-------+--------+
|  1 | XuJiu      | bz   | 30000 | man    |
|  4 | TonZifen   | jl   | 10000 | man    |
|  6 | HeYahui    | jl   |  9000 | woman  |
|  9 | YangHuihui | kz   | 20000 | woman  |
| 12 | WangXiaxi  | jl   | 15000 | man    |
+----+------------+------+-------+--------+

select name,job,wages,gender from aa where department='yy' order by wages;
+------------+------+-------+--------+
| name       | job  | wages | gender |
+------------+------+-------+--------+
| HeYahui    | jl   |  9000 | woman  |
| TonZifen   | jl   | 10000 | man    |
| WangXiaxi  | jl   | 15000 | man    |
| YangHuihui | kz   | 20000 | woman  |
| XuJiu      | bz   | 30000 | man    |
+------------+------+-------+--------+

select name,job,wages,gender from aa where department='yy' order by wages desc;
+------------+------+-------+--------+
| name       | job  | wages | gender |
+------------+------+-------+--------+
| XuJiu      | bz   | 30000 | man    |
| YangHuihui | kz   | 20000 | woman  |
| WangXiaxi  | jl   | 15000 | man    |
| TonZifen   | jl   | 10000 | man    |
| HeYahui    | jl   |  9000 | woman  |
+------------+------+-------+--------+

select count('jl')as '经理总数' from aa;
+--------------+
| 经理总数     |
+--------------+
|           15 |
+--------------+

select name,gender,wages from aa where job='jl' group by name,gender,wages;
+-----------+--------+-------+
| name      | gender | wages |
+-----------+--------+-------+
| WangFen   | man    | 10000 |
| TonZifen  | man    | 10000 |
| HeYahui   | woman  |  9000 |
| WangXiaxi | man    | 15000 |
| DaiZhui   | woman  | 15000 |
| ZhaoWei   | man    | 15000 |
+-----------+--------+-------+

select job,max(wages) from aa group by job;
+------+------------+
| job  | max(wages) |
+------+------------+
| bz   |      30000 |
| zy   |       4000 |
| jl   |      15000 |
| zz   |       6000 |
| kz   |      20000 |
+------+------------+

select job,min(wages) from aa group by job;
+------+------------+
| job  | min(wages) |
+------+------------+
| bz   |      20000 |
| zy   |       2000 |
| jl   |       9000 |
| zz   |       5000 |
| kz   |      20000 |
+------+------------+

select department,max(wages) from aa group by department;
+------------+------------+
| department | max(wages) |
+------------+------------+
| yy         |      30000 |
| xs         |      30000 |
| kf         |      20000 |
+------------+------------+

select department,job,max(wages) from aa group by department,job;#有问题

select department as '部门',job as '职位', max(wages) as '最高工资' from aa group by department,job order by max(wages);#有问题

select department,max(wages) from aa where wages>10000 group by department;
+------------+------------+
| department | max(wages) |
+------------+------------+
| yy         |      30000 |
| xs         |      30000 |
| kf         |      20000 |
+------------+------------+

select department,max(wages) from aa group by department having max(wages) > 20000;
+------------+------------+
| department | max(wages) |
+------------+------------+
| yy         |      30000 |
| xs         |      30000 |
+------------+------------+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值