程序员社区

MySQL系列(四):MySQL进阶实验之数据库查询

实验目的:掌握基本的数据库查询命令和语法。

版权声明:本文实验参考自《数据库系统-实验指导书-湖南大学2019版》。

实验内容:按照下文中的步骤,在MySQL中执行SQL语句,逐一学习体会各SQL语句的用法。

---6 The Database Language SQL                                                  

create table LAPTOP                                                             
(                                                                               
MODEL VARCHAR(30),                                                              
SPEED   float(4,2),                                                                 
RAM INT(38),                                                                    
HD INT(38),                                                                     
SCREEN INT(3),                                                                  
PRICE INT(7)                                                                    
);

create table MOVIEEXEC                 
(                                                                         
NAME VARCHAR(30),                 
ADDRESS VARCHAR(80),                 
CERT INT(38) not null,                 
NETWORTH INT(38)                       
);
alter table MOVIEEXEC                  
add primary key (CERT);   

create table MOVIES                    
(                                      
TITLE      VARCHAR(100) not null,      
YEAR NUMERIC(38) not null,              
LENGTH NUMERIC(38),                     
GENRE       VARCHAR(30),               
STUDIONAME VARCHAR(30),                
PRODUCERC float(38)                    
);
                                      
alter table MOVIES                     
add primary key (TITLE, YEAR);         

create table MOVIESTAR                 
(                                                                  
NAME     VARCHAR(30) not null,         
ADDRESS VARCHAR(80),                   
GENDER    CHAR(1),                     
BIRTHDATE DATE                         
);                                      
alter table MOVIESTAR                  
add primary key (NAME);                

create table PC                        
(                                                                      
MODEL VARCHAR(30),                     
SPEED   float(4,2),                    
RAM     float(38),                     
HD        float(38),                   
PRICE    float(7,2)                    
);                                      

create table PRINTER                   
(                                      
MODEL VARCHAR(30),                     
COLOR VARCHAR(5),                      
TYPE VARCHAR(10),                      
PRICE float(7,2)
);                       
      
create table PRODUCT                   
(                                      
MAKER VARCHAR(30),                     
MODEL VARCHAR(10) not null,            
TYPE VARCHAR(15)                       
);              
                        
alter table PRODUCT                    
add primary key (MODEL);

create table STARSIN                   
(                                      
MOVIETITLE VARCHAR(100) not null,      
MOVIEYEAR float(38) not null,          
STARNAME VARCHAR(30) not null                                              
);

alter table STARSIN                                                         
add primary key (MOVIETITLE, MOVIEYEAR, STARNAME);

create table STUDIO
(
NAME    VARCHAR(30) not null,
ADDRESS VARCHAR(80),
PRESC     float(38)
);

alter table STUDIO                                                          
add primary key (NAME);
                                         
-- Loading LAPTOP...                                                       
insert into LAPTOP (MODEL, SPEED, RAM, HD, SCREEN, PRICE)                   
values ('2001', 2, 2048, 240, 20.1, 3673);                                  
insert into LAPTOP (MODEL, SPEED, RAM, HD, SCREEN, PRICE)                   
values ('2002', 1.73, 1024, 80, 17, 949);                                   
insert into LAPTOP (MODEL, SPEED, RAM, HD, SCREEN, PRICE)                   
values ('2003', 1.8, 512, 60, 15.4, 549);                                   
insert into LAPTOP (MODEL, SPEED, RAM, HD, SCREEN, PRICE)                   
values ('2004', 2, 512, 60, 13.3, 1150);                                    
insert into LAPTOP (MODEL, SPEED, RAM, HD, SCREEN, PRICE)                   
values ('2005', 2.16, 1024, 120, 17, 2500);                                 
insert into LAPTOP (MODEL, SPEED, RAM, HD, SCREEN, PRICE)                   
values ('2006', 2, 2048, 80, 15.4, 1700);                                   
insert into LAPTOP (MODEL, SPEED, RAM, HD, SCREEN, PRICE)                   
values ('2007', 1.83, 1024, 120, 13.3, 1429);                               
insert into LAPTOP (MODEL, SPEED, RAM, HD, SCREEN, PRICE)                   
values ('2008', 1.6, 1024, 100, 15.4, 900);                                 
insert into LAPTOP (MODEL, SPEED, RAM, HD, SCREEN, PRICE)                   
values ('2009', 1.6, 512, 80, 14.1, 680);                                   
insert into LAPTOP (MODEL, SPEED, RAM, HD, SCREEN, PRICE)                   
values ('2010', 2, 2048, 60, 15.4, 2300);                                   
commit;

