10习题讲义

重要习题讲义

要什么

要就是书 SELECT * FROM

要的是书名和作者 SELECT bname,bauthor FROM

要的多少个 最大 最贵 SELECT 聚合函数 FROM

是否重复 多少个 个数>1

SELECT bname,COUNT(id) AS zs FROM books GROUP BY bname

SELECT bname,COUNT(id) zs FROM books GROUP BY bname HAVING zs>1

最贵的书是谁? 用性能去换功能

SELECT * FROM books WHERE bprice = (SELECT MAX(bprice) FROM books)

1.已知:员工信息表,表名为:employee

NAME Sex Age Address

张三 女 19 北京

李四 男 20 上海

王五 女 25 广州

薛六 女 20 北京

王五 男 22 北京

赵七 男 28 上海

张四 女 23 北京

(1). 写出sql语句,查询所有年龄大于20岁的员工(2分)

SELECT * FROM employee WHERE age > 20

(2). 写出sql语句,查询所有年龄小于25岁的女性员工(3分)

SELECT * FROM employee WHERE age < 25 AND sex = '女'

(3). 写出sql语句,统计男女员工各有多少名(3分)

SELECT sex,COUNT(NAME) FROM employee GROUP BY sex

(4). 写出sql语句,按照年龄倒序获取员工信息(3分)

SELECT * FROM employee ORDER BY age DESC

(5). 写出sql语句,获取员工中哪个姓名具有重名现象(3分)

SELECT NAME,COUNT(NAME) FROM employee GROUP BY NAME HAVING COUNT(NAME)>1

(6). 写出sql语句,查询所有姓张的员工(3分)

SELECT * FROM employee WHERE NAME LIKE '张%'

(7). 写出sql语句,查询住址为北京的前3条记录(3分)

SELECT * FROM employee WHERE address = '北京' LIMIT 0,3

(8). 写出sql语句,查询员工总数(3分)

SELECT COUNT(NAME) FROM employee

(9). 写出sql语句,向表中插入一条记录(2分)

INSERT INTO employee (NAME,age,sex,address) VALUES ('',20,'','')

(10).写出sql语句,修改员工张四的住址为南京(2分)

UPDATE employee SET address = '南京' WHERE NAME = '张四'

(11).写出sql语句,删除年龄大于24岁的女员工(2分)

DELETE FROM employee WHERE age > 24 AND sex = '女'

SELECT * FROM (SELECT bname,COUNT(id) AS zs FROM books GROUP BY bname) AS aa WHERE zs > 1

CREATE TABLE book (b_code VARCHAR(10),b_name VARCHAR(100),b_author VARCHAR(50),b_publish VARCHAR(100),b_pubdate DATE,b_price DOUBLE(8,2));

CREATE TABLE reader (r_code VARCHAR(10),r_name VARCHAR(100),r_sex CHAR(1),r_dep VARCHAR(100));

CREATE TABLE check_out(b_code VARCHAR(10),r_code VARCHAR(10),borrow_date DATE,return_date DATE);

book 多

b_code bname

1 幻城

2 小时代

3 大话西游

reader 多 加外键

r_code rname

1 张三

2 李四

3 王五

check_out

b_code r_code

1 1

1 2

2 1

2 2

book.b_code = check_out.b_code AND check_out.r_code= reader.r_code

1.特点 三张表 实际上是 书和读者的多对多关系

2.特点 别没有进行联合查询

3.虽然三张表 但是始终都是单表查询

-- 插入图书信息

INSERT INTO book VALUES('b_001','《幻城》','郭敬明','人民教育出版社','2004-5-21',19.8);

INSERT INTO book VALUES('b_002','《三重门》','韩寒','电子工业出版社','2001-7-22',22.5);

INSERT INTO book VALUES('b_003','《幻城》','郭敬明','中国人民大学出版社','2004-5-21',20);

INSERT INTO book VALUES('b_004','《围城》','钱钟书','人民教育出版社','2010-5-15',21);

