您现在的位置是:网站首页> 编程资料编程资料
MySQL一些常用高级SQL语句详解_Mysql_
2023-05-26
430人已围观
简介 MySQL一些常用高级SQL语句详解_Mysql_
一、MySQL进阶查询
首先先创建两张表
mysql -u root -pXXX #登陆数据库,XXX为密码 create database jiangsu; #新建一个名为jiangsu的数据库 use jiangsu; #使用该数据库 create table location(Region char(20),Store_name char(20)); #创建location表,字段1为Region,数据类型为char,数据长度为20;字段2为Store_name,数据类型为char,长度为20. insert into location values('North','Xuzhou'); #插入4条数据 insert into location values('North','Suqian'); insert into location values('South','Nanjing'); insert into location values('South','Suzhou'); create table store_info(Store_name char(20),Sales int(10),Date char(10)); #再创建一张store_info表 insert into store_info values('Xuzhou',300,'2020-12-08'); #插入4条数据 insert into store_info values('Suqian',249,'2020-12-07'); insert into store_info values('Nanjing',1500,'2020-12-05'); insert into store_info values('Suzhou',700,'2020-12-08');

----------------select-------------------
select用于查询表格中的一个或多个字段的数据记录
语法格式:select 字段1,字段2,... from 表名;
select * from location; #查询location表中的所有字段,*表示所有,如果不嫌麻烦,当然也可以将所有字段都输进去
select Region from location; #查询location表中的Region的数据
select sales,Date from store_info; #查询store_info表中的sales,Date字段的数据----------------DISTINCT-------------------
DISTINCT用于将重复的数据压缩为一个
语法格式:select distinct 字段名 from 表名;
select distinct Store_name from store_info; #查询dtore_info表中的Store_name字段的数据,如有重复,则只显示一个----------------where-------------------
where用于带条件查询
语法格式:select 字段名 from 表名 where 条件语句;
select Store_name from store_info where sales=300; #查询store_info表中sales字段的值等于300的Store_name的数据
select Store_name from store_info where sales>500; #查询store_info表中sales字段的值大于500的Store_name的数据----------------and or-------------------
and,且,用于查询一个数据范围;or,或,用于查询包含条件语句的所有数据
语法格式:select 字段名 from 表名 where 条件1 and/or 条件2;
select Store_name from store_info where sales>250 and sales<1000; #查询store_info表中sales字段的值大于250,且小于1000的Store_name的数据
select Store_name from store_info where sales<250 or sales>1000; #查询store_info表中sales字段的值小于250,或者 大于1000的Store_name的数据
select Store_name from store_info where sales>1000 or (sales >200 and sales < 500); #括号的优先级高,所以先根据括号里的and条件语句进行筛选,然后再根据or进行筛选,最后查询最终筛选出来的数据;该语句先筛选出sales大于200且小于500的值,再使用or进行或的删选,最终筛选出来的结果应该是在200到500之间的值或者大于1000的值。
select Store_name from store_info where sales>1000 or sales >200 and sales < 500; #如果不加括号,and的优先级是比or要高的,也就是说,当一条条件语句中同时存在and和or(没有括号),会先执行and条件。----------------in-------------------
in用来显示已知值的数据,简单来说,in后面跟的是一个数据集合,查询语句会根据数据集合中的值进行筛选查询。not in 就是取数据集合中的反,不在数据集合中的数据。
语法格式:select 字段名1 from 表名 where 字段名2 in ('字段名2的值1','字段名2的值2,......');
select * from store_info where Store_name in ('Nanjing','Xuzhou'); #将Nanjing和Xuzhou的所有信息都查询出来。
注:in可以用or代替
上述语句等于:select * from store_info where Store_name='Nanjing' or Store_name='Xuzhou';----------------between...and-------------------
between 值1 and 值2 ,在值1与值2之间(值2 > 值1),该语句查询的是一个范围,包含值1和值2。其作用相在某一方面当于大于等于 ... and 小于等于 ... 。
语法格式:select 字段名 from 表名 where 字段名 between 值1 and 值2;
select * from store_info where Date between '2020-12-07' and '2020-12-10'; #查询store_info表中的Data的值在12-06与12-10之间的所有数据----------------通配符-------------------
通配符一般情况下和like一起使用进行模糊查询,模糊查询的概念就是将所有符合条件的数据全部查询出来,而等于号是精确查询,会直接将具体的某一数据查询出来
模糊查询的字符如下:
%:百分号表示0个,1个或多个字符
_:下划线表示单个字符
语法格式:select 字段 from 表名 where 字段 like '通配符';
select * from store_info where Date like '2020%'; #将Date的值为2020,后面随便(2020后有没有都行)的值全部查询出来
select * from store_info where Date like '2020-12-0_'; #将2020-12-0,后面只能匹配一个字符(必须存在且只能有一个)的所有数据查询出来----------------like-------------------
like,模糊查询,用于查询符合条件的所有数据,通常和通配符一起使用,语法和通配符一样的,因为是结合使用。
create database name;
use name;
create table stu_name(sname char(10));
insert into stu_name values('张');
insert into stu_name values('张三');
insert into stu_name values('张四');
insert into stu_name values('张无忌');
insert into stu_name values('一张纸');
insert into stu_name values('弓长张');
select * from stu_name where sname like '张%'; #查询所有张姓的名字,只要姓张就行
select * from stu_name where sname like '%张'; #查询所有最后一个字是张的姓名,前面无所谓
select * from stu_name where sname like '%张%'; #查询所有包含张的姓名,张字在姓在名都行
select * from stu_name where sname like '张_'; #查询所有张姓且只有两个字的名字
select * from stu_name where sname like '张__';(两条下划线) #查询所有张姓,且必须为三个字的名字
select * from stu_name where sname like '_张%'; #查询所有第二个字为张的名字
select * from stu_name where sname like '张_%'; #查询所有张姓,名字至少包含两个字的名字
select * from stu_name where sname like '张%_'; #查询所有张姓,名字至少包含两个字的名字,该语句和上面的查询结果一样,但理解是不同的。----------------order by-------------------
order by 用于关键字的排序
语法格式:select 字段 from 表名 [where 条件语句] order by 字段 asc/desc;
asc:按字段升序,默认为asc
desc:按字段降序
select Store_name,Date,sales from store_info order by sales; #按照sales升序排列后,查询name、date和sales
select Store_name,Date,sales from store_info order by sales desc; #按照sales降序排列后,查询name、date和sales
























