MySQL学习笔记04-插入_修改_删除数据_简单查询语句

1,636次阅读
一条评论

前言时刻,简单的增删改查操作,下一篇才是难点。

写作环境:

MacOS、MySQL8.0

写SQL工具:Navicat15.0和电脑自带终端

写作软件:Typora

作者:西园公子:www.zwjjiaozhu.top

首先先创建一个t7表,以下所有命令均是对该表进行操作。

CREATE TABLE t7 (`name` VARCHAR(10), age TINYINT DEFAULT 20) CHARACTER SET utf8 COLLATE utf8_bin;
# 增加一个job字段,因为我是忘记添加了,你也可以放到上面
ALTER TABLE t7 ADD job VARCHAR(20) NOT NULL;

# 输出当前数据库下所有表的名称
SHOW TABLES;

1、插入表数据

1)指定所有字段对应的数据:

此时可以省略字段,

# 1.1 全部插入
INSERT INTO t7 VALUE('张', 18, '干饭人');

2)只指定几个字段的值:

不指定某字段的值时:

  • 若该字段设置了默认值,则默认插入该值,若没有则插入空白NULL
  • 若该字段设置了不允许为空not null,有默认值就插入,若没有则会报错。
# 1.2 插入部分数据
INSERT INTO t7 (`name`, job) VALUES('章', '敲键盘');  # ✅
INSERT INTO t7 (`name`) VALUES('章');  # ❌

3)一次性插入多条数据:

  • 语法:INSERT INTO 表名 (列名, 列名2, 列名3) (列值1,列值2), (列值1.2,列值2.2)……;
INSERT INTO t7 (`name`, job) VALUES('章', '敲键盘'), ('飞', '干饭人');  # ✅

2、修改表数据

如果添加 where 子句的话,则默认修改表中全部数据。

UPDATE `table_name` SET column_name='value' [WHERE 条件];

小例子:

# 2、修改表数据
# 2.1 不加选择显示where的话,则默认修改表中全部数据
UPDATE t7 SET job='键盘';
# 2.2 添加where限制条件,只有where为true才修改。
UPDATE t7 SET age=19 WHERE `name`='张';

3、删除表数据

如果不加 where 子句,则默认选择全表,结果就是删除表中的全部内容。

DELETE FROM t9 [WHERE 条件];

小例子:

mysql> DELETE FROM t9 WHERE name='张飞';
Query OK, 1 row affected (0.00 sec)

4、查询数据

新建表t9,并插入一些测试数据。

# 1、创建一个表
CREATE TABLE t9 (`name` VARCHAR(20), math TINYINT DEFAULT 0, chinese TINYINT DEFAULT 0, english TINYINT DEFAULT 0) CHARACTER SET utf8 COLLATE utf8_bin;

# 2、插入数据
INSERT INTO t9 VALUES('张飞', 68, 76, 52);
INSERT INTO t9 (`name`, chinese) VALUES('关羽', 58);
INSERT INTO t9 VALUES('宋江', 98, 96, 82);
INSERT INTO t9 VALUES('宋无缺', 98, 96, 92);
INSERT INTO t9 VALUES('我是及时雨', 78, 86, 92);

4.1 简单查询

1)查询表中全部数据:

select * from table_name,其中*代表所有列

mysql> select * from t9;
+--------+------+---------+---------+
| name   | math | chinese | english |
+--------+------+---------+---------+
| 张飞   |   68 |      76 |      52 |
| 关羽   |    0 |      58 |       0 |
| 宋江   |   98 |      96 |      82 |
+--------+------+---------+---------+
3 rows in set (0.00 sec)

2)只查询部分列内容:

select column_name1, ..., column_name6 from table_name,其中column_name代表列名。

mysql> select name, math, english from t9;
+--------+------+---------+
| name   | math | english |
+--------+------+---------+
| 张飞   |   68 |      52 |
| 关羽   |    0 |       0 |
| 宋江   |   98 |      82 |
+--------+------+---------+
3 rows in set (0.00 sec)

3)只显示某个表中的所有字段:

*表示查询结果中所有的字段,而table_1.*则表示显示该表 table_1 中的所有字段。

# 显示所有字段
mysql> SELECT * FROM t1, t7 WHERE t7.name='张';
+--------------+------+-----------+------+------+--------+-------+
| name         | age  | hobby     | name | age  | job    | m_age |
+--------------+------+-----------+------+------+--------+-------+
| zhang        |   18 | 看电影    | 张   |   19 | 键盘   |  NULL |
| zhangzhan张  |   19 | 看电影    | 张   |   19 | 键盘   |  NULL |
| zhangzhan张  |   19 | 看电影    | 张   |   19 | 键盘   |  NULL |
+--------------+------+-----------+------+------+--------+-------+

