一、SQL高级语句

1、select

显示表格中一个或数个栏位的所有资料

select * from test1;
select name from test1;
select name,sex from test1;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_sql语句

 

 2、distinct

不显示重复内容

SELECT DISTINCT "栏位" FROM "表名";

select distinct age from test1;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_数学函数_02

 

 3、where

条件查询

SELECT "栏位" FROM "表名" WHERE "条件";

select name,age from test1 where age > 21;
select name,age from test1 where name='nancy';

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_sql语句_03

 

 4、and or

代表且、或、和的意思

SELECT "栏位" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"};

select * from test1 where sex='' and age > 21;
select * from test1 where age > 21 or age < 20;
select * from test1 where (age > 21 and sex='') or age < 20;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_字符串_04

 

 5、in

显示已知的值的内容

SELECT "栏位" FROM "表名" WHERE "栏位" IN ('值1', '值2', ...);

select * from test1 where age in (19,20,21);

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_字符串_05

 

 6、between

显示两个值范围内的资料

SELECT "栏位" FROM "表名" WHERE "栏位" BETWEEN '值1' AND '值2';  

select * from test1 where age between 19 and 21;

 MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_sql语句_06

 

 7、通配符

通常通配符都是和like一起使用的

通配符 代表的意思
% 百分号表示零个、一个或多个字符(相当于linux中的“*”号)
_ 下划线表示单个字符(相当于linux中的“?”号)
'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’ 则不符合这个模式

8、like

匹配一个模式来找出我们要的资料

SELECT "栏位" FROM "表名" WHERE "栏位" LIKE {模式};

select * from test1 where name like '%cy';
select * from test1 where name like '%lu%';
select * from test1 where name like 'l_l%';

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_数学函数_07

 

 9、order by

按关键字排序

SELECT "栏位" FROM "表名" [WHERE "条件"] ORDER BY "栏位" [ASC, DESC];

#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。

select * from test1 where name='kate' order by age;
select * from test1 where name='kate' order by age desc;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_聚合函数_08

 

 二、SQL函数

1、数学函数

数学函数 返回的结果
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(-10),rand(),mod(10,3),power(2,10),round(3.1415);

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_sql语句_09

 

 

 select round(3.1415926,3),sqrt(9),truncate(3.1415926,3),ceil(3.5),floor(1.11),greatest(1,2,3,4),least(1,2,3,4);

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_表名_10

 

 2、聚合函数

数学函数 返回的结果
avg() 返回指定列的平均值
count() 返回指定列中非NULL值的个数
min() 返回指定列的最小值
max() 返回指定列的最大值
sum(x) 返回指定列的所有值之和
select avg(age) from test1;
select count(age) from test1;
select min(age) from test1;
select max(age) from test1;
select sum(age) from test1;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_表名_11

 

 MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_聚合函数_12

 

 count

count(*) 表示包括所有列的行数,不会忽略null值

count(列名) 表示只包括这一列,统计时会忽略null值的行

3、字符串函数

数学函数 返回的结果
 trim()  返回去除指定格式的值
 concat(x,y) 将提供的参数x和y拼接成一个字符串 
 substr(x,y) 获取从字符串x中的第y个位置开始的字符串,跟substring()函数作用相同 
 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 trim(' abc  ');
select (' abc  ');

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_sql语句_13

 

 

 concat(x,y)——拼接字符串

select concat(name,age) from test1 where id=1;
select concat(name,' ',age) from test1 where id=1;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_表名_14

 

 

 #如sql_mode开启 了PIPES_AS_CONCAT, "||" 视为字符串的连接操作符而非或运算符,和字符串的拼接函数Concat相类似,这和Oracle数据库使用方法一样的。

select name || age from test1 where id=1;
select name || ' ' || age from test1 where id=1;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_聚合函数_15

 

 

 substr(x,y)与substr(x,y,z)——截取字符串

select substr(name,3) from test1 where id=3;
select substr(name,2) from test1 where id=3;
select substr(name,2,2) from test1 where id=3;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_表名_16

 

 

 

