Mysql之--------------------多表查询(内连接 左外连接 右外连接)常见的数据库函数

 2023-09-05 阅读 111 评论 0

摘要:一、多表查询 什么是多表查询呢? 比如说,一个老师肯定会有不止一个学生,一个学生也会有不止一个老师,这样就存在了一种多对多的关系。 多对多关系表的创建 CREATE DATABASE moreandmore; USE moreandmore; //先创建三张表 分别是 老师表 学生表 学

一、多表查询

  • 什么是多表查询呢?
比如说,一个老师肯定会有不止一个学生,一个学生也会有不止一个老师,这样就存在了一种多对多的关系。
  • 多对多关系表的创建
CREATE DATABASE moreandmore;
USE moreandmore;
//先创建三张表 分别是 老师表 学生表 学生老师关系表
CREATE TABLE teach(tid INT PRIMARY KEY ,NAME VARCHAR(50));
CREATE TABLE stu(sid INT PRIMARY KEY,NAME VARCHAR(50));
CREATE TABLE tea_stu_rel(tid INT,sid INT);
//给学生老师关系表中的tid 和 sid 添加外键
ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(tid) REFERENCES teach(tid);
ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(sid) REFERENCES stu(sid);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 内连接
select r.SubjectNo,StudentName,SubjectName,StudentResult
from student as s
inner join result as r
on r.StudentNo = r.StudentNo
inner join subject as su
on su.SubjectNo = r.SubjectNo
where SubjectName = '高等数学-1' and StudentResult < 80
order by StudentResult desc ;/*降序*/

在这里插入图片描述

  1. 左连接
//left join 左连接:匹配左边的表,哪怕右边没有对应结果,返回左边表的所有列
select s.StudentNo,StudentName,SubjectNo,StudentResult
from student as s
left join result as r
on s.StudentNo = r.StudentNo;

在这里插入图片描述

  1. 右连接
//right join 右连接:匹配右边的表,哪怕左边没有对应结果,返回右边表的所有列
select s.StudentNo,StudentName,SubjectNo,StudentResult
from student as s
right join result as r
on s.StudentNo = r.StudentNo;

在这里插入图片描述

二、常用的数据库函数

函数分类:字符串函数,数值函数,日期和时间函数,流程函数,其他函数

  1. 字符串函数
    concat(s1,s2,…,sn) 拼接字符串
SELECT CONCAT('aaa','bbb');

在这里插入图片描述
  所有字符串和null拼接,结果都为null

SELECT CONCAT('aaa','bbb',NULL);

在这里插入图片描述

SELECT INSERT('mysql123',6,3,'hello');//mysqlhello
SELECT LOWER('ASd');//asd
SELECT UPPER('asdA');//ASDA
SELECT LEFT('asdf',2);//as
SELECT RIGHT('gfds',2);//ds
//用字符串he向左填充,直到字符串的长度为10个
SELECT LPAD('hello',10,'he');//hehehhello
//用字符串he向右填充,直到字符串的长度为10个
SELECT RPAD('hello',10,'he');//helloheheh
SELECT LTRIM('   hellovfvfdvf   ');//去字符串左边空格
SELECT RTRIM('   hello   ');//去字符串右边空格
SELECT TRIM('   hello   ');//去掉字符串两端空格
SELECT REPEAT('hello',5);//字符串hello重复5次
SELECT REPLACE('hello','e','a');//hello字符串中的e替换成a
SELECT SUBSTRING('hello',2,3);//ell从第二个位置截取三个字符
  1. 数值函数
SELECT ABS(-1.0);//绝对值 1.0
SELECT CEIL(4.3);//向上取整 5
SELECT FLOOR(4.9);//向下取整 5 
SELECT MOD(2.43243,3);//取余 2.43243
SELECT RAND();//返回0-1的随机小数
  1. 日期时间函数
SELECT CURDATE();//2019-07-11
SELECT CURTIME();//19:10:00
SELECT NOW();//2019-07-11 19:10:00
SELECT UNIX_TIMESTAMP();//1562843465
SELECT FROM_UNIXTIME(1562843465);//2019-07-11 19:11:05
SELECT WEEK(NOW());//27
SELECT HOUR('19:10:00');//19
SELECT YEAR('2019-07-11');//2019
SELECT MINUTE('19:10:00');//10
SELECT DATE_ADD(NOW(),INTERVAL 31 DAY);//2019-08-11 19:19:26
select date_add(now(),interval 3 year);//2022-08-11 19:19:26
SELECT DATEDIFF(NOW(),'2018-07-11');//365
  1. 流程函数
SELECT IF(2>3,'true','false');//FALSE
//如果value1为null,则返回value2,否则 返回value1
select ifnull(value1,value2);
SELECT IFNULL(NULL,'nonull');//nonull
  1. 其他函数
SELECT DATABASE();//返回当前数据库的名字
SELECT VERSION();//返回当前数据库的版本5.7.19
SELECT USER();//root@localhost 返回当前的用户
SELECT PASSWORD('root');//81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/651.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息