MYSQL高级语句

目录

高级查询

1.select

2.distinct

3.where

4.and or

5.in

6.between

7.通配符

8.like

9.order by

10.聚合函数

11.group

12.having

13.别名

14.子查询

15.exists

16.连接查询

16.1 inner join(内连接)

16.2 left join(左连接)

16.3 right join(右连接)

17.自我连接


高级查询

1.select

select:显示表格中一个或数个字段的所有数据记录
语法:SELECT “字段” FROM “表名”;

eg:
在store_info表中查找store_name的记录
select Store_Name from store_info;

在store_info表中查找store_name,sales,date的记录(字段顺序无所谓)
select store_name,sales,date from store_info;

2.distinct

DISTINCT:不显示重复的数据记录
语法:SELECT DISTINCT “字段” FROM “表名”;

eg:
select distinct store_name from store_info;
select distinct store_name,date from store_info;

3.where

WHERE:有条件查询
语法:SELECT “字段” FROM “表名” WHERE “条件”;

eg:
查找sales大于1000的store_name
select store_name from store_info where sales>1000;

查找store_name为“Houston”的记录
select store_name,date,sales from store_info where store_name=‘Houston’;

4.and or

AND OR:且 或
语法:SELECT “字段” FROM “表名” WHERE “条件1” {[AND|OR] “条件2”}+ ;

eg:
查找sales大于500且sales小于1000的store_name,sales,date
select store_name,sales,date from store_info where sales >500 and sales<1000;

查找sales大于500且sales小于1000,或者sales大于1000的store_name,sales,date(注意把括号里的当成一个整体,并且优先执行)
select store_name,sales,date from store_info where (sales >500 and sales<1000) or sales > 1000;

5.in

IN:显示已知的值的数据记录
语法:SELECT “字段” FROM “表名” WHERE “字段” IN (‘值1’, ‘值2’, …);

eg:
在store_info表中查找store_name为Los Angeles或者Houston的字段
select * from store_info where store_name in (‘Los Angeles’,‘Houston’);

在store_info表中查找store_name不为Los Angeles或者Houston的字段
select * from store_info where store_name not in (‘Los Angeles’,‘Houston’);

6.between

BETWEEN:显示两个值范围内的数据记录
语法:SELECT “字段” FROM “表名” WHERE “字段” BETWEEN ‘值1’ AND ‘值2’;

eg:
在store_info表中查找时间在2020-12-06到2020-12-11的数据
select * from store_info where date between ‘2020-12-06’ and ‘2020-12-11’;

7.通配符

通配符:通常通配符都是跟 LIKE 一起使用的
% :百分号表示零个、一个或多个字符
_ :下划线表示单个字符

‘A_Z’:所有以 ‘A’ 起头,另一个任何值的字符,且以 ‘Z’ 为结尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合这一个模式,而 ‘AKKZ’ 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。
‘ABC%’: 所有以 ‘ABC’ 起头的字符串。例如,‘ABCD’ 和 ‘ABCABC’ 都符合这个模式。
‘%XYZ’: 所有以 ‘XYZ’ 结尾的字符串。例如,‘WXYZ’ 和 ‘ZZXYZ’ 都符合这个模式。
‘%AN%’: 所有含有 'AN’这个模式的字符串。例如,‘LOS ANGELES’ 和 ‘SAN FRANCISCO’ 都符合这个模式。
‘_AN%’:所有第二个字母为 ‘A’ 和第三个字母为 ‘N’ 的字符串。例如,‘SAN FRANCISCO’ 符合这个模式,而 ‘LOS ANGELES’ 则不符合这个模式。

8.like

LIKE:匹配一个模式来找出我们要的数据记录
语法:SELECT “字段” FROM “表名” WHERE “字段” LIKE {模式};

eg:
在store_info表中查找所有包含‘on’的数据
select * from store_info where store_name like ‘%on%’;

9.order by

ORDER BY:按关键字排序
语法:SELECT “字段” FROM “表名” [WHERE “条件”] ORDER BY “字段” [ASC, DESC];
#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。

