这篇文章介绍一些SQL中常用的语句,主要介绍查询语句,以Mysql作为例子;
在查询之前先插入数据,
insert into table values( ... ...);
括号中是插入的字段值;
SQL最小化的查询结构如下:
select column from table;
table是我们的表名,column是我们想要查询的字段/列,column可以用 * 代替,指代全部字段,意为从table表查询所有数据。
如,
select * from user;
where的用法
where 是基础查询语法,用于条件判断。
select * from user where nickname = "Steve";
也可以用 and or 进行多条件判断,其中条件之间可以使用括号区别不同的and or条件。
select * from user where nickname = "Steve" and first_name = "Steve";
当我们遇到字段数据类型是数值时,也可以使用符号> 、>=、< 、<=、!= 进行逻辑判断,!= 指的是不等于,等价于 <>;
当我们需要取区间数值时,使用 between and;
如,
select * from DataAnalyst where companyId between 10000 and 20000
如果要模糊查找,能用like;
select * from DataAnalyst where positionName like '%mysql%'
语句的含义是在positionName列查找包含「mysql」字段的数据,%代表的是通配符,含义是无所谓「mysql」前面后面是什么内容。
还有其他常用的语法比如not,代表逻辑的逆转,常见not in、not like、not null等。
group by
group by是数据分析中常见的语法,目的是将数据按组/维度划分。类似于Excel中的数据透视表;
如,
select city,count(1) from DataAnalyst group by city
在mysql中,如果使用的是only_full_group_by模式,需要修改才可以访问全部的字段参考解决方案
如果某个统计的字段有重复的值,可使用distinct来消除重复;
select city,count(distinct positionId) from DataAnalyst group by city
sql 中也有if语句,
select city,
count(distinct positionId),
count(if(industryField like '%电子商务%',positionId,null))
from DataAnalyst
group by city
if函数中间的字段代表为true时返回的值,不过因为包含重复数据,我们需要将其改成positionId;
having语句,它对聚合后的数据结果进行过滤;
select city,count(distinct positionId) from DataAnalyst
group by city having count(distinct positionId) >= 500
子查询
将一个查询的结果作为数据源来再次查询;
select city from ( select * from customer where state = 'MA') as t group by city;;
括号中的就是父数据源,其中需要使用as 来定义一个别名;
order by语句,对查询到的数据进行排序;
select * from customer order by city;
默认是升序,如要降序:在后面加一个desc就好;
常用函数
now()创建出一个时间字段,就能获得当前的系统时间;
date() 获得当前日期,week函数获得当前第几周,month函数获得当前第几个月。其余还包括,quarter,year,day,hour,minute;
date_add函数对时间进行加减法;
select date_add(date(now()),interval 1 day);
改变1为负数,可达到减法的目的,也能更改day为week、year等,进行其他时间间隔的运算;
datediff(date1,date2)或者timediff(time1,time2) 求两个时间的间隔;
left、right、mid等函数,得到字符的一部分,这里和Excel一样;
select left(salary,1) from DataAnalyst
subset函数与mid等价;
locate函数查找字符所在的位置;
select locate("k",salary),salary from DataAnalyst
关系
SQL 中可以将不同的表连接起来组成一张新表,使查询变得更加的强大;
使用join将两个表联接起来,这是inner join 的简写,
select * from business as b join customer as c on b.cust_id = c.cust_id;
字段可能重名,所以一旦使用了join,字段前应该加上表名;
除了join,还有left join,right join,outer join等,这个我们可以用数学中的交集和并集来类比。
当我们有多个字段要匹配时,on后面可以通过 and 进行多项关联;
如,
select * from A
join B on A.name = B.name and A.phone = B.phone and B.sex = '男
SQL 还有一个外键的概念,可以使用外键来作为两个表关联的约束;