mysql中SQL语句多表管理学习总结教程

1.外键约束

一个表中的非主键字段,如果在另外一张表中是主键,那么这个字段我们叫它做外键。

例如,现在有两个表:

学生表 - 学号,姓名,性别,所在班级号

班级表 - 班级号,班级人数

在学生表中,学号是主键;在班级表中,班级号是主键,而学生表中‘所在班级号’是非主键。所以,所在班级号对学生表来说是一个外键。

语句:CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid)

外键的名字 副表属性 绑定 主表属性

先创建主表:

CREATE TABLE class(
cid INT PRIMARY KEY,
ccount INT
);

然后创建副表来加入外键:

CREATE TABLE student(
sid INT PRIMARY KEY,
sname VARCHAR(20),
sex VARCHAR(4),
classid INT,
CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid)
);

外键的作用:

往副表插入数据,数据中外键的值在主表必须存在。

删除主表的主键某个数据之前,先要把副表中依赖那个数据的外键值改变,才能顺利删除。

2.级联操作

如果想要在主表把主键的值改变,然后副表外键的值跟着改变,那么就要需要级联操作。

2.1级联更新

CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid) ON UPDATE CASCADE -- 级联更新(更新主表数据,副表会跟着改变)

2.2级联删除

CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid) ON DELETE CASCADE -- 级联删除(删除主表数据,副表会跟着删除)

3.多表查询

3.1 交叉查询

-- 2.1 交叉查询(产生笛卡尔积: 表1的总记录 * 表2的总记录) (不希望出现)

SELECT sid,cid FROM student,class;

3.2 内连接

-- 2.2 内连接查询(使用最频繁)

-- 特点: 要在满足表条件的前提的数据才显示出来(不包括null值)

-- 多表查询的思路: 1) 确定有哪些表 2)确定查询出哪些字段 3)确定表和表之间的关系(条件数据: n-1)

-- 需求: 查询1班学生的姓名和1班的人数

SELECT s.sname,c.ccount -- 哪些字段

FROM student s,class c -- 哪些表

WHERE s.classid=c.cid; -- 表的条件

SELECT s.sname,c.ccount

FROM student s

INNER JOIN class c -- inner join : 内连接查询

ON s.classid=c.cid;

3.3 左外连接

-- 2.3 左外连接

-- 需求: 查询哪个班有哪些学生

-- 左外连接查询: 用左边的表数据去匹配右边的表数据,右边表数据如果匹配成功,则显示记录,如果匹配不成功,则显示null

SELECT s.sname,c.cid

FROM s.sname

LEFT OUTER JOIN class c

ON s.classid=c.cid;

3.4 右外连接

-- 2.4 右外连接: 和左外连接相反

-- 右外连接查询: 用右边的表数据去匹配左边的表数据,左边表数据如果匹配成功,则显示记录,如果匹配不成功,则显示null

SELECT s.sname,c.cid

FROM class c

RIGHT OUTER JOIN s.sname

ON s.classid=c.cid;

3.5 自连接

-- 2.5 自连接(当前表连接当前表)

自连接就是把同一张表虚拟出两份一模一样的表,然后起一个别名,然后连接两张表来查询。

SELECT e.ename,b.ename

FROM employee e -- 员工表

LEFT OUTER JOIN employee b -- 上司表

ON e.boosId=b.eid;

学习之所以会想睡觉,是因为那是梦开始的地方。

时间: 2024-10-22 13:04:23

mysql中SQL语句多表管理学习总结教程的相关文章

细数MySQL中SQL语句的分类_Mysql

