表名 | 字段名 | 意义 |
---|---|---|
customers | cust_id | 客户编号 |
cust_name | 客户名称 | |
cust_address | 客户地址 | |
cust_city | 客户所在城市 | |
cust_state | 客户所在州 | |
cust_zip | 客户邮政编码 | |
cust_country | 客户所在国家 | |
cust_contact | 客户联系人 | |
cust_email | 客户电子邮件地址 | |
orderitems | order_num | 订单编号 |
order_item | 订单商品编号 | |
prod_id | 商品编号 | |
quantity | 商品数量 | |
item_price | 商品单价 | |
orders | order_num | 订单编号 |
order_date | 下单日期 | |
cust_id | 客户编号 | |
products | prod_id | 商品编号 |
vend_id | 供应商编号 | |
prod_name | 商品名称 | |
prod_price | 商品价格 | |
prod_desc | 商品描述 | |
vendors | vend_id | 供应商编号 |
vend_name | 供应商名称 | |
vend_address | 供应商地址 | |
vend_city | 供应商所在城市 | |
vend_state | 供应商所在州 | |
vend_zip | 供应商邮编 | |
vend_country | 供应商所在国家 | |
productnotes | note_id | 备注编号 |
prod_id | 商品编号 | |
note_date | 备注日期 | |
note_text | 备注内容 |
代码行 | 代码解释 |
---|---|
use mysql_learn; | 使用 mysql_learn 数据库 |
show DATABASES; | 显示所有数据库 |
show TABLES; | 显示所有表格 |
show COLUMNS FROM user; | 显示 user 表格中所有的列名和属性 |
show status; | 显示 MySQL 服务器状态 |
show create DATABASE mysql_learn; | 显示 mysql_learn 数据库的创建语句 |
show create table user; | 显示 user 表格的创建语句 |
SELECT语句 | 功能 | 注释 |
---|---|---|
select prod_name from products; | 检索单列 | 检索products表中的prod_name列 |
select prod_id, prod_name, prod_price from products; | 检索多列 | 检索products表中的prod_id、prod_name、prod_price三列 |
select * from products; | 检索所有列 | 检索products表中的所有列 |
select distinct vend_id from products; | 检索列,去重 | 检索products表中的vend_id列,并去重 |
select * from products limit 5; | 限制行数为5 | 从products表中检索前5行 |
select * from products limit 1, 4; | 限制行数为4,从第二行开始检索 | 从products表中第二行开始,检索4行 |
select * from products limit 4 OFFSET 1; | 限制行数为4,从第二行开始检索 | 从products表中第二行开始,检索4行 |
<aside> 💡 查询时使用通配符会降低性能
</aside>
查询语句 | 说明 |
---|---|
select * from products ORDER BY prod_price; | 简单排序,按产品价格升序排列 |
select * from products ORDER BY prod_price, prod_name; | 多条件排序,先按产品价格升序排序,再按产品名称升序排序 |
select * from products ORDER BY prod_price desc; | 降序排序,按产品价格降序排列 |
select * from products ORDER BY prod_price desc LIMIT 1; | 找最大值,价格最高的产品 |
查询代码 | 解释说明 |
---|---|
select * from products where prod_price = 2.50; | 查询所有价格等于2.50的产品 |
select * from products where prod_name = 'fuses'; | 查询所有产品名称为"fuses"的产品 |
select * from products where prod_price < 10; | 查询所有价格低于10的产品 |
select * from products where vend_id != 1003; | 查询所有供应商ID不为1003的产品 |
select * from products where prod_price BETWEEN 5 and 10; | 查询所有价格在5和10之间的产品 |
select * from customers where cust_email is null; | 查询所有cust_email为空值的顾客 |
<aside> 💡 因此,在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行。
</aside>
代码 | 注释 |
---|---|
select * from products where vend_id = 1003 and prod_price <= 10; | AND 组合子句 |
select * from products where vend_id = 1002 or vend_id = 1003 | OR 组合子句 |
select * from products where vend_id = 1002 or vend_id = 1003 and prod_price > 10; | SQL优先处理AND操作符,所以会出现age<10的数据 |
select * from products where (vend_id = 1002 or vend_id = 1003) and prod_price > 10; | 使用括号查询,修复Bug |
select * from products where vend_id in (1002, 1003) | 使用IN查询 |
select * from products where vend_id not in (1002, 1003) | 使用NOT操作 |
查询语句 | 查询条件 |
---|---|
select * from products where prod_name like "jet%"; | 查询以jet开头的数据 |
select * from products where prod_name like "%anvil%"; | 查询包含anvil的数据,默认不区分大小写 |
select * from products where prod_name like "_ ton anvil"; | 下划线(_)通配符,匹配一个字符 |
代码 | 注释 |
---|---|
select prod_name from products where prod_name regexp '1000'; | 查询products表中prod_name列中包含1000的数据 |
select prod_name from products where prod_name like '%1000%'; | 查询products表中prod_name列中包含1000的数据,必须要用通配符 |
select prod_name from products where prod_name regexp '1000 | 2000'; |
select prod_name from products where prod_name regexp '1 | 2 |
select prod_name from products where prod_name regexp '[123] ton'; | 查询products表中prod_name列中包含1 ton、2 ton、3 ton的数据 |
select prod_name from products where prod_name regexp '[^5] ton'; | 查询products表中prod_name列中包含非5开头的ton的数据 |
select prod_name from products where prod_name regexp '[1-3]000'; | 查询products表中prod_name列中以1、2、3开头,后面跟着000的数据 |
select prod_name from products where prod_name regexp '\\\\.'; | 查询products表中prod_name列中包含.字符的数据,需要用两个\来转义 |
select prod_name from products where prod_name regexp '[:digit:]000'; | 查询products表中prod_name列中包含数字开头(如1 000)的数据 |
select prod_name from products where prod_name regexp '[[:digit:]]{4}'; | 查询products表中prod_name列中包含4个数字在一起的数据 |
select prod_name from products where prod_name regexp '[0-9][0-9][0-9][0-9]'; | 查询products表中prod_name列中包含4个数字在一起的数据,等同于上一句 |
select prod_name from products where prod_name regexp '\\([0-9] sticks?\\)'; | 查询products表中prod_name列中包含"数字 stick"或"数字 sticks"的数据 |
select prod_name from products where prod_name regexp '^[0-9]'; | 查询products表中prod_name列中以数字开头的数据 |
代码 | 注释 |
---|---|
select Concat(vend_name, ' (', vend_country, ')') from vendors; | 数据拼接 |
select Concat(vend_name, ' (', vend_country, ')') as vend_title from vendors; | as 关键字 |
select prod_id, quantity, item_price, quantity * item_price as expanded_price from orderitems; | 计算总价 |