MySQL基本查询——表的增删查改
1.表的增加CREATE
语法:
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
案例: 创建一张学生表
1.1 单行数据 + 全列插入
这里插入两条记录,value_list数量必须和定义表的列的数量及顺序一致
注意,这里在插入的时候,也可以不用指定id,因为id主键(当然,那时候就需要明确插入数据到那些列),mysql会使用默认的值进行自增。
1.2 多行数据+指定列插入
这里我们插入两条记录,value_list数量必须和指定列数量及顺序一致
1.3 插入否则更新
由于主键或者唯一键对应的值已经存在而导致插入失败。
主键冲突:
唯一键冲突:
可以选择性的进行同步更新操作 语法:
INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...
案例:
--0 row affected: 表中有冲突数据,但冲突数据的值和update的值相等
--1 row affected: 表中没有冲突数据,数据被插入
--2 row affected: 表中有冲突数据,并且数据已经被更新
1.4 替换(replace)
--主键或者唯一键没有冲突,则直接插入
--主键或者唯一键如果冲突,则删除后再插入
--1 row affected: 表中没有冲突数据,数据被插入
--2 row affected: 表中有冲突数据,删除后重新插入
2 Retrieve
语法:
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
案例:
2.1 SELECT列
2.1.1全列查询
通常情况下不建议使用*进行全列查询
1.查询的列越多,意味着需要传输的数据量越大;
2.可能会影响到索引的使用。
2.1.2 指定列查询
其实就是把*换成需要查询的列,且指定列的顺序不需要按定义表的顺序来
2.1.3 查询字段为表达式
表达式不包含字段
表达式包含一个字段
表达式包含多个字段
2.1.4 为查询结果指定别名
语法:
SELECT column [AS] alias_name [...] FROM table_name;
2.1.5 结果去重
通过查询我们得知了98重复了,下面我们通过MySQL语句去重
2.2 where条件
比较运算符:
逻辑运算符:
案例1:查询英语不及格的同学和他的英语成绩
案例2:查询语文成绩在[80,90]分的同学
通过比较运算符实现:
通过BETWEEN ... AND ...实现
案例3:查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
通过比较运算符和or实现
通过in条件实现
案例4:姓孙的同学 及 孙某同学
-- % 匹配任意多个(包括0个)任意字符
-- _ 匹配严格的一个任意字符
案例5:总分在200以下的同学
--where条件中使用表达式
--别名不能用在where条件中
案例6:null的查询
null和null的比较,=和<=>的区别
2.3 简单排序
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
注意:没有ORDER BY子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
案例1:查询同学和数学成绩,按数学成绩升序显示。
案例2:同学和qq号,按qq号排序显示
注意:NULL视为比任何值都小,升序出现在最上面
案例3:查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示
案例4:查询同学和总分,由高到低
法一:直接使用表达式
法二:使用别名(因为排序是在表创建完成之后进行的所以可以使用别名)