123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867 |
- #第十三章、练习题
- #基础练习
- #练习1
- #已经存在数据库test04_emp,两张表emp2和dept2
- CREATE DATABASE test04_emp;
- USE test04_emp;
- CREATE TABLE emp2(
- id INT,
- emp_name VARCHAR(15)
- );
- CREATE TABLE dept2(
- id INT,
- dept_name VARCHAR(15)
- );
- #题目:
- #1、向表emp2的id列中添加PRIMARY KEY约束
- ALTER TABLE emp2
- ADD PRIMARY KEY(id);
- #2、向表dept2的id列中添加PRIMARY KEY约束
- ALTER TABLE dept2
- ADD PRIMARY KEY(id);
- #3、向表emp2中添加列dept_id,并在其中定义FOREIGN KEY约束,与之向关联的列是dept2表中的id列
- ALTER TABLE emp2
- ADD dept_id INT;
- DESC emp2;
- ALTER TABLE emp2
- ADD CONSTRAINT fk_emp2_deptid FOREIGN KEY (dept_id) REFERENCES dept2(id);
- ######################################################################
- #练习2
- #承接《第11章_数据处理之增删改》的综合案例
- #1、创建数据库test01_library
- #2、创建表books,表结构如下:
- /*
- 字段名 字段说明 数据类型
- id 书编号 INT
- name 书名 VARCHAR(50)
- authors 作者 VARCHAR(100)
- price 价格 FLOAT
- pubdate 出版日期 YEAR
- note 说明 VARCHAR(100)
- num 库存 INT
- */
- #数据库在第11章时已经创建,第1题和第2题可直接使用
- USE test01_library;
- DESC books;
- #3、使用ALTER语句给books按如下要求增加相应的约束
- /*
- 字段名 字段说明 数据类型 主键 外键 非空 唯一 自增
- id 书编号 INT(11) 是 否 是 是 是
- name 书名 VARCHAR(50) 否 否 是 否 否
- authors 作者 VARCHAR(100) 否 否 是 否 否
- price 价格 FLOAT 否 否 是 否 否
- pubdate 出版日期 YEAR 否 否 是 否 否
- note 说明 VARCHAR(100) 否 否 否 否 否
- num 库存 INT(11) 否 否 是 否 否
- */
- #为id字段添加约束
- #方式一(我做的)
- ALTER TABLE books
- ADD PRIMARY KEY(id);
- ALTER TABLE books
- MODIFY id INT AUTO_INCREMENT;
- #方式二(老师讲的另一种方法)
- ALTER TABLE books
- MODIFY id INT PRIMARY KEY AUTO_INCREMENT;
- #为name字段添加约束
- ALTER TABLE books
- MODIFY name VARCHAR(50) NOT NULL;
- #为authors字段添加约束
- ALTER TABLE books
- MODIFY authors VARCHAR(100) NOT NULL;
- #为price字段添加约束
- ALTER TABLE books
- MODIFY price FLOAT NOT NULL;
- #为pubdate字段添加约束
- ALTER TABLE books
- MODIFY pubdate YEAR NOT NULL;
- #为num字段添加约束
- ALTER TABLE books
- MODIFY num INT NOT NULL;
- DESC books;
- ######################################################################
- #练习3
- #题目
- #1、创建数据库test04_company
- CREATE DATABASE IF NOT EXISTS test04_company;
- USE test04_company;
- #2、按照下表给出的表结构在test04_company数据库中创建两个数据表offices和employees
- #offices表:
- /*
- 字段名 数据类型 主键 外键 非空 唯一 自增
- officeCode INT(10) 是 否 是 是 否
- city VARCHAR(50) 否 否 是 否 否
- address VARCHAR(50) 否 否 否 否 否
- country VARCHAR(50) 否 否 是 否 否
- postalCode VARCHAR(15) 否 否 否 是 否
- */
- #employees表:
- /*
- 字段名 数据类型 主键 外键 非空 唯一 自增
- employeeNumber INT(11) 是 否 是 是 是
- lastName VARCHAR(50) 否 否 是 否 否
- firstName VARCHAR(50) 否 否 是 否 否
- mobile VARCHAR(25) 否 否 否 是 否
- officeCode INT(10) 否 是 是 否 否
- jobTitle VARCHAR(50) 否 否 是 否 否
- birth DATETIME 否 否 是 否 否
- note VARCHAR(255) 否 否 否 否 否
- sex VARCHAR(5) 否 否 否 否 否
- */
- CREATE TABLE IF NOT EXISTS offices(
- officeCode INT PRIMARY KEY, #老师写的:officeCode INT(10) PRIMARY KEY,
- city VARCHAR(50) NOT NULL,
- address VARCHAR(50),
- country VARCHAR(50) NOT NULL,
- postalCode VARCHAR(15) UNIQUE
- );
- DESC offices;
- CREATE TABLE IF NOT EXISTS employees(
- employeeNumber INT PRIMARY KEY AUTO_INCREMENT,
- lastName VARCHAR(50) NOT NULL,
- firstName VARCHAR(50) NOT NULL,
- mobile VARCHAR(25) UNIQUE,
- officeCode INT NOT NULL,
- jobTitle VARCHAR(50) NOT NULL,
- birth DATETIME NOT NULL,
- note VARCHAR(255),
- sex VARCHAR(5),
- CONSTRAINT fk_emp_offcode FOREIGN KEY(officeCode) REFERENCES offices(officeCode)
- );
- DESC employees;
- #3、将表employees的mobile字段修改到officeCode字段后面
- ALTER TABLE employees
- MODIFY mobile VARCHAR(25) AFTER officeCode;
- #4、将表employees的birth字段名改为employee_birth
- ALTER TABLE employees
- CHANGE birth employee_birth DATETIME;
- #5、修改sex字段,数据类型为CHAR(1),非空约束
- ALTER TABLE employees
- MODIFY sex CHAR(1) NOT NULL;
- #6、删除字段note
- ALTER TABLE employees
- DROP COLUMN note;
- #7、增加字段名favoriate_activity,数据类型为VARCHAR(100)
- ALTER TABLE employees
- ADD favoriate_activity VARCHAR(100);
- #8、将表employees名称修改为employees_info
- RENAME TABLE employees
- TO employees_info;
- DESC employees_info;
- ######################################################################
- #拓展练习
- #练习1
- #创建数据库test04_Market,在test04_Market中创建数据表customers。
- #customers表结构如下所示,按以下要求进行操作。
- /*
- 字段名 数据类型 主键 外键 非空 唯一 自增
- c_num INT(11) 是 否 是 是 是
- c_name VARCHAR(50) 否 否 否 否 否
- c_contact VARCHAR(50) 否 否 否 否 否
- c_city VARCHAR(50) 否 否 否 否 否
- c_birth DATETIME 否 否 是 否 否
- */
- #1、创建数据库test04_Market。
- CREATE DATABASE test04_Market;
- USE test04_Market;
- #2、创建数据表customers,在c_num字段上添加主键约束和自增约束,在c_birth字段上添加非空约束。
- CREATE TABLE customers(
- c_num INT PRIMARY KEY AUTO_INCREMENT,
- c_name VARCHAR(50),
- c_contact VARCHAR(50),
- c_city VARCHAR(50),
- c_birth DATETIME NOT NULL
- );
- DESC customers;
- #3、将c_contact字段插入c_birth字段后面。
- ALTER TABLE customers
- MODIFY c_contact VARCHAR(50) AFTER c_birth;
- #4、将c_name字段数据类型改为VARCHAR(70)。
- ALTER TABLE customers
- MODIFY c_name VARCHAR(70);
- #5、将c_contact字段改名为c_phone。
- ALTER TABLE customers
- CHANGE c_contact c_phone VARCHAR(50);
- #6、增加c_gender字段,数据类型为CHAR(1)。
- ALTER TABLE customers
- ADD COLUMN c_gender CHAR(1);
- #7、将表名修改为customers_info。
- RENAME TABLE customers
- TO customers_info;
- DESC customers_info;
- #8、删除字段c_city。
- ALTER TABLE customers_info
- DROP c_city;
- #在test04_Market中创建数据表orders。orders表结构如下所示,按以下要求进行操作。
- /*
- 字段名 数据类型 主键 外键 非空 唯一 自增
- o_num INT(11) 是 否 是 是 是
- o_date DATE 否 否 否 否 否
- c_id INT(11) 否 是 否 否 否
- */
- #1、创建数据表orders,在o_num字段上添加主键约束和自增约束,在c_id字段上添加外键约束,关联customers表中的主键c_num。
- CREATE TABLE IF NOT EXISTS orders(
- o_num INT PRIMARY KEY AUTO_INCREMENT,
- o_date DATE,
- c_id INT,
- CONSTRAINT fk_orders_c_id FOREIGN KEY(c_id) REFERENCES customers_info(c_num)
- );
- DESC orders;
- #2、删除orders表的外键约束,然后删除表customers。
- #查看约束信息,主要是查看外键约束名
- SELECT * FROM information_schema.TABLE_CONSTRAINTS
- WHERE table_name = 'orders';
- #删除外键约束
- ALTER TABLE orders
- DROP FOREIGN KEY fk_orders_c_id;
- #查看索引名
- SHOW INDEX FROM orders;
- #删除索引
- ALTER TABLE orders
- DROP INDEX fk_orders_c_id;
- ######################################################################
- #练习2
- #创建数据表pet,并对表进行插入、更新与删除操作。pet表结构如下所示。
- #pet表结构
- /*
- 字段名 字段说明 数据类型 主键 外键 非空 唯一 自增
- name 宠物名称 ARCHAR(20) 否 否 是 否 否
- owner 宠物主人 ARCHAR(20) 否 否 否 否 否
- species 种类 ARCHAR(20) 否 否 是 否 否
- sex 性别 CHAR(1) 否 否 是 否 否
- birth 出生日期 YEAR 否 否 是 否 否
- death 死亡日期 TEAR 否 否 否 否 否
- */
- #pet表中记录
- /*
- name owner species sex birth death
- Fluffiy Harold cat f 2003 2010
- Claws Gwen cat m 2004 NULL
- Buffiy NULL dog f 2009 NULL
- Fang Benny dog m 2000 NULL
- Bowser Diane dog m 2003 2009
- Chirpy NULL bird f 2008 NULL
- */
- #1、首先创建数据表pet,使用不同的方法将表记录插入到pet表中。
- #创建表
- CREATE TABLE pet(
- `name` VARCHAR(20) NOT NULL,
- `owner` VARCHAR(20),
- species VARCHAR(20) NOT NULL,
- sex CHAR(1) NOT NULL,
- birth YEAR NOT NULL,
- death YEAR
- );
- DESC pet;
- #向表中插入数据
- INSERT INTO pet(name,owner,species,sex,birth,death)
- VALUES('Fluffiy','Harold','cat','f','2003','2010');
- INSERT INTO pet VALUES
- ('Claws','Gwen','cat','m','2004',NULL),
- ('Buffiy',NULL,'dog','f','2009',NULL),
- ('Fang','Benny','dog','m','2000',NULL),
- ('Bowser','Diane','dog','m','2003',2009),
- ('Chirpy',NULL,'bird','f','2008',NULL);
- SELECT * FROM pet;
- #2、使用UPDATE语句将名称为Fang的狗的主人改为Kevin。
- UPDATE pet
- SET owner = 'Kevin'
- WHERE name = 'Fang';
- #3、将没有主人的宠物owner字段值都改为Duck。
- UPDATE pet
- SET owner = 'Duck'
- WHERE owner IS NULL;
- #4、删除已死亡的宠物记录。
- DELETE FROM pet
- WHERE death IS NOT NULL;
- #5、删除所有表中的记录。
- DELETE FROM pet;
- SELECT * FROM pet;
- ######################################################################
- #练习3
- #1、创建数据库:test_company
- CREATE DATABASE IF NOT EXISTS test_company;
- USE test_company;
- #2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。
- /*
- A、部门表(department):部门编号(depid)。部门名称(depname)。
- 部门简介(depinfo);其中部门编号为主键。
- B、雇员表(employee):雇员编号(empid),姓名(name),性别(sex),
- 职称(title),出生日期(birthday),所在部门编号(depid);其中:
- 雇员编号为主键;
- 部门编号为外键,外键约束等级为(on update cascade和on delete set null);
- 性别默认为男;
- C、工资表(salary):雇员编号(empid),基本工资(basesalary),职务
- 工资(titlesalary),扣除(deduction)。其中雇员编号为主键。
- */
- #部门表
- CREATE TABLE department(
- depid INT,
- depname VARCHAR(20) NOT NULL,
- depinfo VARCHAR(50),
- PRIMARY KEY(depid)
- );
- DESC department;
- #雇员表
- CREATE TABLE employee(
- empid INT PRIMARY KEY,
- name VARCHAR(20) NOT NULL,
- sex CHAR(1) NOT NULL DEFAULT '男',
- title VARCHAR(15),
- birthday DATE NOT NULL,
- depid INT,
- CONSTRAINT fk_emp_depid FOREIGN KEY(depid) REFERENCES department(depid) ON UPDATE CASCADE ON DELETE SET NULL
- );
- DESC employee;
- #工资表
- CREATE TABLE salary(
- empid INT PRIMARY KEY,
- basesalary DECIMAL(10,2),
- titlesalary DECIMAL(10,2),
- deduction DECIMAL(10,2)
- );
- DESC salary;
- #3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为
- #(on update cascade和on delete cascade)
- ALTER TABLE salary
- ADD CONSTRAINT fk_sal_empid FOREIGN KEY(empid) REFERENCES employee(empid) ON UPDATE CASCADE ON DELETE CASCADE;
- #4、添加数据如下:
- #部门表:
- /*
- 部门编号 部门名称 部门简介
- 111 生产部 NULL
- 222 销售部 NULL
- 333 人事部 人力资源管理
- */
- #雇员表:
- /*
- 雇员编号 姓名 性别 职称 出生日期 所在部门编号
- 1001 张三 男 高级工程师 1975-1-1 111
- 1002 李四 女 助工 1985-1-1 111
- 1003 王五 男 工程师 1978-11-11 222
- 1004 张六 男 工程师 1999-1-1 222
- */
- #工资表:
- /*
- 雇员编号 基本工资 职务工资 扣除
- 1001 2200 1100 200
- 1002 1200 200 NULL
- 1003 2900 700 200
- 1004 1950 700 150
- */
- #添加部门表数据
- INSERT INTO department VALUES
- (111,'生产部',NULL),
- (222,'销售部',NULL),
- (333,'人事部','人力资源管理');
- SELECT * FROM department;
- #添加雇员表数据
- INSERT INTO employee VALUES
- (1001,'张三',DEFAULT,'高级工程师','1975-1-1',111),
- (1002,'李四','女','助工','1985-1-1',111),
- (1003,'王五','男','工程师','1978-11-11',222),
- (1004,'张六',DEFAULT,'工程师','1999-1-1',222);
- SELECT * FROM employee;
- #添加工资表数据
- INSERT INTO salary VALUES
- (1001,2200,1100,200),
- (1002,1200,200,NULL),
- (1003,2900,700,200),
- (1004,1950,700,150);
- SELECT * FROM salary;
- #5、查询出每个雇员的雇员编号、姓名、职称、所在部门名称、应发工资(基本工资+职务工资),实发工资(基本工资+职务工资-扣除)
- SELECT emp.empid,emp.name,emp.title,dep.depname,sal.basesalary+sal.titlesalary AS '应发工资',sal.basesalary+sal.titlesalary-IFNULL(sal.deduction,0) AS '实发工资'
- FROM employee AS emp JOIN department dep JOIN salary AS sal
- ON emp.depid = dep.depid AND emp.empid = sal.empid;
- #6、查询销售部门的雇员姓名及其基本工资
- SELECT emp.name,sal.basesalary
- FROM department dep JOIN employee emp JOIN salary sal
- ON dep.depid = emp.depid AND emp.empid = sal.empid
- WHERE dep.depname = '销售部';
- #7、查询姓“张”且年龄小于40的员工的全部信息和年龄
- SELECT *,YEAR(NOW())-YEAR(birthday) AS '年龄'
- FROM employee
- WHERE name LIKE '张%' AND (YEAR(NOW())-YEAR(birthday)) < 40;
- #8、查询所有男员工的基本工资和职务工资
- SELECT * FROM employee;
- SELECT emp.empid,emp.name,sal.basesalary,sal.titlesalary
- FROM employee emp JOIN salary sal
- ON emp.empid = sal.empid
- WHERE emp.sex = '男';
- #9、查询基本工资低于2000的员工姓名和职称、所在部门名称
- SELECT emp.name,emp.title,dep.depname
- FROM department dep JOIN employee emp JOIN salary sal
- ON dep.depid = emp.depid AND emp.empid = sal.empid
- WHERE sal.basesalary < 2000;
- #10、查询员工总数
- SELECT COUNT(*)
- FROM employee;
- #11、查询部门总数
- SELECT COUNT(*)
- FROM department;
- #12、查询应发工资的平均工资和最高工资、最低工资
- SELECT AVG(basesalary+titlesalary) AS '平均工资',MAX(basesalary+titlesalary) AS '最高工资',MIN(basesalary+titlesalary) AS '最低工资'
- FROM salary;
- #13、按照部门统计应发工资的平均工资
- SELECT depid,AVG(basesalary+titlesalary)
- FROM employee JOIN salary
- ON employee.empid = salary.empid
- GROUP BY employee.depid
- #14、找出部门基本工资的平均工资低于2000的
- SELECT depid,AVG(basesalary) AS avgsal
- FROM employee JOIN salary
- ON employee.empid = salary.empid
- GROUP BY employee.depid
- HAVING avgsal < 2000;
- #15、按照员工编号、姓名、基本工资、职务工资、扣除,并按照职务升序排列,如果职务工资相同,再按照基本工资升序排列。
- SELECT emp.empid,emp.name,emp.title,basesalary,titlesalary,deduction
- FROM employee emp JOIN salary sal
- ON emp.empid = sal.empid
- ORDER BY emp.title ASC,basesalary ASC;
- #16、查询员工编号、姓名,出生日期,及年龄段。其中,如果80年之前出生的,定为“老年”;80后定为“中年”,90后定为“青壮年”
- SELECT empid,name,birthday,
- CASE WHEN YEAR(birthday) < 1980 THEN '老年'
- WHEN YEAR(birthday) < 1990 THEN '中年'
- ELSE '青壮年' END AS '年龄段'
- FROM employee;
- #17、查询所有的员工信息,和他所在的部门名称
- SELECT emp.*,dep.depname
- FROM employee emp LEFT JOIN department dep
- ON emp.depid = dep.depid
- #18、查询所有部门信息,和该部门的员工信息
- SELECT dep.*,emp.*
- FROM department dep LEFT JOIN employee emp
- ON dep.depid = emp.depid
- #19、查询所有职位中含“工程师”的男员工的人数
- SELECT COUNT(*)
- FROM employee
- WHERE sex = '男' AND title LIKE '%工程师%';
- #20、查询每个部门的男生和女生的人数和平均基本工资
- SELECT dep.depid,emp.sex,COUNT(*),AVG(sal.basesalary)
- FROM department dep JOIN employee emp JOIN salary sal
- ON dep.depid = emp.depid AND emp.empid = sal.empid
- GROUP BY dep.depid,emp.sex
- ######################################################################
- #练习4:
- #1、创建一个数据库:test_school
- CREATE DATABASE IF NOT EXISTS test_school;
- USE test_school;
- #2、创建如下表格:
- #表1 Department表的定义
- /*
- 字段名 字段描述 数据类型 主键 外键 非空 唯一
- DepNo 部门号 INT(10) 是 否 是 是
- DepName 部门名称 VARCHAR(20) 否 否 是 否
- DepNote 部门备注 VARCHAR(50) 否 否 否 否
- */
- #表2 Teacher表的定义
- /*
- 字段名 字段描述 数据类型 主键 外键 非空 唯一
- Number 教工号 INT 是 否 是 是
- Name 姓名 VARCHAR(30) 否 否 是 否
- Sex 性别 VARCHAR(4) 否 否 否 否
- Birth 出生日期 DATE 否 否 否 否
- DepNo 部门号 INT 否 是 否 否
- Salary 工资 FLOAT 否 否 否 否
- Address 家庭住址 VARCHAR(100) 否 否 否 否
- */
- #创建表1
- CREATE TABLE Department(
- DepNo INT(10) PRIMARY KEY,
- DepName VARCHAR(20) NOT NULL,
- DepNote VARCHAR(50)
- );
- DESC Department;
- #创建表2
- CREATE TABLE Teacher(
- Number INT PRIMARY KEY,
- Name VARCHAR(30) NOT NULL,
- Sex VARCHAR(4),
- Birth DATE,
- DepNo INT,
- Salary FLOAT,
- Address VARCHAR(100),
- CONSTRAINT fk_teach_depno FOREIGN KEY(DepNo) REFERENCES Department(Depno)
- );
- DESC Teacher;
- #3、添加记录
- /*
- DepNo DepName DepNote
- 601 软件技术系 软件技术等专业
- 602 网络技术系 多媒体技术等专业
- 603 艺术设计系 广告艺术设计等专业
- 604 管理工程系 连锁经营管理等专业
- */
- /*
- Number Name Sex Birth DepNo Salary Address
- 2001 Tom 女 1970-01-10 602 4500 四川省绵阳市
- 2002 Lucy 男 1983-12-18 601 2500 北京市昌平区
- 2003 Mike 男 1990-06-01 604 1500 重庆市渝中区
- 2004 James 女 1980-10-20 602 3500 四川省成都市
- 2005 Jack 男 1975-05-30 603 1200 重庆市南岸区
- */
- #向部门表添加记录
- INSERT INTO Department VALUES
- (601,'软件技术系','软件技术等专业'),
- (602,'网络技术系','多媒体技术等专业'),
- (603,'艺术设计系','广告艺术设计等专业'),
- (604,'管理工程系','连锁经营管理等专业');
- SELECT * FROM Department;
- #向教师表中添加记录
- INSERT INTO Teacher VALUES
- (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),
- (2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),
- (2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),
- (2004,'James','女','1980-10-20',602,3500,'四川省成都阳市'),
- (2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区');
- SELECT * FROM Teacher;
- #4、用SELECT语句查询Teacher表的所有记录
- SELECT * FROM Teacher;
- #5、找出所有其家庭地址中含有“北京”的教师的教工号及部门名称,要求显示结果中各列标题用中文别名表示。
- SELECT teach.Number AS '教工号',dep.DepName AS '部门名称',teach.Address
- FROM Teacher teach LEFT JOIN Department dep
- ON teach.DepNo = dep.DepNo
- WHERE teach.Address LIKE '%北京%';
- #6、获得Teacher表中工资最高的教工号和姓名。
- #我做的
- SELECT Number,Name,MAX(Salary)
- FROM Teacher
- #老师给的
- #方法一
- SELECT Number,Name
- FROM Teacher
- WHERE salary =(SELECT MAX(Salary) FROM Teacher);
- #方法二
- SELECT Number,Name
- FROM Teacher
- ORDER BY Salary DESC LIMIT 0,1;
- #7、找出所有收入在2500~4000之间的教工号。
- SELECT Number
- FROM Teacher
- WHERE Salary BETWEEN 2500 AND 4000;
- #8、查找在网络技术系工作的教师的姓名、性别和工资。
- SELECT Name,Sex,Salary
- FROM Teacher teach JOIN Department dep
- ON teach.DepNo = dep.DepNo
- WHERE dep.DepName = '网络技术系'
- ######################################################################
- #练习5
- #1、建立数据库test_student
- #2、建立以下三张表,并插入记录
- #Table:Classes
- /*
- 专业 班级 姓名 性别 座位
- 计算机网络 1班 张三 男 8
- 软件工程 2班 李四 男 12
- 计算机维护 1班 王五 男 9
- 计算机网络 2班 LILY 女 15
- 软件工程 1班 小强 男 20
- 计算机维护 1班 CoCo 女 18
- */
- #Table:Score
- /*
- 姓名 英语 数据 语文
- 张三 65 75 98
- 李四 87 45 86
- 王五 98 86 65
- LILY 75 86 87
- 小强 85 60 58
- CoCo 96 87 70
- */
- #Table:Records
- /*
- 姓名 记录
- 小强 迟到
- 小强 事假
- 李四 旷课
- 李四 旷课
- 李四 迟到
- CoCo 病假
- LILY 事假
- */
- #3、写出将张三的语文成绩修改为88的SQL语句
- #4、搜索出计算机维护1班各门课程的平均成绩
- #5、搜索科目有不及格的人的名单
- #6、查询记录2次以上的学生的姓名和各科成绩
- ######################################################################
- #练习6
- #1、建立数据库:test_xuankedb
- #2、建立如下三张表:
- /*
- 学生表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、
- 年龄(Sage)、所在系(Sdept)五个字段,Sno为关键字。
-
- 课程表(Course)由课程号(Cno)、课程名(Cname)、选修课号(Cpno)、
- 学分(Ccredit)四个字段,Cno为关键字。
-
- 成绩表SG由学号(Sno)、课程号(Cno)、成绩(Grade)三个字段,
- (Sno,Cno)为关键字。
- */
- #3、向Student表增加“入学事件(Scome)”列,其数据类型为日期型。
- #4、查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。
- #5、查询学习1号课程的学生最高分数、平均成绩。
- #6、查询与“李洋”在同一个系学习的学生。
- #7、将计算机系全体学生的成绩置零。
- #8、删除学生表中学号为05019的学生记录。
- #9、删除计算机系所有学生的成绩记录。
- ######################################################################
- #练习7
- #1、建立数据库:test_library
- #2、建立如下三个表:
- /*
- 表一:press出版社 属性:编号pressid(int)、名称pressname(varchar)、
- 地址address(varchar)
-
- 表二:sort种类 属性:编号sortno(int)、数量scount(int)
-
- 表三:book图书 属性:编号bid(int)、名称bname(varchar)、
- 种类bsortno(int)、出版社编号pressid(int)
- */
- #3、给sort表中添加一系列属性:描述describes(varchar)
- #4、向三个表中各插入几条数据
- #表一:press
- /*
- pressid pressname address
- 100 外研社 上海
- 101 北大出版社 北京
- 102 教育出版社 北京
- */
- #表二:sort
- /*
- sortno scount describes
- 11 50 小说
- 12 300 科幻
- 13 100 神话
- */
- #表三:book
- /*
- bid bname bsortno pressid
- 1 红与黑 11 100
- 2 幻城 12 102
- 3 希腊神话 13 102
- */
- #5、查询出版社id为100的书的全部信息
- #6、查询出版社为外研社的书的全部信息
- #7、查询图书数量(scount)大于100的种类
- #8、查询图书种类最多的出版社信息
- ######################################################################
- #练习8
- #1、建立数据库:test_tour
- #2、建立如下两个表
- #agency旅行社表:
- /*
- 列名(英文名) 列名(中文名) 数据类型 允许空值 说明
- Id 旅行社编号 INT NO 主键
- Name 旅行社名 VARCHAR NO
- Address 旅行社地址 VARCHAR NO
- Areaid 所属区域id INT YES
- */
- #travel旅行线路表
- /*
- 列名(英文名) 列名(中文名) 数据类型 允许空值 说明
- Tid 旅行线路编号 INT NO 主键
- Time 所需时间 VARCHAR NO
- Position 目的地 VARCHAR NO
- Money 花费 FLOAT YES
- Aid 所属旅行社id INT NO 外键
- Count 报名人数 INT YES
- */
- #3、添加记录
- #agency表数据
- /*
- id name address
- 101 青年旅行社 北京海淀
- 102 天天旅行社 天津海院
- */
- #travel表数据
- /*
- tid time position money aid rcount
- 1 5天 八达岭 3000 101 10
- 2 7天 水长城 5000 101 14
- 3 8天 水长城 6000 102 11
- */
- #4、查出旅行线路最多的旅社
- #5、查出最热门的旅行线路(也就是查询出报名人数最多的线路)
- #6、查询花费少于5000的旅行线路
- #7、找到一次旅行花费最昂贵的旅行社名
- #8、查出青年旅社所有的旅行线路都玩一遍需要多少时间
|