-- Loading MOVIEEXEC...                                                    
insert into MOVIEEXEC (NAME, ADDRESS, CERT, NETWORTH)                       
values ('Ted Kotcheff', 'Golden Ears Provincial Park', 98765, 9000);         
insert into MOVIEEXEC (NAME, ADDRESS, CERT, NETWORTH)                       
values ('MaryTurner', '789 Palm Dr., Beverly Hills', 99999, 1000);           
insert into MOVIEEXEC (NAME, ADDRESS, CERT, NETWORTH)                       
values ('Harrison Ford', '789 Palm Dr., Beverly Hills', 67890, 8000);       
commit;

-- Loading MOVIES...
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)      
values ('Pretty Woman', 1999, 119, 'romance', 'Disney', 99999);             
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)      
values ('The Da Vinci Code', 2006, 119, 'drama', 'Fox', 11456);             
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)      
values ('Love Story', 1989, 119, 'comedy','Fox',12568);                    
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)      
values ('First Blood', 2008, 225, 'action', 'Anabasis', 98765);             
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)      
values ('First Blood', 1982, 220, 'action', 'Anabasis', 98765);             
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)      
values ('First Blood', 1988, 265, 'action', 'Anabasis', 98765);             
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)      
values ('First Blood', 1985, 220, 'action', 'Anabasis', 98765);             
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)      
values ('Gone With the Wind', 1939, 231, 'drama', 'DreamWorks', 12345);     
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)      
values ('Star Wars', 1977, 124, 'scifi', 'Fox', 67890);                              
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)   
values ('Wayne"s World', 1992,95, 'comedy', 'Paramount', 99999);         
insert into MOVIES (TITLE, YEAR, LENGTH, GENRE, STUDIONAME, PRODUCERC)   
values ('Galaxy Quest', 1999, 104, 'comedy', 'Fox', 12120);              
commit;

-- Loading MOVIESTAR...
insert into MOVIESTAR (NAME, ADDRESS, BIRTHDATE)                         
values ('Carrie Fisher', '123 Maple St., Hollywood', 19990909);          
insert into MOVIESTAR (NAME, ADDRESS, BIRTHDATE)                         
values ('Mark Hamill', '456 Oak Rd.,Brentwood', 19880808);               
insert into MOVIESTAR (NAME, ADDRESS, BIRTHDATE)                         
values ('Harrison Ford', '789 Palm Dr., Beverly Hills', 19970707);       
insert into MOVIESTAR (NAME, ADDRESS, BIRTHDATE)                         
values ('David', '123 Maple St., Hollywood', 19991210);                   
insert into MOVIESTAR (NAME, ADDRESS, BIRTHDATE)                         
values ('Misheir', 'USA', 19920606);                                      
insert into MOVIESTAR (NAME, ADDRESS, BIRTHDATE)                         
values ('Stallone', 'USA', 19480502);                                    
commit;

-- Loading PC...
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1001', 2.66, 1024, 250, 2114);                                    
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1002', 2.1, 512, 250, 995);                                     
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1003', 1.42, 512, 80, 478);                                     
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1004', 2.8, 1024, 250, 649);                                    
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1005', 3.2, 512, 250, 630);                                     
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1006', 3.2, 1024, 320, 1049);                                   
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1007', 2.2, 1024, 200, 510);                                    
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1008', 2.2, 2, 250, 770);                                       
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1009', 2.2, 1024, 250, 650);                                    
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1010', 2.8, 2048, 300, 770);                                    
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1011', 1.86, 2048, 160, 959);                                   
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1012', 2.8, 1024, 160, 649);                                    
insert into PC (MODEL, SPEED, RAM, HD, PRICE)                            
values ('1013', 3.06, 5124, 80, 529);                                    
commit;

-- Loading PRINTER...                                                    
insert into PRINTER (MODEL, COLOR, TYPE, PRICE)                          
values ('3001', 'true', 'ink-jet', 99);                                  
insert into PRINTER (MODEL, COLOR, TYPE, PRICE)                          
values ('3002', 'false', 'laser', 239);                                  
insert into PRINTER (MODEL, COLOR, TYPE, PRICE)                          
values ('3003', 'true', 'laser', 899);                                   
insert into PRINTER (MODEL, COLOR, TYPE, PRICE)                          
values ('3004', 'true', 'ink-jet', 120);                                 
insert into PRINTER (MODEL, COLOR, TYPE, PRICE)                          
values ('3005', 'false', 'laser', 120);                                  
insert into PRINTER (MODEL, COLOR, TYPE, PRICE)                          
values ('3006', 'true', 'ink-jet', 100);                                 
insert into PRINTER (MODEL, COLOR, TYPE, PRICE)                          
values ('3007', 'true', 'laser', 200);                                   
commit;                                                                  

