环境搭建 本身电脑已有 此章省略
初识数据库
练习题
CREATE TABLE Addressbook (
regist_no INT NOT NULL,
NAME VARCHAR (128) NOT NULL,
address VARCHAR (256) NOT NULL,
tel_no CHAR (10),
mail_address CHAR (20),
PRIMARY KEY (regist_no)
);
ALTER TABLE Addressbook ADD COLUMN postal_code CHAR (8) NOT NULL;
DROP TABLE Addressbook;
CREATE TABLE Addressbook
(regist_no INTEGER NOT NULL,
na_me VARCHAR(128) NOT NULL,
address VARCHAR(256) NOT NULL,
tel_no CHAR(10),
mail_address CHAR(20),
postal_code CHAR(8) NOT NULL,
PRIMARY KEY (regist_no));
基础查询与排序
2.1 SELECT语句基础
2.1.1 从表中选取数据
SELECT语句
2.1.2 从表中选取符合条件的数据
WHERE语句
2.1.3 相关法则
星号()代表全部列的意思。
SQL中可以随意使用换行符,不影响语句执行(但不可插入空行)。
设定汉语别名时需要使用双引号(")括起来。
在SELECT语句中使用DISTINCT可以删除重复行。
注释是SQL语句中用来标识说明或者注意事项的部分。分为1行注释"-- “和多行注释两种”/ */"。
2.2算术运算符和比较运算符
2.2.1 算术运算符
加法 +
减法 -
乘法 *
除法 /
2.2.2 比较运算符
= 和~相等
<> 和~不相等
= 大于等于~
大于~
<= 小于等于~
< 小于~
2.2.3 常用法则
SELECT子句中可以使用常数或者表达式。
使用比较运算符时一定要注意不等号和等号的位置。
字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。
希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。
2.3 逻辑运算符
2.3.1 NOT运算符
想要表示“不是……”时,除了前文的<>运算符外,还存在另外一个表示否定、使用范围更广的运算符:NOT。
2.3.2 AND运算符和OR运算符
当希望同时使用多个查询条件时,可以使用AND或者OR运算符。
AND 相当于“并且”,类似数学中的取交集;
OR 相当于“或者”,类似数学中的取并集。
2.3.3 真值表
2.4 对表进行聚合查询
2.4.1 聚合函数
SQL中用于汇总的函数叫做聚合函数。以下五个是最常用的聚合函数:
COUNT:计算表中的记录数(行数)
SUM:计算表中数值列中数据的合计值
AVG:计算表中数值列中数据的平均值
MAX:求出表中任意列中数据的最大值
MIN:求出表中任意列中数据的最小值
2.4.2 常用法则
COUNT函数的结果根据参数的不同而不同。COUNT()会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。
聚合函数会将NULL排除在外。但COUNT()例外,并不会排除NULL。
MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。
想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT。
在聚合函数的参数中使用DISTINCT,可以删除重复数据。
2.5 对表进行分组
2.5.1 GROUP BY语句
之前使用聚合函数都是会整个表的数据进行处理,当你想将进行分组汇总时(即:将现有的数据按照某列来汇总统计),GROUP BY可以帮助你
2.5.2 常见错误
1.在聚合函数的SELECT子句中写了聚合健以外的列 使用COUNT等聚合函数时,SELECT子句中如果出现列名,只能是GROUP BY子句中指定的列名(也就是聚合键)。
2.在GROUP BY子句中使用列的别名 SELECT子句中可以通过AS来指定别名,但在GROUP BY中不能使用别名。因为在DBMS中 ,SELECT子句在GROUP BY子句后执行。
3.在WHERE中使用聚合函数 原因是聚合函数的使用前提是结果集已经确定,而WHERE还处于确定结果集的过程中,所以相互矛盾会引发错误。 如果想指定条件,可以在SELECT,HAVING(下面马上会讲)以及ORDER BY子句中使用聚合函数。
2.6 为聚合结果指定条件
2.6.1 用HAVING得到特定分组
2.6.2 HAVING特点
HAVING子句用于对分组进行过滤,可以使用数字、聚合函数和GROUP BY中指定的列名(聚合键)。
2.7 对查询结果进行排序
2.7.1 ORDER BY
SQL中的执行结果是随机排列的,当需要按照特定顺序排序时,可已使用ORDER BY子句。
2.7.2 ORDER BY中列名可使用别名
3.1 什么是视图
“视图不是表,视图是虚表,视图依赖于表”
image.png
#创建视图
CREATE VIEW <视图名称>(<列名1>,<列名2>,…) AS
视图名在数据库中需要是唯一的,不能与其他视图和表重名。
一般的DBMS中定义视图时不能使用** ORDER BY**语句。这是因为视图和表一样,数据行都是没有顺序的。
因为视图是一个虚拟表,所以对视图的操作就是对底层基础表的操作,所以在修改时只有满足底层基本表的定义才能成功修改。
对于一个视图来说,如果包含以下结构的任意一种都是不可以被更新的:
聚合函数 SUM()、MIN()、MAX()、COUNT() 等。
DISTINCT 关键字。
GROUP BY 子句。
HAVING 子句。
UNION 或 UNION ALL 运算符。
FROM 子句中包含多个表。
3.2 什么是子查询
子查询指一个查询语句嵌套在另一个查询语句内部的查询。在 SELECT 子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表
子查询不会像视图那样保存在存储介质中, 而是在 SELECT 语句执行之后就消失了。
3.3 函数
数值运算
ABS( 数值 ) – 绝对值
MOD( 被除数,除数 ) – 求余数
ROUND( 对象数值,保留小数的位数 ) – 四舍五入
字符串运算
CONCAT(str1, str2, str3)
LENGTH( 字符串 )
LOWER – 小写转换
REPLACE( 对象字符串,替换前的字符串,替换后的字符串 )
SUBSTRING (对象字符串 FROM 截取的起始位置 FOR 截取的字符数)
SUBSTRING_INDEX (原始字符串, 分隔符,n)
日期函数
CURRENT_DATE – 获取当前日期
CURRENT_TIME – 当前时间
CURRENT_TIMESTAMP – 当前日期和时间
EXTRACT(日期元素 FROM 日期)
转换函数
CAST(转换前的值 AS 想要转换的数据类型)
COALESCE(数据1,数据2,数据3……)将NULL转换为其他值
谓词
LIKE – 用于字符串的部分一致查询
BETWEEN– 用于范围查询 闭区间!
IS NULL、IS NOT NULL
IN– OR的简便用法
EXISTS “判断是否存在满足某种条件的记录”
多个查询条件取并集时可以选择使用or语句
Task04_集合运算
一、方式一
语法:
insert into 表名(字段名,…) values(值,…);
特点:
1、要求值的类型和字段的类型要一致或兼容
2、字段的个数和顺序不一定与原始表中的字段个数和顺序一致
但必须保证值和字段一一对应
3、假如表中有可以为null的字段,注意可以通过以下两种方式插入null值
①字段和值都省略
②字段写上,值使用null
4、字段和值的个数必须一致
5、字段名可以省略,默认所有列
二、方式二
语法:
insert into 表名 set 字段=值,字段=值,…;
两种方式 的区别:
1.方式一支持一次插入多行,语法如下:
insert into 表名【(字段名,…)】 values(值,…),(值,…),…;
2.方式一支持子查询,语法如下:
insert into 表名
查询语句;
一、修改单表的记录 ★
语法:update 表名 set 字段=值,字段=值 【where 筛选条件】;
二、修改多表的记录【补充】
语法:
update 表1 别名
left|right|inner join 表2 别名
on 连接条件
set 字段=值,字段=值
【where 筛选条件】;
方式一:使用delete
一、删除单表的记录★
语法:delete from 表名 【where 筛选条件】【limit 条目数】
二、级联删除[补充]
语法:
delete 别名1,别名2 from 表1 别名
inner|left|right join 表2 别名
on 连接条件
【where 筛选条件】
方式二:使用truncate
语法:truncate table 表名
两种方式的区别【面试题】★
1.truncate删除后,如果再插入,标识列从1开始
delete删除后,如果再插入,标识列从断点开始
2.delete可以添加筛选条件
truncate不可以添加筛选条件
3.truncate效率较高
4.truncate没有返回值
delete可以返回受影响的行数
5.truncate不可以回滚
delete可以回滚