【SQL】(高级篇):函数、多表操作、操作关联表、连接查询以及子查询

函数在SQL数据库中使用十分广泛,下面分别介绍了一些比较常用的函数用法,具体请看下表。

函数名称 作用
ABS(x) 返会的绝对值
SQRT(x) 返会x的非负2次方根
MOD(x,y) 返会x被y除后的余数
CEILING(x) 返会不小于x的最小整数
FLOOR(x) 返会不大于x的最大整数
ROUND(x,y) 对x进行四舍五入,小数点后保留y位
TRUNCATE(x,y) 舍去x中的小数点y位后面的数
SIGN(x) 返会x的符号(正负1、0)

函数名称 作用
LENGTH(str) 返会字符串的长度
CONCAT(S1,...,S n 返会一个或者多个字符串连接产生的新字符串
trim(str) 删除字符串两则的空格
replace(str,S1,S 2 使用字符串S2替代字符串str中的所有字符串S1
substring(str,n,len) 返会字符串str的子串,起始位置为n,长度为len
reverse(str) 返会字符串反转后的结果
lacate(S1,str) 返会字符串S1在字符串str中的起始位置

比较懒...就不做表格了,直接上图


函数功能(续)

举几个实际中使用函数的语句

  • (1)
SELECT CONCAT( id,'_', name,'_', grade,'_', gender) 
FROM student;
  • (2)
SELECT if(total_price % 2 = 1,total_price, 0)
 FROM tb_order;
  • (3)
SELECT CONCAT( id,'_', name,'_', grade,'_', gender) 
FROM student;

关于表和字段的别名
  • 为表取别名
SELECT * FROM 表 名 [AS] 别名;
  • 为字段取别名
SELECT 字段 名 [AS] 别名[, 字段 名 [AS] 别名,…] 
FROM 表 名;

多表操作(SQL中的重点操作)

(1) 外键
【概述】:外 键 是指 引用 另一个 表中 的 一列 或 多列, 被 引 用的 列 应该 具 有主 键 约束 或 唯一 性 约束。

【注意】:引入外键后,外键列的值只能是参照列的值,并且参照列中的值不能被删除。

  • 为表添加外键约束
alter table 表 名 add constraint FK_ ID foreign 
key( 外 键 字段 名) REFERENCES 外表 表 名( 主 键 字段 名);

【补充】show create table 表名:可执行此操作来查看约束效果。

【例】

 create table 表名(
    字段描述,
   constraint fk_name foreign
key (外键字段名) references 外键表表名(主键字段)
)
constraint fk_name foreign key (cat_id)
 references tb_category(id)

【注意点】:

  • 1、建立外键的表必须是InnoDB型

  • 2、定义外键名时不能加引号

添加外键约束参数

 alter table 表 名 add constraint FK_ ID foreign key(外键字段名) 
REFERENCES 外表表名( 主键字段名); 
[ON DELETE {CASCADE | SET NULL | NO ACTION || RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

  • 关于几个外键约束参数的功能汇总表
参数名称(小写) 作用描述
cascade 删除包含与已删除键值有参照关系的所有记录
set null 修改包含与已删除键值有参照关系的所有记录,并使用NULL值替换(不用于已标记的Not NULL字段)
no action 不进行任何操作
restrict 拒绝主表删除或者修改外检关联列。(在不定义ON DALETE 和ON UPDATE 的子句时,这是默认设置,也是比较安全的设置)
  • 删除外键约束
alter table 表名 drop foreign key 外键名;

关于 - 操作关联表

主要分为三种情况:

  • 1、多对一(员工与部门)外键;

  • 2、多对多(课程与学生)关系表;

  • 3、一对一(证件号码与个体)一般情况;


连接查询

主要分为交叉连接、内连接以及外连接三种情况。

  • 交叉连接
    【笛卡儿积】:两个表行数的乘积。
    交叉连接返会的就是笛卡尔积。
 SELECT * FROM department(部门) CROSS JOIN employee(员工);
  • 内连接
    【解释】:在内连接查询 中, 只有满足 条件的记录才能出现在查询结果中。
SELECT 查询 字段 FROM 表 1 
[INNER] JOIN 表 2 ON 表 1\. 关系字段 = 表 2\. 关系字段
  • 外连接
    【解释】: 返回查询结果中不仅包含符合条件的数据,而且还包括左表( 左连接或左外连接)、右表(右连接或右外连接)或两个表(全外连接)中的所有数据。
SELECT 所 查字 段 FROM 表 1 LEFT| RIGHT [OUTER] JOIN 表 2 
ON 表 1\. 关系 字段= 表 2\. 关系 字段 WHERE 条件

关于左连接与右连接的区别

  • LEFT JOIN(左连接):返会包括左表中的所有记录和右表中符合连接的条件的记录;
  • RIGHT JOIN(右连接):返会包括右表中的所有记录和左表中符合连接的条件的记录;(没有数据的部分,使用NULL来补充

子查询

【解释】:指 一个查询语句嵌套在另 一个查询语句内部的查询。

  • 带 IN 关键字的子查询
SELECT * FROM department WHERE did 
 IN( SELECT did FROM employee WHERE age= 20);
  • 带 ANY 关键字的子查询
SELECT * FROM department 
WHERE did > any( select did from employee);
  • 带 ALL 关键字的子查询
SELECT * FROM department 
WHERE did > all( select did from employee);
  • 带 比较运算符 的子查询
SELECT * FROM department 
WHERE did=( select did from employee where name=' GGG');

你可能感兴趣的:(【SQL】(高级篇):函数、多表操作、操作关联表、连接查询以及子查询)