数据蛙第8期数据分析组团

第二周学习日志

2020-09-20  本文已影响0人  G阿鹏

写在前面:2020年9月20日,星期日,今天是打卡的一天,也是我来到深圳的第一天。当我离开学校的时候,我知道,我离开了一个最安逸的地方,面对的将是这个现实的世界。不管结果是好是坏,我迈出了这一步。出发吧,该去远方了。

对于SQL的学习,有点陌生,也有点熟悉。大概是大学的时候学过,但是有没有好好学吧。这周要恶补一下。由于时间的关系,这次学的不是很多,什么时候才有时间好好学呢,要自己挤时间吧…

1.SQL : 结构化查询语言

启动服务net start mysql

停止服务net stop mysql

登录 mysql -h 主机名 -P 端口号 -u 用户名 -p密码

退出exit

show databases;

use 库名;

show tables;

show tables from 库名;不换库

select database();

create table 表名(字段1 字段类型,字段2 字段类型);

desc 表名;

select * from 表名;

select version();查看版本

说明:SQL 语法不区分大小写,关键字大写,表名字段名小写

命令以分号结尾

-- 注释

/* 多行注释*/

2.DQL查询语句

1)基础查询

select distinct 字段1 as 别名1,字段2 as 别名2 ... from 表名; -- as可省略

select concat(字段1,字段2,字段3) as 别名 from 库名;

select ifnull(字段名, 返回值) as 别名;

2)条件查询

条件运算符 > < = >= <=<>

逻辑运算符and or not

3)模糊查询

like -- 配合通配符

% -- 任意个字符

_ -- 单个字符

\ -- 转义

escape -- 指定转义

[not] between 区间头 and 区间尾 -- (含首尾,不可交换区间首尾)

in (值1,值2...)

is [not] null

<=> -- 安全等于

4)排序查询

order by 排序字段1(可以是表达式,别名) asc | desc (默认asc),排序字段2 [desc]

5)单行函数

A.字符类

concate() -- 拼接

length() -- 字节长度

upper() -- 转大写

lower() -- 转小写

substr(原字符串,初始索引,截取长度) -- 截子串

instr(原字符串,子串) -- 子串第一次出现索引,无则0

trim() -- 去前后空格

trim(指定字符 from 原字符串) -- 去前后指定字符

lpad(原字符串,总长度,指定填充符) -- 左填充

rpad() -- 右填充

replace(原字符串,要换字符串,替换字符串) -- 替换

B.数学类

round(值,精度) -- 四舍五入

ceil() -- 向上取整

floor() -- 向下取整

truncate() -- 截断

mod() -- 模

rand() (0,1] -- 随机数

C.日期类

now() -- 当前系统日期+时间

curdate() -- 当前系统日期

curtime() -- 当前系统时间

year() month() monthname() day() hour()minute() second()

-- 年月英文月日时分秒

str_to_date() -- 日期转换

date_format() -- 日期格式化

datediff(被减数日期,减数日期) -- 日期差天数

D.系统类

version() -- 当前版本

database() -- 当前库

user() -- 当前用户

password('字符') -- 加密

md5('字符') -- md5加密

E.条件分支

if(真值表达式,真执行,假执行) 条件执行

case 条件表达式

when 常量1 then 返回值1

when 常量2 then 返回值2

...

else 返回值n+1

end

case

when 条件1 then 返回值1

when 条件2 then 返回值2

...

else 返回值n+1

end

6)分组函数(聚合函数)

sum([distinct] 数值) -- 非空和

avg(数值) -- 非空均值

max(字段) -- 非空最大值

min(字段) -- 非空最小值

count([distinct] 字段) -- 非空计数

count(*|1) -- 快速统计总行数

7)分组查询

select 分组函数,分组字段...

where 分组前筛选条件,数据源和字段为原始表

group by 分组字段...

having 分组后筛选条件,数据源为分组后的结果集,字段为select后的字段

order by 排序字段[desc];

8)连接查询(多表查询)

笛卡尔积 : 多表直接查询结果行数为行1 * 行2 * ...

内连接

A.等值连接

select 别名1.字段1,别名2字段2

from 表1 别名1,表2 别名2(表改了别名,select若带表名则必须用别名)...

where 别名1.字段1=别名2.字段2

and ...

and 筛选条件

group by 分组字段

having 筛选条件

order by 排序字段;

B.非等值连接

select 字段1,字段2

from 表1 别名1,表2 别名2

where 别名1.字段11 between 别名2.字段21 and 别名2.字段22

and ...;

C.自连接

select 别名1.字段1,别名1.字段2...,别名2.字段1,别名2.字段2...

from 表名别名1,表名别名2;

D.内连接 inner join (表交集)

select 字段1,字段2...

from 表1 别名1

[inner] join 表2 别名2

on 连接条件1(等值条件|不等值条件)

[inner] join 表3 别名3

on 连接条件2

...

where 筛选条件

group by 分组字段

having 筛选条件

order by 排序字段

...;

外连接(主表并集)

A.左连接left [outer] join

select 字段1,字段2...

from 主表别名1

left join 从表别名2

on 连接条件

where 别名2.id is null

...;

B.右连接 right [outer] join (交换连接表顺序等同于左连接)

select 字段1,字段2...

from 从表别名1

right join 主表别名2

on 连接条件

where 别名1.id is null

...;

C.全外连接 full [outer] join (全表并集)

select 字段1,字段2

from 表1 别名1

full join 表2 别名2

on 连接条件

where 别名1.字段1 is null or 别名2.字段2 is null

...;

D.交叉连接 cross join (笛卡尔积)

select 字段1,字段2

from 表1 别名1

cross join 表2 别名2;

9)子查询

select 仅标量子查询(单行单列)

from 仅表子查询(多行多列)

where | having 标量子查询

列子查询(单列)

行子查询(单行)

exists 表子查询

A.where或having后的子查询_标量子查询(搭配> < = >= <= <>)

select 字段

from 表名

where 字段>  <  = >=  <=  <>(

   select字段 from 表 where 字段=值

)

group by 字段

having 字段> < = >=  <=  <> (标量子查询);

B. where或having后的子查询_列子查询(搭配in,not in,any,some,all)

select 字段

from 表名

where 字段[not] in(

    select [distinct]字段

   from表名

   where条件

)

...;

in() 等价于=any()

not in() 等价于<>all()

>any() 等价于>min()

>all() 等价于>max()

<any() 等价于

<all() 等价于

C. where或having后的子查询_行子查询

select 字段

from 表名

where (字段1,字段2...) = > < >= <= <> (

   select min(字段1),max(字段2)...

   from表名

   ...

)

...;

D.select后的子查询

select 字段2,(

   select字段1 from 表1 where 筛选条件

)

from 表2;

E.from后的子查询

select 别名1.*,别名2.字段

from (

   select字段1,字段2

   from表1

   group by分组字段

) 别名1

inner join 表2 别名2

on 表1.字段1 between 字段3 and 字段4

...;

F.exists后的子查询(相关子查询)

select exists(select...);

-- 子查询结果存在,查询结果为1

-- 子查询结果不存在,查询结果为0

select 字段

from 表

where exists(select...);

10)分页查询

select ...

...

limit offset(起始索引从0开始,0可省略),size(条目个数);

limit (page-1)*size  size --分页公式

11)联合查询

select ...

...

union [all] --带all不去重

select ...  --每个查询列数必须相同,以第一个select字段命名

...

union

...;

上一篇下一篇

猜你喜欢

热点阅读