目录
一、高级SQL语句(进阶查询)
1.1 select
1.2 distinct
1.3 where
1.4 and 和 or
1.5 in
1.6 between
1.7 通配符
1.8 like
1.9 order by
一、高级SQL语句(进阶查询)
先准备2个表
一个location表:
use market;
create table location(Region char(20),Store_Name char(20));
insert into location values('East','Boston');
insert into location values('East','New York');
insert into location values('West','Los Angeles');
insert into location values('West','Houston');
一个store_info表:
create table store_info (Store_Name char (20),Sales int (10) ,Date char(10)); insert into store_info values('Los Angeles', '1500', '2020-12-05') ; insert into store_info values ('Houston', '250', '2020-12-07') ; insert into store_info values('Los Angeles', '300', '2020-12-08') ; insert into store_info values('Boston', '700', '2020-12-08') ;
1.1 select
select,显示表格中一个或数个字段的所有数据记录。
语法: SELECT "字段" FROM "表名";
示例:
select store_name from store_info;
select store_name,sales from store_info;
1.2 distinct
distinct,不显示重复的数据记录。
注意:关系型数据库,单次只能对一个字段去重。
SELECT DISTINCT "字段" FROM "表名";
示例:
select distinct store_name from store_info; #对商店名称进行去重
select distinct date from store_info; #对日期字段进行去重
1.3 where
where,有条件查询。
SELECT "字段" FROM 表名" WHERE "条件"; 示例: select * from store_info where sales > 1000; #查找销售额大于1000的数据记录 select store_name from store_info where sales > 1000; #查找销售额大于1000的商店名称
1.4 and 和 or
and:且。
or:或。
SELECT "字段" FROM "表名" WHERE "条件1" AND "条件2"; SELECT "字段" FROM "表名" WHERE "条件1" OR "条件2";
#查询销售额大于500且小于1000的数据记录。
select * from store_info where sales > 500 and sales < 1000 ;
#查询销售额大于200且小于500的记录,或者销售额大于1000的记录。
select * from store_info where sales > 1000 or (Sales < 500 and Sales > 200);
#查询销售额大于200且小于500的商店名,或者销售额大于1000的商店名。
select store_name from store_info where sales > 1000 or (Sales < 500 and Sales > 200);
1.5 in
in,显示已知的值的数据记录。
段" FROM "表名" WHERE "字段" IN ('值1', '值2', ...); #in,遍历一个取值列表
SELECT "字段" FROM "表名" WHERE "字段" NOT IN ('值1', '值2', ...); #not in取反,查询不在这个范围内的值
#查询商店名为“Los Angeles”,以及商店名为“Houston”的记录。
select * from store_info where store_name in ('Los Angeles','Houston');
#查询商店名称不是“Los Angeles”、不是“Houston”的记录。
select * from store_info WHERE store_name not in ('Los Angeles','Houston');
1.6 between
between,显示两个值范围内的数据记录。
SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';
示例:
#查询销售额在500~1500之间的数据记录(包含500和1500)
select * from store_info where sales between 500 and 1500;
#查询店铺开业日期在2020-12-06到2020-12-10之间的记录(包含这两个日期)
select * from store_info where date between '2020-12-06' and '2020-12-10';
1.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'则不符合这个模式。
1.8 like
like,匹配一个模式来找出我们要的数据记录。
SELECT "字段" FROM "表名" WHERE "字段" LIKE {模式} ;
示例:
#查询商店名称包含字符串"os"的记录
select * from store_info where store_name like '%os%';
#查询商店名称以字符串"on"结尾的记录
select * from store_info where store_name like '%on';
#查询商店名称的第二、第三个字符为"os"的记录
select * from store_info where store_name like '_os%';
1.9 order by
order by,按关键字排序。
注意:
- 一般对数值字段进行排序。
- 如果对字符类型的字段进行排序,则会按首字母排序。
SELECT "字段" FROM "表名" [WHERE "条件"] ORDER BY "字段" [ASC|DESC] ;
#ASC是按照升序进行排序的,是默认的排序方式。
#DESC是按降序方式进行排序。
示例:
#查看store_info表中的所有记录,按销售额进行升序排列。
select * from store_info order by sales ASC; #ASC可以不加,默认升序
#查看store_info表中的所有记录,按销售额进行倒序排列。
select * from store_info order by sales desc;
#获取销售额最大的那行数据记录。即先按销售额进行倒序排列,之后取第一行记录。
select * from store_info order by sales desc limit 1;