1:数据定义语言(DDL)   用于创建.修改.和删除数据库内的数据结构,如:1:创建和删除数据库(CREATE DATABASE || DROP  DATABASE):2:创建.修改.重命名.删除表(CREATE  TABLE || ALTER TABLE|| RENAME TABLE||DROP  TABLE):3:创建和删除索引(CREATEINDEX  || DROP INDEX)  2:数据查询语言(DQL)  从数据库中的一个或多个表中查询数据(SELECT)  3:数据操作语言(D

Access中如何用 Jet SQL 语句删除表关系?

access|语句 Access中如何用 Jet SQL 语句删除表关系?   如何用 jet sql 的 ddl 语句建立表和关系?微软的 Access 中包含 Data Definition Language (DDL) 来建立删除表以及关系,当然了,这也可以用 DAO 来解决. 以下就是示例:用 DDL 的 Create Table 建立一个表 Table1 ,主键是自动编号字段,另一个字段是长度是 10 的文本字段.CREATE TABLE Table1 (Id COUNTER CONS

sql语句多表查询中聚合函数的使用问题

问题描述 sql语句多表查询中聚合函数的使用问题 表A,B,C. A表中有title,code, b表中为code,media_code;(均不为主键,code会有重复) c表中有media_code,shrink (media_code为主键) 我的目的为取出A表中的title和c表中的shrink 联立:A.code→B.code, B.media_code→C.media_code 代码如下 select title,shrink from tableA,tableC where medi

信息-mysql中有关两张表关联的查询语句

问题描述 mysql中有关两张表关联的查询语句 宝宝信息表中存的是已经接种过疫苗的信息,is_vaccined为1,另外一张表中,存的是所有疫苗的详细信息.现在,我想通过获取宝宝id来查询该宝宝所有的疫苗的状态(包括已经接种的和未接种的),改怎么写查询语句?? 解决方案 select t1.*, t2.* from t_baby_info t1 left outer join t_vaccine t2 on t1.vaccine_id= t2.vaccine_id 解决方案二: @caozhy

SQL语句实现表中字段的组合累加排序

有表如下: id in out index 1 10 12 2 2 9 8 2 3 12 8 3 1 9 9 3 1 12 0 3 2 5 18 2 2 20 0 2 这三个字段均为integer类型 现要求如下: 1.按index=2查找 2.将所有id相同的和在一起,数据要加在一起 3.最后呈现的数据要按in+out进行排序,按由大到小 为满足以上的要求:设计的SQL语句如下(假设表名为tab) 复制代码 代码如下:select id,sum(in) as in,sum(out) as ou

MySQL中select语句介绍及使用示例

数据表都已经创建起来了,我们就可以用自己喜欢的方式对数据表里面的信息进行检索和显示了,下面为大家讲解下MySQL中select语句的应用,感兴趣的碰可以学习下   数据表都已经创建起来了,假设我们已经插入了许多的数据,我们就可以用自己喜欢的方式对数据表里面的信息进行检索和显示了,比如说:可以象下面这样把整个数据表内的内容都显示出来 select * from president; 也可以只选取某一个数据行里的某一个数据列 select birth from president where las

MySQL数据库SQL语句的C++ ODBC接口类测试结果 (转载)

c++|mysql|odbc|数据|数据库|语句 发信人: engineer (剑胆琴心~还是得走,sigh...), 信区: Linux 标  题: MySQL数据库SQL语句的C++ ODBC接口类测试结果 (转载) 发信站: BBS 水木清华站 (Mon Aug  9 18:03:47 1999)   [ 以下文字转载自 Database 讨论区 ] [ 原文由 engineer 所发表 ]         MySql数据库SQL语句的C++ ODBC接口类测试结果            

MySQL中select语句使用order按行排序_Mysql

本文介绍MySQL数据库中执行select查询语句,并对查询的结果使用order by 子句进行排序. 再来回顾一下SQL语句中的select语句的语法: Select 语句的基本语法: Select <列的集合> from <表名> where <条件> order by <排序字段和方式> 如果要对查询结果按某个字段排序,则要使用order by 子句,如下: select * from <表名> order by <字段名称>

MySQL中UPDATE语句使用的实例教程_Mysql

一.UPDATE常见用法首先建立测试环境:   DROP TABLE IF EXISTS t_test; CREATE TABLE t_test ( bs bigint(20) NOT NULL auto_increment, username varchar(20) NOT NULL, password varchar(20) default NULL, remark varchar(200) default NULL, PRIMARY KEY (bs) ) ENGINE=InnoDB AUT