MYSQL高级语句

实验用表

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 |
+--------------+---------+------------+

MYSQL高级语句_第1张图片

 

 查询某个表某个字段

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);

MYSQL高级语句_第2张图片

 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或多个字符

_:下划线代表单个字符

MYSQL高级语句_第3张图片

匹配洛杉矶

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;

函数

MYSQL高级语句_第4张图片

 数学函数

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.。。。)返回集合中最小的值,也可以是多个字段的最小值

MYSQL高级语句_第5张图片

 聚合函数:

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

count()返回指定列表中非null的值count(*)不会忽略null的行

sum(x)返回指定列的求和

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

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

MYSQL高级语句_第6张图片

 字符串函数

trim()

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

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

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

strcmp(x,y)比较x和y (-1,0,1)

两个字符串拼接

法一

MYSQL高级语句_第7张图片

MYSQL高级语句_第8张图片

 法二或者

先修改配置文件sql_mode

MYSQL高级语句_第9张图片

i=12345678 分片出4

echo ${i:3:1} 结果位4

echo $(i:3:3)结果为456

mysql下标从1开始

MYSQL高级语句_第10张图片

求los store_name不要加‘ ’不加字段名

MYSQL高级语句_第11张图片

 select store_name,length(store_name) from location;

截取长度

 替换

MYSQL高级语句_第12张图片

 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前

MYSQL高级语句_第13张图片

 having对group by 分组后的结果过滤

sql语句的执行顺序

MYSQL高级语句_第14张图片

 别名字段别名as new_region (as可加可不加)

MYSQL高级语句_第15张图片

表的别名

MYSQL高级语句_第16张图片

 子查询语句,表连接,在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 (右链接)返回包含右表中的所有记录的和坐标中有联机字段相同的记录。

MYSQL高级语句_第17张图片

innor join求交集单边求无交集可以用子查询语句

 MYSQL高级语句_第18张图片

lift join 和 right join

MYSQL高级语句_第19张图片

 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

MYSQL高级语句_第20张图片using(字段名)去重

 子查询语句求交集

select stote_name from location where store_name in (select store_name from store_info);

通过左右连接来实现交集查询

MYSQL高级语句_第21张图片

MYSQL高级语句_第22张图片

 MYSQL高级语句_第23张图片

 总结 

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;

你可能感兴趣的:(mysql,数据库,java)