INSERT INTO book VALUES('b_005','《幻城》','郭敬明','清华大学出版社','2011-5-21',22);

INSERT INTO book VALUES('b_006','《水浒传》','施耐庵','电子工业出版社','2008-3-21',48);

INSERT INTO book VALUES('b_007','《福尔摩斯》','柯南道尔','人民教育出版社','2004-5-21',33);

INSERT INTO book VALUES('b_008','《伟大的博弈》','张化龙','电子工业出版社','2009-2-13',28);

INSERT INTO book VALUES('b_009','《活法》','稻盛和夫','人民教育出版社','2000-1-2',15);

INSERT INTO book VALUES('b_010','《人性的弱点》','戴尔卡耐基','人民教育出版社','2007-7-31',19.8);

-- 插入读者数据

INSERT INTO reader VALUES('r_001','丁涛','男','人事部');

INSERT INTO reader VALUES('r_002','王壮','男','人事部');

INSERT INTO reader VALUES('r_003','王影影','女','财务部');

INSERT INTO reader VALUES('r_004','吴俊铖','男','培训部');

INSERT INTO reader VALUES('r_005','张佳','女','财务部');

INSERT INTO reader VALUES('r_006','刁钱龙','男','计算机系');

INSERT INTO reader VALUES('r_007','李佳成','男','财务部');

-- 插入借阅记录信息

INSERT INTO check_out VALUES('b_003','r_001','2008-4-9','2008-4-22');

INSERT INTO check_out VALUES('b_003','r_006','2009-4-21','2009-5-10');

INSERT INTO check_out VALUES('b_004','r_005','2009-10-2','2009-11-1');

INSERT INTO check_out VALUES('b_001','r_003','2010-3-12','2010-4-1');

INSERT INTO check_out VALUES('b_009','r_002','2010-3-22','2010-4-5');

INSERT INTO check_out VALUES('b_008','r_001','2010-8-11','2010-9-3');

INSERT INTO check_out VALUES('b_009','r_007','2010-12-3','2010-12-31');

INSERT INTO check_out VALUES('b_003','r_004','2011-4-8','2011-5-7');

INSERT INTO check_out VALUES('b_001','r_003','2012-4-9',NULL);

查询出以下结果

1.查询所有图书记录、查询所有借阅记录、查询所有读者信息,采用字段选择和通配符选择!

SELECT * FROM book

SELECT * FROM reader

SELECT * FROM check_out

2.查询图书馆中的书籍都有哪些出版社?

SELECT DISTINCT b_publish FROM book

3.查询出版日期在2008年至2010年之间的所有图书!

SELECT * FROM book WHERE b_pubdate BETWEEN '2008' AND '2010'

4.查询部门是财务部、人事部、培训部的读者信息!

SELECT * FROM reader WHERE r_dep IN('财务部','人事部','培训部')

5.查询所有姓张的读者详细信息!

SELECT * FROM reader WHERE r_name LIKE '张%'

6.查询所有未归还图书的借阅记录详情!

SELECT * FROM check_out WHERE return_date IS NULL

7.查询读者中人事部的读者有多少个、查询作者姓李的图书共有多少本!

SELECT r_dep,COUNT(r_code) FROM reader WHERE r_dep = '人事部' GROUP BY r_dep

SELECT b_author,COUNT(b_code) FROM book WHERE b_author LIKE '李%' GROUP BY b_author

8.查询《幻城》这本书总计价格是多少?(建议 数据录入的时候有不少于三本《幻城》)

SELECT SUM(b_price) FROM book WHERE b_name = '《幻城》'

9.查询《幻城》这本书平均价格是多少?

SELECT AVG(b_price) FROM book WHERE b_name = '《幻城》'

10.查找最贵的一本《幻城》的信息 !

SELECT MAX(b_price) FROM book WHERE b_name = '《幻城》'

11.查询借阅日期在2011年10月的前3条记录

SELECT * FROM check_out WHERE borrow_date LIKE '%2011-10%'

