MySQL表的基本查询上

1,创建表

前面基础的文章已经讲了很多啦,直接上操作:

非常简单!下一个!

2,插入数据

1,全列插入

前面也说很多了,直接上操作:

以上插入和全列插入类似,全列插入也可以这样写:

注意,后面插入的数据数量必须和定义表的列的数量及顺序一致

2,多行数据 + 指定列插入

插入两条记录,value_list 数量必须和指定列数量及顺序一致

操作:

如果需要用一条语句插入多行数据,可以在values后面用逗号隔开然后加入数据:

3,插入否,则更新

由于 主键 或者 唯一键 对应的值已经存在而导致插入失败

可以选择性的进行同步更新操作语法:

on duplicate key update = 。。。。。

可以看到,因为主键冲突所以无法插入数据,那么我又不想要id为1的数据,这个时候就可以用上面的语法:

可以看到,表中的第一行数据被更新了。

3,替换

用法:

-- 主键 或者 唯一键 没有冲突,则直接插入;

-- 主键 或者 唯一键 如果冲突,则删除后再插入

我们可以用创建成功后的提示来看有没有数据冲突:

-- 1 row affected: 表中没有冲突数据,数据被插入

-- 2 row affected: 表中有冲突数据,删除后重新插入

创建表和插入数据讲完之后,就可以开始我们的主题了:表的查询!

4,表的查询

首先我们来快速创建一个表,让我们可以方便查询:

具体指令:

创建表指令:

CREATE TABLE exam_result ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL COMMENT '同学姓名', chinese float DEFAULT 0.0 COMMENT '语文成绩', math float DEFAULT 0.0 COMMENT '数学成绩', english float DEFAULT 0.0 COMMENT '英语成绩' );

插入表指令:

INSERT INTO exam_result (name, chinese, math, english) VALUES ('唐三藏', 67, 98, 56), ('孙悟空', 87, 78, 77), ('猪悟能', 88, 98, 90), ('曹孟德', 82, 84, 67), ('刘玄德', 55, 85, 45), ('孙权', 70, 73, 78), ('宋公明', 75, 65, 30);

1,select列

1,全列查询

通常情况下不建议使用 * 进行全列查询

  1. 查询的列越多,意味着需要传输的数据量越大;

  2. 可能会影响到索引的使用。(索引待后面讲解)

操作:

2,指定列查询

操作:

3,查询字段为表达式

可以看到,可以进行运算并显示在表中。

4,为查询结果指定别名

操作:在加算表达式后面加as加要命名的名字

其中,as可以省略:

5,结果去重

我们想去差个成绩,看全班分数的整体趋势,为此要求分数不重复,而我们看到math里分数有重复的部分,那么我们怎么解决这个分数重复的问题?

去重!语法:在列名前加distinct:

可以看到,表中的数据被去重

2,where语句

我们可以用where语句来做判断来查询表,具体判断的表达式:

我们用例子来描述上面操作符的使用:

1 英语不及格的同学及英语成绩 ( < 60 )

可以用比较来筛选出想要的数据。

2,语文成绩在 [80, 90] 分的同学及语文成绩

这个时候,可以引入一个指令:and,它代表的是且命令,就和C++中的&&差不多

也可以用between来查询,操作如下:

3,数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩

这里面可以用or指令来完成,or相当于C++里的||:

当然,这样写比较麻烦,那么可以使用in条件来写:

这些写会比第一种方法好看。

4,姓孙的同学 及 孙某同学

这时候得引入模糊查找和%:

可以看到,孙后面的名字都查到了,但是如果只想要后面只有一个字的怎么操作?

可以看到,用_可以指定后面跟多少字

5,语文成绩好于英语成绩的同学

可以打印列表与列表的比较:

6,总分在 200 分以下的同学

可以用表相加减得出,但是不能用给表启的名字做比较,因为语句执行的顺序不一样:

7,语文成绩 > 80 并且不姓孙的同学

这里用到了like和not连用

8,孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80

9,NULL 的查询

先创建表

查询 qq 号已知的id:

NULL 和 NULL 的比较,= 和 的区别

3,结果排序

语法:

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

-- DESC 为降序(从大到小)

-- 默认为 ASC

注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

**1,**同学及数学成绩,按数学成绩升序显示

2,同学及数学成绩,按数学成绩降序显示

3,查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示

4,查询同学及总分,由高到低

5,查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示

4,筛选分页结果

关键字:limit

只显示前几行

操作:

可以看到,limit前加的数字代表从第几行开始,第二个数字代表往下显示几行

可以用关键字offset来表示第几行开始:

相关推荐
i道i20 分钟前
MySQL win安装 和 pymysql使用示例
数据库·mysql
小怪兽ysl20 分钟前
【PostgreSQL使用pg_filedump工具解析数据文件以恢复数据】
数据库·postgresql
wqq_9922502771 小时前
springboot基于微信小程序的食堂预约点餐系统
数据库·微信小程序·小程序
爱上口袋的天空1 小时前
09 - Clickhouse的SQL操作
数据库·sql·clickhouse
Oak Zhang2 小时前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存
聂 可 以2 小时前
Windows环境安装MongoDB
数据库·mongodb
web前端神器2 小时前
mongodb多表查询,五个表查询
数据库·mongodb
门牙咬脆骨2 小时前
【Redis】redis缓存击穿,缓存雪崩,缓存穿透
数据库·redis·缓存
门牙咬脆骨2 小时前
【Redis】GEO数据结构
数据库·redis·缓存
wusong9993 小时前
mongoDB回顾笔记(一)
数据库·笔记·mongodb