目录
一、CRUD
二、新增(Create)
2.1 单行数据 + 全列插入
2.2 多行数据 + 指定列插入
三、查询(Retrieve)
3.1 全列查询
3.2 指定列查询
3.3 查询字段为表达式
3.4 别名
3.5 去重:distinct
3.6 排序:order by
注释:在SQL中可以使用“--空格+描述”来表示注释说明
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写
这里的新增并不是说是新增表,而是在表中新增数据!
insert into tb_name (字段名) values (数据1,数据2....)
为了实现这个操作,首先要有一个表,这里就需要对表的创建要有一定的理解。我这里直接创建一个对应的学生表用于后面的插入操作。
create table student (
id int,
sn int,
name varchar(20),
email varchar(20)
);
对于全列插入,是可以在表名后面直接省略字段名的
-- 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
insert into student values (100, 10000, '唐三藏', NULL);
insert into student values (101, 10001, '孙悟空', '11111');
对于指定的列插入,需要在表明后面写明字段名。同时,对于多行数据只需要用逗号分隔就行
-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
insert into student(id,sn,name) valuse (102,10002,'曹操'),(103,10003,'孙权');
说明:因为多行数据的插入相比于单行数据的插入是效率更加高的,这里推荐使用多行数据的插入
语法:
select
[distinct] {* | {字段1, 字段2...} -- *号表示查询该表所有的内容,distinct表示去重
[from table_name] --table_name表示表名
[where ...] --条件的范围
[order by column [asc | desc], ...] --对查询结果进行升序(asc)、降序(desc) 操作
limit ...--分组查询
案例:
-- 创建考试成绩表
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);
通常情况下不建议使用 * 进行全列查询
-- 1. 查询的列越多,意味着需要传输的数据量越大;
-- 2. 可能会影响到索引的使用。select * from exam_result;
-- 指定列的顺序不需要按定义表的顺序来
select id, name, english from exam_result;
-- 表达式不包含字段
select id, name, 10 from exam_result;
-- 表达式包含一个字段
select id, name, english + 10 from exam_result;--表达的是给english这一列数据都加上10
-- 表达式包含多个字段
select id, name, chinese + math + english from exam_result;--将chinese,math,english,三列进行相加
select 列名 as 别名 from tb_name;
--别名可以随便定义
假如我不想查询到某列重复的值,这里就会使用到distinct
select distinct math from tb_name;
-- 查询同学姓名和数学成绩,按数学成绩排序显示
select name, math from student order by math asc; --其中asc可以省略
select name, math from exam_result order by math desc;
这里我们发现order by默认是升序的!
-- 查询同学及总分,由高到低
select name, chinese + english + math from exam_result order by chine
se + english + math desc;
--同样的也能够用别名进行排序
select name, chinese + english + math as total from exam_result order by total desc;
-- 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
select name, math, english, chinese from exam_resultorder by math desc, english, chinese;
在多种排序的时候是优先第一列的排序的,再在第一列排序的基础上使用第二列数据进行排序。