增删改查就是我们常说的CRUD:(Create,Retrieve,Update,Delete)
对应:新增数据,查询数据,修改数据,删除数据
注:常用的注释:在SQL中可以使用"-- 空格+描述"来表示注释说明…
insert into 表名 values(值,值...);
当然,插入的要和表结构一样
创建一张学生表:
他可以一次插入一行,也可以一次插入多行,也可以指定列插入,当然,每个都要一一对应:
查找语句是SQL中最复杂的操作…
select * from 表名;
这个 * 就叫做"通配符",表示一个表的所有列
刚才我们指定列插入的时候,没有对2和3插入email,他就是默认为空的
注意:像这种全列查找操作是一个危险的操作,如果直接在生产环境的服务器上,执行select * from 表名;很可能带来灾难,因为生产环境的保存的数据可能是非常大的,几个TB的存在,然后如果疯狂的读取硬盘的数据,瞬间就会把硬盘IO吃满,然后服务器又会立即返回响应数据,这么庞大的量,要是普通用户也要响应数据,此时服务器的硬盘和网络都被吃满了,那就只能干等着了.
这里先创一个表:
DROP TABLE IF EXISTS exam_result; -- 这是如果存在这张表就先删除
CREATE TABLE exam_result (
id INT,
name VARCHAR(20),
chinese DECIMAL(3,1),
math DECIMAL(3,1),
english DECIMAL(3,1)
);
插入数据:
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
(1,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98.5, 90),
(4,'曹孟德', 82, 84, 67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);
注意:select操作的结果是"临时表",虽然查询的结果跟原来的改变了,但他不会影响原来的数据
select 列名... from 表名 order by asc/desc;
注意:asc如果省略不写,默认也是升序,desc降序
注: 有些数据记录中可能带有NULL的,默认就是最小值…
排序的时候还可以通过order by来指定多个列进行排序,先根据第一个列进行排序,如果第一个列相同,相同结果之间在通过第二个列排序…
select 列名 from 表名 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 | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE | 模糊匹配。 % 表示任意多个( 包括 0 个)任意字符; _ 表示任意一个字符 |
逻辑运算符:
算符 | 说明 |
---|---|
AND | 逻辑与 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
OR | 逻辑或 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
NOT | 逻辑取反 条件为 TRUE(1),结果为 FALSE(0) |
注意:1. WHERE条件可以使用表达式,但不能使用别名。
2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
这里指的是针对同一行的,语文和英语之间的进行比较,不涉及行和行之间的比较…
注意:and优先级大于or,要想打破优先级,得加括号
%代表任意个字符(也包含0个),_代表一个字符:
查找姓孙的同学成绩:
uptate 表名 set 列名 = 值,列名 = 值...where 条件;
这里的修改就会修改数据库服务器上的原始数据了…
delete from 表名 where 条件;
一旦这里条件写错了,可能影响范围就会很大,如果不写条件,就会把整个表的数据都给删除掉(这个和drop table 还是不一样的,delete只是清数据,盒子还在,drop直接把盒子就删了)
新增
-- 单行插入
insert into 表(字段1,...,字段N) values (value 1,....,value N);
-- 多行插入
insert into 表(字段1, ...,字段N) values
(value1,...),
(value2,...),
(value2,...);
查询
-- 全列查询
select * from 表
-- 指定列查询
select 字段1,字段2... from 表
-- 别名
select 字段1 别名1,字段2 别名2 from 表
-- 去重distinct
select distinct 字段 from 表
-- 排序order by
select * from 表 order by 排序字段
-- 条件查询where:
-- (1)比较运算符 (2)between ... and ... (3)in (4)is null (5)like (6)and (7)or (8)not
select * from 表 where 条件
修改
update 表 set 字段1 = value1,字段2 = value2... where 条件
删除
delete from 表 where 条件