MySQL高级(进阶)SQL语句

#显示一个字段或者多个字段的所有内容

SELECT “字段” FROM 表名 ;

#distinct对字段去重查询 (最好只对单个字段进行去重)

SELECT DISTINCT 字段名 FROM 表名

#where 有条件查询

SELECT “字段” FROM 表名 WHERE 条件(例如:sales <=>!= 100);

#and or 查看多个条件

SELECT “字段” FROM 表名 WHERE 条件(例如:sales <=>!= 100)or/and sales <=>500 ;

SELECT “字段” FROM 表名 WHERE 条件(例如:sales <=>!= 100)or (sales >200 and sales <500 ); #查找销售额大于1000或者大于200小于500的

#in 显示已知的值的数据记录

SELECT “字段” FROM “表名” WHERE ‘字段名’ in ('xxx',''yyy');

SELECT “字段” FROM “表名” WHERE ‘字段名’not in ('xxx',''yyy');

#between 显示两个值范围内的数据

SELECT 字段 FROM 表名 WHERE 字段 BETWEEN xxx and yyy ; #包含xxx和yyy的值,也可以是时间 (SELECT 字段 FROM 表名 WHERE DATE BETWEEN '2020-12-05' and '2020-12-08')

---------通配符-------通常与LIKE一起使用

%:百分号表示零个、一个或者多个字符

_: 下划线表示单个字符

'A-Z':所有以‘A’起头,另一个任何值的字符,且以‘Z’为结尾的字符串。例如‘ABZ’和‘A2Z’

‘ABC%’:所有以ABC开头的字符串

‘%XYZ’:所有以XYZ结尾的字符串

‘%ABC%’:所有含有ABC字符的的字符串

‘_AN%’:所有第二个字母为A,第三个字母为N的字符串,例如‘SAN FRANCISCO’

SELECT STORE_NAME,DATE,SALES FROM STORE_INFO WHERE STORE_NAME LIKE 'LO%';

----------ORDER BY -----------按关键排序

SELECT “字段” FROM “表名” [WHERE '条件'] ORDER BY ‘字段’[ASC,DESC]

#ASC 是按照升序进行排序的,默认排序方式就是升序

#DESC 是按照降序进行排序的

--------------------函数-------------------------

数学函数:

abs(x) :返回x的绝对值

rand():返回0到1的随机数

mod(x,y)返回x除以y以后的余数

power(x,y)返回x的y次方

round(x):返回离x最近的整数

♢round(x,y):保留x的y位小数四舍五入后的值

sqrt(x):返回x的平方根

♢truncate(x,y):返回数字x截断为y位小数的值

ceil(x):返回大于或等于x的最小整数

floor(x):返回小于或等于x的最大整数

♢greatest(x1,x2,x3...):返回集合中最大的值,也可以返回多个字段的最大的值

♢least(x1,x2,x3...):返回集合中最小的值,也可以返回多个字段的最小的值

聚合函数:

♢avg():返回指定列的平均值

♢count():返回指定列中非NULL值的个数

♢min():返回指定列的最小值

♢max():返回指定列的最大值

♢sum(x):返回指定列的所有值纸盒

♢count(*):所有字段行数,不忽略NULL行

字符串函数:

trim():返回去除指定格式的值

♢ concat(x,y):将提供的参数x和y拼接成一个字符串

substr(x,y):获取从字符串x中第y个位置开始的字符串,跟substring()函数作用相同

♢ substr(x,y,z):获取从字符串x中第y个位置开始长度为z的字符串

♢ length(x):返回字符串x的长度

♢ replace(x,y,z):将字符串z代替字符串x中的字符串y

upper(x):将字符串x的所有字母变成大写字母

left(x,y):返回字符串x前y个字符

right(x,y):返回字符串x后y个字符

repeat(x,y):将字符串x重复y次

space(x):返回x个空格

srcmp(x,y):比较x和y,返回的值可以为-1,0,1

reverse(x):将字符串x反转

字符串分片 select substr('123456789',4,3); 为456,第四个开始后面三个

select trim (leading ' xx ' from 'xx yy'); 从xx yy中移除xx

select trim (trailing' yy ' from 'xx yy'); 从xx yy中移除yy

--------------GROUP BY ---------------------

group by 有一个原则,凡是在group by后面出现的字段,必须在select后面出现;

凡是在select后面出现的,且未在聚合函数中出现的字段,必须出现在group by后面

SELECT STORE_NAME,SUM(SALES) FROM STORE_INFO GROUP BY STORE_NAME ORDER BY SALES DESC;

#分组也有去重功能

#group by分组之后,不再能使用where语句进行过滤

----------------HAVING------------------------

通常和group by一起使用,对group by语句之后再进行过滤

select store_name,sum(sales) from store_info where sales < 2000 group by store_name having sum(sales) > 1000;

顺序:先sales小于2000,然后进行分组,然后对sales进行求和,最后having对求和大于1000进行过滤

SQL语句执行顺序:

MySQL高级(进阶)SQL语句_第1张图片

--------------别名---------------------

select region,replace(region,'st','stion') as new_region,store_name from location as A;

原字段 as 别名 , 可以空格代替as

-----------子查询-------------------

连接表格,在where子句或having子句中插入另一个SQL语句

select “字段1”FROM “表格1” WHERE “字段2” [比较运算符]like in between #外查询

(select "字段1" FROM“表格2” WHERE “条件”);

#内查询

select sum(sales) from store_info where store_name in (select store_name from location where region='west'); #求西部城市的销售总额

where exists 测试内查询是否有结果,有结果的话,就会执行外查询,并且返回外查询执行结果

----------------连接查询----------------------

inner join(内连接):只返回两个表中联结字段相等的行

MySQL高级(进阶)SQL语句_第2张图片

left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录MySQL高级(进阶)SQL语句_第3张图片

right join(右连接):返回包括右表中的所有记录和坐标中联结字段相等的记录MySQL高级(进阶)SQL语句_第4张图片

select * from location A inner join store_info B on A.store_name=B.store_name;

-----------------UNION---------------联集---

将两个SQL语句合并起来,两个SQL语句所产生的字段需要是同样的数据记录种类

UNION:生成结果的数据记录值将没有重复,自动排序

UNION ALL:将生成结果的记录值全合并,不管是否有重复,也不排序

派生表别名:

select A.store_name ,count(A.store_name) from (select distinct store_name from location union all select distinct store_name from store_info) as A group by A.store_name having count(A.store_name) =1; #求无交集

今日总结:

select 字段 ... from 表 where 字段1=/!=//<=/>= [and/or]多条件判断

in/not in (值1,值2,... )/between 值1 and 值2

like '%xxx_'通配符

select 字段....from 表 order by 字段 ASC/DESC

数学函数 round(x,y) truncate(x,y) greatest/least(值1,值2,.... )

聚合函数 sum() avg() max() min() count()

字符串函数 concat()字段拼接 || 开启mode

substr()字符串分片 replace() length()

select 字段,聚合函数(字段) from 表 where xxxx group by 字段 having 条件

别名:select 字段 as别名 from 表 as 别名

select 字段....from 表 where 字段 运算符 (select 字段....from 表 where 字段);

表连接:inner join 、left join 、right join

交集: select 字段 from 左表 A inner join 右表 B on A.字段=B.字段;

using(字段)

select 字段 from 左表 A,右表 B where A.字段=B.字段

select 字段 from左表 where 字段 in (select 字段 fron 右表);

select A.字段 from 左表 left join on A.字段=B.字段 where B.字段 is not null

select A.字段 from (select distinct 字段 from 左表 union all select distinct 字段 from 右表)as A group by A.字段 having count (A.字段)=1;

无交集:select A.字段 from 左表 left join on A.字段 =B.字段 where B.字段 is null

select A.字段 from (select distinct 字段 from 左表 union all select distinct 字段 from 右表) as A group by A.字段 having count (A.字段) =1;

你可能感兴趣的:(笔记,MySQL,数据库,sql,mysql)