文章目录
(建议在一个数据库上实际运行这些查询,使用我们在本书的你用内机式,用S工提供的拜本数据,上述网站还提供了如何建立一个数据库和加载样本数能的说明。)
找出Comp. Sci. 系开设的具有3个学分的课程名称。
select title
from course
where dept_name='Comp. Sci.' and credits=3;
找出名叫Einstein的教师所教的所有学生的标识,保证结果中没有重复。
select distinct student.name
from student natural join takes
where (course_id, sec_id, semester, year) in (
select course_id, sec_id, semester, year
from instructor natural join teaches
where name="Einstein");
找出教师的最高工资。
select max(salary)
from instructor;
找出工资最高的所有教师(可能有不止一一位 教师具有相同的工资)。
select name, salary
from instructor
where salary = (select max(salary)
from instructor);
找出2018年春季开设的每个课程段的选课人数。
select course_id, sec_id, semester, year, count(*)
from takes
where semester='Spring' and year=2018
group by course_id, sec_id, semester, year;
从2018年春季开设的所有课程段中,找出最多的选课人数。
select max(stu_num)
from (select course_id, sec_id, semester, year, count(*)
from takes
where semester='Spring' and year=2018
group by course_id, sec_id, semester, year) as tmp(course_id, sec_id, semester, year, stu_num)
找出在2018年春季拥有最多选课人数的课程段。
select course_id, sec_id, semester, year, stu_num
from (
select course_id, sec_id, semester, year, count(*)
from takes
where semester='Spring' and year=2018
group by course_id, sec_id, semester, year)
as tmp(course_id, sec_id, semester, year, stu_num)
where stu_num = (
select max(stu_num)
from ( select course_id, sec_id, semester, year, count(*)
from takes
where semester='Spring' and year=2018
group by course_id, sec_id, semester, year)
as tmp(course_id, sec_id, semester, year, stu_num));
create table grade_points(
grade varchar(2) primary key,
points float(2)
);
insert into grade_points values ("A", 4.0);
insert into grade_points values ("A-", 3.7);
insert into grade_points values ("B+", 3.3);
insert into grade_points values ("B", 3.0);
insert into grade_points values ("B-", 2.7);
insert into grade_points values ("C+", 2.3);
insert into grade_points values ("C", 2.0);
insert into grade_points values ("C-", 1.7);
insert into grade_points values ("F", 1.0);
根据ID为12345的学生所选修的所有课程,找出该生所获得的等级分值的总和。
select sum(points*credits)
from (takes natural join grade_points) join course using(course_id)
where ID = "12345";
找出上述学生等级分值的平均值(GPA),即用等级分值的总和除以相关课程学分的总和。
select sum(points*credits)/sum(credits)
from (takes natural join grade_points) join course using(course_id)
where ID = "12345";
找出每个学生的ID和等级分值的平均值。
select ID, sum(points*credits)/sum(credits) as gpa
from (takes natural join grade_points) join course using(course_id)
group by ID
order by gpa;
a. 给Comp. Sci. 系的每位教师涨10%的工资。
update instructor
set salary = 1.1*salary
where dept_name="Comp. Sci.";
b.删除所有未开设过(即没有出现在section关系中)的课程。
delete from course
where course_id not in (
select distinct course_id
from section
);
c.把每个在tot_cred属性上取值超过100的学生作为同系的教师插入,工资为30000美元。
insert into instructor
select ID, name, dept_name, 30000
from student
where tot_cred > 100;

a.找出2009年其车辆出过交通事故的人员总数。
select count(distinct driver_id)
from participates join accident using (report_number)
where date = "2009";
b.向数据库中增加一个新的事故,对每个必需的属性可以设定任意值。
insert into accident values("66666", "2019", "NewYork");
c. 删除“John Smith"拥有的马自达车( Mazda)。
delete from owns
where (owns.driver_id, owns.license) = (
select driver_id, license
from (person natural join owns) join car using (license)
where name="John Smith" and model="Mazda");
写出sql查询完成下列操作:
a 基于marks关系显示每个学生的等级。
select ID, case
when score < 40 then 'F'
when score < 60 then 'C'
when score < 80 then 'B'
else 'A'
end
from marks;
b 找出各等级的学生数。 \textcolor{red}{找出各等级的学生数。} 找出各等级的学生数。
select grade, count(*)
from (select ID, (
case
when score < 40 then 'F'
when score < 60 then 'C'
when score < 80 then 'B'
else 'A'
end)
from marks) as id_grade(ID, grade)
group by grade;
为了说明是怎么用的, 写出这样一个查询: 找出名称中包含了 “sci” 子串的系,忽略大小写。
select dept_name
from department
where lower(dept_name) like "%sci%";
select distinct p.al
from p, rl, r2
where p.al=rl.al or p.al =r2.al
在什么条件下这个查询选择的 p.al 值要么在 r1 中,要么在 r2 中? 仔细考察 r1 或 r2 可能为空的情况。

