368 lines
10 KiB
Markdown
368 lines
10 KiB
Markdown
### 练习一
|
|
|
|

|
|
|
|
```sql
|
|
#(1)创建数据库
|
|
CREATE DATABASE test04_Market DEFAULT CHARACTER SET utf8;
|
|
USE test04_Market;
|
|
#(2)创建数据表
|
|
CREATE TABLE customers(
|
|
c_num INT(11) PRIMARY KEY AUTO_INCREMENT,
|
|
c_name VARCHAR(50),
|
|
c_contact VARCHAR(50),
|
|
c_city VARCHAR(50),
|
|
c_birth DATETIME NOT NULL
|
|
);
|
|
#(3)更改字段的位置
|
|
#AFTER/BEFORE 字段名 设置位置在指定字段前/后
|
|
ALTER TABLE 表名 MODIFY 字段名 数据类型 AFTER/BEFORE 字段名;
|
|
ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth;
|
|
#(4)更改字段的数据类型
|
|
ALTER TABLE customers MODIFY c_name VARCHAR(70);
|
|
#(5)更改字段名
|
|
ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50);
|
|
#(6)添加字段
|
|
ALTER TABLE customers ADD c_gender CHAR(1);
|
|
#(7)更改表名
|
|
ALTER TABLE customers RENAME TO customers_info;
|
|
#(8)删除字段
|
|
ALTER TABLE customers_info DROP c_city;
|
|
```
|
|
|
|

|
|
|
|
```sql
|
|
#(1)创建表时 添加外键约束并指定外键约束名称
|
|
CREATE TABLE orders(
|
|
o_num INT(11) PRIMARY KEY AUTO_INCREMENT,
|
|
o_date DATE,
|
|
c_id INT(11),
|
|
CONSTRAINT fk_cid FOREIGN KEY(c_id) REFERENCES customers_info(c_num)
|
|
);
|
|
#(2)
|
|
#删除指定外键
|
|
ALTER TABLE orders DROP FOREIGN KEY orders_ibfk_1;
|
|
#删除指定表
|
|
DROP TABLE orders;
|
|
```
|
|
|
|
---
|
|
|
|
### 练习二
|
|
|
|

|
|
|
|

|
|
|
|
```sql
|
|
#(1)创建表、插入记录
|
|
CREATE TABLE pet(
|
|
`name` VARCHAR(20) NOT NULL COMMENT '宠物名称',
|
|
`owner` VARCHAR(20) COMMENT '宠物主人',
|
|
species VARCHAR(20) NOT NULL COMMENT '种类',
|
|
sex CHAR(1) NOT NULL COMMENT '性别',
|
|
birth YEAR NOT NULL COMMENT '出生日期',
|
|
death YEAR COMMENT '死亡日期'
|
|
);
|
|
INSERT INTO pet()
|
|
VALUES
|
|
('Fluffy', 'Harold', 'cat', 'f', 2003, 2010),
|
|
('Claws', 'Gwen', 'cat', 'm', 2004,NULL ),
|
|
('Buffy', NULL, 'dog', 'f', 2009, NULL),
|
|
('Fang', 'Benny', 'dog', 'm', 2000, NULL),
|
|
('Bowser', 'Diane', 'dog', 'm', 2003, 2009),
|
|
('Chirpy', NULL, 'bird', 'f', 2008, NULL);
|
|
#(2)更新记录
|
|
UPDATE pet
|
|
SET `owner` = 'Kevin'
|
|
WHERE `name` = 'Fang';
|
|
#(3)
|
|
UPDATE pet
|
|
SET `owner` = 'Kevin'
|
|
WHERE `owner` IS NULL;
|
|
#(4)
|
|
DELETE FROM pet
|
|
WHERE death IS NOT NULL;
|
|
#(5)
|
|
TRUNCATE pet;
|
|
```
|
|
|
|
---
|
|
|
|
### 练习三
|
|
|
|

|
|
|
|

|
|
|
|
```sql
|
|
#1.创建数据库
|
|
CREATE DATABASE test_compay DEFAULT CHARACTER SET utf8;
|
|
|
|
#2.创建表
|
|
CREATE TABLE department(
|
|
depid INT PRIMARY KEY AUTO_INCREMENT,
|
|
depname VARCHAR(20) NOT NULL,
|
|
deinfo VARCHAR(50)
|
|
);
|
|
CREATE TABLE employee(
|
|
empid INT PRIMARY KEY AUTO_INCREMENT,
|
|
`name` VARCHAR(20) NOT NULL,
|
|
sex CHAR(1) NOT NULL DEFAULT '男',
|
|
title VARCHAR(20) NOT NULL,
|
|
birthday DATE NOT NULL,
|
|
depid INT,
|
|
CONSTRAINT fk_eid_did FOREIGN KEY(depid) REFERENCES department(depid)
|
|
);
|
|
CREATE TABLE salary(
|
|
empid INT,
|
|
basesalary DECIMAL(10, 2),
|
|
titleSalary DECIMAL(10, 2),
|
|
decuction DECIMAL(10, 2)
|
|
);
|
|
#3添加外键并设置级联更新、级联删除
|
|
ALTER TABLE salary ADD CONSTRAINT fk_sal_eid FOREIGN KEY(empid)
|
|
REFERENCES employee(empid) ON UPDATE CASCADE ON DELETE CASCADE;
|
|
#4插入记录
|
|
INSERT INTO department (depid, depname, deinfo)
|
|
VALUES
|
|
(111, '生产部', NULL),
|
|
(222, '销售部', NULL),
|
|
(333, '人事部', NULL),
|
|
(444, '财务部', '负责公司财务管理'),
|
|
(555, '技术部', '负责技术研发与支持'),
|
|
(666, '市场部', '负责市场推广与品牌建设'),
|
|
(777, '客服部', '负责客户服务与支持'),
|
|
(888, '采购部', '负责公司物资采购'),
|
|
(999, '法务部', '负责公司法律事务'),
|
|
(1010, '行政部', '负责公司日常行政管理'),
|
|
(1011, '研发部', '负责新产品研发'),
|
|
(1012, '培训部', '负责员工培训与发展');
|
|
|
|
INSERT INTO employee (empid, name, sex, title, birthday, depid)
|
|
VALUES
|
|
(1001, '张三', '男', '高级工程师', '1975-1-1', 111),
|
|
(1002, '李四', '女', '助工', '1985-1-1', 111),
|
|
(1003, '王五', '男', '工程师', '1978-11-11', 222),
|
|
(1004, '赵六', '男', '工程师', '1999-1-1', 222),
|
|
(1005, '陈七', '女', '会计师', '1980-5-15', 444),
|
|
(1006, '刘八', '男', '软件工程师', '1990-8-20', 555),
|
|
(1007, '孙九', '女', '市场经理', '1985-12-25', 666),
|
|
(1008, '周十', '男', '客服专员', '1992-3-10', 777),
|
|
(1009, '吴十一', '女', '采购经理', '1988-7-22', 888),
|
|
(1010, '郑十二', '男', '法务顾问', '1983-9-30', 999),
|
|
(1011, '王十三', '女', '行政助理', '1995-4-18', 1010),
|
|
(1012, '李十四', '男', '研发工程师', '1991-11-5', 1011),
|
|
(1013, '赵十五', '女', '培训讲师', '1987-6-12', 1012),
|
|
(1014, '孙十六', '男', '技术支持', '1993-2-14', 555),
|
|
(1015, '杨十七', '女', '销售代表', '1994-8-8', 222);
|
|
|
|
INSERT INTO salary (empid, basesalary, titleSalary, decuction)
|
|
VALUES
|
|
(1001, 2200, 1100, 200),
|
|
(1002, 1200, 200, NULL),
|
|
(1003, 2900, 700, 200),
|
|
(1004, 1950, 700, 150),
|
|
(1005, 2500, 800, 100),
|
|
(1006, 3000, 1200, 250),
|
|
(1007, 2800, 1000, 200),
|
|
(1008, 1800, 300, 50),
|
|
(1009, 3200, 900, 300),
|
|
(1010, 3500, 1000, 400),
|
|
(1011, 2000, 400, 100),
|
|
(1012, 3100, 1100, 200),
|
|
(1013, 2700, 800, 150),
|
|
(1014, 2300, 700, 100),
|
|
(1015, 2600, 600, 200);
|
|
```
|
|
|
|

|
|
|
|
```sql
|
|
#5
|
|
SELECT e.empid, e.`name`, e.title, d.depname, s.basesalary + s.titleSalary, s.basesalary + s.titleSalary-IFNULL(s.decuction, 0)
|
|
FROM employee e, department d, salary s
|
|
WHERE e.depid = d.depid AND e.empid = s.empid;
|
|
#6
|
|
SELECT e.`name`, s.basesalary
|
|
FROM employee e, department d, salary s
|
|
WHERE e.depid = d.depid AND e.empid = s.empid AND d.depname = '销售部';
|
|
#7
|
|
SELECT *
|
|
FROM employee e
|
|
WHERe e.`name` LIKE '张%' AND TIMESTAMPDIFF(YEAR,e.birthday, NOW()) < 40;
|
|
#8
|
|
SELECT e.`name`, s.basesalary, s.titleSalary
|
|
FROM employee e, salary s
|
|
WHERE e.sex = '男' AND e.empid AND s.empid;
|
|
#9
|
|
SELECT e.`name`, e.title, d.depname
|
|
FROM employee e, department d, salary s
|
|
WHERE e.depid = d.depid AND e.empid = s.empid AND s.basesalary < 2000;
|
|
#10
|
|
SELECT COUNT(*)
|
|
FROM employee;
|
|
#11
|
|
SELECT COUNT(*)
|
|
FROM department d;
|
|
#12
|
|
SELECT AVG(s.basesalary + s.titleSalary), MAX(s.basesalary + s.titleSalary), MIN(s.basesalary + s.titleSalary)
|
|
FROM employee e, salary s
|
|
WHERE e.empid = s.empid;
|
|
#13
|
|
SELECT d.depname, AVG(s.basesalary + s.titleSalary)
|
|
FROM employee e, salary s, department d
|
|
WHERE e.empid = s.empid AND e.depid = d.depid
|
|
GROUP BY d.depid;
|
|
#14
|
|
SELECT d.depname, AVG(s.basesalary + s.titleSalary) avg
|
|
FROM employee e, salary s, department d
|
|
WHERE e.empid = s.empid AND e.depid = d.depid
|
|
GROUP BY d.depid
|
|
HAVING avg<2000;
|
|
#15
|
|
SELECT e.empid, e.`name`, s.basesalary, s.titleSalary, s.decuction
|
|
FROM employee e, salary s, department d
|
|
WHERE e.empid = s.empid AND e.depid = d.depid
|
|
ORDER BY s.titleSalary, s.basesalary;
|
|
#16
|
|
SELECT e.empid, e.`name`, e.birthday,
|
|
IF(YEAR(e.birthday) < 1980, '老年',
|
|
IF(YEAR(e.birthday)< 1990, '中年', '青壮年'))
|
|
FROM employee e;
|
|
#17
|
|
SELECT e.*, depname
|
|
FROM employee e, department d
|
|
WHERE e.depid = d.depid;
|
|
#18
|
|
SELECT d.*, e.*
|
|
FROM employee e, department d
|
|
WHERE e.depid = d.depid;
|
|
#19
|
|
SELECT *
|
|
FROM employee e
|
|
WHERE e.title LIKE '%工程师%' AND e.sex = '男';
|
|
#20
|
|
SELECT d.depname, e.sex, COUNT(*), AVG(s.basesalary)
|
|
FROM employee e, department d, salary s
|
|
WHERE e.depid = d.depid AND e.empid = s.empid
|
|
GROUP BY d.depid, e.sex;
|
|
```
|
|
|
|
|
|
|
|
---
|
|
|
|
### 练习四
|
|
|
|

|
|
|
|

|
|
|
|
```sql
|
|
#1
|
|
CREATE DATABASE test_school DEFAULT CHARACTER SET 'UTF8';
|
|
#2
|
|
DROP TABLE department;
|
|
CREATE TABLE department(
|
|
depNo INT(10) PRIMARY KEY COMMENT '部门号',
|
|
depName VARCHAR(50) NOT NULL COMMENT '部门名称',
|
|
depNote VARCHAR(20) COMMENT '部门备注'
|
|
);
|
|
CREATE TABLE teacher(
|
|
number INT PRIMARY KEY COMMENT '教工号',
|
|
`name` VARCHAR(30) NOT NULL COMMENT '姓名',
|
|
sex VARCHAR(4) COMMENT '性别',
|
|
birth DATE COMMENT '出生日期',
|
|
depNo INT COMMENT '部门号',
|
|
salary FLOAT COMMENT '工资',
|
|
address VARCHAR(100) COMMENT '家庭住址'
|
|
);
|
|
INSERT INTO department()
|
|
VALUES
|
|
(601, '软件技术系', '软件技术等专业'),
|
|
(602, '网络技术系', '多媒体技术等专业'),
|
|
(603, '艺术设计系', '广告艺术设计等专业'),
|
|
(604, '管理工程系', '连锁经营管理等专业');
|
|
|
|
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, '重庆市南岸区');
|
|
```
|
|
|
|

|
|
|
|
```sql
|
|
#4
|
|
SELECT *
|
|
FROM teacher;
|
|
#5
|
|
SELECT t.number '教工号', d.depName '部门名称'
|
|
FROM teacher t, department d
|
|
WHERE t.depNo = d.depNo AND t.address LIKE '%北京%';
|
|
#6
|
|
SELECT t.number, t.`name`
|
|
FROM teacher t
|
|
ORDER BY t.salary DESC
|
|
LIMIT 1;
|
|
#7
|
|
SELECT t.number, t.`name`
|
|
FROM teacher t
|
|
WHERE t.salary BETWEEN 2500 AND 4000;
|
|
#8
|
|
SELECT t.`name`, t.sex, t.salary
|
|
FROM teacher t, department d
|
|
WHERE t.depNo = d.depNo AND d.depName = '网络技术系';
|
|
```
|
|
|
|
---
|
|
|
|
### 练习五
|
|
|
|

|
|
|
|
```sql
|
|
```
|
|
|
|

|
|
|
|
```sql
|
|
```
|
|
|
|
---
|
|
|
|
### 练习六
|
|
|
|

|
|
|
|
```sql
|
|
```
|
|
|
|
---
|
|
|
|
### 练习七
|
|
|
|

|
|
|
|

|
|
|
|
```sql
|
|
```
|
|
|
|
---
|
|
|
|
### 练习八
|
|
|
|

|
|
|
|

|
|
|
|
```sql
|
|
```
|
|
|