高级sql语句
use fate;
create table servant (regiion char(10),store_Name char(10));
insert into servant values ('english','yase');
insert into servant values ('falanxi','mozhate');
insert into servant values ('falanxi','mali');
insert into servant values ('english','maxiu');
insert into servant values ('kaierte','sikaha');
insert into servant values('kaierte','Scáthach');
insert into servant values('babilun','Gilgamesh');
insert into servant values('english','Altria');
insert into servant values('falanxi','Joan');
insert into servant values('deguo','Illyasviel');
insert into servant values('zh','ren');
insert into servant values('zh','ss');
select * from servant;
create table servant1 (Store_Name char(10),Sales int(10),date char(10));
insert into servant1 values('Scáthach',2300,'2021-06-28');
insert into servant1 values('Gilgamesh',5000,'2021-06-28');
insert into servant1 values('Altria',2000,'2021-06-28');
insert into servant1 values('Joan',1000,'2021-06-28');
insert into servant1 values('Illyasviel',15,'2021-06-28');
insert into servant1 values('ren',null,'2021-06-28');
insert into servant1 values('ss',0,'2021-06-28');
insert into servant1 values ('yase',2000,'2021-06-28');
insert into servant1 values ('mozhate',800,'2021-06-28');
insert into servant1 values ('mali',800,'2021-06-28');
insert into servant1 values ('maxiu',10,'2021-06-28');
insert into servant1 values ('sikaha',2300,'2021-06-28');
select * from servant1;
mysql高级语句
SELECT----显示表格中一个或数个栏位的所有资料
语法: SELECT "栏位" FROM "表名";
SELECT Store_Name FROM servant1;
SELECT Store_Name FROM servant;
DISTINCT ----不显示重复的资料
语法: SELECT DISTINCT "栏位" FROM "表名";
SELECT DISTINCT regiion FROM servant;
WHERE----有条件查询
语法: SELECT "栏位" FROM "表名" WHERE "条件";
SELECT Store_Name FROM servant1 WHERE Sales > 1000;
AND OR–且,或
语法: SELECT "栏位" FROM "表名" WHERE "条件1" { [ANDIOR] "条件2"}+ ;
SELECT Store_Name FROM servant1 WHERE Sales > 1000 OR (Sales < 500 AND Sales > 10);
IN----显示已知的值的资料
语法:
SELECT "栏位" FROM "表名" WHERE "栏位" IN ('值1', '值2', ...);
SELECT * FROM servant1 WHERE Store_Name IN ('Scáthach','Joan');
BETWEEN–显示两个值范围内的资料
语法: SELECT "栏位" FROM "表名" WHERE "栏位" BETWEEN '值1' AND '值2' ;
SELECT * FROM servant1 WHERE Date BETWEEN '2021-05-06' AND ' 2021-10-25';
mysql高级语句常用通配符
通常通配符都是跟LIKE一起使用的
通配符 | 作用 |
---|---|
% | 百分号表示零个、一个或多个字符 |
_ | 下划线表示单个字符 |
‘A_Z’ | 所有以’A’ 起头,另一个任何值的字符,且以’Z’为结尾的字符串。例如,‘ABZ’和’A2Z’ 都符合这一个模式,而’AKKZ '并不符合(因为在A和Z之间有两个字符,而不是一个字符)。 |
‘ABC%’ | 所有以’ABC’ 起头的字符串。例如,‘ABCD’ 和’ABCABC’ 都符合这个模式。 |
‘%XYZ’ | 所有以’XYZ’ 结尾的字符串。例如,‘WXYZ’ 和’ZZXYZ’ 都符合这个模式。 |
‘%ga%’ | 所有含有’AN’这个模式的字符串。例如,‘Gilgamesh’ 符合这个模式。 |
‘_ll&’ | 所有第二个字母为’A’和第三个字母为’N’的字符串。例如,‘Illyasviel’ 符合这个模式,而Altria’ .则不符合这个模式 |
LIKE----匹配一个模式来找出我们要的资料
语法: SELECT "栏位" FROM "表名" WHERE "栏位" LIKE {模式};
SELECT * FROM servant1 WHERE Store_Name like '%ll%';
ORDER BY ---- 按关键字排序
语法: SELECT "栏位" FROM "表名" [WHERE "条件"] ORDER BY "栏位" [ASC,DESC] ;
#ASC是按照升序进行排序的,是默认的排序方式。
#DESC是按降序方式进行排序。
SELECT Store_Name,Sales,Date FROM servant1 ORDER BY Sales DESC;
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 (x1,x2…) | 返回集合中最大的值 |
least (x1,x2… .) | 返回集合中最小的值 |
SELECT abs(-1),rand(),mod(5,3),power(2,3),round(1.89);
SELECT round(1.8937,3),truncate (1.235,2),ceil(5.2),floor(2.1) ,least(1.89,3,6.1,2.1);
聚合函数
聚合函数 | 作用 |
---|---|
avg () | 返回指定列的平均值D |
count () | 返回指定列中非NULL值的个数 |
min() | 返回指定列的最小值 |
max () | 返回指定列的最大值 |
sum(x) | 返回指定列的所有值之和 |
SELECT avg(Sales) FROM servant1;
SELECT count(Store_Name) FROM servant1;
SELECT count(DISTINCT Store_Name) FROM servant1;
SELECT max(Sales) FROM servant1;
SELECT min(Sales) FROM servant1; .
SELECT sum(Sales) FROM servant1;
SELECT count(Store_name) FROM servant1;
SELECT count() FROM servant1;
#count()包括了所有的列的行数,在统计结果的时候,不会忽略列值为NULL
#count (列名)只包括列名那一列的行数, 在统计结果的时候,会忽略列值为NULL的行
字符串函数
字符串函数 | 作用 |
---|---|
trim() | 返回去除指定格式的值. |
concat(x, y) | 将提供的参数x和y拼接成一个字符串 |
substr (x,y) | 获取从字符串x中的第y个位置开始的字符串,跟子字符串()函数作用相同 |
substr (x,y,z) | 获取从字符串x中的第y个位置开始长度为z的字符串 |
length (x) | 返回字符串x的长度 |
replace(x, y, z) | 将字符串z替代字符串x中的字符串y |
upper (x) | 将字符串x的所有字母变成大写字母 |
lower (x) | 将字符串x的所有字母变成小写字母 |
left (x, y) | 返回字符串x的前y个字符 |
right (x, y) | 返回字符串x的后y个字符 |
repeat(X, y) | 将字符串x重复y次 |
space (x) | 返回x个空格 |
strcmp (x, y) | 比较x和y,返回的值可以为-1,0,1 |
reverse (x) | 将字符串x反转 |
SELECT concat(Regiion,Store_Name) FROM servant WHERE Store_Name = 'mozhate';
#如sql_mode开启了PIPES_AS_CONCAT,"||"视为字符串的连接操作符而非或运算符,和字符串的拼接函数Concat相类似,这和Oracle数据库使用方法一样的
SELECT Regiion || ' ' || Store_Name FROM servant WHERE Store_Name = 'mali';
SELECT substr(Store_Name,3) FROM servant WHERE Store_Name = 'mali';
SELECT substr(Store_Name,2,4) FROM servant WHERE Store_Name ='maxiu';
SELECT TRIM ([ [位置] [要移除的字符串] FROM ]字符串);
#[位置]:的值可以为LEADING (起头),TRAILING (结尾),BOTH (起头及结尾)。
#[要移除的字符串]:从字串的起头、结尾,或起头及结尾移除的字符串。缺省时为空格。
SELECT TRIM(leading 'ma' FROM 'maxiu');
SELECT Regiion,length(Store_Name) FROM servant;
SELECT REPLACE(Regiion,'m','mali') FROM servant
GROUP BY
对GROUPBY后面的栏位的查询结果进行汇总分组,通常是结合聚合函数一起使用的GROUP BY有一个原则,就是SELECT 后面的所有列中,没有使用聚合函数的列,必须出现在GROUP BY后面。
语法: SELECT "栏位1",SUM("栏位2") FR0M "表名" GROUP BY "栏位1";
SELECT Store_Name,SUM(Sales) FROM servant1 GROUP BY Store_Name ORDER BY sales desc;
HAVING ----用来过滤由GROUP BY语句返回的记录集,通常与GROUP BY语句联合使用
HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。如果被SELECT的只有函数栏,那就不需要GROUPBY子句。
语法: SELECT "栏位1",SUM("栏位2") FROM "表格名" GROUP BY "栏位1" HAVING (函数条件) ;
SELECT Store_Name,SUM(Sales) FROM servant1 GROUP BY Store_Name HAVING SUM(Sales) > 1500;
别名----栏位別名表格别名
语法: SELECT "表格別名". "栏位1" [AS] "栏位别名" FROM "表格名" [AS] "表格別名";
SELECT A.Store_Name Store,SUM(A.Sales) "Total Sales" FROM servant1 A GROUP BY A.Store_Name;