MySQL表的增删查改CRUD—(经典SQL语句)

目录

  • 一、增删查改--CRUD
  • 二、增加(Create)
    • 创建表(Create)
    • 插入表(Insert)
  • 三、删除--Delete
  • 四、查询--Retrieve
    • 查找(Select)
    • 1.别名(AS)
    • 2.去重(Distinct)
    • 排序(ORDER BY)
    • 条件查询(WHERE)
      • 范围查询
    • 限制(分页)查询:LIMIT
    • NULL
  • 五、修改(更新)--Update

建议MySQL新手可以先看MySQL数据库基础操作

一、增删查改–CRUD

在使用MySQL中,我们接触最多的就是:
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)==四个单词的首字母缩写。

DDL(data definition language):数据定义语言,用来维护存储数据的结构,主要包括增加(create)、删除(drop)、alter(修改)。
DML(Data Manipulation Language): 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select),是开发人员日常使用最频繁的操作。

二、增加(Create)

创建表(Create)

语法:

CREATE TABLE table_name (
 field1 datatype,
 field2 datatype,
 field3 datatype
);
-- CREATE TABLE tb_name
-- (
-- 列名1 数据类型(约束条件)(默认值),
-- 列名1 数据类型(约束条件)(默认值),
-- ...
-- );

可以使用comment增加字段说明。
示例:

-- 创建一张学生成绩表
-- 如果数据库中存在student表,则删除此表,重新创建一张exam_result表
DROP TABLE IF EXISTS student;
CREATE TABLE student(
 id INT,
 name VARCHAR(20),
 chinese DECIMAL(3,1),
 math DECIMAL(3,1),
 english DECIMAL(3,1)
);

插入表(Insert)

表创建好后,就可以往表里插入记录了。
语法:

INSERT [INTO] table_name [(column [, column] ...)] VALUES (value1,value2,……valuesn);

如果省略 [(column [, column] …)],则说明是向数据表中的全列插入。
插入单行全列的数据
示例:

-- 插入两条记录,(value1,value2,……valuesn)数量必须和定义表的列的数量及顺序一致
INSERT INTO student VALUES (100, 10000, '张三', 98, 99, 95);
INSERT INTO student VALUES (101, 10001, '王五', 97,100,92);

插入多行指定列的数据
在 MySQL 中,insert 语句还有一个很好的特性,可以一次性插入多条记录。
语法:

INSERT INTO tablename (field1, field2,……fieldn)
VALUES (record1_value1, record1_value2,……record1_valuesn),
(record2_value1, record2_value2,……record2_valuesn),
……
(recordn_value1, recordn_value2,……recordn_valuesn);

示例:

-- 插入两条记录,recordn_valuesn 数量必须和指定列数量及顺序一致
INSERT INTO student (id, sn, name) VALUES
 (102, 20001, '赵六'),
 (103, 20002, '李四');

三、删除–Delete

语法:

DELETE FROM  table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

示例:

-- 删除孙悟空同学的考试成绩
DELETE FROM exam_result WHERE name = '李四';
-- 删除整张表数据
DROP TABLE IF EXISTS exam_result;
-- 删除整表数据
DELETE FROM exam_result;

四、查询–Retrieve

查找(Select)

语法:

SELECT  {* | {column [, column] ...}  FROM tablename [WHERE CONDITION]

全列查询

--  用* 进行全列查询
SELECT * FROM student;

语句中 * 表示将所有符合条件的记录都选出来。

-- 通常情况下不建议使用 * 进行全列查询
-- 1. 查询的列越多,意味着需要传输的数据量越大;
-- 2. 可能会影响到索引的使用。

** 指定列查询 **
用逗号分割的所有要查的指定字段。

-- 指定列的顺序不需要按定义表的顺序来
SELECT id, name FROM student;

查询字段为表达式

-- 表达式不包含字段
SELECT id, name, 10 FROM student;

将输出三列,在查询出的表里新建一列,列名就为10, 这一列里面的每个数据都为10。

-- 表达式包含一个字段
SELECT id + 10, name FROM student;

将输出2列,在查询出的表里的id列中,列名就为id + 10,所有的id都加10。

-- 表达式包含多个字段
SELECT id, name, chinese + math + english FROM student;

将输出三列,id,和name列正常输出,最后一列列名为 chinese + math + english,数据为三科成绩之和。

1.别名(AS)

为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称。但是别名并不具有
语法:

SELECT column [AS] new_name [...] FROM table_name;

2.去重(Distinct)

将column 列中的所有数据去重,DISTINCT 关键字告诉MySQL返回的是不同的行,列中数据重复,则只返回其中一行,保证返回的数据都不重复。
语法:

-- DISTINCT 应用的格式很严格
SELECT DISTINCT column FROM table_name;

示例:

//输出math去重后的结果
SELECT DISTINCT math FROM exam_result;

错误示例:

-- 语法规则错误
SELECT name, DISTINCT math FROM exam_result;
-- 不能达到去重的效果
SELECT DISTINCT math,english FROM exam_result;
如果使用DISTINCT关键字,则他必须直接放在列名的前面。 
不能多列使用DISTINCT,DISTINCT应用于单列,且不能有其他字段参与检索。
如果给出 SELECT DISTINCT column1, column2,除非指定的两个列都相同,否则所有的行都将被检索出来,去重失败 

排序(ORDER BY)

ORDER BY子句取一个或多个列的名字,据此对输出进行排序。
ASC 为升序(从小到大) 默认为 ASC
DESC 为降序(从大到小)

语法:

SELECT ... FROM table_name [WHERE ...] ORDER BY column [ASC|DESC], [...];

示例:

-- 查询同学姓名和 math,按 math排序显示
SELECT name, qq_mail FROM student ORDER BY math;
SELECT name, qq_mail FROM student  ORDER BY math DESC;

可以对多个字段进行排序,排序优先级随书写顺序

-- 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
SELECT name, math, english, chinese FROM exam_result ORDER BY math DESC, english, chinese;

使用表达式及别名排序

-- 查询同学及总分,由高到低
SELECT name, chinese + english + math total FROM exam_result ORDER BY total DESC;
  1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
  2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
  3. ORDER BY 子句中用非检索的列排序数据也是可以的
  4. DESC关键字只应用到直接位于其前面的列名,如果想在多个列上进行降序排序,必须对灭个列指定DESC关键字
  5. ORDER BY 子句位于FROM子句之后

条件查询(WHERE)

在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名之后给出。

WHERE子句位于FROM子句之后,ORDER BY 子句位于WHERE子句之后

示例:

SELECT name, math FROM exam_result WHERE english < 60 ORDER BY math DESC;

WHERE子句比较操作符

操作符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <> 不等于
BETWEEN a AND b 在指定的两个值之间,范围匹配,[a,b],如果 a <= value <= b,返回 TRUE(1)
IN (option, …) 如果是 option 中的任意一个,返回 TRUE(1)
IS NULL 是 NULL
IS NOT NULL 不是 NULL
LIKE 模糊匹配,用于字符串查找,% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

WHERE子句逻辑运算符

操作符 说明
AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR 任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT 条件为 TRUE(1),结果为 FALSE(0)
1. WHERE条件可以使用表达式,但不能使用别名。
2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

范围查询

操作符:BETWEEN
在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND关键字分割,BETWEEN匹配范围中所有的值,包括指定的低端值和高端值。
示例:

-- 查询语文成绩在 [80, 90] 分的同学及语文成绩
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
-- 使用 AND 也可以实现
SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese <= 90;

操作符:IN
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配,IN取合法值的由头号分割的清单,全都在小括号中。
示例:

-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
-- 使用 OR 也可以实现
SELECT name, math FROM exam_result WHERE math = 58 OR math = 59 OR math 
= 98 OR math = 99;
MySQL中支持NOT对IN,BETWEEN和EXISITS子句取反。

模糊查询:LIKE
通配符%
模糊查询是区分大小写的,例如LIKE 'R%';LIKE 'r%';查询出来的结果是不一样的。
示例:

-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '张%';-- 匹配到张姓的所有人
最常使用的通配符是百分号%,在搜索串中,%表示任何字符出现的任意次数。
通配符可以在搜索模式中任意位置使用,并且可以使用多个通配符。例:'张%','%张%', '张%张'都符合规则。
除了一个或多个字符外,%还能匹配0个字符。代表搜索模式中给定位置的0个,1个或多个字符。
%通配符不能匹配NULL,例:'%'并不能匹配到NULL。

通配符_
下划线_通配符的用途的%号一样,但下划线只能匹配单个字符而不是多个字符。
示例:

-- _ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '李_';-- 匹配到李姓的名字为单个字的所有人

限制(分页)查询:LIMIT

SELECT语句返回所有匹配的行,它们可能是指定表中的每个行,为了返回第一行会前几行,可使用LIMIT子句。
语法:

-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

其中,OFFSET 表示偏移量,偏移3个数据,则从第4个开始查询。

NULL

MySQL中的NULL表示不知道、无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。
通常来说NULL参与的运算结果仍是NULL。
判断字段是否为NULL写法为(NULL 的查询):字段 IS [NOT] NULL字段 <=> NULL

五、修改(更新)–Update

语法:

UPDATE table_name SET column = expr [, column = expr ...]
 [WHERE ...] [ORDER BY ...] [LIMIT ...]

示例:

-- 将张三同学的数学成绩变更为 80 分
UPDATE exam_result SET math = 80 WHERE name = '张三';
-- 将张三同学的数学成绩变更为 60 分,语文成绩变更为 70 分
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '张三';

你可能感兴趣的:(MySQL,Java语言,数据库,mysql,sql,索引)