select length(name) from test1 where id=3;
select replace(name,'kate','ketty') from test1 where id=3;
select upper(name) from test1 where id=3;
select lower(name) from test1 where id=3;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_字符串_17

 

 

select left(name,2) from test1 where id=3;
select right(name,2) from test1 where id=3;
select repeat(name,2) from test1 where id=3;
select space(2) from test1 where id=3;
select strcmp(10,20);
select reverse(123456);

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_聚合函数_18

 

 MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_sql语句_19

 

 

SELECT  TRIM ([位置]  [要移除的字符串] FROM 字符串);

#[位置]:的值可以为LEADING(起头),TRAILING(结尾),BOTH(起头及结尾)

#[要移除的字符串]:从字串的起头、结尾、或起头及结尾移除的字符串,缺省时为空格

select trim(leading 'na' from 'nancy');
select trim(trailing 'cy' from 'nancy');
select trim(both 'n' from 'nancin');

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_聚合函数_20

 

 4、group by

对GROUP BY 后面的查询结果进行汇总分组,通常是结合聚合函数一起使用

GROUP BY有个原则,select 后面的所有列中,没有用聚合函数的列,必须出现在GROUP BY后面

SELECT "栏位1", SUM("栏位2") FROM "表名" GROUP BY "栏位1";

select name,sum(age) from test1 group by name;
select name,sum(age) from test1 group by name order by age;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_sql语句_21

 

 

select name,age from test1 group by name order by age;
select name,age from test1 group by name,age order by age;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_数学函数_22

 

 5、having

用来过滤由GROUP BY语句返回的记录集,通常与GROUP BY语句联合使用

HAVING的存在弥补了WHERE关键字不能和聚合函数联合使用的不足,如果被select的只有函数栏,那就不需要GROUP BY子句

SELECT "栏位1", SUM("栏位2") FROM "表格名" GROUP BY "栏位1" HAVING (函数条件);  

select name,sum(age) from test1 group by name order by age;
select name,sum(age) from test1 group by name having sum(age) > 30;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_聚合函数_23

 

 HAVING只是条件过滤,用来筛选前面GROUP BY的结果

6、别名

栏位别名 表格别名

SELECT "表格別名"."栏位1" [AS] "栏位別名" FROM "表格名" [AS] "表格別名";  

select name,age,tot.sex xb from test1 tot group by age;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_字符串_24

 

 7、连接查询

7.1 inner join (等值相连)

只返回两个表中联结字段相等的行

select * from test6 A inner join test1 B on A.name = B.name;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_数学函数_25

 

 7.2 left join(左连接)

返回包括左表中的所有记录和右表中联结字段相等的记录

select * from test6 A left join test1 B on A.name = B.name;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_字符串_26

 

 7.3 right join (右联结)

返回包括右表中的所有记录和左表中联结字段相等的记录

select * from test6 A right join test1 B on A.name = B.name;

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_表名_27

 

 8、子查询

连接表格,在where子句或having子句中插入另一个SQL语句

SELECT "栏位1" FROM "表格1" WHERE "栏位2"  [比较运算符]                #外查询
(SELECT "栏位1" FROM "表格2" WHERE "条件");                          #内查询

可以是符号的运算符,例如 =、>、<、>=、<=;也可以是文字的运算符,例如 LIKE、IN、BETWEEN

 先进行内查询,查询结果再交给外查询进行进一步过滤

select name from test1 where age=21;
select sum(age) from test6 where name in ('lucy','kate');
select sum(age) from test6 where name in (select name from test1 where age=21);

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_sql语句_28

 

select A.age,A.name from test6 A where A.name in (select name from test1 B where B.name=A.name);

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_sql语句_29

 9、exists

用来测试内查询有没有产生任何结果,类似布尔值是否为真

如果有的话,系统就会执行外查询的SQL语句,若是没有的话,那整个SQL语句就不会产生任何结果

SELECT “栏位” FROM “表格1” WHERE EXISTS (SELECT * FROM "表格2" WHERE “条件”);

select sum(age) from test6 where exists (select name from test1 where age=21);
select sum(age) from test6 where exists (select name from test1 where age=21);

MySQL数据库之——高级SQL语句(一)SQL高级语句、函数等_sql语句_30