赞
踩
修改borrow表增加借书日期bdate列,列类型为datetime;
将机械系的同学的借书日期值修改为还书日期的前两个月的时间。
用两条语句完成,日期的修改可以用date_add( )或adddate( )。
原表结构如下:
card(借书卡) 表:cno 卡号,name 姓名,class 班级
borrow(借书记录)表 :cno 借书卡号,bno 书号,rdate 还书日期
alter table borrow
add column bdate datetime;
update borrow
set bdate = date_add(rdate, interval - 2 month)
where cno in
(select cno
from card
where deptName ='机械系');
ALTER TABLE borrow ADD COLUMN bdate DATETIME;
:这个语句用于在borrow表中添加一个名为bdate的DATETIME类型的列。UPDATE borrow SET bdate = DATE_ADD(rdate, INTERVAL -2 MONTH)
:这个语句用于更新borrow表中的所有记录,将bdate列的值设置为对应记录的rdate值减去2个月。DATE_ADD()函数用于将时间值加上指定的时间间隔。在这个语句中,使用了负数的时间间隔来表示减去2个月。WHERE cno IN (SELECT cno FROM card WHERE deptName = '机械系')
:这个语句用于筛选出card表中所在系别为“机械系”的所有借阅卡号,并将对应的borrow表中的借阅记录的bdate列值设置为对应记录的rdate减去2个月。这个语句中使用了子查询来获取符合条件的卡号。有student、course、sc表;删除“吴宾”的所有成绩记录。
student:
sc:
course:
delete from sc where sno in (select sno from student where sname= '吴宾');
相关表结构:
1、商品表:product
2、类别表:category
3、订单表:order
4、订单明细:order_detail
select product_id,product_name,category_id
from product
where product.product_id not in (select order_detail.product_id from order_detail);
将图书信息插入到book表中,其中书号 7, 书名 组合数学, 作者 刘迪, 价格 36.70, 数量 37。
表结构如下:
book(图书) 表:bno 书号,bname 书名,author 作者,price 单价,quantity 库存数
insert
into book(bno,bname,author,price,quantity)
values('7','组合数学','刘迪','36.70',37);
查询现有图书中价格最高的图书(可能不止一种书),输出书名及作者。
表结构如下:
book(图书) 表:bno 书号,bname 书名,author 作者,price 单价,quantity 库存数
select bname,author
from book
where price = (select max(price) from book);
一次向student表中插入两条记录,其中王大力的系别用缺省值赋值。
两行数据的学号,姓名,性别,年龄和系别分别如下:
9520103,王敏,女,20,信息系;
9520104,王大力,男,19。
student表结构:
insert into student
values ('9520103','王敏','女',20,'信息系'),
('9520104','王大力','男',19,'计算机系');
在sc表中插入计算机系所有学生C01课程的选课记录。
student表结构:
sc表结构:
INSERT INTO sc (sno, cno, grade)
SELECT sno, 'C01', NULL
FROM student
WHERE sdept = '计算机系';
查询所有人都借阅过的图书信息,列出书号,书名,作者。
表结构如下:
card(借书卡) 表:cno 卡号,name 姓名,class 班级
book(图书) 表:bno 书号,bname 书名,author 作者,price 单价,quantity 库存数
borrow(借书记录)表 :cno 借书卡号,bno 书号,rdate 还书日期
select b.bno, b.bname, b.author
from book b
where not exists (
SELECT c.cno
from card c
where not exists (
select *
from borrow bo
where bo.cno = c.cno and bo.bno = b.bno
)
);
ELECT b.bno, b.bname, b.author FROM book b
:这个语句用于从book表中选取图书编号(bno)、书名(bname)和作者(author)这三个列。WHERE NOT EXISTS (SELECT c.cno FROM card c WHERE NOT EXISTS (SELECT * FROM borrow bo WHERE bo.cno = c.cno AND bo.bno = b.bno))
:这个语句是一个嵌套的子查询,用于筛选出所有没有被借阅的图书。具体解释如下:SELECT c.cno FROM card c
:这个子查询用于从card表中选取所有的借阅卡号(cno)。WHERE NOT EXISTS (SELECT * FROM borrow bo WHERE bo.cno = c.cno AND bo.bno = b.bno)
:这个子查询用于判断某个卡号是否借阅了某本图书。如果这个卡号没有借阅某本图书,则返回TRUE,否则返回FALSE。这个子查询中使用了borrow表,通过bo.cno = c.cno和bo.bno = b.bno两个条件将borrow表和card表关联起来。如果这个子查询的结果集为空,则说明某本图书没有被某个借阅卡号借阅,因此这本图书符合条件。WHERE NOT EXISTS:
这个语句用于判断是否存在一个记录使得子查询的结果集为空。如果子查询的结果集为空,则NOT EXISTS返回TRUE,否则返回FALSE。因此,这个WHERE子句的作用是筛选出card表中所有没有借阅某本图书的卡号。有student、course、sc表;修改“张海”的“计算机导论”课程成绩为70。
student:
sc:
course:
UPDATE sc
SET grade=70
WHERE sno IN (SELECT sno FROM student WHERE sname='张海')
AND cno IN (SELECT cno FROM course WHERE cname='计算机导论');
查询当前借了"计算方法",但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。
表结构如下:
book(图书) 表:bno 书号,bname 书名,author 作者,price 单价,quantity 库存数
borrow(借书记录)表 :cno 借书卡号,bno 书号,rdate 还书日期
SELECT cno FROM borrow
WHERE bno = (SELECT bno FROM book WHERE bname = '计算方法')
AND cno NOT IN
(SELECT cno FROM borrow WHERE bno = (SELECT bno FROM book WHERE bname = '计算方法习题集'))
ORDER BY cno DESC;
SELECT cno FROM borrow:
这个语句用于从borrow表中选取借阅卡号(cno)这一列。WHERE bno = (SELECT bno FROM book WHERE bname = '计算方法')
:这个子查询用于从book表中选取书名为“计算方法”的图书编号(bno),并将borrow表中的bno列值与之进行比较。这个条件筛选出了所有借阅了《计算方法》的借阅记录。AND cno NOT IN (SELECT cno FROM borrow WHERE bno = (SELECT bno FROM book WHERE bname = '计算方法习题集'))
:这个子查询用于从book表中选取书名为“计算方法习题集”的图书编号(bno),并从borrow表中筛选出所有借阅了《计算方法习题集》的借阅记录,并将它们的借阅卡号(cno)放入一个子查询中。这个条件使用了NOT IN操作符,将借阅了《计算方法习题集》的借阅卡号从所有借阅了《计算方法》的借阅卡号中排除,从而得到借阅了《计算方法》但是没有借阅《计算方法习题集》的读者卡号。ORDER BY cno DESC
:这个语句用于按照借阅卡号倒序排列查询结果。学生数据库db_student包括三个数据表student(学生表)、course(课程表)和sc(选课表)。表结构如下:
1、student(学生表):
SNO学号CHAR(7)
SNAME姓名CHAR(10)
SSEX性别CHAR(2)
SAGE年龄SMALLINT
SDEPT所在系 VARCHAR(20)
2、course(课程表)
CNO课程号CHAR(10)
CNAME课程名VARCHAR(20)
CCREDIT学分SMALLINT
SEMSTER学期SMALLINT
PERIOD学时SMALLINT
3、sc(选课表)
SNO 学号CHAR(7)
CNO 课程号CHAR(10)
GRADE 成绩 SMALLINT
SELECT sc.sno,cno,grade,avggrade
FROM sc,(SELECT sno,ROUND(AVG(grade)) AS avggrade FROM sc GROUP BY sno) AS avg_sc
WHERE sc.sno=avg_sc.sno AND sc.grade>avg_sc.avggrade
ORDER BY sc.sno;
SELECT sc.sno, cno, grade, avggrade
:这个语句用于从sc表中选择学号(sno)、课程号(cno)、成绩(grade)以及该学生的平均成绩(avggrade)这四个列。(SELECT sno,ROUND(AVG(grade)) AS avggrade FROM sc GROUP BY sno) AS avg_sc
:这个子查询用于计算每个学生的平均成绩。首先,使用AVG函数计算出每个学生的平均成绩,并使用ROUND函数将结果四舍五入为整数。然后,使用GROUP BY子句将结果按照学号分组,并将结果作为一个子查询命名为avg_sc。WHERE sc.sno=avg_sc.sno AND sc.grade>avg_sc.avggrade
:这个WHERE子句用于将sc表和avg_sc子查询连接起来,并筛选出那些成绩高于该学生平均成绩的记录。具体来说,将avg_sc子查询的结果集中的每个记录与sc表中的记录进行比较,如果学号相同且成绩高于平均成绩,则将该记录包含在查询结果中。ORDER BY sc.sno
:这个语句用于按照学号升序排列查询结果。插入一个新的部门记录:部门编号-1009;部门名称-“培训部”
insert into department(dept_id,dept_name)
value ("1009","培训部");
update employee
set dept_id = 1005,job_title = "业务员"
where employee_id = 33;
有课程表,学生表,成绩表如下,查询计算机系平均成绩前三名的学号,姓名、平均成绩。
course
列名 | 数据类型 | 约束 | 说明 |
cno | char(4) | 主键非空 | 课程号 |
cname | varchar(40) | 非空 | 课程名 |
cpno | char(4) | 参照course(cno) | 先修课 |
ccredit | tinyint | 学分 |
student
列名 | 数据类型 | 约束 | 说明 |
sno | char(7) | 主键非空 | 学号 |
sname | char(10) | 非空 | 学生姓名 |
ssex | enum(‘男’,‘女’) | 默认‘男’ | 性别 |
sage | tinyint | 年龄 | |
sdept | char(20) | 默认’计算机系’ | 系别 |
sc
列名 | 数据类型 | 约束 | 说明 |
sno | char(7) | 主键非空,参照student(sno) | 学号 |
cno | char(4) | 主键非空,参照course(cno) | 课程号 |
grade | decimal(5,1) | 成绩 | |
ccredit | tinyint |
select student.sno,sname,avg(grade)
from student,sc
where student.sno=sc.sno and sdept = "计算机系"
group by student.sno
order by avg(grade) desc
limit 3;
查询人员信息:包括员工和客户。(员工数据在前)
输出“id”、“name”、“type”,若为员工,type为“员工”,若为客户,type为“客户”。
员工表:employee
客户表:customer
查询输出形式如下:
select employee_id,employee_name,"员工" as "type" from employee
union
select customer_id,customer_name,"客户" as "type" from customer;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。