mySql 简单 多表 联查
mySql
引用:https://blog.csdn.net/Dream_Weave/article/details/85172796
引用:https://www.cnblogs.com/caoyajun33-blog/p/6814185.html
引用:https://blog.csdn.net/qq_34987215/article/details/83590167
建表方法 查询方法
// An highlighted blockCREATE TABLE IF NOT EXISTS person(id INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(10),sex CHAR(1),husband INT,wife INT
);INSERT INTO person VALUES(1,'小花','0',3,0);
INSERT INTO person VALUES(2,'小明','1',0,4);
INSERT INTO person VALUES(3,'张三','1',0,1);
INSERT INTO person VALUES(4,'小丽','0',2,0);
INSERT INTO person VALUES(5,'王五','1',0,0);CREATE VIEW men AS (SELECT * FROM person WHERE sex='1');
CREATE VIEW women AS (SELECT * FROM person WHERE sex='0');SELECT men.sname AS husband,women.sname AS wife FROM men,women WHERE men.id = women.husband AND women.id = men.wife;```SELECT men.sname AS husband,women.sname AS wife FROM men INNER JOIN women ON men.id = women.husband AND women.id = men.wife;// 一对多
// 建立人员表
CREATE TABLE human(id VARCHAR(12) PRIMARY KEY,sname VARCHAR(12),age INT,sex CHAR(1)
);
INSERT INTO human VALUES('H001','小王',27,'1');
INSERT INTO human VALUES('H002','小明',24,'1');
INSERT INTO human VALUES('H003','张慧',28,'0');
INSERT INTO human VALUES('H004','李小燕',35,'0');
INSERT INTO human VALUES('H005','王大拿',29,'1');
INSERT INTO human VALUES('H006','周强',36,'1');// 建立车辆信息表
CREATE TABLE car(id VARCHAR(12) PRIMARY KEY,mark VARCHAR(24),price NUMERIC(6,2),hid VARCHAR(12),CONSTRAINT fk_human FOREIGN KEY(hid) REFERENCES human(id)
);
INSERT INTO car VALUES('C001','BMW',65.99,'H001');
INSERT INTO car VALUES('C002','BenZ',75.99,'H002');
INSERT INTO car VALUES('C003','Skoda',23.99,'H001');
INSERT INTO car VALUES('C004','Peugeot',20.99,'H003');
INSERT INTO car VALUES('C005','Porsche',295.99,'H004');
INSERT INTO car VALUES('C006','Honda',24.99,'H005');
INSERT INTO car VALUES('C007','Toyota',27.99,'H006');
INSERT INTO car VALUES('C008','Kia',18.99,'H002');
INSERT INTO car VALUES('C009','Bentley',309.99,'H005');SELECT human.sname AS 车主,car.mark AS 车辆 FROM human,car WHERE human.id = car.hid;
SELECT human.sname AS 车主,car.mark AS 车辆 FROM human INNER JOIN car WHERE human.id = car.hid;//多对多
// 建立学生表
CREATE TABLE student(id VARCHAR(10) PRIMARY KEY,sname VARCHAR(12),age INT,sex CHAR(1),class VARCHAR(6)
);
INSERT INTO student VALUES('S0001','王军',20,1,'c101');
INSERT INTO student VALUES('S0002','张宇',21,1,'c101');
INSERT INTO student VALUES('S0003','刘飞',22,1,'c102');
INSERT INTO student VALUES('S0004','赵燕',18,0,'c103');
INSERT INTO student VALUES('S0005','曾婷',19,0,'c103');
INSERT INTO student VALUES('S0006','周慧',21,0,'c104');
INSERT INTO student VALUES('S0007','小红',23,0,'c104');
INSERT INTO student VALUES('S0008','杨晓',18,0,'c104');
INSERT INTO student VALUES('S0009','李杰',20,1,'c105');
INSERT INTO student VALUES('S0010','张良',22,1,'c105');// 建立课程表
CREATE TABLE course(id VARCHAR(10) PRIMARY KEY,sname VARCHAR(12),credit NUMERIC(2,1),teacher VARCHAR(12)
);
INSERT INTO course VALUES('C001','Java',3.5,'李老师');
INSERT INTO course VALUES('C002','高等数学',5.0,'赵老师');
INSERT INTO course VALUES('C003','JavaScript',3.5,'王老师');
INSERT INTO course VALUES('C004','离散数学',3.5,'卜老师');
INSERT INTO course VALUES('C005','数据库',3.5,'廖老师');
INSERT INTO course VALUES('C006','操作系统',3.5,'张老师');// 建立选修表
CREATE TABLE sc(sid VARCHAR(10),cid VARCHAR(10)
);ALTER TABLE sc ADD CONSTRAINT pk_sc PRIMARY KEY(sid,cid);
ALTER TABLE sc ADD CONSTRAINT fk_student FOREIGN KEY(sid) REFERENCES student(id);
ALTER TABLE sc ADD CONSTRAINT fk_course FOREIGN KEY(cid) REFERENCES course(id);INSERT INTO sc VALUES('S0001','C001');
INSERT INTO sc VALUES('S0001','C002');
INSERT INTO sc VALUES('S0001','C003');
INSERT INTO sc VALUES('S0002','C001');
INSERT INTO sc VALUES('S0002','C004');
INSERT INTO sc VALUES('S0003','C002');
INSERT INTO sc VALUES('S0003','C005');
INSERT INTO sc VALUES('S0004','C003');
INSERT INTO sc VALUES('S0005','C001');
INSERT INTO sc VALUES('S0006','C004');
INSERT INTO sc VALUES('S0007','C002');
INSERT INTO sc VALUES('S0008','C003');
INSERT INTO sc VALUES('S0009','C001');
INSERT INTO sc VALUES('S0009','C005');//普通方式SELECT * FROM student WHERE student.id NOT IN (SELECT sid FROM sc);
SELECT * FROM course WHERE course.id NOT IN (SELECT cid FROM sc);
//缺点:实际上是创建了两张表的笛卡尔积,所有可能的组合都会被创建出来。在笛卡尔连接中,
//在上面的例子中,如果有1000顾客和1000条销售记录,这个查询会先产生1000000个结果,然后通过正确的 ID过滤出1000条记录。
//这是一种低效利用数据库资源,数据库多做100倍的工作。 在大型数据库中,笛卡尔连接是一个大问题,对两个大表的笛卡尔积会创建数10亿或万亿的记录。//为了避免创建笛卡尔积,应该使用INNER JOIN ://关联方式SELECT student.* FROM student LEFT JOIN sc ON student.id=sc.sid LEFT JOIN course ON course.id = sc.cid WHERE course.sname IS NULL;
SELECT course.* FROM course LEFT JOIN sc ON course.id=sc.cid LEFT JOIN student ON student.id = sc.sid WHERE student.sname IS NULL;//(left join 左连接,左表所有数据 拼接 右表符合on条件的数据。)//SQL约束(主键约束 primary key、外键约束 foreign key、唯一约束unique 、CHECK约束)create table t_group ( id int not null, name varchar(30), primary key (id)
); insert into t_group values (1, 'Group1');
insert into t_group values (2, 'Group2');create table t_user ( id int not null, name varchar(30), groupid int, primary key (id), foreign key (groupid) references t_group(id) on delete cascade on update cascade
); insert into t_user values (1, 'qianxin', 1); --可以插入
insert into t_user values (2, 'yiyu', 2); --可以插入
insert into t_user values (3, 'dai', 3); --错误,无法插入,用户组3不存在,与参照完整性约束不符 insert into t_user values (1, 'qianxin', 1);
insert into t_user values (2, 'yiyu', 2);
insert into t_user values (3, 'dai', 2);
delete from t_group where id=2; --导致t_user中的2、3记录级联删除
update t_group set id=2 where id=1; --导致t_user中的1记录的groupid级联修改为2
mySql 简单 多表 联查相关推荐
- mysql 外键查询_mysql 外键查询(mysql数据库多表联查)
mysql 外键查询(mysql数据库多表联查) 2020-07-24 11:51:00 共10个回答 查看方式主要是通过第三方工具或者是sql语句,主要有以下三种方式1:使用Navicateform ...
- mysql简单分表_mysql分区分表哪个好
一,什么是e69da5e6ba9062616964757a686964616f31333365633933mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mys ...
- Mysql基础——多表联查之连接查询
连接查询 (1)内连接 内连接查询的是两张表交集的部分. 实例: 人员名单表 职务表 内联查询: select distinct p.*,t.* from person p inner join pa ...
- mysql的4表联查讲解,MySQL的多表联查
1.内部连接 \ 规则:返回两个表的通用记录 \ 语法: -语法一 select *从表1的内部联接表2上的表1.公用字段=表2.公用字段 -语法二 select *从表1的约束,表2其中表1.公共字 ...
- mysql的4表联查讲解_mysql
1.测试数据如下 student 表,学生表 sno sname ssex sage sdept 1 刘敏 女 19 计算机 2 周松 男 21 计算机 3 张明 男 20 经贸 4 孟欣 女 21 ...
- mysql的多表联查操作
1.查询名人表中作者是男性的 2.查询静夜思的作者 3.查询李白和杜甫的年纪 4.查询名人表中的男女人数 5.查出白居易写的作品名称和对应的诗句 6.查询年纪在25到30岁之间的个数 7.查询名表中年 ...
- mysql两张表联查更新语句_sql联合查询语句(两张表)
展开全部 sql联合查询语句(两张e69da5e6ba9062616964757a686964616f31333365643662表)是: select A.ID,A.VALUE,A.TYPE,A.N ...
- mysql的多表联查练习
本次练习基于教师表,学生表,课程表,学生与课程的中间表这四张表(没有进行sql语句的优化)(亲测好用) 各表测试数据如下: 学生表 教师表 课程表 学生_课程中间表 .-- 1.查询课程1的成绩 比 ...
- Mysql数据库多表联查出现笛卡尔积问题
https://blog.csdn.net/include_ice/article/details/80917492 https://www.cnblogs.com/plf-Jack/p/111899 ...
最新文章
- 矩阵特征分解介绍及雅克比(Jacobi)方法实现特征值和特征向量的求解(C++/OpenCV/Eigen)
- 报告!插件×元宵来啦
- NameNode任务线程之FSNamesystem$ReplicationMonitor
- linux python2.7 mssqlserver_连接到linux上的MSSQL Server 2008
- asp.net在动态网页中的使用技巧
- 管理感悟:怎样给程序找好的思路
- 光电转换模块_针对100G QSFP28 SR4光模块的特征及工作原理进行分析
- Caemra名词缩写解释
- 碳足迹PCF国内外标准和碳标签应用
- unity LineRender结合多点触摸 实现拖拽 重复画线
- 【嵌入式小技巧】STM32 实现 SEGGER RTT 打印(超详细)
- 【NLP】一种自写的分词算法-中文基于字,英文基于单词,支持自定义字典
- 《名贤集》《明贤集》四言集
- 要你命3000List30
- C#获取目录下所有文件的列表——最白话,手把手教你做系列。
- 直流电机的电流、转速、电压的关系
- 2019一级建造师《水利水电》每日一练
- 爱奇艺知识播放体验优化的探索和实践
- 105 THREE.JS 手动实现相机沿焦点旋转
- (诛仙剑C-SKY)7-curl