MySQL之CRUD(上)

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;
  1. 在结果集中去除重复记录,可以使用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

相关推荐
小陈工22 分钟前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
0xDevNull5 小时前
MySQL数据冷热分离详解
后端·mysql
科技小花5 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸5 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain5 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希5 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神6 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员6 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java6 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿6 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb