Verified Commit 6175bc16 authored by Kiryuu Sakuya's avatar Kiryuu Sakuya 🎵
Browse files

Hello World

parent 544f6d30
# 给 MariaDB 设置 UTF-8 # 给 MariaDB 设置 UTF-8
## 为什么? ## 为什么?
因为 MySQL / MariaDB 的 UTF-8 是假 UTF-8。 因为 MySQL / MariaDB 的 UTF-8 是假 UTF-8。
> The “utf8” encoding only supports three bytes per character. The real UTF-8 encoding — which everybody uses, including you — needs up to four bytes per character. > The “utf8” encoding only supports three bytes per character. The real UTF-8 encoding — which everybody uses, including you — needs up to four bytes per character.
## 设置 ## 设置
> 以 Linux 系统为例 > 以 Linux 系统为例
关闭 MariaDB,打开 `/etc/my.cnf`,输入以下代码: 关闭 MariaDB,打开 `/etc/my.cnf`,输入以下代码:
``` ```
[client] [client]
default-character-set = utf8mb4 default-character-set = utf8mb4
[mysql] [mysql]
default-character-set = utf8mb4 default-character-set = utf8mb4
[mysqld] [mysqld]
init-connect='SET NAMES utf8mb4' init-connect='SET NAMES utf8mb4'
character-set-client-handshake = FALSE character-set-client-handshake = FALSE
character-set-server = utf8mb4 character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci collation-server = utf8mb4_unicode_ci
``` ```
然后启动 MariaDB,输入 `show variables like "%character%";show variables like "%collation%";` 然后启动 MariaDB,输入 `show variables like "%character%";show variables like "%collation%";`
这时看看是否 `character_set_client`, `character_set_connection``character_set_database` 为 utf8mb4。 这时看看是否 `character_set_client`, `character_set_connection``character_set_database` 为 utf8mb4。
如果是的话,那么退出 MariaDB,将以前的表进行自动转换: 如果是的话,那么退出 MariaDB,将以前的表进行自动转换:
``` ```
mysqlcheck -u root -p --auto-repair --optimize --all-databases mysqlcheck -u root -p --auto-repair --optimize --all-databases
``` ```
当然,你也可以手动转换: 当然,你也可以手动转换:
``` ```
# For each database: # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table: # For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column: # For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.) # (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
``` ```
\ No newline at end of file
# 实验三 # 实验三
## 名词解释 ## 名词解释
> Constraint 是约束的意思 > Constraint 是约束的意思
约束实际上就是表中数据的限制条件。比如 name 字段中要让其用户名不重复,这就需要添加约束。或者,注册的时候必须要添加邮箱,这也是约束。 约束实际上就是表中数据的限制条件。比如 name 字段中要让其用户名不重复,这就需要添加约束。或者,注册的时候必须要添加邮箱,这也是约束。
### 主键约束 ### 主键约束
> 即 Primary Key > 即 Primary Key
- 每个表中只能有一个主键。 - 每个表中只能有一个主键。
- 主键值须非空不重复。 - 主键值须非空不重复。
- 可设置单字段主键,也可设置多字段联合主键。 - 可设置单字段主键,也可设置多字段联合主键。
- 联合主键中多个字段的数据完全相同时,才违反主键约束。 - 联合主键中多个字段的数据完全相同时,才违反主键约束。
例如在表级添加主键约束: 例如在表级添加主键约束:
```mysql ```mysql
create table <表名>( create table <表名>(
<字段名1> <字段类型1>, <字段名1> <字段类型1>,
<字段名2> <字段类型2>, <字段名2> <字段类型2>,
...... ......
<字段名n> <字段类型n>, <字段名n> <字段类型n>,
[constraint 主键约束名] primary key(字段名1[,字段名2,...字段名n])); [constraint 主键约束名] primary key(字段名1[,字段名2,...字段名n]));
``` ```
已有表添加主键约束: 已有表添加主键约束:
```mysql ```mysql
alter table <表名> add [constraint 主键约束名] primary key(字段名); alter table <表名> add [constraint 主键约束名] primary key(字段名);
# 创建无主键约束的表 # 创建无主键约束的表
mysql> create table employee( mysql> create table employee(
-> e_id int, -> e_id int,
-> e_name varchar(5), -> e_name varchar(5),
-> e_sex varchar(5), -> e_sex varchar(5),
-> e_age int, -> e_age int,
-> d_id int); -> d_id int);
# 添加主键约束 # 添加主键约束
mysql> alter table employee add primary key(e_id); mysql> alter table employee add primary key(e_id);
``` ```
删除主键约束: 删除主键约束:
```mysql ```mysql
alter table <表名> drop primary key; alter table <表名> drop primary key;
``` ```
### 唯一约束 ### 唯一约束
> 即 Unique > 即 Unique
在列表添加唯一约束: 在列表添加唯一约束:
```mysql ```mysql
create table <表名> ( create table <表名> (
<字段名1> <字段类型1>, <字段名1> <字段类型1>,
<字段名2> <字段类型2>, <字段名2> <字段类型2>,
...... ......
<字段名n> <字段类型n>, <字段名n> <字段类型n>,
[constraint 唯一约束名] unique (字段名1[,字段名2...字段名n])); [constraint 唯一约束名] unique (字段名1[,字段名2...字段名n]));
``` ```
### 外键约束 ### 外键约束
> 即 Foreign Key > 即 Foreign Key
#### 外键是什么? #### 外键是什么?
若有两个表 A、B,id 是 A 的主键,而 B 中也有 id 字段,则 id 就是表 B 的外键,外键约束主要用来维护两个表之间数据的一致性。 若有两个表 A、B,id 是 A 的主键,而 B 中也有 id 字段,则 id 就是表 B 的外键,外键约束主要用来维护两个表之间数据的一致性。
某个字段添加**外键约束**之后,该字段称为**外键字段**,外键字段中每个数据都是**外键值** 某个字段添加**外键约束**之后,该字段称为**外键字段**,外键字段中每个数据都是**外键值**
- 外键值可以为 null。 - 外键值可以为 null。
- 外键字段去引用一张表的某个字段的时候,被引用的字段必须具有 unique 约束。 - 外键字段去引用一张表的某个字段的时候,被引用的字段必须具有 unique 约束。
- 有了外键引用之后,表分为父表和子表(在上述假设 A 为班级表,B 为学生表,那么 A 为父表,B 为字表) - 有了外键引用之后,表分为父表和子表(在上述假设 A 为班级表,B 为学生表,那么 A 为父表,B 为字表)
- 创建先创建父表,删除先删除子表数据,插入先插入父表数据 - 创建先创建父表,删除先删除子表数据,插入先插入父表数据
外键约束为某一表中某字段的值依赖于另一张表中某字段的值。主键所在的表为主表,外键所在的表为从表;每一个外键值必须与另一个表中的主键值相对应。 外键约束为某一表中某字段的值依赖于另一张表中某字段的值。主键所在的表为主表,外键所在的表为从表;每一个外键值必须与另一个表中的主键值相对应。
```mysql ```mysql
# 创建一个主表 # 创建一个主表
mysql> create table department( mysql> create table department(
-> d_id int primary key, -> d_id int primary key,
-> d_name varchar(5), -> d_name varchar(5),
-> d_num int); -> d_num int);
# 创建从表的同时添加外键 # 创建从表的同时添加外键
mysql> create table employee( mysql> create table employee(
-> e_id int primary key, -> e_id int primary key,
-> e_name varchar(5), -> e_name varchar(5),
-> e_sex varchar(5), -> e_sex varchar(5),
-> e_age int, -> e_age int,
-> d_id int, -> d_id int,
-> foreign key(d_id) references department(d_id)); -> foreign key(d_id) references department(d_id));
# 即 [constraint 外键约束名] foreign key(字段名) references <主表>(主键字段) # 即 [constraint 外键约束名] foreign key(字段名) references <主表>(主键字段)
``` ```
### 检查约束 ### 检查约束
> 即 Check > 即 Check
用于指定需要检查的限定条件。 用于指定需要检查的限定条件。
```mysql ```mysql
# 用法是 check(<限定条件>),例如检查年龄大于 0 # 用法是 check(<限定条件>),例如检查年龄大于 0
mysql> create table employee( mysql> create table employee(
-> e_id int primary key, -> e_id int primary key,
-> e_name varchar(5), -> e_name varchar(5),
-> e_sex varchar(5), -> e_sex varchar(5),
-> e_age int, -> e_age int,
-> d_id int, -> d_id int,
-> check(e_age>=0)); -> check(e_age>=0));
# 在已有添加则为 alter table <表名> add constraint <检查约束名> check(<限定条件>); # 在已有添加则为 alter table <表名> add constraint <检查约束名> check(<限定条件>);
``` ```
## 预想的表结构 ## 预想的表结构
根据实验二的表情况,我们应进行以下操作: 根据实验二的表情况,我们应进行以下操作:
- `employee` - `employee`
-`emp_no` 字段设置为主键约束,同时 `sales` 表内的 `sale_id` 字段设置为外键约束 -`emp_no` 字段设置为主键约束,同时 `sales` 表内的 `sale_id` 字段设置为外键约束
- 添加检查约束,规定 `emp_sex` 字段只能是 `男``女``NaN` - 添加检查约束,规定 `emp_sex` 字段只能是 `男``女``NaN`
- `customer` - `customer`
-`cust_id` 字段设置为主键约束,同时 `sales` 表内的 `cust_id` 字段设置为外键约束 -`cust_id` 字段设置为主键约束,同时 `sales` 表内的 `cust_id` 字段设置为外键约束
- `sales` - `sales`
- **虽然 `order_no` 是主键约束,但是因为我们在 `sale_item` 这个表内建立了约束,无需再建立** - **虽然 `order_no` 是主键约束,但是因为我们在 `sale_item` 这个表内建立了约束,无需再建立**
-`order_date` 字段与 `sale_item` 表内的 `order_date` 字段联系并将后者设置为外键约束 -`order_date` 字段与 `sale_item` 表内的 `order_date` 字段联系并将后者设置为外键约束
- 这里加是没有意义的行为,而且本身不能用 datetime 来存储时间——应该用 Unix 时间戳来存储 - 这里加是没有意义的行为,而且本身不能用 datetime 来存储时间——应该用 Unix 时间戳来存储
- 添加唯一约束,应用在 `invoice_no` 字段 - 添加唯一约束,应用在 `invoice_no` 字段
- `sale_item` - `sale_item`
-`order_no` 字段设置为主键约束,同时 `sales` 表内的 `order_no` 字段设置为外键约束 -`order_no` 字段设置为主键约束,同时 `sales` 表内的 `order_no` 字段设置为外键约束
- `product` - `product`
-`prod_id` 字段设置为主键约束,同时 `sale_item` 表内的 `prod_id` 字段设置为外键约束 -`prod_id` 字段设置为主键约束,同时 `sale_item` 表内的 `prod_id` 字段设置为外键约束
### 示例代码 ### 示例代码
#### `employee` 表 #### `employee` 表
1. 主键约束已设置 1. 主键约束已设置
```mysql ```mysql
# alter table <表名> add [constraint 主键约束名] primary key(字段名); # alter table <表名> add [constraint 主键约束名] primary key(字段名);
ALTER TABLE employee ADD PRIMARY KEY (emp_no); ALTER TABLE employee ADD PRIMARY KEY (emp_no);
``` ```
2. 外键约束 2. 外键约束
```mysql ```mysql
# 没错,是从外键连回主键 # 没错,是从外键连回主键
ALTER TABLE sales ADD FOREIGN KEY (sale_id) REFERENCES employee(emp_no); ALTER TABLE sales ADD FOREIGN KEY (sale_id) REFERENCES employee(emp_no);
``` ```
3. 检查约束 3. 检查约束
```mysql ```mysql
# alter table <表名> add constraint <检查约束名> check(<限定条件>); # alter table <表名> add constraint <检查约束名> check(<限定条件>);
ALTER TABLE employee ADD CONSTRAINT Check_Sex CHECK (emp_sex IN ("男", "女", "NaN")); ALTER TABLE employee ADD CONSTRAINT Check_Sex CHECK (emp_sex IN ("男", "女", "NaN"));
# 两个的话可以用 AND 或 OR? # 两个的话可以用 AND 或 OR?
``` ```
##### Bonus time! ##### Bonus time!
比如,检查编号是否为五位数 比如,检查编号是否为五位数
```mysql ```mysql
ALTER TABLE employee ADD CHECK(emp_no RLIKE "[0-9][0-9][0-9][0-9][0-9]"); ALTER TABLE employee ADD CHECK(emp_no RLIKE "[0-9][0-9][0-9][0-9][0-9]");
``` ```
如果用 REGEX 的话就是 如果用 REGEX 的话就是
```mysql ```mysql
ALTER TABLE employee ADD CONSTRAINT CHECK (emp_no REGEXP '\\d{5}'); ALTER TABLE employee ADD CONSTRAINT CHECK (emp_no REGEXP '\\d{5}');
``` ```
或者,输入的编号必须以 E 开头的 5 位数编号 或者,输入的编号必须以 E 开头的 5 位数编号
```mysql ```mysql
ALTER TABLE employee ADD CHECK(emp_no RLIKE "[E][0-9][0-9][0-9][0-9][0-9]"); ALTER TABLE employee ADD CHECK(emp_no RLIKE "[E][0-9][0-9][0-9][0-9][0-9]");
``` ```
其它有趣的 其它有趣的
``` ```
mail LIKE "[^0-9]%[@][q][q][.][c][o][m]" mail LIKE "[^0-9]%[@][q][q][.][c][o][m]"
检查邮箱,表示第一个字符不允许是数字,第一个字符与@符号之间是任意字符。后面是固定格式 检查邮箱,表示第一个字符不允许是数字,第一个字符与@符号之间是任意字符。后面是固定格式
一些正则表达式: 一些正则表达式:
'_' 为一个字符,比如 A Like "C_" '_' 为一个字符,比如 A Like "C_"
% 表示任意长度的字符串,比如 B Like "CO_%" % 表示任意长度的字符串,比如 B Like "CO_%"
[] 表示括号中所指定范围内的一个字符,比如 C Like "9W0[1-2]" [] 表示括号中所指定范围内的一个字符,比如 C Like "9W0[1-2]"
[^] 表示不在括号中所指定范围内的一个字符,比如 D Like "%[A-D][^1-2]" [^] 表示不在括号中所指定范围内的一个字符,比如 D Like "%[A-D][^1-2]"
``` ```
#### `customer` 表 #### `customer` 表
1. 主键约束已设置 1. 主键约束已设置
```mysql ```mysql
ALTER TABLE customer ADD PRIMARY KEY (cust_id); ALTER TABLE customer ADD PRIMARY KEY (cust_id);
``` ```
2. 外键约束 2. 外键约束
```mysql ```mysql
ALTER TABLE sales ADD FOREIGN KEY (cust_id) REFERENCES customer(cust_id); ALTER TABLE sales ADD FOREIGN KEY (cust_id) REFERENCES customer(cust_id);
``` ```
#### `sales` 表 #### `sales` 表
1. 主键约束已设置 1. 主键约束已设置
```mysql ```mysql
ALTER TABLE sales ADD PRIMARY KEY (order_no); ALTER TABLE sales ADD PRIMARY KEY (order_no);
``` ```
2. 外键约束 2. 外键约束
> 理论上,但行不通。 > 理论上,但行不通。
```mysql ```mysql
ALTER TABLE sale_item ADD FOREIGN KEY (order_date) REFERENCES sales(order_date); ALTER TABLE sale_item ADD FOREIGN KEY (order_date) REFERENCES sales(order_date);
``` ```
3. 唯一约束 3. 唯一约束
```mysql ```mysql
# alter table <表名> add [constraint 唯一约束名] unique (字段名); # alter table <表名> add [constraint 唯一约束名] unique (字段名);
ALTER TABLE sales ADD UNIQUE(invoice_no); ALTER TABLE sales ADD UNIQUE(invoice_no);
``` ```
#### `sale_item` 表 #### `sale_item` 表
外键约束 外键约束
```mysql ```mysql
ALTER TABLE sales ADD FOREIGN KEY (order_no) REFERENCES sale_item(order_no); ALTER TABLE sales ADD FOREIGN KEY (order_no) REFERENCES sale_item(order_no);
``` ```
如果输入错误 如果输入错误
```mysql ```mysql
ALTER TABLE sale_item DROP FOREIGN KEY (order_no); ALTER TABLE sale_item DROP FOREIGN KEY (order_no);
``` ```
#### `product` 表 #### `product` 表
外键约束 外键约束
```mysql ```mysql
ALTER TABLE sale_item ADD FOREIGN KEY (prod_id) REFERENCES product(prod_id); ALTER TABLE sale_item ADD FOREIGN KEY (prod_id) REFERENCES product(prod_id);
``` ```
## 其它 ## 其它
找两个表中的不同项 找两个表中的不同项
```mysql ```mysql
SELECT order_no from sale_item where order_date NOT IN (SELECT order_date from sales); SELECT order_no from sale_item where order_date NOT IN (SELECT order_date from sales);
``` ```
\ No newline at end of file
...@@ -136,10 +136,11 @@ INSERT INTO customer ( ...@@ -136,10 +136,11 @@ INSERT INTO customer (
| 11035462019090923452228404 | 100008 | 20002 | 35 | 2019-09-09 23:45:22 | 2019-09-10 00:00:00 | 34600366 | | 11035462019090923452228404 | 100008 | 20002 | 35 | 2019-09-09 23:45:22 | 2019-09-10 00:00:00 | 34600366 |
| 11035462019091021342023750 | 100009 | 20002 | 89 | 2019-09-10 21:34:20 | 2019-09-11 09:11:32 | 34600368 | | 11035462019091021342023750 | 100009 | 20002 | 89 | 2019-09-10 21:34:20 | 2019-09-11 09:11:32 | 34600368 |
| 11035462019091109080728562 | 100010 | 20002 | 50 | 2019-09-11 09:08:07 | 2019-09-11 12:06:22 | 34600370 | | 11035462019091109080728562 | 100010 | 20002 | 50 | 2019-09-11 09:08:07 | 2019-09-11 12:06:22 | 34600370 |
| 11035462019111100000029425 | 100008 | 20001 | 50 | 2019-11-11 00:00:01 | 2019-11-11 10:30:22 | 34600372 | | 11035462019111100000029425 | 100008 | 20001 | 350 | 2019-11-11 00:00:00 | 2019-11-11 10:30:22 | 34600372 |
| 11035462019111100000036455 | 100011 | 20002 | 350 | 2019-11-11 00:00:00 | 2019-11-11 08:11:43 | 34600374 | | 11035462019111100000036455 | 100011 | 20002 | 29 | 2019-11-11 00:00:00 | 2019-11-11 08:11:43 | 34600374 |
| 11035462019111100000020957 | 100012 | 20002 | 1 | 2019-11-11 00:00:00 | 2019-11-11 08:11:43 | 34600376 | | 11035462019111100000020957 | 100012 | 20002 | 1 | 2019-11-11 00:00:00 | 2019-11-11 08:11:43 | 34600376 |
| 11035462019111100000123945 | 100013 | 20001 | 29 | 2019-11-11 00:00:00 | 2019-11-11 10:30:22 | 34600378 | | 11035462019111100000123945 | 100013 | 20001 | 50 | 2019-11-11 00:00:01 | 2019-11-11 10:30:22 | 34600378 |
#### 示例代码 #### 示例代码
...@@ -149,7 +150,7 @@ INSERT INTO sales ( ...@@ -149,7 +150,7 @@ INSERT INTO sales (
) VALUE ( ) VALUE (
"11035462019090116054034524", "100000", "20001", "56.5", "2019-09-01 16:05:40", "2019-09-01 18:23:02", "34600350" "11035462019090116054034524", "100000", "20001", "56.5", "2019-09-01 16:05:40", "2019-09-01 18:23:02", "34600350"
), ( ), (
"11035462019090211345678134", "100001", "20002", "2510", "2019-09-02 11:34:56", "2019-09-04 13:01:22", "34600352" "11035462019090211345678134", "100001", "20002", "502", "2019-09-02 11:34:56", "2019-09-04 13:01:22", "34600352"
), ( ), (
"11035462019090312553243345", "100002", "20001", "70", "2019-09-03 12:55:32", "2019-09-03 15:05:23", "34600354" "11035462019090312553243345", "100002", "20001", "70", "2019-09-03 12:55:32", "2019-09-03 15:05:23", "34600354"
), ( ), (
...@@ -169,13 +170,13 @@ INSERT INTO sales ( ...@@ -169,13 +170,13 @@ INSERT INTO sales (
), ( ), (
"11035462019091109080728562", "100010", "20002", "50", "2019-09-11 09:08:07", "2019-09-11 12:06:22", "34600370" "11035462019091109080728562", "100010", "20002", "50", "2019-09-11 09:08:07", "2019-09-11 12:06:22", "34600370"
), ( ), (
"11035462019111100000029425", "100008", "20001", "50", "2019-11-11 00:00:01", "2019-11-11 10:30:22", "34600372" "11035462019111100000029425", "100008", "20001", "350", "2019-11-11 00:00:00", "2019-11-11 10:30:22", "34600372"
), ( ), (
"11035462019111100000036455", "100011", "20002", "350", "2019-11-11 00:00:00", "2019-11-11 08:11:43", "34600374" "11035462019111100000036455", "100011", "20002", "1", "2019-11-11 00:00:00", "2019-11-11 08:11:43", "34600374"
), ( ), (
"11035462019111100000020957", "100012", "20002", "1", "2019-11-11 00:00:00", "2019-11-11 08:11:43", "34600376" "11035462019111100000020957", "100012", "20002", "29", "2019-11-11 00:00:00", "2019-11-11 08:11:43", "34600376"
), ( ), (
"11035462019111100000123945", "100013", "20001", "29", "2019-11-11 00:00:00", "2019-11-11 10:30:22", "34600378" "11035462019111100000123945", "100013", "20001", "50", "2019-11-11 00:00:01", "2019-11-11 10:30:22", "34600378"
); );
``` ```
......
# 实验五
## 名词解释
## 预想的表结构
### 示例代码
#### 1. 查找出 employee 表中部门相同且住址相同的女员工的姓名、性别、职称、工资及住址
```mysql
SHOW FULL COLUMNS FROM employee;
# 查找 employee 表中住址相同的 SELECT * FROM employee WHERE emp_addr IN (SELECT emp_addr FROM employee GROUP BY emp_addr HAVING COUNT(emp_addr)>1);
SELECT * FROM employee WHERE (emp_addr, emp_dept, emp_sex="男") IN (SELECT emp_addr, emp_dept, emp_sex FROM employee GROUP BY emp_addr, emp_dept, emp_sex HAVING COUNT(*)>1);
```
#### 2. 检索 product 表和 sale_item 表中相同产品的产品编号、产品名称、数量及单价
```mysql
SHOW FULL COLUMNS FROM product;
SHOW FULL COLUMNS FROM sale_item;
# 查找两表中重复产品并以 product 表输出 sale_item 表中已有的产品 SELECT * FROM product WHERE prod_id IN (SELECT prod_id FROM sale_item GROUP BY prod_id HAVING COUNT(prod_id)>0);
SELECT product.prod_id AS "产品编号", product.prod_name AS "产品名称", sale_item.qty AS "数量", sale_item.unit_price AS "单价" FROM product, sale_item WHERE product.prod_id=sale_item.prod_id;
```
#### 3. 检索 product 表和 sale_item 表中单价高于 100 元的相同产品的产品编号、产品名称、数量及单价
```mysql
SHOW FULL COLUMNS FROM product;
SHOW FULL COLUMNS FROM sale_item;
SELECT product.prod_id AS "产品编号", product.prod_name AS "产品名称", sale_item.qty AS "数量", sale_item.unit_price AS "单价" FROM product, sale_item WHERE product.prod_id=sale_item.prod_id AND sale_item.unit_price>100;