欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sql 基础(增删改查)

程序员文章站 2024-03-08 19:00:52
...

sql执行顺序

1 执行where子句,从表中选行。
2 执行group by子句,对结果进行分组。
3 执行聚集函数(如count()、max())。
4 执行having子句,过滤分组。

5 排序。

注释

可以使用/**/,表示块注释。也可以使用"-- a comment",表示行注释。

引号问题

sql 基础(增删改查)既有单引号又有双引号怎么办?
答:连续两个单引号就表示一个单引号。例:
sql中,insert into yourTable(f1) values(特殊字符串);
字符串内容若为'a"b"c'd'
应写为values('‘'a"bc''d''’)
sql 基础(增删改查)字符串如何表示?
答:在sql语句中表示字符串类型,单双引号都可以,如'小明'或"小明"都可以。

增添

insert into Student values(‘13’,’小明’,’男’,’20’)

按次序将值放在表中。

insert into student (studentName,age) values("小明",10);

将值插入在指定的列中。

删除

delete from Student  where id=’1’;

删除指定的列。

更改

update Student set age=’18’ where name=’小明’;
字符串替换函数:REPLACE(field,targetStr,replacementStr);在field字段副本中,将targerStr替换为replacementStr并返回。例子:
//action字段中,将'blockIp,60'子串替换为'blockIp,2'
UPDATE `cep_rule` set action=REPLACE(action,'blockIp,60','blockIp,2');

查询

查询语句中,from后跟表名,可以写from student ,也可以写 from `student`,注意符号不是单引号,而是tab键上面的那个。

select name as studentName from person;

将原列名换个名字体现在查询结果中。

select from Student 

‘*’为通配符,查询表中所有信息


并集与连接

union
查询多张表的结果,取并集,扩展行数。
如 select name from studentTable1 union select name from studentTable2

join
连接多张表中查询的结果,扩展列数。
SELECT * FROM Table1 JOIN Table2 ON Table1.ColumnA=Table2.columnA
left join,左连接,以左边表为基准;
right join,右连接,以右边表为基准。

两个表见图3,三条左连接语句见下,结果见图4。
sql 基础(增删改查)
图3 两张表t1与t2

/*1*/SELECT table1.id as id,table1.theValue as value1,table2.theValue as value2 FROM `t1` as table1 left JOIN t2 as table2 on table1.id=table2.id;

/*2*/SELECT table1.id as id,table1.theValue as value1,(case WHEN table2.theValue is null then 0 else table2.theValue end) as value2 FROM `t1` as table1 left JOIN t2 as table2 on table1.id=table2.id;

/*3*/select id from(SELECT table1.id as id,table1.theValue as value1,(case WHEN table2.theValue is null then 0 else table2.theValue end) as value2 FROM `t1` as table1 left JOIN t2 as table2 on table1.id=table2.id) AS A WHERE (value1-value2)/value1 > 0.1;

sql 基础(增删改查)
图4  三条语句的执行结果

分组

Group By,分组。例 group by field1,依据field1字段的不同,将表划分成若干个“小区域”,然后针对这些“小区域”分别进行数据处理。
group by 单个字段,见下。
sql 基础(增删改查)
图5 原始表
执行分组语句后:
select 类别, sum(数量) as 数量之和
from A
group by 类别
sql 基础(增删改查)
图6 group by 之后的结果

没有聚合函数的时候使用group by field1,效果就是field1字段相同的数据只保留一条。

group by 多个字段,见下。

例group by field1,field2, 这两个字段对应一致的数据才会进入同一个分组。


having

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数(如 min,sum等)一起使用。例子见图3.

sql 基础(增删改查)

图3 having用法

in 与 exists 的区别

1.in后面跟的是一个集合;exists 后面跟的是一个子查询,若查询到有行存在则输出父查询;
2.in 语句先执行子查询,将结果缓存;exists先执行父查询。