找出银行中所有有账户但无贷款的客户。
select customer_name
from depositor
where customer_name not in (
select customer_name
from borrower);
找出与“Smith"居住在同一一个城市、同一个街道的所有客户的名字。
# 方法 1
select customer_name
from customer
where (customer_street, customer_city) = (
select customer_street, customer_city
from customer
where customer_name = "Smith");
# 方法 2
select customer_name
from customer as S, customer as T
where S.customer_name = "Smith" and T.customer_street = S.customer_street and T.customer_city = S.customer_city;
找出所有支行的名称,在这些支行中都有居住在 " Hrrison" 的客户所开设的账户。
select distinct branch_name
from (account natural join customer) join depositor using(account_number)
where customer_city = "Hrrison";

找出所有为“First Bank Corporation" 工作的雇员名字及其居住城市。
select person_name, city
from employee join works using(ID)
where company_name = "First Bank Corporation";
找出所有为“First Bank Corporation"工作且薪金超过10 000美元的雇员名字、居住街道和城市。
select person_name, street, city
from employee join works using(ID)
where company_name="First Bank Corporation" and salary > 10000;
找出数据库中所有不为“First Bank Corporation"工作的雇员。
select ID, person_name
from employee join works using(ID)
where company_name <> "First Bank Corporation";
找出数据库中工资高于“Small Bank Corporation" 的每个雇员的所有雇员。
select ID, person_name
from employee join works using (ID)
where salary > (
select max(salary)
from works
where company_name = "Small Bank Corporation");
假设一个公司可以在好几个城市有分部。找出位于“Small Bank Corporation"所有所在城市的所有公司。
select distinct company_name
from company
where city in (
select city
from company
where company_name = "Small Bank Corporation");
找出雇员最多的公司。
select comp_name
from (
select (company_name, count(ID))
from works
group by company_name
) as comp_worker(comp_name, num_worker)
where num_worker = (
select max(num_worker)
from (
select (company_name, count(ID))
from works
group by company_name
) as comp_worker(comp_name, num_worker));
找出平均工资高于“First Bank Corporatin"平均工资的那些公司。
select company_name
from (
select company_name avg(salary)
from works
group by company_name) as comp_avg(comp_name, avg_salary)
where avg_salary > (
select avg(salary)
from works
where company_name = "First Bank Corporation");

修改数据库使 “Jones" 现在居住在 “Newtown" 市。
update employee
set city="Newtown"
where person_name = "Jones";
为 “Fist Bank Copontions” 所有工资不超过 10 0000 美元的经理增长 10% 工资,对工资超过10 0000 美元的只增长3%。
update works
set salary = case
when salary <= 100000 then salary * 1.1
else salary * 1.03
where ID in (
select distinct manager_id
from manages)
找出至少选修了一门 Comp. Sci 课程的学生姓名和 ID,保证结果中没有重复的姓名。
select distinct name, ID
from (takes natural join student) join course using(course_id)
where course.dept_name="Comp. Sci."
group by name,ID
having count(*) > 1
order by name;
找出所有没有选修在 2017 年之前开设的任何课程的每名学生的 ID 和姓名。
select name, ID
from (takes natural join student)
group by name, ID
having min(year)>2017;
找出每个系教师的最高工资值。可以假设每个系至少有一位教师。
select dept_name, max(salary)
from instructor
group by dept_name;
从前述查询所计算出的每个系最高工资中选出所有系中的最低值。
select dept_name, min(max_salary)
from (select dept_name, max(salary)
from instructor
group by dept_name)
as dept_salary(dept_name, max_salary);
创建一门课程 "CS-001”, 其名称为 “Weekly Seminar”,学分为 1。
insert into course
values("CS-001", "Weekly Seminar", "Comp. Sci.", 1);
创建该课程在 2018 年秋季的一一个课程段,sec_id 为 1。
insert into section
values("CS-001", 1, "Fall", 2018, "Taylor", "3128", "A");
让 Comp. Sci. 系的每个学生都选修上述课程段。
insert into takes
select ID, "CS-001", 1, "Fall", 2018, null
from student
where dept_name="Comp. Sci.";
删除名为 Chavez 的学生选修上述课程段的信息。
delete from takes
where course_id="CS-001" and ID = (
select ID
from student
where name="Chavez");
删除课程CS-001。 如果在运行此删除语句之前,没有先删除这门课程的授课信息 (课程段),会发生什么事情?
delete from course
where course_id="CS-001";
# create table 时使用了 on delete cascade 所以即使没有删除 section 里的开课信息,也可以正常删除 course 里的 CS-001,同时也会自动删除 section 和 takes 里面和该课有关的元组。
删除课程名称中包含 “database" 的任意棵程的任意课程段所对应的所有 takes 元组,在课程名的匹配中忽略大小写。
delete from takes
where course_id in (
select course_id
from course
where lower(title) like "%database%");

create table person(
driver_id varchar(10) primary key,
name varchar(10),
address varchar(50)
);
create table car(
license varchar(10) primary key,
model varchar(25),
year numeric(4,0) check (year > 1701 and year < 2100)
);
create table accident(
report_number varchar(20) primary key,
date DATE,
location varchar(100)
);
create table owns(
driver_id varchar(10) primary key,
license varchar(10),
foreign key (driver_id) references person(driver_id),
foreign key (license) references car(license)
);
create table participates(
report_number varchar(20),
license varchar(10),
driver_id varchar(10),
damage_amount numeric(18, 2),
primary key (report_number, license, driver_id),
foreign key (report_number) references accident(report_number),
foreign key (license) references car(license),
foreign key (driver_id) references person(driver_id)
);

找出和 “John Smith" 的车有关的交通事故数量。
select count(report_number)
from participates
where driver_id in (
select driver_id
from person
where name="John Smith");
select count(report_number)
from participates natural join person
where name="John Smith";
对事故报告编号为 “AR2197" 中的车牌是 “AABB2000" 的车辆损坏保险费用更新到 3000 美元
update participates
set damage_amount = 3000
where report_number="AR2197" and license="AABB2000";

找出在“ B r o o k l y n " 的所有支行都有账户的所有客户。 \textcolor{red}{找出在 “Brooklyn" 的所有支行都有账户的所有客户。} 找出在“Brooklyn"的所有支行都有账户的所有客户。
select S.customer_name
from (account natural join depositor natural join customer natural join branch)) as S
where exists((
select branch_city
from (account natural join depositor natural join customer natural join branch)) as T
where S.customer_name = T.customer_name
) except (
select branch_name
from branch
where branch_city="Brooklyn"
));
找出银行的所有贷款额的总和。
select sum(amount)
from loan;
找出总资产至少比位于 Brooklyn 的某一-家支行要多的所有支行名字。
select branch_name
from branch
where assets > (
select min(assets)
from branch
where branch_city = "Brooklyn");

找出每位这样的雇员的ID和姓名: 该雇员所居住的城市与其工作的公司所在城市一样。
select ID, person_name
from (employee natural join works) join company using(company_name)
where employee.city = company.city;
找出所居住的城市和街道与其经理相同的每位雇员的ID和姓名。
select ID, person_name
from (employee natural join manages) as S
where (S.street, S.city) = (select employee.street, employee.city
from employee
where employee.ID = (select manager_id
from manages
where manages.ID = S.ID));
找出工资高于其所在公司所有雇员平均工资的每位雇员的ID和姓名。
select ID, person_name
from (employee natural join works) as S
where salary > (select avg(salary)
from (employee natural join works) as T
where S.company_name = T.company_name);
找出工资总和最小的公司。
select comp_name, sum_salary
from (select company_name, sum(salary)
from works
group by company_name
) as comp_salary(comp_name, sum_salary);
where sum_salary = (select min(sum_salary) from (select company_name, sum(salary)
from works
group by company_name
) as comp_salary(comp_name, sum_salary));

为“First Bank Corporation"的所有雇员增长10%的工资。
update works
set salary = salary * 1.1
where company_name = 'First Bank Corporation';
为“First Bank Corporation"的所有经理增长10%的工资。
update works
set salary = salary * 1.1
where company_name = 'First Bank Corporation' and ID in (select manager_id from manages);
删除“Small Bank Corporation"的雇员在works关系中的所有元组。
delete from works
where company_name = 'Small Bank Corporation';

SQL 模式定义:
create database employees;
use employees;
create table employee(
ID varchar(5) primary key,
person_name varchar(25),
street varchar(100),
city varchar(50)
);
create table works(
ID varchar(5) primary key,
company_name varchar(50),
salary decimal(8,2),
foreign key (ID) references employee(ID),
foreign key (company_name) references company(company_name)
);
create table company(
company_name varchar(50) primary key,
city varchar(50)
);
create table manages(
ID varchar(5) primary key,
manager_id varchar(5),
foreign key (ID) references employee(ID),
foreign key (manager_id) references employee(ID),
);
假设 a 为一个整数,B 为一个整数集合,我们来证:
a <> all B ⇒ \Rightarrow ⇒ a not in B
a <> all B,说明:对 ∀ b ∈ B \forall~b \in B ∀ b∈B, 均有 a ≠ b a \ne b a=b, 也就是说: a ∉ B a \notin B a∈/B, 即:a not in B
a not in B ⇒ \Rightarrow ⇒ a <> all B
a not in B 说明:不存在一个 b ∈ B b \in B b∈B 使得: b = a b = a b=a, 即:对 ∀ b ∈ B \forall~b \in B ∀ b∈B 均有: b ≠ a b \ne a b=a,即:a <> all B

create table employee(
ID varchar(10) primary key,
person_name varchar(20),
street varchar(50),
city varchar(10)
);
create table company(
company_name varchar(50) primary key,
city varchar(10)
);
create table works(
ID varchar(10) primary key,
company_name varchar(50),
salary numeric(9, 2),
foreign key (ID) references employee(ID),
foreign key (company_name) references company(company_name)
);
create table manages(
ID varchar(10) primary key,
manages_id varchar(10),
foreign key (ID) references employee(ID),
foreign key (manages_id) references employee(ID)
);

打印借阅了任意由 “MeGraw-Hill" 出版的书的会员名字。
select distinct name
from member natural join borrowed natural join book
where publisher = "MeGraw-Hill";
打印借阅了所有由"MeGraw HilI" 出版的书的会员名字
select S.memb_no, S.name
from (member natural join borrowed natural join book) as S
where exists (
select isdn
from (member natural join borrowed natural join book) as T
where S.memb_no = T.memb_no
) except (
select isdn
from book
where publisher = "MeGraw Hill"
);
对于每个出版商,打印借阅了多于 5 本由该出版商出版的书的会员名字。 \textcolor{red}{对于每个出版商,打印借阅了多于 5 本由该出版商出版的书的会员名字。} 对于每个出版商,打印借阅了多于5本由该出版商出版的书的会员名字。
select publisher, name, count(isdn)
from member natural join borrowed natural join book
group by publisher, memb_id, name
having count(isdn)>5;
打印每位会员借阅书籍数量的平均值。考虑这样的情况:如果某会员没有借阅任何书籍,那么该会员根本不会出现在 borrowed 关系中。
select (select count(*) from borrowed) / (select count(*) from member);
where unique (select title from course);
where (select count(distinct title) from course) = (select count(title) from course);
select course_id, semester, year, sec_id, avg(tot_cred)
from takes natural join student
where year = 2018
group by course_id, semester, year, sec_id
having count(ID) >= 2
解释为什么在 from 子句中还加上与section的连接不会改变查询结果。
section 和 student 没有共同的属性,section 和 takes 的共同属性有:course_id, semester, year, sec_id,这些属性构成了 section 的主键,所以 takes 的每一个元组都会唯一对应一个 section 中的元组,也就是连接结果中不会额外增加元组的数目。此外,原查询想要找出 2018 年至少有两位学生上的课程的 id, semester, year, sec_id 和学生的平均总学分。显然这与 section 中的信息没有关系。
所以在from 子句中加上与section的连接不会改变查询结果。
with dept_total (dept_name, value) as
(select dept_name, sum(salary)
from instructor
group by dept_name),
dept_total_avg(value) as
(select avg(value)
from dept_total)
select dept_name
from dept_total, dept_total_avg
where dept_total.value >= dept_total_avg.value;
不使用with结构,重写此查询。
题中 SQL 语句查询这样的部门名称:这个部门的教师的总工资大于部门总工资的平均值
select dept_name
from instructor
group by dept_name
having sum(salary) > (
(select sum(salary) from instructor)
/ (select count(distinct dept_name) from instructor)
);
group by course_id, semester, year, sec_id
having count(ID) >= 2
解释为什么在 from 子句中还加上与section的连接不会改变查询结果。
section 和 student 没有共同的属性,section 和 takes 的共同属性有:course_id, semester, year, sec_id,这些属性构成了 section 的主键,所以 takes 的每一个元组都会唯一对应一个 section 中的元组,也就是连接结果中不会额外增加元组的数目。此外,原查询想要找出 2018 年至少有两位学生上的课程的 id, semester, year, sec_id 和学生的平均总学分。显然这与 section 中的信息没有关系。
所以在from 子句中加上与section的连接不会改变查询结果。
### 考虑查询:
```sql
with dept_total (dept_name, value) as
(select dept_name, sum(salary)
from instructor
group by dept_name),
dept_total_avg(value) as
(select avg(value)
from dept_total)
select dept_name
from dept_total, dept_total_avg
where dept_total.value >= dept_total_avg.value;
不使用with结构,重写此查询。
题中 SQL 语句查询这样的部门名称:这个部门的教师的总工资大于部门总工资的平均值
select dept_name
from instructor
group by dept_name
having sum(salary) > (
(select sum(salary) from instructor)
/ (select count(distinct dept_name) from instructor)
);
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立