# 只显示某个表的所有字段
mysql> SELECT t1.* FROM t1, t7 WHERE t7.name='张';
+--------------+------+-----------+
| name         | age  | hobby     |
+--------------+------+-----------+
| zhang        |   18 | 看电影    |
| zhangzhan张  |   19 | 看电影    |
| zhangzhan张  |   19 | 看电影    |
+--------------+------+-----------+
# 注释:上面只显示了t1表的所有字段

4.1 where 筛选作用

写 where 语句,就不得不介绍一下 where 子句中的运算符。

  1. 比较运算符:

    >(大于)、 <(大于)、 >=(大于)、 <=(大于)、<>(不等于)、 !=(不等于)。

    between A and B(在 A 和 B 之间吗?包括 A 和 B)

    in(set)(在集合 set 中吗?)

    is NULL(判断为空吗?)

    like 'a%'(模糊匹配,判断是否像这个字符串,%表示可以匹配任何长度的字符串),或者not like 'a%'

  2. 逻辑运算符:从左到右运算,括号最优先

    and:逻辑与,or:逻辑或,not:逻辑非。

一笼小问题:

1)筛选名字是宋开头的同学:

# like
mysql> SELECT * FROM t9 WHERE `name` LIKE '宋%';
+------ -----+------+---------+---------+
| name      | math | chinese | english |
+-----------+------+---------+---------+
| 宋江      |   98 |      96 |      82 |
| 宋无缺    |   98 |      96 |      92 |
+-----------+------+---------+---------+

2)筛选出数学成绩是78或者68的同学:

# in
mysql> SELECT * FROM t9 WHERE math IN (78, 68);   # in
+-----------------+------+---------+---------+
| name            | math | chinese | english |
+-----------------+------+---------+---------+
| 张飞            |   68 |      76 |      52 |
| 我是及时雨      |   78 |      86 |      92 |
+-----------------+------+---------+---------+

3)筛选数学大于70分且英语不等于82,或者是语文在90和100之间的同学:

mysql> SELECT * FROM t9 WHERE math > 70 and english != 82 OR chinese BETWEEN 90 AND 100;
+-----------------+------+---------+---------+
| name            | math | chinese | english |
+-----------------+------+---------+---------+
| 宋江            |   98 |      96 |      82 |
| 我是及时雨      |   78 |      86 |      92 |
| 宋无缺          |   98 |      96 |      92 |
+-----------------+------+---------+---------+

4.3 as 起别名

1)起别名可利于展示

mysql> SELECT `name` AS '姓名', math AS '数学' FROM t9;
+-----------------+--------+
| 姓名            | 数学   |
+-----------------+--------+
| 张飞            |     68 |
| 关羽            |      0 |
| 宋江            |     98 |
| 我是及时雨      |     78 |
| 宋无缺          |     98 |
+-----------------+--------+

2)美观:

前面定义的别名,后面可以使用,简化了代码。

mysql> SELECT `name`, (math+chinese+english) AS total_score FROM t9 ORDER BY total_score ASC;
+-----------------+-------------+
| name            | total_score |
+-----------------+-------------+
| 关羽            |          58 |
| 张飞            |         196 |
| 我是及时雨      |         256 |
| 宋江            |         276 |
| 宋无缺          |         286 |
+-----------------+-------------+

3)也可以省略 as:

mysql> SELECT `name` '姓名' FROM t7;
+--------+
| 姓名   |
+--------+
| 张     |
| 章     |
| 章     |
| NULL   |
+--------+

4.5 排序

1)升序order by column_name ASC,若不设置 ASC 则默认就是升序

mysql> SELECT name, math FROM t9 ORDER BY math ASC;
+-----------------+------+
| name            | math |
+-----------------+------+
| 关羽            |    0 |
| 张飞            |   68 |
| 我是及时雨      |   78 |
| 宋江            |   98 |
| 宋无缺          |   98 |
+-----------------+------+

2)降序:order by column_name DESC

mysql> SELECT name, math FROM t9 ORDER BY math DESC;
+-----------------+------+
| name            | math |
+-----------------+------+
| 宋江            |   98 |
| 宋无缺          |   98 |
| 我是及时雨      |   78 |
| 张飞            |   68 |
| 关羽            |    0 |
+-----------------+------+

总结:

Just do it!

2
西园公子
版权声明:本站原创文章,由西园公子2021-08-08发表,共计4851字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(一条评论)
载入中...
西园公子 博主
2021-08-16 16:41:54 回复

:oops: