数据库常用SQL操作篇

  • 2019 年 11 月 6 日
  • 筆記

数据查询

查询数据库表的内容(所有行和列)

SELECT * FROM <表名>;  
  • 示例

image

计算

SELECT <数学多项式>;  
  • 示例

image

条件查询

SELECT * FROM <表名> WHERE <条件表达式>;  
  • 示例

image

  • 注意:对于条件表达式,可以用逻辑运算符ANDORNOT)将多个条件同时进行匹配;

[图片上传失败…(image-d71d71-1571369518934)]

image

image

  • 对于三个及以上的条件,可以用小括号()进行条件运算;

image

  • 常用条件表达式

条件

表达式举例1

表达式举例2

说明

使用=判断相等

score = 90

name = ‘cunyu’

字符串需要用单引号括起来

使用>判断大于

score > 90

name > ‘cunyu’

字符串比较根据ASCII码,中文字符比较根据数据库设置

使用>=判断大于或相等

score >= 90

name >= ‘cunyu’

使用<判断小于

score < 90

name <= ‘cunyu’

使用<=判断小于或相等

score <= 90

name <= ‘cunyu’

使用<>判断不相等

score <> 90

name <> ‘cunyu’

使用LIKE判断相似

name LIKE ‘ab%’

name LIKE ‘%bc%’

%表示任意字符,例如’ab%’将匹配’ab’,’abc’,’abcd’

投影查询

  • 基本的投影查询
SELECT 列1,列2,列3 FROM ...;  

image

  • 对列名重命名的投影查询
SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM ...;  

image

  • 注意:别名是存在于内存中的,而WHERE仅适用于硬盘,但是HAVING既可以针对硬盘,也可以针对内存条件进行查询;

分页查询

  • 经排序后获取结果中第M条开始后N条记录;
-- MySQL中两句等效  SELECT <列名> FROM <表名> ORDER BY <列名> LIMIT <M> OFFSET <N>;  SELECT <列名> FROM <表名> ORDER BY <列名> LIMIT <N> , <M>;  

image

聚合查询

  • 常用聚合函数

函数

说明

SUM

计算某一列的合计值,该列必须为数值类型

AVG

计算某一列的平均值,该列必须为数值类型

MAX

计算某一列的最大值

MIN

计算某一列的最小值

COUNT

统计某一列的个数

image

image

多表查询(笛卡尔查询)

SELECT * FROM <表1> <表2>  

image

  • 注意:多表查询时,使用表名.列名的方式,以防止结果集列名重复问题;

连接查询

  • 定义:另一种类型的多表查询,它对多个表进行JOIN运算,即先确定一个主表作为结果集,然后将其他表的行有选择地“连接”到主表结果集中;
  • 内连接,以下是查询的写法:
SELECT ... FROM <表1> INNER JOIN <表2> ON <条件...>;  
  1. 先确定主表,继续使用FROM <表1>的语法;
  2. 再确定需要连接的表,使用INNER JOIN <表2>的语法;
  3. 然后确定连接条件,使用ON <条件..…>,这里的条件是s.class_id = c.id,表示students表的class_id列与classes表的id列相同的行需要连接;
  4. 可选:加上WHERE子句、ORDER BY等子句;

image

  • 外连接
    • RIGHT OUTER JOIN:返回右表均存在的行;
    • LEFT OUTER JOIN:返回左表均存在的行;
    • FULL OUTER JOIN:将两张表中所有记录均选出来,且自动将对方不存在的列填充为NULL

排序

  • 正序(默认规则下为正序,以下两条语句功能相同)
SELECT <列名> FROM <表名> ORDER BY <列名> ASC;  SELECT <列名> FROM <表名> ORDER BY <列名>;  

image

image

  • 逆序
SELECT <列名> FROM <表名> ORDER BY <列名> DESC;  

image


数据修改

INSERT

INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);  

image

image

UPDATE

UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;  

image

image

  • 注意:不带WHEREUPDATE将会更新整个表的数据;

DELETE

DELETE FROM <表名> WHERE ...;  

image

  • 注意:不带WHEREDELETE将会删除整个表的数据;