MySQL表的增删改查(基础)

在进行增删改查的时候,务必先要选中数据库!!

1. CRUD

注释:在 SQL 中可以使用 “-- 空格 + 描述 来表示注释说明
CRUD 即增加 (Create) 、查询 (Retrieve) 、更新 (Update) 、删除 (Delete) 四个单词的首字母缩写。

2. 新增(Create

语法:insert into 表名 values (列,列,列......);
values后面的()中的内容,个数和类型都要和表的结构匹配
案例:
insert 除了可以插入完整的一行数据之外,还可以只当列插入;此时未被指定的列则是以默认值来填充的
如果指定多个列,就可以使用,来进行分隔即可
insert语句,values后面的()可以有多组,每一组就对应到一行(一条记录),因此借助这个功能就可以一个SQL语句插入多条数据

3. 查询(Retrieve

3.1 全列查询

语法:select * from 表名
        * 叫做通配符,代表了所有的列。无论这里的表是啥样的里面有几列,都是啥名字都可以用 * 来代表它们
MySQL表的增删改查(基础)_第1张图片
注意:如果数据量很大那就不要用这个了,因为容易把硬盘IO还有网络带宽吃满!

3.2 指定列查询

语法:select 列名 from 表名
        通过指定列查询,相比上面的select * 查询要精简不少
MySQL表的增删改查(基础)_第2张图片

3.3 带表达式的查询

在查询过程中,进行一个简单的计算(列和列之间),不能进行行和行之间的运算
MySQL表的增删改查(基础)_第3张图片
        进行表达式查询的时候,查询结果是一个"临时表",服务器会根据SQL来进行计算,查询出这个表的所有记录并生成一个临时表,原来表中的数据不会改变
        select只是能查询,无论怎么操作都不会对硬盘的数据进行修改

3.4 别名

        使用表达式查询的时候,查询的临时表的列名就是自己写的表达式,这个写法并不美观,就可以在表达式后面加个 as + 名
MySQL表的增删改查(基础)_第4张图片

3.5 去重:DISTINCT

        查询的时候,针对列来进行去重(把所有重复的记录给合并成一个) → 使用distinct 关键字对某列数据进行去重
MySQL表的增删改查(基础)_第5张图片
        也可以指定多个列,当指定多个列的时候则是要求所有的列都相同,才算“重复”

3.6 针对查询结构进行排序:order by

语法:select 列名 from 表名 order by 列名;
MySQL表的增删改查(基础)_第6张图片
默认是升序排序的,如果要进行降序排序,就在后面加上desc
MySQL表的增删改查(基础)_第7张图片
【注意事项】:
        1.如果SQL中没有明确地写order by,这时候查询结果的顺序是不可预期的。看起来像是根据插入顺序来进行排序的,然而实际上在MySQL中并没有对顺序做出过任何承诺
        2.如果是要排序的列中,有NULL,则视为NULL是“最小值”
        3.也可以针对表达式/别名来进行排序,比如根据总成绩
MySQL表的增删改查(基础)_第8张图片
在SQL中,NULL和任何值进行运算,结果依然是NULL
        4.排序还可以指定多个列来进行排序(更复杂的比较规则)
MySQL表的增删改查(基础)_第9张图片

3.7 条件查询:where

        通过where指定一个“条件”(想要描述“条件”,需要用到“关系运算符”和“逻辑运算符”),把查询到的每一行都带入到这个条件中,看条件是 真 还是 假 ,把条件为真的行保留(作为临时表的结果),条件为假的就舍弃
MySQL表的增删改查(基础)_第10张图片
MySQL表的增删改查(基础)_第11张图片
查询语文低于六十分的
MySQL表的增删改查(基础)_第12张图片
查询语文成绩好于英语成绩的
MySQL表的增删改查(基础)_第13张图片
查询总分小于200的
MySQL表的增删改查(基础)_第14张图片
        在这个代码中,where子句不能使用 列 的别名来进行比较。因为MySQL执行查询操作的时候,先针对每一条记录中的计算条件进行筛选,满足条件的记录才会取出对应的列,然后计算列里面的表达式(生成别名)
查询语文成绩在80 - 90之间的
MySQL表的增删改查(基础)_第15张图片
3.8 分页查询: LIMIT
语法:
案例:按 id 进行分页,每页 3 条记录,分别显示 第 1 2 3
4. 修改( Update
语法:
-- 查询数学成绩是 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 ;
-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE ' %' ; -- 匹配到孙悟空、孙权
-- _ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE ' _' ; -- 匹配到孙权
-- 查询 qq_mail 已知的同学姓名
SELECT name, qq_mail FROM student WHERE qq_mail IS NOT NULL ;
-- 查询 qq_mail 未知的同学姓名
SELECT name, qq_mail FROM student WHERE qq_mail IS NULL ;
-- 起始下标为 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;
-- 1
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3
OFFSET 0 ;
-- 2
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3
OFFSET 3 ;
-- 3 页,如果结果不足 3 个,不会有影响
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3
OFFSET 6 ;
UPDATE table_name SET column = expr [, column = expr ...]
[ WHERE ...] [ ORDER BY ...] [ LIMIT ...] 案例:
5. 删除( Delete
语法:
案例:
6. 内容重点总结
新增:
查询
-- 将孙悟空同学的数学成绩变更为 80
UPDATE exam_result SET math = 80 WHERE name = ' 孙悟空 ' ;
-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70
UPDATE exam_result SET math = 60 , chinese = 70 WHERE name = ' 曹孟德 ' ;
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT
3 ;
-- 将所有同学的语文成绩更新为原来的 2
UPDATE exam_result SET chinese = chinese * 2 ;
DELETE FROM   table_name [ WHERE ...] [ ORDER BY ...] [ LIMIT ...]
-- 删除孙悟空同学的考试成绩
DELETE FROM exam_result WHERE name = ' 孙悟空 ' ;
-- 删除整张表数据
-- 准备测试表
DROP TABLE IF EXISTS for_delete;
CREATE TABLE for_delete (
id INT ,
name VARCHAR ( 20 )
);
-- 插入测试数据
INSERT INTO for_delete (name) VALUES ( 'A' ), ( 'B' ), ( 'C' );
-- 删除整表数据
DELETE FROM for_delete;
-- 单行插入
insert into ( 字段 1, ..., 字段 N) values (value1, ..., value N);
-- 多行插入
insert into ( 字段 1, ..., 字段 N) values
(value1, ...),
(value2, ...),
(value3, ...);
-- 全列查询
select * from
-- 指定列查询 修改
删除
7. 课后作业
select 字段 1, 字段 2... from
-- 查询表达式字段
select 字段 1+ 100 , 字段 2+ 字段 3 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 条件

你可能感兴趣的:(mysql,windows,数据库)