數據庫——連接、多表查詢


--創建學生表

create table students (
id int unsigned not null auto_increment primary key,
name varchar(20) default '',
age tinyint unsigned default 0,
high decimal(5,2),
gender enum('男', '女', '中性', '保密') default '保密',
cls_id int unsigned default 0,
is_delete bit default 0
);
 

--創建班級表

create table classes(
id int unsigned auto_increment primary key not null,
name varchar(20) not null
);

--往students表里插入數據

insert into students values
(0,'小明',18,180.00,2,1,0),
(0,'小月月',19,180.00,2,2,0),
(0,'彭於晏',28,185.00,1,1,0),
(0,'劉德華',58,175.00,1,2,0),
(0,'黃蓉',108,160.00,2,1,0),
(0,'鳳姐',44,150.00,4,2,1),
(0,'王祖賢',52,170.00,2,1,1),
(0,'周傑倫兒',34,null,1,1,0),
(0,'程坤',44,181.00,1,2,0),
(0,'和珅',55,166.00,2,2,0),
(0,'劉亦菲',29,162.00,3,3,0),
(0,'金星',45,180.00,2,4,0),
(0,'靜香',18,170.00,1,4,0),
(0,'郭靜',22,167.00,2,5,0),
(0,'周傑',33,178.00,1,1,0),
(0,'錢小豪',56,178.00,1,1,0),
(0,'謝霆鋒',38,175.00,1,1,0);

--向classes表里插入數據

insert into classes values (0, '雲唯_01期'),(0, '雲唯_02期');

連接查詢(內關聯)

-- inner join ... on
  -- 兩個表連接查詢

select * from students inner join classes

  -- 查詢能夠對應班級的學生以及班級信息

select * from students inner join classes on students.cls_id=classes.id;

  -- 按照要求顯示姓名,班級

select students.*, classes.name from students inner join classes on students.cls_id=classes.id; 

  -- 給數據表起名字

select s.name, c.name from students as s inner join classes as c on s.cls_id=c.id;  

  -- 查詢 有能夠對應班級的學生以及班級信息,顯示學生的所有信息,只顯示班級名稱

select students.*, classes.name from students inner join classes on students.cls_id=classes.id; 

  -- 在以上查詢中將班級姓名顯示在第一列

select classes.name,students.* from students inner join classes on students.cls_id=classes.id;  

  -- 查詢有能夠對應班級的學生以及班級信息,按照班級進行排序

select classes.id, students.* from students inner join classes on students.cls_id=classes.id order by classes.id; 

  -- 當是同一個班級的時候,按照學生的id從小到大

select classes.id, students.* from students inner join classes on students.cls_id=classes.id order by classes.id, students.id;

連接查詢(左關聯,右關聯)

  --左關聯,以左邊表為基准,條件對應不上的顯示null

select * from students left join classes on students.cls_id=classes.id;  

    

  --右關聯,以后邊為基准,條件對應不上的顯示null

select * from classes left join students on students.cls_id=classes.id;

 

  

自關聯

create table areas(
aid int primary key auto_increment,
name varchar(20),
pid int
);

  

use test;
--省份
insert into areas(aid,name,pid) values(1,'北京市',null); 
insert into areas(aid,name,pid) values(0,'天津市',null); 
insert into areas(aid,name,pid) values(0,'河北省',null); 
insert into areas(aid,name,pid) values(0,'山西省',null);

--地級市
insert into areas(aid,name,pid) values(0,'海淀區',1); 
insert into areas(aid,name,pid) values(0,'濱海區',2); 
insert into areas(aid,name,pid) values(0,'滄州市',3); 
insert into areas(aid,name,pid) values(0,'大同市',4);

insert into areas(aid,name,pid) values(0,'朝陽區',1); 
insert into areas(aid,name,pid) values(0,'武清區',2); 
insert into areas(aid,name,pid) values(0,'石家庄',3); 
insert into areas(aid,name,pid) values(0,'太原市',4);

--縣級市
insert into areas(aid,name,pid) values(0,'西二旗',5); 
insert into areas(aid,name,pid) values(0,'大港',6); 
insert into areas(aid,name,pid) values(0,'任丘市',7); 
insert into areas(aid,name,pid) values(0,'清徐',8);

insert into areas(aid,name,pid) values(0,'中關村',5); 
insert into areas(aid,name,pid) values(0,'漢沽',6); 
insert into areas(aid,name,pid) values(0,'河間市',7); 
insert into areas(aid,name,pid) values(0,'陽曲',8); 

  -- 查詢出河北省所有市

select * from areas as province inner join areas as city on province.aid=city.pid having name='河北省';

select province.name,city.name from areas as province inner join areas as city on province.aid=city.pid having province.name='河北省';

-- 子查詢

  -- 標量子查詢
  -- 查詢出北京市所有區的信息
select * from areas where pid=(select aid from areas where name='北京市');
select * from areas where pid in (select aid from areas where name='北京市');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM