SQL(Structure Query Language)分类
- DDL(data definition language)数据定义语言:主要用于创建表,比如create,alter,drop等
- DML(data manipulaton language)数据操纵语句:主要用于操作数据,比如 insert,delete,update,select
- DCL(data control language)数据控制语句:主要用于控制不同数据访问权限和安全级别,比如grant,revoke等
本文主要讨论DML中增删改查四种常用的对数据的操作。
一、增 插入记录
基本语法:
- INSERT INTO tablename (col1,col2,...) VALUES(value1,value2,...)
- INSERT INTO tablename VALUES(value1,value2)
- INSERT INTO tablename (col1,col2,...) VALUES(value1,value2,...), (value3,value34,...)
insert into student (name,gradeId) values('wpp','0');
insert into student values('33','wpppp','0','女','26','嘻嘻');
insert into student values('33','wpppp','0','女','26','嘻嘻'),('2','wpp','0','女','26','嘻嘻');
1 小明 2 男 13 嘿嘿
wpp 0
33 wpppp 0 女 26 嘻嘻
33 wpppp 0 女 26 嘻嘻
2 wpp 0 女 26 嘻嘻
- 第一条语句,在name和gradeId两列中插入一条记录,其它列显示null;
- 第二条语句,插入一条记录,这里values后面的顺序要与sql字段排列顺序一致;
- 第三条语句,插入多条记录,这样节省网络开销,减少数据库交互。
二、删 删除记录
- DELETE FROM tablename WHERE CONDITION
- 也可以一次删除多个表的数据,这里操作delete语句一定一定要小心,如果不加where条件,会把整个表的数据都删掉的
delete from student where name='wpp'
三、改 修改记录
- UPDATE tablename SET col1=value1,col2=value2,... WHERE CONDITION
- 这里操作update语句也一定一定要小心,不加where条件,会更新整个表,我在第一次开发项目的时候没有加where导致整个表的数据都一样。。。
- 更新也可以一次更新多个表,经常用于根据一个表的字段来动态更新另一个表的字段
update student as A,user as B set A.profile= 'heheheh' where A.name=B.username and B.username='小明'
四、查 查询记录
- *是将所有的记录都选出来 SELECT * FROM tablename WHERE CONDITION
select * from student
- distinct来查询不重复的记录 SELECT DISTINCT 要查询的列 FROM tablename WHERE CONDITION
select distinct * from student
- asc为默认升序,dasc为降序 SELECT * FROM tablename WHERE CONDITION order by col1 desc\asc, col2 desc\asc,...
select * from student order by id
- 1,3表示从第二条开始的三条记录SELECT * FROM tablename LIMIT 1,3
select * from student LIMIT 0,1
- 聚合 SELECT * FROM tablename group by 列 having condition having和where的区别在于where是在聚合(group by)之前对记录过滤,having是在聚合后,在逻辑允许的情况下,尽量先用where语句过滤,这样减少聚合操作,最后再对聚合后的数据再次having过滤 group by实际上就是分类汇总
select * from student GROUP BY sex HAVING gradeId = '0'
- 表连接查询 内连接和外连接,内连接仅选出两张表匹配的记录,外连接除匹配的记录还会选出左右表不匹配的记录,最常用的是内连接。如下第一条语句是内连接,第二条是外连接中的左连接,第三条是外连接中的右连接
select * from student as A, user as B where A.name=B.username
select * from student as A LEFT JOIN user as B on A.name=B.username
select * from student as A right JOIN user as B on A.name=B.username
- 模糊查询 like进行模糊查询,like仅与cahr和varchar数据类型联合使用,between在某个范围内查询,in在列举值查询,需要注意的是like模糊查询%表示通配符,任何字符串出现的任意次数
select * from student where name like '%小明%'
select * from student where gradeId BETWEEN 0 and 2
select * from student where gradeId in('0','2')
- 子查询 查询时condition是另外一个select语句的结果
select * from student where gradeId in(select gradeId from student)
注:数据库操作多元复杂化,但都遵循着一定的逻辑,写数据库语句的时候要先想好逻辑,在按照语句的规范填充 !