二、MySQL数据库函数
-------------数学函数-------------------
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(x,y,z,...) #返回集合中最大的值
least(x,y,z,...) #返回集合中最小的值
---------------------------------------------
select abs(-1),rand(),mod(5,2),power(2,3),round(1.75);
select round(3.1415926,5),sqrt(2),truncate(3.141592653,4),ceil(5.2),floor(3.2),greatest(1.61,2.54,0.87),least(5.23,8.71,4.13);



--------------聚合函数--------------------
avg() #返回指定列的平均值
count() #返回指定列中非空值的个数
min() #返回指定列的最小值
max() #返回指定列的最大值
sum(x) #返回指定列的所有值的和
------------------------------------------
select avg(sales) from store_info; #查询sales的平均值
平均值的另一种方法:
select sum(sales)/(select count(sales) from store_info) from store_info;select count(Date) from store_info; #统计Date的数据个数,包括重复的值,但不包括空值
select count(distinct Date) from store_info; #统计Date的数据个数,重复的数据只统计一次,不包括空值
select count(*) from store_info; #全部统计,包括空值,count(*)扫描全表
select min(sales) from store_info; #查询sales的最小值
提示: 本文由神整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
相关内容
- MySQL中的 Binlog 深度解析及使用详情_Mysql_
- MySQL安装时一直卡在starting server的问题及解决方法_Mysql_
- MySQL 常用引擎总结分享_Mysql_
- 关于django连接mysql数据库并进行数据库的创建的问题_Mysql_
- MySQL操作并使用Python进行连接_Mysql_
- sql查询语句教程之插入、更新和删除数据实例_Mysql_
- MySQL数据库通过Binlog恢复数据的详细步骤_Mysql_
- MySQL设置管理员密码无法生效的问题解析_Mysql_
- 解决Mysql:ERROR 1045 (28000):Access denied for user ‘root‘@‘localhost‘ (using password: NO)的方法_Mysql_
- phpstudy无法启动MySQL服务的完美解决办法_Mysql_
