1. CURD 简介
CURD是对数据库中的记录进行基本的增删改查操作;
- Creat (创建)
- Retrieve(读取)
- Update(更新)
- Deleate(删除)
2. Creat新增
2.1 语法:
sql
INSERT [INTO] table_name
[(column[,column]...)]
VALUES
(value_list)[,(value_list)]...
value_list:value,[,value]...
2.2 示例:
创建一个用于演示的表
sql
create table users(
id bigint,
name varchar(20) comment `用户名`
);
2.2.1 单行数据全列插入
注意:value_list 中的值的数量和顺序必须和定义表中的数量及顺序一致
sql
insert into users value(1,'张三');
2.2.2 单行数据指定列插入
注意:value_list 中的值的数量和顺序必须和指定列中的数量及顺序一致
sql
insert into users (id,name) value(2,'李四');
2.2.3 多行数据指定列插入
注意:在一条insert语句中也可以指定多个value_list,实现一次插入多行数据
sql
insert into users (id,name) value(3,'王五') ,(4,'钱六');
3. Retrieve检索
3.1 语法:
sql
select
[DISTINCT]
select_expr [,select_expr]...
[from table_references]
[where where_condition]
[group by {col_name}|expr,...]
[having where_condition]
[order by {col_name|expr}][ASC|DESC,...]
[limit {[offset,]row_count|row_count offset offset}]
3.2 示例;
3.2.1 构造数据
sql
//构建一个表
create table exam(
id bigint,
`name` varchar(20) comment '姓名',
chinese float comment '语文成绩',
math float comment '数学成绩',
english float comment '英语成绩'
);
//插入测试数据
insert into exam (id,name,chinese,math,english) values
(1,'吕布',76,68,89),
(2,'貂蝉',97,87,89),
(3,'曹昂',69,76,88),
(4,'董卓',77,87,46),
(5,'刘备',79,88,81),
(6,'曹植',99,67,90),
(7,'曹阿瞒',93,87,69);
3.3 select
3.3.1 全列查询
查询所有记录,使用*可以查询表中所有列的值
sql
select * from exam;
3.3.2 指定列查询
在select 后面的查询列表中指定希望查询的列,可以是一个也可以是多个,中间用逗号隔开
指定列的顺序和表结构中的列顺序无关
查询所有人的编号、姓名、语文成绩:
sql
select id,name,chinese from exam;
3.3.3 查询列为表达式
1.常量表达式
sql
select id,name,10 from exam;
2.把所有学生的语文成绩加10分
sql
select id,name,chinese+10 from exam;
3.计算所有学生语文、数学、英语成绩的总分
sql
select id,name,chinese+math+english from exam;
3.3.4 为查询结果指定别名
语法:
sql
select column [AS] alias_name[,...] from table_name;
注意:AS可以省略不写,别名如果包含空格必须用单引号包裹
3.3.5 结果去重查询
1.查询当前所有的数学成绩
sql
select math from exam;
- 在结果集中去除重复记录,可以使用
DISTINCT
sql
select distinct math from exam
注意:使用DISTINCT 去重时,只有查询列表中所有的值都相同才会判定为重复
建议:查询时不加限制条件会返回表中所有的结果,如果表中的数据量过大,会把服务器资源消耗殆尽,所有建议在生产环境中尽量使用带限制条件的查询
何为条件查询,我们下文叙述。
3.4 Where 条件查询
3.4.1 语法:
sql
select
select_expr[,select_expr]...[from table_references]
where where_condition;
3.4.2 比较运算符
运算符 | 说明 |
---|---|
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于,对NULL的比较不安全,比如NULL=NULL 结果还是NULL |
<=> | 等于,对NULL的安全,比如NULL=NULL 结果还是TRUE(1) |
!=,<> | 不等于,两者对NULL的判定一样的,二者任选其一皆可 |
value BETWEEN a0 AND a1 | 范围匹配,[a0,a1],如果a0<=valus<=a1,返回TRUE 或1,NOT BETWEEN 则取反 |
value IN (option,...) | 如果value在option列表中,,返回TRUE (1),NOT IN 则取反 |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
LIKE | 模糊匹配,%表示任意多个(包括0个)字符,_表示任意一个字符,NOT LIKE 则取反 |
3.4.3 逻辑运算符
运算符 | 说明 |
---|---|
AND | 多个条件必须都为TRUE(1),结果才是TRUE(1) |
OR | 任意一个条件为TRUE(1),结果为TRUE(1) |
NOT | 条件为TRUE(1),结果为FALSE(0) |
3.4.4 示例:
3.4.4.1 基本查询
查询英语不及格的同学及英语成绩(<60)
sql
select name,english from exam where english<60;
查询语文成绩高于英语成绩的同学
sql
select name,chinese,english from exam where chinese>english;
查询总分在200分以下的同学
sql
select name,chinese,math,english from exam where chinese+math+english<200;
3.4.4.2 AND 和 OR
查询语文成绩大于80分且英语成绩大于80分的同学
sql
select name,chinese,english from exam where chinese >80 and english >80;
查询语文成绩大于80分或者英语成绩大于80分的同学
sql
select name,chinese,english from exam where chinese >80 or english >80;
观察AND 和 OR的优先级
我们发现AND 的优先级大于 OR
3.4.4.3 范围查询
查询语文成绩在80分到90分的同学及语文成绩
sql
select name,chinese from exam where chinese between 80 and 90;
查询数学成绩是67或者68或者76
sql
select name,math from exam where math in (67,68,76);
3.4.4.4 模糊查询
% -> 查询所有姓曹的同学
sql
select name from exam where like '曹%';
_ -> 查询所有姓曹且名字只有两个字的同学
sql
select name from exam where like '孙_';
3.4.4.5 NULL 的查询
查询英语成绩为NULL的记录
sql
select * from exam where english is NULL;
查询英语成绩不为NULL的记录
sql
select * from exam where english is not NULL;
NULL 与其他值进行运算结果为NULL