第二章 数据库基本操作----增删改查

发布于:2022-07-18 ⋅ 阅读:(216) ⋅ 点赞:(0)

?增

添加单条信息:​​​​​​​

INSERT INTO 表名(列名1,列名2,.....) VALUES (值1,值2,...);

添加时可指定添加字段,不指定时默认添加全部字段,添加字段数据要与 values 一致 

添加多条信息:

INSERT INTO 表名(列名1,列名2,.....) VALUES
(值1,值2,...),
(值1,值2,...),
(值1,值2,...);

?删

delete : 删除表中的行

DELETE FROM 表名 WHERE 条件;

当删除语句不带 where 条件时默认删除表中所有数据(慎用),当表中有自增字段时,删除末尾字段重新添加自增字段时并不会在上一个字段基础上 +1 而是在删除字段基础上 +1,自增列不会被置为初始值。 

drop : 删除表,删除数据库,删除内容和定义,释放空间

#删除表
DROP TABLE 表名;
#删除数据库
DROP DATABASE 数据库名;

当表中存在外键约束且为主表时,无法删除,删除表或数据库为永久删除且不可逆(慎重)。 

truncate​​​​​​​删除内容,保留表的定义,保留表结构

TRUNCATE TABLE 表名;

当表中存在外键约束且为主表时,无法清空表,自增列值置为初始值。

删除表中全部数据时 delete 与 truncate比较:

1、truncate table 在功能上与不带 WHERE 子句的 delete语句相同:二者均删除表中的全部行。

2、truncate 比 delete速度快,且使用的系统和事务日志资源少。

3、truncate 操作后的表比Delete操作后的表要快得多。

?改

UPDATE 表名 SET 列名 = 新值 WHERE 条件;

新值可为表达式,当没有 where条件时,则修改全表内容(慎重) 

?查(重点)

#查询列,可多条,逗号间隔
select 列名1,列名2
#从指定表查询
from 表名
#查询条件,附加
where 条件
#分组查询
group by 列名
#分组条件过滤
having 条件表达式
#查询结果排序
order by 列名
#查询结果分页
limit 起始位置,每页数据数量 

①起别名

意义:增强查询结果可读性

#起别名方式一
SELECT 列名1  别名1,列名2 别名2 FROM 表名3 别名3;

#起别名方式二
SELECT 列名1 AS 别名1,列名2 AS 别名2 FROM 表名3 AS 别名3;

②查询时列可以进行运算

SELECT 列名1*10,列名2+10 FROM 表名;

③设置常量列并设置列名

SELECT name AS '姓名','郑州一中' AS '学校';

④去重查询

SELECT DISTINCT 列名 FROM 表名;

⑤条件查询

#条件运算符:=、>、<、>=、<=
#算术运算符:+、—、*、/、%
#逻辑运算符:AND(&&)、OR(||)、NOT(!)

⑥范围查询

适用于:范围内值在一段连续范围内(等价于AND)

#范围查询方式一 字段取值在集合(值1,值2)中
SELECT * FROM 表名
WHERE 字段名 BETWEEN 值1 AND 值2

适用于:范围内值不连续(等价于OR)

#范围查询方式二
SELECT * FROM 表名
WHERE 字段名 IN (值1,值2,.....)

⑦模糊查询

正则表达式(REGEXP):

SELECT * FROM 表名 WHERE REGEXP '正则表达式';

like:

#匹配规则
# %:任意数据
# _:单个数据
# 值a%:以值a开头
# %值a:以值a结尾
# %值a%:中间有值a的
# 值a_:以值a开头的两个数值
# _值a:以值a结尾的两个数值

SELECT * FROM 表名 WHERE 字段名 LIKE '匹配规则'

⑧查询结果排序

#排序条件
#DESC:指定字段降序
#ASC:指定字段升序,默认

#单字段排序
SELECT * FROM 表名 ORDER BY 字段名(任意数据类型) 排序条件;

#多字段排序:先根据靠前字段排序,当靠前字段相同时,再根据后面字段排序
SELECT * FROM 表名 ORDER BY 字段1 排序条件,字段2 排序条件;

⑨分页查询(结合排序使用)

意义:提升性能,减小内存压力,增强查询结果可观性

#起始位置省略默认为从 0 开始

SELECT * FROM 表名 
ORDER BY 排序规则
LIMIT 起始位置,每页数据数量

⑩函数

#汇总函数(聚合函数):针对多条数据计算出一个结果
# count(*/列名): 统计记录数,统计非空值,统计唯一值
# max(列名): 查询某列中的最大值
# min(列名): 查询某列中的最小值
# sum(列名): 针对列所有值求和
# avg(列名): 针对列所有值求平均
# 聚合函数可以单独使用,也可以与分组一起使用(重点)

①①分组查询​​​​​​​

将某一列中相同数据当成一组

GROUP BY:

SELECT 分组字段名 FROM 表名 GROUP BY 分组字段名 

#举例:查询某年级各班人数

SELECT class AS '班级',COUNT(*) AS '人数' 
FROM student 
GROUP BY class;

HAVING :

SELECT 分组字段名 FROM 表名 GROUP BY 分组字段名 HAVING 过滤条件

#举例:查询某年级各班男生人数且班级号以3结尾的。
SELECT class ,COUNT(*),ssex 
FROM student 
WHERE ssex='男' 
GROUP BY class 
HAVING class LIKE '%3';

①②行转列: 

case when then else end 语法(分支 switch case)

 转为列:

SELECT sname AS '姓名',
CASE WHEN course='语文' THEN score END AS '语文',
CASE WHEN course='数学' THEN score END AS '数学',
CASE WHEN course='英语' THEN score END AS '英语' 
FROM student ;

汇总: 

SELECT sname AS '姓名',
MAX(CASE WHEN course='语文' THEN score END) AS '语文',
MAX(CASE WHEN course='数学' THEN score END) AS '数学',
MAX(CASE WHEN course='英语' THEN score END) AS '英语' 
FROM student 
GROUP BY sname;

 

 ①③多表查询:

内连接等值查询:匹配两表中相匹配的信息。

WHERE:

SELECT * FROM 表一 WHERE 表一.值=表二.值;

INNER(可省略) JOIN  ON:

SELECT * FROM 表一 INNER JOIN 表二 ON 表一.值=表二.值。

外连接:

左外连接(left  [outer]  join):返回左表全部内容,右表中不匹配的值用null填充

#返回左表全部内容
SELECT * FROM 左表 LEFT JOIN 右表 ON 联系条件;

右外连接(right [outer] join):返回右表全部内容,左表中不匹配的值用null填充

#返回右表全部内容
SELECT * FROM 左表 RIGHT JOIN 右表 ON 联系条件;

①④交叉连接:返回两表信息笛卡尔积 

select * from 左表 cross join 右表;


网站公告

今日签到

点亮在社区的每一天
去签到