12.查询所有图书并按出版日期排序、查询2011年的全年借阅记录,并按借阅日期倒序排序

SELECT * FROM book ORDER BY b_pubdate DESC

13.统计读者群体中各个部门的人数

SELECT r_dep,COUNT(r_code) FROM reader GROUP BY r_dep

14.统计2010年的借阅记录,查看每个图书编号都被借出去过多少次,并按照这个次数从大到小排序,以便了解书籍的畅销程度!

做热榜

SELECT b_code,COUNT(b_code) FROM check_out WHERE borrow_date

LIKE '%2010%' GROUP BY b_code ORDER BY COUNT(b_code) DESC

15.统计读者群体中各个部门的女性群体数量

SELECT r_sex,r_dep,COUNT(r_code) FROM reader GROUP BY r_sex,r_dep

16.查询那本书被哪个读者在什么时间借过在什么时间还的

SELECT * FROM book,reader,check_out

WHERE book.b_code = check_out.b_code AND check_out.r_code= reader.r_code

SELECT b.b_name,r.r_name,co.borrow_date,co.return_date

FROM book b,reader r,check_out co

WHERE b.b_code = co.b_code AND co.r_code= r.r_code AND co.return_date IS NULL

前 后 分组 排序 分页==范围

查询难度分为四种的

1.单表查询 条件单一

2.单表查询 条件复杂多

3.多表联合查询 条件单一

4.多表联合查询 条件复杂多

回顾一对多

联合查询 一对多 和 多对多

1.普通连接 WHERE 一方的主键=多方的外键

SELECT * FROM class c,student s WHERE c.id = s.c_id

2.内连接 INNER JOIN ON 一方的主键=多方的外键

SELECT * FROM class c INNER JOIN student s ON c.id = s.c_id

3.自连接 表自己连接自己 A表自己是一方 同时 也是多方 后面再讲

4.外连接 OUTER JOIN ON 一方的主键=多方的外键

​ 左外 LEFT JOIN ON

​ 表分成 左表和右表 单纯的左右

​ 效果 查询出左表的全部数据 和右表关系列相等的数据

SELECT * FROM class c LEFT JOIN student s ON c.id = s.c_id

​ 右外 RIGHT JOIN ON

​ 表分成 左表和右表 单纯的左右

​ 效果 查询出右表的全部数据 和左表关系列相等的数据

SELECT * FROM class c RIGHT JOIN student s ON c.id = s.c_id

数据中 有 没有班级的学生 有 没有学生的班级

多对多

如何建立关系

1.给两个多方表 建立一个共同的关系表 关系表中是两个多方表的外键

qqnum

id num

1 100828833

2 100910101

3 101000011

qqrole

id rname

1 蓝钻

2 绿钻

3 黄钻

关系表

num_role

num_id role_id

1 1

1 2

2 1

2 2

CREATE TABLE qqnum(id INT(2) PRIMARY KEY AUTO_INCREMENT,num VARCHAR(10));

CREATE TABLE qqrole(id INT(2) PRIMARY KEY AUTO_INCREMENT,rname VARCHAR(10));

CREATE TABLE num_role(n_id INT(2),r_id INT(2));

关系列 n.id = nr.n_id AND nr.r_id = r.id

SELECT * FROM qqnum n,qqrole r,num_role nr

WHERE n.id = nr.n_id AND nr.r_id = r.id

知道 1008的会员身份有哪些?

SELECT * FROM qqnum n,qqrole r,num_role nr

WHERE n.id = nr.n_id AND nr.r_id = r.id AND n.num = '1008'

添加两个外键约束

ALTER TABLE num_role

ADD CONSTRAINT a1 FOREIGN KEY (n_id) REFERENCES qqnum(id);

ALTER TABLE num_role

ADD CONSTRAINT a2 FOREIGN KEY (r_id) REFERENCES qqrole(id);

posted @ 2026-10-20 20:27  瑜淞蜀  阅读(2)  评论(0)    收藏  举报