eg:
如果不指定排序方式,默认对sales字段进行升序排列
select * from store_info order by sales;

对sales字段进行降序排列
select * from store_info order by sales desc;

10.聚合函数

聚合函数含义
avg()返回指定列的平均值
count()返回指定列中非 NULL 值的个数
min()返回指定列的最小值
max()返回指定列的最大值
sum(x)返回指定列的所有值之和

eg:
找到最大的sales
select max(sales) from store_info;

找到最小的sales
select min(sales) from store_info;

求sales的平均值
select avg(sales) from store_info;

求sales的和
select sum(sales) from store_info;

11.group

GROUP BY

对GROUP BY后面的字段的查询结果进行汇总分组,通常是结合聚合函数一起使用的
GROUP BY 有一个原则,凡是在 GROUP BY 后面出现的字段,必须在 SELECT 后面出现;
凡是在 SELECT 后面出现的、且未在聚合函数中出现的字段,必须出现在 GROUP BY 后面
语法:SELECT “字段1”, SUM(“字段2”) FROM “表名” GROUP BY “字段1”;

#降序
select store_name,sum(sales) from store_info group by store_name order by sum(sales) desc;

#不指定默认升序
select store_name,sum(sales) from store_info group by store_name order by sum(sales);

12.having

HAVING
用来过滤由 GROUP BY 语句返回的记录集,通常与 GROUP BY 语句联合使用
HAVING 语句的存在弥补了 WHERE 关键字不能与聚合函数联合使用的不足。
语法:SELECT “字段1”, SUM(“字段2”) FROM “表格名” GROUP BY “字段1” HAVING (函数条件);
#eg:
select store_name,sum(sales) from store_info group by store_name having sum(sales)>1000;

13.别名

别名
字段別名 表格別名
语法:SELECT “表格別名”.“字段1” [AS] “字段別名” FROM “表格名” [AS] “表格別名”;

#对字段设置别名
select store_name,sum(sales) as total from store_info group by store_name having sum(sales)>1000;

#对表设置别名
select store_name,sum(sales) from store_info as a group by a.store_name;

14.子查询

子查询
连接表格,在WHERE 子句或 HAVING 子句中插入另一个 SQL 语句
语法:SELECT “字段1” FROM “表格1” WHERE “字段2” [比较运算符] #外查询
(SELECT “字段1” FROM “表格2” WHERE “条件”); #内查询

#可以是符号的运算符,例如 =、>、<、>=、<= ;也可以是文字的运算符,例如 LIKE、IN、BETWEEN

#括号里的查询语句作为where语句的查询条件
SELECT SUM(Sales) FROM store_info WHERE store_name IN (SELECT Store_Name FROM location WHERE Region = ‘West’);

15.exists

EXISTS
用来测试内查询有没有产生任何结果,类似布尔值是否为真
#如果有的话,系统就会执行外查询中的SQL语句。若是没有的话,那整个 SQL 语句就不会产生任何结果。
语法:SELECT “字段1” FROM “表格1” WHERE EXISTS (SELECT * FROM “表格2” WHERE “条件”);

SELECT SUM(Sales) FROM store_info WHERE EXISTS (SELECT * FROM location WHERE Region = ‘West’);

16.连接查询

连接查询
inner join(内连接):只返回两个表中联结字段相等的行
left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右连接):返回包括右表中的所有记录和左表中联结字段相等的记录

16.1 inner join(内连接)

#连接两个表中字段记录相等的数据记录
方法一:
select * from location A inner join store_info B on A.store_name=B.store_name;
方法二:
select * from location A, store_info B where A.store_name=B.store_name;

16.2 left join(左连接)

SELECT * FROM location A LEFT JOIN store_info B on A.Store_Name = B.Store_Name ;

16.3 right join(右连接)

SELECT * FROM location A RIGHT JOIN store_info B on A.Store_Name = B.Store_Name ;

17.自我连接

#分组汇总后统计 score 字段的值是比自己本身的值小的以及 score 字段 和 name 字段都相同的数量
select A.name,A.score,count(A.score) rank from student as A,student as B where A.score<=B.score group by A.name,A.score order by rank asc;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值