MySQL笔记——表的基本查询

SQL查询中各个关键字的执行先后顺序 from > on> join > where > group by > with > having > select > distinct > order by > limit

表的增删改查

插入

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

INSERT [INTO] table_name     

    [(column [, column] ...)]     

    VALUES (value_list) [, (value_list)] ...    

value_list: value, [, value] ...

value_list数量必须和定义表的列数量及顺序一致

替换

REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');

主键或唯一键没有冲突直接插入,如果冲突则删除后重新插入

SELECT列

全列查询

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

  • 可能会影响到索引的使用

指定列查询

SELECT id, name FROM tablename

查询字段为表达式

SELECT id, name, shuxue + yuwen FROM tablename

查询数学成绩和语文成绩的总和,作为第三个参数输出

可以为查询结果指定别名

SELECT id, name, yuwen + shuxue + yingyu as 总分 FROM exam_result

查询结果去重-distinct

SELECT DISTINCT shuxue FROM exam_result

WHERE条件

结果排序

  • ASC为升序(默认排序方式)

  • DESC为降序

SELECT ... FROM table_name [WHERE ...]     

ORDER BY column [ASC|DESC], [...];

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

多字段排序,优先级随书写顺序

SELECT name, shuxue, yingyu, yuwen FROM exam_result     

ORDER BY shuxue DESC, yingyu, yuwen;

筛选分页结果

-- 从 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 s OFFSET n;

建议:对未知表进行查询时,好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死

Update

UPDATE table_name SET column = expr [, column = expr ...]

    [WHERE ...] [ORDER BY ...] [LIMIT ...]

eg:将总成绩倒数前三的三位同学的数学成绩加上30分

UPDATE exam_result SET shuxue = shuxue + 30    

ORDER BY yuwen + shuxue + yingyu LIMIT 3;

Delete

DELETE FROM  table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

删除整张表

DELETE FROM table_name;

截断表

TRUNCATE [TABLE] table_name
  • 只能对整表进行使用,不能像DELETE一样针对部分数据进行操作

  • 实际上MySQL不对数据进行操作,所以比DELETE更快

  • 会重置AUTO_INCREMENT

插入查询结果

INSERT INTO table_name [(column [, column ...])] SELECT ...

//去重插入 然后重命名表实现去重操作

INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;

RENAME TABLE duplicate_table TO old_duplicate_table,

     no_duplicate_table TO duplicate_table;

聚合函数

having和where的区别

  • where是一个约束声明,在查询数据库的结果返回之前对查询结果进行约束,即在结果返回之前起作用,且where后面不能使用聚合函数(因为where执行在聚合函数之前)

  • having是一个过滤声明,在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,且having之后可以使用聚合函数

group by

在select中使用group by子句可以对指定列进行分组操作

select column1, column2, .. from table group by column

猜你喜欢

转载自blog.csdn.net/ladykiller21/article/details/89961864
今日推荐