当前位置:   article > 正文

【MySQL】MySQL表的增删改查(初阶)

【MySQL】MySQL表的增删改查(初阶)


>>文章导航

1. CRUD

2. 新增(Create)

单行数据 + 全列插入 / 多行数据 + 指定列插入

3. 查询(Retrieve)(重要!!!)

3.1 全列查询

3.2 指定列查询

3.3 查询字段为表达式

3.4 别名

3.5 去重:distinct

3.6 排序:order by

3.7 条件查询:where

3.7.1 运算符

(1) 比较运算符:

(2) 逻辑运算符:

3.7.2 like 关键字

3.8 分页查询:limit

4. 修改(Update)

5. 删除(Delete)

6. 小练习

注意:


1. CRUD

注释:在SQL中可以使用 “-- 空格+描述” 来表示注释说明;

        CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)。

        对表的操作的前提------先选中 database 和创建好 tables !!!!

        MySQL 5, 默认字符集是拉丁文,无法直接插入中文的, 需要在创建数据库的时候设定好显示的字符集;

        万一忘记加了,最简单的办法就是---删掉数据库重新创建;

2. 新增(Create)

单行数据 + 全列插入 / 多行数据 + 指定列插入

语法:

-- 单行数据 + 全列插入

insert into 表名 values (列名,列名......);

-- 多行数据

insert into 表名 (列名,列名......) values (值,值...),(值,值...);

-- 指定列插入

insert into 表名 (列名) values (值);

        示例: 

  1. insert into student values (1,`张三`)
  2. insert into student values (2,`李四`)

3. 查询(Retrieve)(重要!!!)

SELECT
        [DISTINCT] {* | {column [, column] ...}
        [FROM table_name]
        [WHERE ...]
        [ORDER BY column [ASC | DESC], ...]
        LIMIT ...

3.1 全列查询

select * from 表名;

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

3.2 指定列查询

select 列名,列名 from 表名;

-- 指定列的顺序不需要按定义表的顺序来

3.3 查询字段为表达式

-- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段 (+ - 常数)
SELECT id, name, english + 10 FROM exam_result;
-- 表达式包含多个字段 (多个列计算)
SELECT id, name, chinese + math + english FROM exam_result;

这种查询无法针对行和行之间的运算,并且查询表达式是啥, 临时表的列名就是啥,可读性差;

3.4 别名

select 表达式 as 别名 from  表名;

3.5 去重:distinct

select distinct 列名 from  表名;

把值相同的列合并成一个;

多个列去重时,需要每个列的值都不同才会合并;

3.6 排序:order by

-- ASC 为升序(从小到大)

select 列名 from 表名 order by 列名(列名就是排序的依据);
-- DESC 为降序(从大到小)

select 列名 from 表名 order by 列名 desc;
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];

3.7 条件查询:where

select * from 表 where 条件;

最终结果集是所有满足条件的数据; 执行时会遍历整个表,把每个记录都带入到条件中,看条件是否满足;

and 的优先级高于 or,一个where中,有and 也有or, 会先执行 and 后执行 or;

但是!!真正写代码的时候,还是要多加 () ,显式指定先后顺序;

3.7.1 运算符
(1) 比较运算符:

(2) 逻辑运算符:

3.7.2 like 关键字

用到通配符:
% : 匹配任意个任意字符

         % + 查询内容 : 以查询内容结尾

         查询内容 + % : 以查询内容开头

  % + 查询内容 + % : 所有包含查询内容的数据

- : 匹配一个字符
 

查询结果可以为 0 个结果; 可以写任意多个;

3.8 分页查询:limit

从 0 开始,筛选 n 条结果:

select * from 表名 [where ...] [order by ...] limit n;

从 s 开始,筛选 n 条结果:

select * from 表名 [where ...] [order by ...] limit s, n;

从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用

select * from 表名 [where ...] [order by ...] limit n offset s;

4. 修改(Update)

update 表名 set 列名1=值1, 列名2=值2 [where 条件];

= 是赋值;

[where 条件] 指定行;

update修改的是硬盘数据;

sql 语句是一个整体,要么整体成功,要么整体失败都不执行;

5. 删除(Delete)

delete from 表名 where 条件/ order by / limit ;

把符合条件的数据删除掉;

6. 小练习

        (1)在创建的商品表中插入一条数据:名称为“学生书包”、价格18.91、库存101、描述为空;

或者 insert into product(name,price,storage) values('学生书包',18.91,101);

        (2) 在图书表中新增—条记录:Java核心技术、作者"Cay S. Horstman”,价格56.43,分类为“计算机技术”;

SQL中,下列涉及空值的操作,不正确的是?

A.name IS NULL

B.name= NULL

C.namee IS NoT NULL

D.NoT(name IS NULL)

A回答错误(正确答案是:B)

在SQL中,NULL是一种特有的数据类型,其等价于没有任何值、是未知数。

NULL与0、空字符串、空格都不同。

SQL默认情况下对WHERE XX!=NULL和WHERE XX=NULL的判断会永远返回0行,却不会提示语法错误。

执行以下 SQL ,下面哪些名字会被查询出来( )

SELECT FirstName FROM StaffList WHERE FirstName LIKE '_A%'

A.Allen

B.CLARK

C.JACKSON

D.David

正确答案是:C,D

题面其实是在问第二个字符是A的是哪个,严格意义上只有C对,但是题面没有说明校验规则。在通常情况下,默认校验规则是utf8_general_ci。在这个状况下,D也对。

A表字段a 类型int中有100条记录,值分别为1至100。如下语句 SELECT a FROM A WHERE a BETWEEN 1 AND 50 OR (a IN (25,70,95) AND a BETWEEN 25 AND 75) 则如下哪个值在这个sql语句返回的结果集中?( )

A.30

B.51

C.75

D.95

要求的逻辑是:[1,50]((25或70或95)且[25,75]),后半段只有25和70满足,选项没有,前半段1~50都满足,只有A选项的30在这个范围内,那就A了。

注意:

        1. 关键字命名时需要用反引号 ` :

        2. sql 中的字符串, 可以使用 单引号 ' 双引号" 引用起来, 不是 反引号` !!!
        3. 很多编程语言都没有"字符"类型, 这种情况一般 ' " 都能表示字符串;

        4. sql 语句是一个整体, 要么整体执行成功, 要么整体失败都不执行;

       


如果觉得作者写得还不错的话, 点赞 / 收藏 / 评论 / 转发 四连支持一下吧~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/783451
推荐阅读
相关标签