mysql数据库表之间是怎么关联的?请详解

哈,你这个问题涉及到数据库里的连接操作,挺有意思的。
先简单解释一下你说的这些概念。

上周有个客人问我,说他们公司要用数据库连接来查数据,结果查出来乱七八糟的。
我给他举个例子,就像你说的这个情况。

我们假设有三个表:学生表(student),课程表(subject),和成绩表(grade)。
学生表里有学号、姓名和性别,课程表里有课程编号和课程名,成绩表里有成绩编号、学号、课程号和成绩。

成绩表的学号和学生表的学号对应,这是学生表的主键,但同时也是成绩表的外键。
同理,成绩表里的课程号是课程表的外键。

那么,我们用SQL语句来连接这三个表,看看成绩和学生的信息:
sql SELECT FROM student AS s INNER JOIN subject AS su ON s.stu_id = s.id INNER JOIN grade AS g ON g.sub_id = su.id;
这里我们用了INNER JOIN,它只会返回两个表都有匹配的行。
如果我们想返回所有学生的信息,即使他们没有成绩,我们就得用LEFT JOIN:
sql SELECT FROM student AS s LEFT JOIN grade AS g ON s.id = g.stu_id;
这里的LEFT JOIN会返回所有学生的信息,即使他们没有成绩,成绩表里的对应字段会是空值。

对了,你提到的右连接(RIGHT JOIN)和全连接(FULL JOIN)也是类似的,只是它们分别以右表和两个表为基准。

我之前就遇到过这样的问题,一个项目里需要用全连接来处理数据,结果数据库处理起来特别慢,因为全连接要考虑所有可能的组合。
所以,使用连接操作的时候,得注意选择合适的连接类型,避免不必要的性能问题。

反正你看着办,如果需要更详细的解释,或者有其他问题,随时问我。
我还在想这个问题呢。

求解决sql题目

哈,这题啊,我看看。
MySQL,2 02 2 年,我还在用这个。

第一个,这个SELECT分类名FROM商品表1 WHERECOUNT(数量)>1 0;这个,是想找数量超过1 0的分类。
但是,商品表1 ,这个表名有点奇怪,是不是商品表?数量这个字段,是商品表里的吗?有时候字段名不一样,得看具体数据库设计。

第二个,这个DELIMITER$CREATEPROCEDUREshowInfo(INcourseVARCHAR(5 0))BEGINSELECT学生号,姓名FROM学生表WHERE学生号=(SELECT学生号FROM选课表WHERE课程号=(SELECT课程号FROM课程表WHERE课程名=course))$ENDDELIMITER;这个,是创建一个存储过程,叫showInfo,输入一个课程名,然后找选这个课的学生号和姓名。
嵌套查询,挺深。
2 02 2 年,这种写法还常见。
但是,学生表、选课表、课程表,字段名都得对得上。
我当时写这个的时候,也懵过,一个字段错了,全错。

第三个,SELECT姓名,COUNT(选课表.课程号)ASnumFROM学生表WHERE学生号=(SELECT学生号FROM选课表WHERECOUNT(课程号)>5 );这个,是想找选课超过5 门的学生姓名。
但是,选课表.课程号,这个写法有点奇怪,一般直接写课程号。
COUNT(课程号)>5 ,是统计一个学生选了多少门课?这个写法有点歧义。
可能我偏激,觉得应该写COUNT(DISTINCT课程号)>5 ,统计不重复的课程号。

第四个,SELECT课程名FROM课程表WHERE课程号=(SELECT课程号FROM选课表WHERE学生号=(SELECT学生号FROM学生表ORDERBY学生号ASCLIMIT2 ,4 ));这个,是想找第3 到第5 个学生的选的课程名。
但是ORDERBY学生号ASCLIMIT2 ,4 ,这个ASCLIMIT,是不是写错了?一般是LIMIT2 ,4 而且,学生表里学生号是连续的?如果学生号有重复呢?这个查询可能出错。

第五个,SELECT分类名FROM商品表1 WHERECOUNT(商品代号)>1 ;这个,是想找商品代号超过1 个的分类。
但是,商品表1 ,是不是商品表?商品代号这个字段,是商品表里的吗?有时候字段名不一样。
而且,COUNT(商品代号)>1 ,是统计一个分类下有多少个商品代号?这个写法有点奇怪,一般写COUNT()>1
第六个,SELECT商品代号FROM商品表1 WHERE单价>AVG(单价);这个,是想找单价高于平均单价的商品代号。
这个没问题。
但是,商品表1 ,是不是商品表?单价这个字段,是商品表里的吗?有时候字段名不一样。

第七个,SELECT分类名,MAX(单价)ASmax_priceFROM商品表1 ;这个,是想找每个分类的最高单价。
这个没问题。
但是,商品表1 ,是不是商品表?单价这个字段,是商品表里的吗?有时候字段名不一样。

总结一下,这些查询,都是基于假设的表名和字段名。
实际用的时候,得看具体数据库设计。
2 02 2 年,MySQL还在用,但是有些写法可能需要调整。

从零学会SQL:入门

SQL是数据库操作语言。
直接上手学。

安装MySQL。
命令行执行SELECT VERSION(); 看版本号。

用Navicat连数据库。
填localhost。
端口3 3 06 填用户名密码。
点测试连接。

建表。
写SQL代码。
用CREATE TABLE。

插入数据。
用INSERT INTO。

查数据。
用SELECT。

连接查询。
用JOIN。

分组查询。
用GROUP BY。

排序查询。
用ORDER BY。

就这么简单。