-- Loading PRODUCT...                                    
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('A', '1001', 'pc');                              
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('A', '1002', 'pc');                                
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('A', '1003', 'pc');                                
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('A', '2004', 'laptop');                          
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('A', '2005', 'laptop');                          
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('A', '2006', 'laptop');                          
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('B', '1004', 'pc');                              
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('B', '1005', 'pc');                              
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('B', '1006', 'pc');                              
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('B', '2007', 'laptop');                          
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('C','1007', 'pc');                                
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('D', '3005', 'printer');                         
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('D','1008', 'pc');                               
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('D', '1009', 'pc');                              
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('D', '1010', 'pc');                              
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('D', '3004', 'printer');                         
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('E', '1011', 'pc');                              
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('E','1012', 'pc');                               
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('E','1013', 'pc');                               
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('E', '2001', 'laptop');                          
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('E', '2002', 'laptop');                          
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('E', '2003', 'laptop');                          
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('E', '3001', 'printer');                         
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('E', '3002', 'printer');                         
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('E', '3003', 'printer');                         
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('F', '2008', 'laptop');                          
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('F', '2009', 'laptop');                          
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('G', '2010', 'laptop');                          
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('H', '3006', 'printer');                         
insert into PRODUCT (MAKER, MODEL, TYPE)                 
values ('H', '3007', 'printer');                         
commit;     

-- Loading STARSIN...                                      
insert into STARSIN (MOVIETITLE, MOVIEYEAR, STARNAME)   
values ('First Blood', 1982, 'Stallone');                
insert into STARSIN (MOVIETITLE, MOVIEYEAR, STARNAME)                                     
values ('First Blood', 1985, 'Stallone');                                         
insert into STARSIN (MOVIETITLE, MOVIEYEAR, STARNAME)                            
values ('First Blood', 1988, 'Stallone');                                         
insert into STARSIN (MOVIETITLE, MOVIEYEAR, STARNAME)                            
values ('First Blood', 2008, 'Stallone');                                         
insert into STARSIN (MOVIETITLE, MOVIEYEAR, STARNAME)                            
values ('Galaxy Quest', 1999, 'Harrison Ford');                                   
insert into STARSIN (MOVIETITLE, MOVIEYEAR, STARNAME)                            
values ('Gone With the Wind', 1939, 'Carrie Fisher');                             
insert into STARSIN (MOVIETITLE, MOVIEYEAR, STARNAME)                            
values ('Love Story', 1989, 'Mark Hamill');                                       
insert into STARSIN (MOVIETITLE, MOVIEYEAR, STARNAME)                            
values ('Pretty Woman', 1999, 'Harrison Ford');                                   
insert into STARSIN (MOVIETITLE, MOVIEYEAR, STARNAME)                            
values ('Star Wars', 1977, 'David');                                              
insert into STARSIN (MOVIETITLE, MOVIEYEAR, STARNAME)                            
values ('Wayne"s World', 1992, 'Harrison Ford');                                   
commit;
  
---Loading STUDIO...                                                              
insert into STUDIO (NAME, ADDRESS, PRESC)                                         
values ('Fox', 'Hollywood', null);                                                
insert into STUDIO (NAME, ADDRESS, PRESC)                                         
values ('Paramount', 'Buena Vista', null);                                        
insert into STUDIO (NAME, ADDRESS, PRESC)                                         
values ('Disney', 'Buena Vista', null);                                           
commit;

---6.1 Simple Queries in SQL

-- 查询迪斯尼1999年发行的电影的具体信息:
select * from movies 
where studioName='Disney' and year=1999;           

MySQL系列(四):MySQL进阶实验之数据库查询插图      

---6.1.1 Projection in SQL

-- 查询迪斯尼1999年发行的电影的名字与片长:
select title, length from movies 
where studioName='Disney' and year=1999;                                          

-- 查询迪斯尼1999年发行的电影的名字与片长,
-- 名字字段命名为“name”,片长字段命名为“duration”:
select title as name, length as duration from movies
where studioName='Disney' and year=1999;

-- 查询迪斯尼1999年发行的电影的名字与片长,名字字段命名为“name”,
-- 片长字段命名为“lengthInHours”,以小时为单位:
select title as name, length*0.016667 as lengthlnHours from movies
where studioName='Disney' and year=1999;                                          

-- 查询迪斯尼1999年发行的电影的名字与片长,名字字段命名为“name”,
-- 片长字段命名为“length”,以小时为单位,并用名为“InHours”的一列记录电影片长的单位(hrs.):
select title as name, length*0.016667 as length, 'hrs.' as InHours from movies
where studioName='Disney' and year=1999;                                          
  • 查询迪斯尼1999年发行的电影的名字与片长:

MySQL系列(四):MySQL进阶实验之数据库查询插图1

  • 查询迪斯尼1999年发行的电影的名字与片长,名字字段命名为“name”,片长字段命名为“duration”:

MySQL系列(四):MySQL进阶实验之数据库查询插图2

  • 查询迪斯尼1999年发行的电影的名字与片长,名字字段命名为“name”,片长字段命名为“lengthInHours”,以小时为单位:

MySQL系列(四):MySQL进阶实验之数据库查询插图3

  • 查询迪斯尼1999年发行的电影的名字与片长,名字字段命名为“name”,片长字段命名为“length”,以小时为单位,并用名为“InHours”的一列记录电影片长的单位(hrs.):

MySQL系列(四):MySQL进阶实验之数据库查询插图4

---6.1.2 Selection in SQL                                                          

-- 查询Fox在1970年之后发行的片长在90分钟以内的电影的名字:
select title from movies
where (year>1970 or length<90) and studioName='Fox'; 

MySQL系列(四):MySQL进阶实验之数据库查询插图5

---6.1.4 Pattern Matching in SQL                                                   

-- 在电影表中查询以“Star”开头的电影的名字:
select title
from movies
where title like 'Star%'; 

MySQL系列(四):MySQL进阶实验之数据库查询插图6
                                                                                                                
---6.1.5 Dates and Times

-- 在不存在的“dual”表格中查询常量date:
select date'1948-05-14', time '12:08:08.08' 
from dual;
select date'1948-05-14', time '12:08:08.08' 
from dual;
select date'1948-05-14', timestamp'1948-05-14 12:08:08.08' 
from dual; 

MySQL系列(四):MySQL进阶实验之数据库查询插图7
由结果可以看到,常量查询的结果与from之后指明的表格无关。
                                                                                                 
---6.1.6 Null Values and Comparisons Involving NULL

-- 在不存在的“dual”表格中查询1+2、1+null、null+1的结果:
select 1+2,1+null,null+1 from dual;

-- 查询电影表中满足1=1的电影的详细信息:
select * from movies where 1=1;

-- 查询电影表中满足null=null的电影的详细信息:
select * from movies where null=null;

-- 查询电影表中title字段非空的电影的详细信息:
select * from movies where title is not null;
  • 在不存在的“dual”表格中查询1+2、1+null、null+1的结果:

MySQL系列(四):MySQL进阶实验之数据库查询插图8

由结果可以看到,null与任何数的运算结果都为null。

  • 查询电影表中满足1=1的电影的详细信息:

MySQL系列(四):MySQL进阶实验之数据库查询插图9

由于1=1为永真式,因此这里相当于查询电影表中的所有记录。

  • 查询电影表中满足null=null的电影的详细信息:

MySQL系列(四):MySQL进阶实验之数据库查询插图10

由于null=null结果为null,对应为false,因此这里查询结果为空。

  • 查询电影表中title字段非空的电影的详细信息:

MySQL系列(四):MySQL进阶实验之数据库查询插图11

---6.1.7 The Truth-Value UNKNOWN

-- 查询电影表中的全部记录,并使用排他锁:
select * from movies for update;

-- 查询电影表中的片长不超过120分钟或超过120分钟的电影:
select * from movies
where length<=120 or length>120;

-- 查询电影表中title字段为空的电影的详细信息:
select * from movies where title is null;
  • 查询电影表中的全部记录,并使用排他锁:

MySQL系列(四):MySQL进阶实验之数据库查询插图12

for update:当一个事务未完成时,其他事务可以读取,但不能写入或更新。

  • 查询电影表中的片长不超过120分钟或超过120分钟的电影:

MySQL系列(四):MySQL进阶实验之数据库查询插图13

由结果可以看到,这里相当于查询电影表中的全部记录。

  • 查询电影表中title字段为空的电影的详细信息:

MySQL系列(四):MySQL进阶实验之数据库查询插图14

由于电影表中不存在title字段为空的记录,因此查询结果为空。

---6.1.8 Ordering the Output

-- 查询电影表中Fox发行的全部电影的详细信息,按片长与片名升序排序:
select * from movies where Studioname = 'Fox' order by length, title;
  • 查询电影表中Fox发行的全部电影的详细信息,按片长与片名升序排序。

MySQL系列(四):MySQL进阶实验之数据库查询插图15

 

---6.1.9 Exercises for Section 6.1

exercise 6.1.3

---a)find the model number,speed, and hard-disk size for all PC's whose price is under $1000.

答:select model, speed, hd from pc where price<1000;

MySQL系列(四):MySQL进阶实验之数据库查询插图16

---b)do the same as (a), but rename the speed column gigahertz and the hd column gigabytes.

答:select model, speed as gigahertz , hd as gigabytes from pc where price<1000;

MySQL系列(四):MySQL进阶实验之数据库查询插图17

---c)find the manufactures of printers.

答:select model, maker from product where type='printer';

MySQL系列(四):MySQL进阶实验之数据库查询插图18

---d)find the model number,memeory size, and screen size for laptops costing more than $1500.

答:select model, ram, screen from laptop where price>1500;

MySQL系列(四):MySQL进阶实验之数据库查询插图19

---e)find all the tuples in the printe relation for color printers.

答:select * from printer where color='true';

MySQL系列(四):MySQL进阶实验之数据库查询插图20

---f)find the model number and hard-disk size for those PC's that have a speed of 3.2 and price less than $2000.

答:select model, hd from pc where speed=3.2 and price<2000;

MySQL系列(四):MySQL进阶实验之数据库查询插图21

---6.2 Queries Involving More Than One Relation                                                                                                                                        
---6.2.1 Products and Joins in SQL        

-- 查询片名为“Star Wars”,
-- movieexec表中cert字段等于movie表中producerc字段的电影在movieexec表中的名字:                                     
select name from movies, movieexec
where title='Star Wars' and producerc=cert; 

MySQL系列(四):MySQL进阶实验之数据库查询插图22

---6.2.2 Disambiguating Attributes

-- 查询moviestar表中的住址与movieexec表中的住址相同的记录,
-- 在两个表格中的名字:       
select moviestar.name, movieexec.name
from moviestar, movieexec
where moviestar.address = movieexec. address;

MySQL系列(四):MySQL进阶实验之数据库查询插图23

---6.2.3 Tuple Variables

-- 查询住址相同的不同电影明星的名字,结果成对出现:
select star1.name, star2.name
from moviestar star1, moviestar star2
where star1.address = star2. address
and star1.name<star2.name;

MySQL系列(四):MySQL进阶实验之数据库查询插图24

---6.2.4 Interpreting Multirelation Queries

-- 查询电影明星表中可能出现关联的两人名字,结果成对出现:
select star1.name, star2.name
from moviestar star1, moviestar star2;

MySQL系列(四):MySQL进阶实验之数据库查询插图25

...

即笛卡尔积。

 

6.2.6 Exercises for Section 6.2
exercise 6.2.2

---a)give the manufacturer and speed of laptops with a hard disk of at least thirty gigabytes.

答:select l.speed as speed, p.maker as manufacturer from laptop as l, product as p

where l.model=p.model and l.hd>=30;

MySQL系列(四):MySQL进阶实验之数据库查询插图26

---b)find the model number and price of all products of any type made by manufacturer B.

答:select p.model as model, t.price as price from product as p, ((select model, price from printer) union (select model, price from pc) union (select model, price from laptop)) as t

where p.model=t.model and p.maker='B';

MySQL系列(四):MySQL进阶实验之数据库查询插图27

---c)find those manufacturers that sell laptops, but not pc's.

答:select distinct maker from product

where type='laptop' and maker not in(select distinct maker from product where type='pc');

MySQL系列(四):MySQL进阶实验之数据库查询插图28

---d)find those hard-disk size that occur in two or more pc's.

答:select distinct hd from pc group by hd having count(*)>1;

MySQL系列(四):MySQL进阶实验之数据库查询插图29

---e)find those pairs of PC models that have both the same speed and RAM.

答:select * from pc pc1 where exists(select * from pc pc2 where pc1.model != pc2.model and pc1.speed=pc2.speed and pc1.ram=pc2.ram) order by speed, ram;

MySQL系列(四):MySQL进阶实验之数据库查询插图30

---f)find those manufacturers of at least two diffrent computers(PC"s or laptops) with speeds of at least 3.0.

答:select p.maker as manufacturer from product as p, ((select model, speed from pc where speed > 3.0) union (select model, speed from laptop where speed > 3.0)) as computer where p.model = computer.model group by manufacturer having count(*) > 1;

MySQL系列(四):MySQL进阶实验之数据库查询插图31
                                                                                                                                                       

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列(四):MySQL进阶实验之数据库查询

一个分享Java & Python知识的社区