第十三章、练习题.sql 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867
  1. #第十三章、练习题
  2. #基础练习
  3. #练习1
  4. #已经存在数据库test04_emp,两张表emp2和dept2
  5. CREATE DATABASE test04_emp;
  6. USE test04_emp;
  7. CREATE TABLE emp2(
  8. id INT,
  9. emp_name VARCHAR(15)
  10. );
  11. CREATE TABLE dept2(
  12. id INT,
  13. dept_name VARCHAR(15)
  14. );
  15. #题目:
  16. #1、向表emp2的id列中添加PRIMARY KEY约束
  17. ALTER TABLE emp2
  18. ADD PRIMARY KEY(id);
  19. #2、向表dept2的id列中添加PRIMARY KEY约束
  20. ALTER TABLE dept2
  21. ADD PRIMARY KEY(id);
  22. #3、向表emp2中添加列dept_id,并在其中定义FOREIGN KEY约束,与之向关联的列是dept2表中的id列
  23. ALTER TABLE emp2
  24. ADD dept_id INT;
  25. DESC emp2;
  26. ALTER TABLE emp2
  27. ADD CONSTRAINT fk_emp2_deptid FOREIGN KEY (dept_id) REFERENCES dept2(id);
  28. ######################################################################
  29. #练习2
  30. #承接《第11章_数据处理之增删改》的综合案例
  31. #1、创建数据库test01_library
  32. #2、创建表books,表结构如下:
  33. /*
  34. 字段名 字段说明 数据类型
  35. id 书编号 INT
  36. name 书名 VARCHAR(50)
  37. authors 作者 VARCHAR(100)
  38. price 价格 FLOAT
  39. pubdate 出版日期 YEAR
  40. note 说明 VARCHAR(100)
  41. num 库存 INT
  42. */
  43. #数据库在第11章时已经创建,第1题和第2题可直接使用
  44. USE test01_library;
  45. DESC books;
  46. #3、使用ALTER语句给books按如下要求增加相应的约束
  47. /*
  48. 字段名 字段说明 数据类型 主键 外键 非空 唯一 自增
  49. id 书编号 INT(11) 是 否 是 是 是
  50. name 书名 VARCHAR(50) 否 否 是 否 否
  51. authors 作者 VARCHAR(100) 否 否 是 否 否
  52. price 价格 FLOAT 否 否 是 否 否
  53. pubdate 出版日期 YEAR 否 否 是 否 否
  54. note 说明 VARCHAR(100) 否 否 否 否 否
  55. num 库存 INT(11) 否 否 是 否 否
  56. */
  57. #为id字段添加约束
  58. #方式一(我做的)
  59. ALTER TABLE books
  60. ADD PRIMARY KEY(id);
  61. ALTER TABLE books
  62. MODIFY id INT AUTO_INCREMENT;
  63. #方式二(老师讲的另一种方法)
  64. ALTER TABLE books
  65. MODIFY id INT PRIMARY KEY AUTO_INCREMENT;
  66. #为name字段添加约束
  67. ALTER TABLE books
  68. MODIFY name VARCHAR(50) NOT NULL;
  69. #为authors字段添加约束
  70. ALTER TABLE books
  71. MODIFY authors VARCHAR(100) NOT NULL;
  72. #为price字段添加约束
  73. ALTER TABLE books
  74. MODIFY price FLOAT NOT NULL;
  75. #为pubdate字段添加约束
  76. ALTER TABLE books
  77. MODIFY pubdate YEAR NOT NULL;
  78. #为num字段添加约束
  79. ALTER TABLE books
  80. MODIFY num INT NOT NULL;
  81. DESC books;
  82. ######################################################################
  83. #练习3
  84. #题目
  85. #1、创建数据库test04_company
  86. CREATE DATABASE IF NOT EXISTS test04_company;
  87. USE test04_company;
  88. #2、按照下表给出的表结构在test04_company数据库中创建两个数据表offices和employees
  89. #offices表:
  90. /*
  91. 字段名 数据类型 主键 外键 非空 唯一 自增
  92. officeCode INT(10) 是 否 是 是 否
  93. city VARCHAR(50) 否 否 是 否 否
  94. address VARCHAR(50) 否 否 否 否 否
  95. country VARCHAR(50) 否 否 是 否 否
  96. postalCode VARCHAR(15) 否 否 否 是 否
  97. */
  98. #employees表:
  99. /*
  100. 字段名 数据类型 主键 外键 非空 唯一 自增
  101. employeeNumber INT(11) 是 否 是 是 是
  102. lastName VARCHAR(50) 否 否 是 否 否
  103. firstName VARCHAR(50) 否 否 是 否 否
  104. mobile VARCHAR(25) 否 否 否 是 否
  105. officeCode INT(10) 否 是 是 否 否
  106. jobTitle VARCHAR(50) 否 否 是 否 否
  107. birth DATETIME 否 否 是 否 否
  108. note VARCHAR(255) 否 否 否 否 否
  109. sex VARCHAR(5) 否 否 否 否 否
  110. */
  111. CREATE TABLE IF NOT EXISTS offices(
  112. officeCode INT PRIMARY KEY, #老师写的:officeCode INT(10) PRIMARY KEY,
  113. city VARCHAR(50) NOT NULL,
  114. address VARCHAR(50),
  115. country VARCHAR(50) NOT NULL,
  116. postalCode VARCHAR(15) UNIQUE
  117. );
  118. DESC offices;
  119. CREATE TABLE IF NOT EXISTS employees(
  120. employeeNumber INT PRIMARY KEY AUTO_INCREMENT,
  121. lastName VARCHAR(50) NOT NULL,
  122. firstName VARCHAR(50) NOT NULL,
  123. mobile VARCHAR(25) UNIQUE,
  124. officeCode INT NOT NULL,
  125. jobTitle VARCHAR(50) NOT NULL,
  126. birth DATETIME NOT NULL,
  127. note VARCHAR(255),
  128. sex VARCHAR(5),
  129. CONSTRAINT fk_emp_offcode FOREIGN KEY(officeCode) REFERENCES offices(officeCode)
  130. );
  131. DESC employees;
  132. #3、将表employees的mobile字段修改到officeCode字段后面
  133. ALTER TABLE employees
  134. MODIFY mobile VARCHAR(25) AFTER officeCode;
  135. #4、将表employees的birth字段名改为employee_birth
  136. ALTER TABLE employees
  137. CHANGE birth employee_birth DATETIME;
  138. #5、修改sex字段,数据类型为CHAR(1),非空约束
  139. ALTER TABLE employees
  140. MODIFY sex CHAR(1) NOT NULL;
  141. #6、删除字段note
  142. ALTER TABLE employees
  143. DROP COLUMN note;
  144. #7、增加字段名favoriate_activity,数据类型为VARCHAR(100)
  145. ALTER TABLE employees
  146. ADD favoriate_activity VARCHAR(100);
  147. #8、将表employees名称修改为employees_info
  148. RENAME TABLE employees
  149. TO employees_info;
  150. DESC employees_info;
  151. ######################################################################
  152. #拓展练习
  153. #练习1
  154. #创建数据库test04_Market,在test04_Market中创建数据表customers。
  155. #customers表结构如下所示,按以下要求进行操作。
  156. /*
  157. 字段名 数据类型 主键 外键 非空 唯一 自增
  158. c_num INT(11) 是 否 是 是 是
  159. c_name VARCHAR(50) 否 否 否 否 否
  160. c_contact VARCHAR(50) 否 否 否 否 否
  161. c_city VARCHAR(50) 否 否 否 否 否
  162. c_birth DATETIME 否 否 是 否 否
  163. */
  164. #1、创建数据库test04_Market。
  165. CREATE DATABASE test04_Market;
  166. USE test04_Market;
  167. #2、创建数据表customers,在c_num字段上添加主键约束和自增约束,在c_birth字段上添加非空约束。
  168. CREATE TABLE customers(
  169. c_num INT PRIMARY KEY AUTO_INCREMENT,
  170. c_name VARCHAR(50),
  171. c_contact VARCHAR(50),
  172. c_city VARCHAR(50),
  173. c_birth DATETIME NOT NULL
  174. );
  175. DESC customers;
  176. #3、将c_contact字段插入c_birth字段后面。
  177. ALTER TABLE customers
  178. MODIFY c_contact VARCHAR(50) AFTER c_birth;
  179. #4、将c_name字段数据类型改为VARCHAR(70)。
  180. ALTER TABLE customers
  181. MODIFY c_name VARCHAR(70);
  182. #5、将c_contact字段改名为c_phone。
  183. ALTER TABLE customers
  184. CHANGE c_contact c_phone VARCHAR(50);
  185. #6、增加c_gender字段,数据类型为CHAR(1)。
  186. ALTER TABLE customers
  187. ADD COLUMN c_gender CHAR(1);
  188. #7、将表名修改为customers_info。
  189. RENAME TABLE customers
  190. TO customers_info;
  191. DESC customers_info;
  192. #8、删除字段c_city。
  193. ALTER TABLE customers_info
  194. DROP c_city;
  195. #在test04_Market中创建数据表orders。orders表结构如下所示,按以下要求进行操作。
  196. /*
  197. 字段名 数据类型 主键 外键 非空 唯一 自增
  198. o_num INT(11) 是 否 是 是 是
  199. o_date DATE 否 否 否 否 否
  200. c_id INT(11) 否 是 否 否 否
  201. */
  202. #1、创建数据表orders,在o_num字段上添加主键约束和自增约束,在c_id字段上添加外键约束,关联customers表中的主键c_num。
  203. CREATE TABLE IF NOT EXISTS orders(
  204. o_num INT PRIMARY KEY AUTO_INCREMENT,
  205. o_date DATE,
  206. c_id INT,
  207. CONSTRAINT fk_orders_c_id FOREIGN KEY(c_id) REFERENCES customers_info(c_num)
  208. );
  209. DESC orders;
  210. #2、删除orders表的外键约束,然后删除表customers。
  211. #查看约束信息,主要是查看外键约束名
  212. SELECT * FROM information_schema.TABLE_CONSTRAINTS
  213. WHERE table_name = 'orders';
  214. #删除外键约束
  215. ALTER TABLE orders
  216. DROP FOREIGN KEY fk_orders_c_id;
  217. #查看索引名
  218. SHOW INDEX FROM orders;
  219. #删除索引
  220. ALTER TABLE orders
  221. DROP INDEX fk_orders_c_id;
  222. ######################################################################
  223. #练习2
  224. #创建数据表pet,并对表进行插入、更新与删除操作。pet表结构如下所示。
  225. #pet表结构
  226. /*
  227. 字段名 字段说明 数据类型 主键 外键 非空 唯一 自增
  228. name 宠物名称 ARCHAR(20) 否 否 是 否 否
  229. owner 宠物主人 ARCHAR(20) 否 否 否 否 否
  230. species 种类 ARCHAR(20) 否 否 是 否 否
  231. sex 性别 CHAR(1) 否 否 是 否 否
  232. birth 出生日期 YEAR 否 否 是 否 否
  233. death 死亡日期 TEAR 否 否 否 否 否
  234. */
  235. #pet表中记录
  236. /*
  237. name owner species sex birth death
  238. Fluffiy Harold cat f 2003 2010
  239. Claws Gwen cat m 2004 NULL
  240. Buffiy NULL dog f 2009 NULL
  241. Fang Benny dog m 2000 NULL
  242. Bowser Diane dog m 2003 2009
  243. Chirpy NULL bird f 2008 NULL
  244. */
  245. #1、首先创建数据表pet,使用不同的方法将表记录插入到pet表中。
  246. #创建表
  247. CREATE TABLE pet(
  248. `name` VARCHAR(20) NOT NULL,
  249. `owner` VARCHAR(20),
  250. species VARCHAR(20) NOT NULL,
  251. sex CHAR(1) NOT NULL,
  252. birth YEAR NOT NULL,
  253. death YEAR
  254. );
  255. DESC pet;
  256. #向表中插入数据
  257. INSERT INTO pet(name,owner,species,sex,birth,death)
  258. VALUES('Fluffiy','Harold','cat','f','2003','2010');
  259. INSERT INTO pet VALUES
  260. ('Claws','Gwen','cat','m','2004',NULL),
  261. ('Buffiy',NULL,'dog','f','2009',NULL),
  262. ('Fang','Benny','dog','m','2000',NULL),
  263. ('Bowser','Diane','dog','m','2003',2009),
  264. ('Chirpy',NULL,'bird','f','2008',NULL);
  265. SELECT * FROM pet;
  266. #2、使用UPDATE语句将名称为Fang的狗的主人改为Kevin。
  267. UPDATE pet
  268. SET owner = 'Kevin'
  269. WHERE name = 'Fang';
  270. #3、将没有主人的宠物owner字段值都改为Duck。
  271. UPDATE pet
  272. SET owner = 'Duck'
  273. WHERE owner IS NULL;
  274. #4、删除已死亡的宠物记录。
  275. DELETE FROM pet
  276. WHERE death IS NOT NULL;
  277. #5、删除所有表中的记录。
  278. DELETE FROM pet;
  279. SELECT * FROM pet;
  280. ######################################################################
  281. #练习3
  282. #1、创建数据库:test_company
  283. CREATE DATABASE IF NOT EXISTS test_company;
  284. USE test_company;
  285. #2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。
  286. /*
  287. A、部门表(department):部门编号(depid)。部门名称(depname)。
  288. 部门简介(depinfo);其中部门编号为主键。
  289. B、雇员表(employee):雇员编号(empid),姓名(name),性别(sex),
  290. 职称(title),出生日期(birthday),所在部门编号(depid);其中:
  291. 雇员编号为主键;
  292. 部门编号为外键,外键约束等级为(on update cascade和on delete set null);
  293. 性别默认为男;
  294. C、工资表(salary):雇员编号(empid),基本工资(basesalary),职务
  295. 工资(titlesalary),扣除(deduction)。其中雇员编号为主键。
  296. */
  297. #部门表
  298. CREATE TABLE department(
  299. depid INT,
  300. depname VARCHAR(20) NOT NULL,
  301. depinfo VARCHAR(50),
  302. PRIMARY KEY(depid)
  303. );
  304. DESC department;
  305. #雇员表
  306. CREATE TABLE employee(
  307. empid INT PRIMARY KEY,
  308. name VARCHAR(20) NOT NULL,
  309. sex CHAR(1) NOT NULL DEFAULT '男',
  310. title VARCHAR(15),
  311. birthday DATE NOT NULL,
  312. depid INT,
  313. CONSTRAINT fk_emp_depid FOREIGN KEY(depid) REFERENCES department(depid) ON UPDATE CASCADE ON DELETE SET NULL
  314. );
  315. DESC employee;
  316. #工资表
  317. CREATE TABLE salary(
  318. empid INT PRIMARY KEY,
  319. basesalary DECIMAL(10,2),
  320. titlesalary DECIMAL(10,2),
  321. deduction DECIMAL(10,2)
  322. );
  323. DESC salary;
  324. #3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为
  325. #(on update cascade和on delete cascade)
  326. ALTER TABLE salary
  327. ADD CONSTRAINT fk_sal_empid FOREIGN KEY(empid) REFERENCES employee(empid) ON UPDATE CASCADE ON DELETE CASCADE;
  328. #4、添加数据如下:
  329. #部门表:
  330. /*
  331. 部门编号 部门名称 部门简介
  332. 111 生产部 NULL
  333. 222 销售部 NULL
  334. 333 人事部 人力资源管理
  335. */
  336. #雇员表:
  337. /*
  338. 雇员编号 姓名 性别 职称 出生日期 所在部门编号
  339. 1001 张三 男 高级工程师 1975-1-1 111
  340. 1002 李四 女 助工 1985-1-1 111
  341. 1003 王五 男 工程师 1978-11-11 222
  342. 1004 张六 男 工程师 1999-1-1 222
  343. */
  344. #工资表:
  345. /*
  346. 雇员编号 基本工资 职务工资 扣除
  347. 1001 2200 1100 200
  348. 1002 1200 200 NULL
  349. 1003 2900 700 200
  350. 1004 1950 700 150
  351. */
  352. #添加部门表数据
  353. INSERT INTO department VALUES
  354. (111,'生产部',NULL),
  355. (222,'销售部',NULL),
  356. (333,'人事部','人力资源管理');
  357. SELECT * FROM department;
  358. #添加雇员表数据
  359. INSERT INTO employee VALUES
  360. (1001,'张三',DEFAULT,'高级工程师','1975-1-1',111),
  361. (1002,'李四','女','助工','1985-1-1',111),
  362. (1003,'王五','男','工程师','1978-11-11',222),
  363. (1004,'张六',DEFAULT,'工程师','1999-1-1',222);
  364. SELECT * FROM employee;
  365. #添加工资表数据
  366. INSERT INTO salary VALUES
  367. (1001,2200,1100,200),
  368. (1002,1200,200,NULL),
  369. (1003,2900,700,200),
  370. (1004,1950,700,150);
  371. SELECT * FROM salary;
  372. #5、查询出每个雇员的雇员编号、姓名、职称、所在部门名称、应发工资(基本工资+职务工资),实发工资(基本工资+职务工资-扣除)
  373. SELECT emp.empid,emp.name,emp.title,dep.depname,sal.basesalary+sal.titlesalary AS '应发工资',sal.basesalary+sal.titlesalary-IFNULL(sal.deduction,0) AS '实发工资'
  374. FROM employee AS emp JOIN department dep JOIN salary AS sal
  375. ON emp.depid = dep.depid AND emp.empid = sal.empid;
  376. #6、查询销售部门的雇员姓名及其基本工资
  377. SELECT emp.name,sal.basesalary
  378. FROM department dep JOIN employee emp JOIN salary sal
  379. ON dep.depid = emp.depid AND emp.empid = sal.empid
  380. WHERE dep.depname = '销售部';
  381. #7、查询姓“张”且年龄小于40的员工的全部信息和年龄
  382. SELECT *,YEAR(NOW())-YEAR(birthday) AS '年龄'
  383. FROM employee
  384. WHERE name LIKE '张%' AND (YEAR(NOW())-YEAR(birthday)) < 40;
  385. #8、查询所有男员工的基本工资和职务工资
  386. SELECT * FROM employee;
  387. SELECT emp.empid,emp.name,sal.basesalary,sal.titlesalary
  388. FROM employee emp JOIN salary sal
  389. ON emp.empid = sal.empid
  390. WHERE emp.sex = '男';
  391. #9、查询基本工资低于2000的员工姓名和职称、所在部门名称
  392. SELECT emp.name,emp.title,dep.depname
  393. FROM department dep JOIN employee emp JOIN salary sal
  394. ON dep.depid = emp.depid AND emp.empid = sal.empid
  395. WHERE sal.basesalary < 2000;
  396. #10、查询员工总数
  397. SELECT COUNT(*)
  398. FROM employee;
  399. #11、查询部门总数
  400. SELECT COUNT(*)
  401. FROM department;
  402. #12、查询应发工资的平均工资和最高工资、最低工资
  403. SELECT AVG(basesalary+titlesalary) AS '平均工资',MAX(basesalary+titlesalary) AS '最高工资',MIN(basesalary+titlesalary) AS '最低工资'
  404. FROM salary;
  405. #13、按照部门统计应发工资的平均工资
  406. SELECT depid,AVG(basesalary+titlesalary)
  407. FROM employee JOIN salary
  408. ON employee.empid = salary.empid
  409. GROUP BY employee.depid
  410. #14、找出部门基本工资的平均工资低于2000的
  411. SELECT depid,AVG(basesalary) AS avgsal
  412. FROM employee JOIN salary
  413. ON employee.empid = salary.empid
  414. GROUP BY employee.depid
  415. HAVING avgsal < 2000;
  416. #15、按照员工编号、姓名、基本工资、职务工资、扣除,并按照职务升序排列,如果职务工资相同,再按照基本工资升序排列。
  417. SELECT emp.empid,emp.name,emp.title,basesalary,titlesalary,deduction
  418. FROM employee emp JOIN salary sal
  419. ON emp.empid = sal.empid
  420. ORDER BY emp.title ASC,basesalary ASC;
  421. #16、查询员工编号、姓名,出生日期,及年龄段。其中,如果80年之前出生的,定为“老年”;80后定为“中年”,90后定为“青壮年”
  422. SELECT empid,name,birthday,
  423. CASE WHEN YEAR(birthday) < 1980 THEN '老年'
  424. WHEN YEAR(birthday) < 1990 THEN '中年'
  425. ELSE '青壮年' END AS '年龄段'
  426. FROM employee;
  427. #17、查询所有的员工信息,和他所在的部门名称
  428. SELECT emp.*,dep.depname
  429. FROM employee emp LEFT JOIN department dep
  430. ON emp.depid = dep.depid
  431. #18、查询所有部门信息,和该部门的员工信息
  432. SELECT dep.*,emp.*
  433. FROM department dep LEFT JOIN employee emp
  434. ON dep.depid = emp.depid
  435. #19、查询所有职位中含“工程师”的男员工的人数
  436. SELECT COUNT(*)
  437. FROM employee
  438. WHERE sex = '男' AND title LIKE '%工程师%';
  439. #20、查询每个部门的男生和女生的人数和平均基本工资
  440. SELECT dep.depid,emp.sex,COUNT(*),AVG(sal.basesalary)
  441. FROM department dep JOIN employee emp JOIN salary sal
  442. ON dep.depid = emp.depid AND emp.empid = sal.empid
  443. GROUP BY dep.depid,emp.sex
  444. ######################################################################
  445. #练习4:
  446. #1、创建一个数据库:test_school
  447. CREATE DATABASE IF NOT EXISTS test_school;
  448. USE test_school;
  449. #2、创建如下表格:
  450. #表1 Department表的定义
  451. /*
  452. 字段名 字段描述 数据类型 主键 外键 非空 唯一
  453. DepNo 部门号 INT(10) 是 否 是 是
  454. DepName 部门名称 VARCHAR(20) 否 否 是 否
  455. DepNote 部门备注 VARCHAR(50) 否 否 否 否
  456. */
  457. #表2 Teacher表的定义
  458. /*
  459. 字段名 字段描述 数据类型 主键 外键 非空 唯一
  460. Number 教工号 INT 是 否 是 是
  461. Name 姓名 VARCHAR(30) 否 否 是 否
  462. Sex 性别 VARCHAR(4) 否 否 否 否
  463. Birth 出生日期 DATE 否 否 否 否
  464. DepNo 部门号 INT 否 是 否 否
  465. Salary 工资 FLOAT 否 否 否 否
  466. Address 家庭住址 VARCHAR(100) 否 否 否 否
  467. */
  468. #创建表1
  469. CREATE TABLE Department(
  470. DepNo INT(10) PRIMARY KEY,
  471. DepName VARCHAR(20) NOT NULL,
  472. DepNote VARCHAR(50)
  473. );
  474. DESC Department;
  475. #创建表2
  476. CREATE TABLE Teacher(
  477. Number INT PRIMARY KEY,
  478. Name VARCHAR(30) NOT NULL,
  479. Sex VARCHAR(4),
  480. Birth DATE,
  481. DepNo INT,
  482. Salary FLOAT,
  483. Address VARCHAR(100),
  484. CONSTRAINT fk_teach_depno FOREIGN KEY(DepNo) REFERENCES Department(Depno)
  485. );
  486. DESC Teacher;
  487. #3、添加记录
  488. /*
  489. DepNo DepName DepNote
  490. 601 软件技术系 软件技术等专业
  491. 602 网络技术系 多媒体技术等专业
  492. 603 艺术设计系 广告艺术设计等专业
  493. 604 管理工程系 连锁经营管理等专业
  494. */
  495. /*
  496. Number Name Sex Birth DepNo Salary Address
  497. 2001 Tom 女 1970-01-10 602 4500 四川省绵阳市
  498. 2002 Lucy 男 1983-12-18 601 2500 北京市昌平区
  499. 2003 Mike 男 1990-06-01 604 1500 重庆市渝中区
  500. 2004 James 女 1980-10-20 602 3500 四川省成都市
  501. 2005 Jack 男 1975-05-30 603 1200 重庆市南岸区
  502. */
  503. #向部门表添加记录
  504. INSERT INTO Department VALUES
  505. (601,'软件技术系','软件技术等专业'),
  506. (602,'网络技术系','多媒体技术等专业'),
  507. (603,'艺术设计系','广告艺术设计等专业'),
  508. (604,'管理工程系','连锁经营管理等专业');
  509. SELECT * FROM Department;
  510. #向教师表中添加记录
  511. INSERT INTO Teacher VALUES
  512. (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),
  513. (2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),
  514. (2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),
  515. (2004,'James','女','1980-10-20',602,3500,'四川省成都阳市'),
  516. (2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区');
  517. SELECT * FROM Teacher;
  518. #4、用SELECT语句查询Teacher表的所有记录
  519. SELECT * FROM Teacher;
  520. #5、找出所有其家庭地址中含有“北京”的教师的教工号及部门名称,要求显示结果中各列标题用中文别名表示。
  521. SELECT teach.Number AS '教工号',dep.DepName AS '部门名称',teach.Address
  522. FROM Teacher teach LEFT JOIN Department dep
  523. ON teach.DepNo = dep.DepNo
  524. WHERE teach.Address LIKE '%北京%';
  525. #6、获得Teacher表中工资最高的教工号和姓名。
  526. #我做的
  527. SELECT Number,Name,MAX(Salary)
  528. FROM Teacher
  529. #老师给的
  530. #方法一
  531. SELECT Number,Name
  532. FROM Teacher
  533. WHERE salary =(SELECT MAX(Salary) FROM Teacher);
  534. #方法二
  535. SELECT Number,Name
  536. FROM Teacher
  537. ORDER BY Salary DESC LIMIT 0,1;
  538. #7、找出所有收入在2500~4000之间的教工号。
  539. SELECT Number
  540. FROM Teacher
  541. WHERE Salary BETWEEN 2500 AND 4000;
  542. #8、查找在网络技术系工作的教师的姓名、性别和工资。
  543. SELECT Name,Sex,Salary
  544. FROM Teacher teach JOIN Department dep
  545. ON teach.DepNo = dep.DepNo
  546. WHERE dep.DepName = '网络技术系'
  547. ######################################################################
  548. #练习5
  549. #1、建立数据库test_student
  550. #2、建立以下三张表,并插入记录
  551. #Table:Classes
  552. /*
  553. 专业 班级 姓名 性别 座位
  554. 计算机网络 1班 张三 男 8
  555. 软件工程 2班 李四 男 12
  556. 计算机维护 1班 王五 男 9
  557. 计算机网络 2班 LILY 女 15
  558. 软件工程 1班 小强 男 20
  559. 计算机维护 1班 CoCo 女 18
  560. */
  561. #Table:Score
  562. /*
  563. 姓名 英语 数据 语文
  564. 张三 65 75 98
  565. 李四 87 45 86
  566. 王五 98 86 65
  567. LILY 75 86 87
  568. 小强 85 60 58
  569. CoCo 96 87 70
  570. */
  571. #Table:Records
  572. /*
  573. 姓名 记录
  574. 小强 迟到
  575. 小强 事假
  576. 李四 旷课
  577. 李四 旷课
  578. 李四 迟到
  579. CoCo 病假
  580. LILY 事假
  581. */
  582. #3、写出将张三的语文成绩修改为88的SQL语句
  583. #4、搜索出计算机维护1班各门课程的平均成绩
  584. #5、搜索科目有不及格的人的名单
  585. #6、查询记录2次以上的学生的姓名和各科成绩
  586. ######################################################################
  587. #练习6
  588. #1、建立数据库:test_xuankedb
  589. #2、建立如下三张表:
  590. /*
  591. 学生表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、
  592. 年龄(Sage)、所在系(Sdept)五个字段,Sno为关键字。
  593. 课程表(Course)由课程号(Cno)、课程名(Cname)、选修课号(Cpno)、
  594. 学分(Ccredit)四个字段,Cno为关键字。
  595. 成绩表SG由学号(Sno)、课程号(Cno)、成绩(Grade)三个字段,
  596. (Sno,Cno)为关键字。
  597. */
  598. #3、向Student表增加“入学事件(Scome)”列,其数据类型为日期型。
  599. #4、查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。
  600. #5、查询学习1号课程的学生最高分数、平均成绩。
  601. #6、查询与“李洋”在同一个系学习的学生。
  602. #7、将计算机系全体学生的成绩置零。
  603. #8、删除学生表中学号为05019的学生记录。
  604. #9、删除计算机系所有学生的成绩记录。
  605. ######################################################################
  606. #练习7
  607. #1、建立数据库:test_library
  608. #2、建立如下三个表:
  609. /*
  610. 表一:press出版社 属性:编号pressid(int)、名称pressname(varchar)、
  611. 地址address(varchar)
  612. 表二:sort种类 属性:编号sortno(int)、数量scount(int)
  613. 表三:book图书 属性:编号bid(int)、名称bname(varchar)、
  614. 种类bsortno(int)、出版社编号pressid(int)
  615. */
  616. #3、给sort表中添加一系列属性:描述describes(varchar)
  617. #4、向三个表中各插入几条数据
  618. #表一:press
  619. /*
  620. pressid pressname address
  621. 100 外研社 上海
  622. 101 北大出版社 北京
  623. 102 教育出版社 北京
  624. */
  625. #表二:sort
  626. /*
  627. sortno scount describes
  628. 11 50 小说
  629. 12 300 科幻
  630. 13 100 神话
  631. */
  632. #表三:book
  633. /*
  634. bid bname bsortno pressid
  635. 1 红与黑 11 100
  636. 2 幻城 12 102
  637. 3 希腊神话 13 102
  638. */
  639. #5、查询出版社id为100的书的全部信息
  640. #6、查询出版社为外研社的书的全部信息
  641. #7、查询图书数量(scount)大于100的种类
  642. #8、查询图书种类最多的出版社信息
  643. ######################################################################
  644. #练习8
  645. #1、建立数据库:test_tour
  646. #2、建立如下两个表
  647. #agency旅行社表:
  648. /*
  649. 列名(英文名) 列名(中文名) 数据类型 允许空值 说明
  650. Id 旅行社编号 INT NO 主键
  651. Name 旅行社名 VARCHAR NO
  652. Address 旅行社地址 VARCHAR NO
  653. Areaid 所属区域id INT YES
  654. */
  655. #travel旅行线路表
  656. /*
  657. 列名(英文名) 列名(中文名) 数据类型 允许空值 说明
  658. Tid 旅行线路编号 INT NO 主键
  659. Time 所需时间 VARCHAR NO
  660. Position 目的地 VARCHAR NO
  661. Money 花费 FLOAT YES
  662. Aid 所属旅行社id INT NO 外键
  663. Count 报名人数 INT YES
  664. */
  665. #3、添加记录
  666. #agency表数据
  667. /*
  668. id name address
  669. 101 青年旅行社 北京海淀
  670. 102 天天旅行社 天津海院
  671. */
  672. #travel表数据
  673. /*
  674. tid time position money aid rcount
  675. 1 5天 八达岭 3000 101 10
  676. 2 7天 水长城 5000 101 14
  677. 3 8天 水长城 6000 102 11
  678. */
  679. #4、查出旅行线路最多的旅社
  680. #5、查出最热门的旅行线路(也就是查询出报名人数最多的线路)
  681. #6、查询花费少于5000的旅行线路
  682. #7、找到一次旅行花费最昂贵的旅行社名
  683. #8、查出青年旅社所有的旅行线路都玩一遍需要多少时间