实验用表
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');
location 表格
+----------+--------------+
| Region | Store_Name |
|----------+--------------|
| East | Boston |
| East | New York |
| West | Los Angeles |
| West | Houston |
+----------+--------------+
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');
Store_Info 表格
+--------------+---------+------------+
| Store_Name | Sales | Date |
|--------------+---------+------------|
| Los Angeles | 1500 | 2020-12-05 |
| Houston | 250 | 2020-12-07 |
| Los Angeles | 300 | 2020-12-08 |
| Boston | 700 | 2020-12-08 |
+--------------+---------+------------+
查询某个表某个字段
select store_name from store_info;
不区分大小写
对单字段去重查询
select distinct date from store_info;
用where添加查询条件查询如图
and(且) or(或)可以指定多个条件where sales > 500 and sales < 1000;
where sales >1000 or (sales > 200 and sales < 500);
in 显示已知值的数据记录
select store _name,date,sales from store_info where store_name in ("houston",'los angeles');
where store_name not in ('houston', 'beijing')
between显示两个值范围内的数据(包含500,1500)
select store _name,date,sales from store_info where sales between 500 and 1500;
where date between '2020-12-06' and '2020-12-08';
通配符 通常和like一起使用
%:百分号代表零个,ige或多个字符
_:下划线代表单个字符
匹配洛杉矶
select store _name,date,sales from store_info where store_name like 'Lo%';\
order by 按关键字排序
order by针对的是int整型的,不能char varchar
#ASC 是按照升序进行排序的,是默认的排序方式。#DESC 是按降序方式进行排序。
select store _name,date,sales from store_info order by sales asc;
select store_name,sales,data from store_info oreeder by sales 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位小数四舍五入后的值
aqrt(x)返回x的平方根
truncate(x,y)返回shuzix截断为y位小数的值
ceil(x)返回大于或等于x的最小整数
floor(x)返回小于或等于x的最大整数
greatest(x1,x2)返回集合最大的值,也可以是多个字段的最大的值
least(x1,x2.。。。)返回集合中最小的值,也可以是多个字段的最小值
聚合函数:
avg()返回指定列的平均值
count()返回指定列表中非null的值count(*)不会忽略null的行
sum(x)返回指定列的求和
max()返回指定列的最大值
min()返回指定列的最小值
字符串函数
trim()
length() 返回字符串x的长度
left(x,y)返回字符串x的前y个字符
right(x,y)返回字符串x的后y个字符
strcmp(x,y)比较x和y (-1,0,1)
两个字符串拼接
法一
法二或者
先修改配置文件sql_mode
i=12345678 分片出4
echo ${i:3:1} 结果位4
echo $(i:3:3)结果为456
mysql下标从1开始
求los store_name不要加‘ ’不加字段名
select store_name,length(store_name) from location;
截取长度
替换
group by 对group by后面的字段的查询结果进行汇总分组,通常是结合聚合函数一起使用的
select store_name, sum(sales) from store_info group by store_name order by sum(sales) desc;
group by分组之后无法使用where语句但是可以加在group by前
having对group by 分组后的结果过滤
sql语句的执行顺序
别名字段别名as new_region (as可加可不加)
表的别名
子查询语句,表连接,在where字句或having子句插入另一个sql语句
select “字段1” from “表格1” where “字段2”【比较运算符】#外查询
(select ‘字段1’from ‘表格2’where “条件”)#内查询先执行
exists 用来测试内查询是否有结果
select sum(sales) from store_info where exists (sekect * from location where region = 'west')
表连接
inner join(内连接):只返回两个表中来连接字段相等的行
left join(左连接)返回包含左表中的所有记录和右表中联结字段相等的记录。(没有用null填充)
right join (右链接)返回包含右表中的所有记录的和坐标中有联机字段相同的记录。
innor join求交集单边求无交集可以用子查询语句
lift join 和 right join
select * from location A,store_info B where A.store_name = B.store_name;
求联集union
将两个sql语句的结果结合起来,两个SQL语句所产生的所产生的字段需要是同样的数据记录种类
语法【select 语句 1】 union all 【select 语句 2】;
select store_name from location union selext store_name from store_info;
union all 不做去重排序
内查询实现交集
distinct去重
select
using(字段名)去重
子查询语句求交集
select stote_name from location where store_name in (select store_name from store_info);
通过左右连接来实现交集查询
总结
select 字段。。。from表 where 字段1 =(!= >= <= > <)(in 、not in (值1,值2,。。。)、between 值1 and 值2 、like '%XX_') 值 【and or】字段2
select 字段。。。from表 order by 字段 asc/desc
数学函数 截取round(x,y) truncate(x,y)
greatest(值1 ,值2,。。。)least(值1,值2.。。。)
聚合函数 sum(字段) avg() count(字段)
count(*) max() min()
字符串函数 拼接concat(字段,值) 值1 || 值2
substr(x,y,z) replace(x(旧字符),y(新字符),z)
lenght(x)
select 字段,聚合函数(字段)from表 where XXXXX group by 字段 having 条件
select 字段 as 别名 from表 as 别名
select 字段,。。。from表 where 字段 运算符 (select 字段 。。。 from 表 where 字段);
表连接: inner join 内连接 left join 左连接 right join 右连接
交集:select distinct(去重) 字段 from 左表 A inner join 右表 B onA.字段 = B.字段;
表名一样时using(字段)
select A.字段 from 左表 A, 右表 B where A.字段 =B.字段
select A.字段 from 左表 where 字段 in(select 字段 from 右表)
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 左表 where 字段 not in (select 字段 from 右表)
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;