<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用者與使用者資訊表:當用戶的資訊資料過多時,我們可以將其分成兩個表分別對應使用者基本資訊和使用者的詳情資訊。
create table user( `id` int auto_increment primary key comment'使用者id', `name` varchar(10), `age` varchar(10), `gender` char, `tel` varchar(30), `school` varchar(20), `addr` varchar(20), `degree` varchar(10), `university` varchar(10) );
當用戶資訊過多時,就可以使用外來鍵進行關聯。在任意一方加入外來鍵,關聯另一方主鍵,並且設定外來鍵為唯一的UNIQUE如下實現:
create table user( `id` int auto_increment primary key, `name` varchar(10), `age` varchar(10), `gender` char ); create table user_info( `id` int auto_increment primary key , `tel` varchar(30), `school` varchar(20), `addr` varchar(20), `degree` varchar(10), `university` varchar(10), `user_id` int unique, constraint fk_user_info foreign key (user_id) references user(id) );
部門與員工:一個員工對應一個部門,一個部門對應多個員工
員工指向多的一方,部門指向一的一方。此時應該在員工表中建立外來鍵,指向部門表中的主鍵
# 員工表 create table emp ( `emp_id` int auto_increment primary key, `emp_name` varchar(20) not null, `emp_gender` char, `emp_tel` varchar(30), `emp_dept_id` int, constraint fk_emp_dept foreign key (emp_dept_id) references dept (dept_id) ); # 部門表 create table dept ( `dept_id` int auto_increment primary key, `dept_name` varchar(20) not null );
查詢方法:
-- 正常單表查 select * from emp; -- 全查 笛卡爾積 select * from emp,dept; -- 聯查 消除無效的笛卡爾積 select * from emp,dept where emp_dept_id = dept.dept_id;
學生與課程:一個學生可以選修多門課程,一門課程可以被多個學生選擇
此時我們應該在學生表與課程表之間建立中間表。中間表包含兩個外來鍵,分別對應學生表和課程表的主鍵
首先我們準備好資料,學生表+課程表+中間資訊表
# 學生表 CREATE TABLE student( id INT auto_increment PRIMARY KEY COMMENT '主鍵ID', name VARCHAR(10) COMMENT '姓名', no VARCHAR(10) COMMENT '學號' )COMMENT '學生表'; INSERT INTO student VALUES(NULL,'小癟三','2001'),(NULL,'小癟四','2002'),(NULL,'小癟五','2003'),(NULL,'小癟六','2004'); # 課程表 CREATE TABLE course( id INT auto_increment PRIMARY KEY COMMENT'主鍵ID', name VARCHAR(10) COMMENT '課程名稱' )COMMENT '課程表'; INSERT INTO course VALUES(NULL,'java'),(NULL,'PHP'),(NULL,'MySQL'),(NULL,'Hadoop'); # 學生課程關係表(中間表) CREATE TABLE student_course( id INT auto_increment COMMENT '主鍵' PRIMARY KEY, student_id INT NOT NULL COMMENT '學生ID', course_id INT NOT NULL COMMENT '課程ID', CONSTRAINT fk_course_id FOREIGN KEY (course_id) REFERENCES course (id), CONSTRAINT fk_student_id FOREIGN KEY (student_id) REFERENCES student (id) )COMMENT '學生——課程關係中間表'; INSERT INTO student_course VALUES(null,1,1),(null,1,2),(null,1,3),(null,2,2),(null,2,3),(null,3,4);
我們切換IDEA開啟可以清晰的看到三個表之間的關係,中間資訊表中的兩個外來鍵:student_id與course_id將學生表和課程表關聯了起來
查詢A集合與B集合的交集
-- 方式一 select [欄位列表] from 表1,表2 where 條件...; -- 方式二 select [欄位列表] from 表1 inner join 表2 on 條件...;
範例:查詢所有員工與其所屬部門
-- 方式一 select emp_name,dept_name from emp inner join dept d on emp.emp_dept_id = d.dept_id; -- 方式二 select emp_name,dept_name from emp,dept where emp.emp_dept_id = dept.dept_id;
右外連線:查詢右表所有資料以及兩表交集部分資料
select 欄位列表 from 表1 right outer join 表2 on 條件...;
左外連線:查詢左表所有資料以及兩表交集部分資料
select 欄位列表 from 表1 left outer join 表2 on 條件...;
範例:
-- 2. 查詢員工全部資訊及其對應的部門資訊 左外連線 select e.*,dept_name from emp e left join dept d on d.dept_id = e.emp_dept_id; -- 3. 查詢全部部門和其對應的所有員工資訊 右外連線 select d.*,e.emp_name from emp e right join dept d on e.emp_dept_id = d.dept_id;
當前表與自身的連線查詢,自連線必須使用別名
格式:
select 欄位列表 from 表A 別名 join 表A 別名 on 條件...;
在員工表中,所有的普通員工、管理者都是員工。查詢每個員工歸屬哪個管理者管理就需要用到自連線
select a.name,b.name from emp a join emp b on a.emp_id = b.manager_id;
關鍵字 union [all] 將兩條sql語句查詢的結果拼接起來
-- 查詢年齡大於50的員工 和薪資小於10000的員工 select * from emp where emp.emp_age > 50 union all select * from emp where emp.emp_salary < 10000;
加上all表示不會去重,不加all表示去重複(即同時滿足兩條sql語句的只出現一次即可)
多張表的列數必須保持一致,欄位型別也需要一致
子查詢是指在SQL語句中巢狀select語句進行巢狀查詢
select * from t1 where column1 =(select column1 from t2);
子查詢的外部語句可以是insert、uodate、delete、select的任何一個
標量子查詢範例:查詢‘ 開發部 ’的全部員工資訊
首先你可以利用正常的兩條sql去查詢:
-- 查詢「開發部」的所有員工 -- 1. 兩條語句查詢 select dept_id from dept where dept_name = '開發部'; select emp_name from emp where emp_dept_id = 1;
或者你可以使用內連線方式進行聯查:
-- 內連線 select e.emp_name,d.dept_name from emp e inner join dept d on e.emp_dept_id = d.dept_id where dept_name = '開發部';
或者使用子查詢:
-- 使用子查詢 select * from emp where emp_dept_id = (select dept_id from dept where dept_name = '開發部');
到此這篇關於MySQL多表聯查的實現思路的文章就介紹到這了,更多相關MySQL多表聯查內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45