1. CRUD

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写,就是数据库基本操作中针对表的一系列操作.

2. 新增(create) -->insert

语法: insert into 表名 [列名1,列名2…] values (val1,val2…) [注意]

列名可以没有,如果没有列名,所有的列都应该插入,即val包含所有列的值.后面的val必须和前面的列名对应.各个数据之间用,隔开.

2.1 单行数据+全列插入

insert into emp values (null,'张十一','java程序员',16000);

在这里我们看到,salary一列原生是decimal类型的数据,但是我们这里在插入的时候salary一列输入的是int类型的数据,也插入成功了,这是因为sql对int类型进行了隐式类型转换这里我们就提到了sql语言的特性: sql语言是一种弱类型的语言,在一种语言中越支持隐式类型转换,类型越弱.

2.2 多行插入+指定列插入

insert into emp (id,name,role) values(8,'李十二','测试工程师');

3. 查询(retrieve) -->select

语法: select 列名1,列名2(或是表达式) from 表名

3.1 全列查询 -->*

select * from emp 查询该表中所有数据 [注意] 这是一个危险的操作,虽然这个操作在现在看来没有什么异样,但是如果数据非常多,这个操作很容易造成损失,这种查询引起服务器的响应之后,返回的数据量非常大,会把网络带宽吃满,导致别的客户端出现异常.

3.2 指定列查询

select id,name from emp; 查询id和name两列数据

3.3 查询字段为表达式

select id ,name,role,salary+100 from emp; 查询的时候返回的结果集为所有人的工资加100 [注意]

查询的所有操作都不会对原生存在硬盘上的数据进行改变,这里虽然是在原来的薪水加上了100,但是只是返回的结果加上了100,返回的结果是一张临时表.

3.4 别名 -->as

语法: select 列名 as 别名 from 表名; select id ,name , chinese+math+english as total from student; 返回所有学生的总成绩,并设置为total

3.5 去重 -->distinct

语法: select distinct 列名 from 表名; select distinct chinese from student;

上述结果我们看到返回的值把周八那一行的语文成绩去重. 当然我们也可以对多列进行去重: select distinct chinese,math from student;

3.6 排序 -->order by

语法: asc为升序,desc为降序,默认为asc select 列名 from 表明 order by 列名 [升降序] select * from student order by math desc; 我们看到,学生们的顺序按数学成绩的降序排列了起来.

[注意]

没有order by的句子返回的查询,返回的顺序都是未定义的,永远不要依赖这个顺序.NULL数据排序的时候,视为比任何数据都小.升序在上面,降序在下面.可以使用表达式或者别名进行排序. select id,name,chinese+math+english as total from student order by total ; 把学生的成绩按照总分升序排序. 可以对多个字段进行排序,优先级随书写顺序. select * from student order by chinese,math; 这里我们看到田七和周八的语文成绩是一样的,最后按math排序.田七在周八的后面.

3.7 条件查询 -->where

比较运算符:

运算符说明>, >=, <, <=大于,大于等于,小于,小于等于=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)!=, <>不等于BETWEEN a0 AND a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)IN (option, …)如果是 option 中的任意一个,返回 TRUE(1)IS NULL是 NULLIS NOT NULL不是 NULLLIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

逻辑运算符:

运算符说明AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)OR任意一个条件为 TRUE(1), 结果为 TRUE(1)NOT条件为 TRUE(1),结果为 FALSE(0)

[注意]

where可以使用表达式,但是不可以使用别名. 原因: 是执行顺序的缘故,遍历表–>带入条件–>计算列名中的表达式,定义别名–>排序,聚合, 定义别名在带入条件的后面,所以无法识别.AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分.

案例:

基本查询

select * from student where english < 100; 查询英语成绩小于100的同学. select * from student where chinese+math+english<320; 查询总分小于320的同学 and 和 or

select * from student where chinese+math+english<320 and math>=120; 查询总分小于320但数学成绩大于等于120的同学 select * from student where chinese+math+english<320 or math>=120; 查询总分小于320和数学成绩大于等于120的同学 范围查询

between…and… select * from student where math between 100 and 110; 查询数学成绩在100~110之间的同学in 针对每个记录,带入到条件中,看当前这个数值是否在( )描述的集合中存在. select * from student where math in (120,133); 模糊查询 -->like

select name from student where name like '周%'; %代表的是一个或者多个字符,找到所有姓周的人. select name from student where name like '周_'; 找到姓周但是是两个字的名字.

3.8 分页查询–>limit

这个语法限制了最多返回多少条记录. 语法: select 列名 from 表名 limit n 限制返回的记录为n select 列名 from 表名 limit n offset s 从s开始查询,返回n条记录

案例:

select name,math+chinese+english as total from student order by total desc limit 3; 查询班级前三名 select name,math+chinese+english as total from student order by total desc limit 3 offset 1; 查询班级总成绩2~4名

4. 修改 -->update

语法: update 表名 set 列名=表达式 限制条件

案例:

update student set english=92 where name='周八'; 把周八的英语成绩改成92update student set english= english+10; 将所有人的英语成绩加10分

5. 删除 -->delete

语法: delete from 表名 限制条件

案例:

delete from student where name ='周八'; 删除周八的成绩

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。