基础sql语句练习

背景

常用的sql语句格式

写在前面
来自B站https://www.bilibili.com/video/BV1QJ411Q7pY?p=2
link

练习须知

up主提供了视频中的sql.读者如果需要在本地练习可以下载之后,导入。 注意建库语句中的COLLATE=utf8mb4_0900_ai_ci,Mysql5.7.30还不支持,可以去掉在执行。

1. join on

从P2视频的89:13秒开始
orders
在这里插入图片描述
customers
在这里插入图片描述

SELECT order_id,orders.customer_id,first_name,last_name
FROM orders
JOIN customers
	on orders.customer_id = customers.customer_id

或者使用表别名
SELECT order_id,o.customer_id,first_name,last_name
FROM orders o
JOIN customers c
	on o.customer_id = c.customer_id

通过两张表的orders.customer_id = customers.customer_id
查询出orders表中的order_id,orders.customer_id列和customers表中的first_name,last_name

在这里插入图片描述

order_items
在这里插入图片描述
products
在这里插入图片描述

SELECT order_id,oi.product_id,quantity,oi.unit_price
FROM order_items oi
JOIN products p
	on oi.product_id = p.product_id

在这里插入图片描述
3张表

select 
	o.order_id,
    o.order_date,
    c.first_name,
    c.last_name,
    os.name AS status
from orders o
join customers c
	on o.customer_id = c.customer_id
join order_statuses os
	on o.status = os.order_status_id

在这里插入图片描述

select 
	p.date,
    p.invoice_id,
    p.amount,
    c.name,
    pm.name
from payments p
join clients  c
	on p.client_id = c.client_id
join payment_methods pm
	on p.payment_method = pm.payment_method_id

在这里插入图片描述

select *
from order_items oi
join order_item_notes oin
	on oi.order_id = oin.order_id
	and oi.product_id = oin.product_id
select 
	o.order_id,
    o.order_date,
    c.first_name as customer
from orders o
join customers c
	on o.customer_id =  c.customer_id
join shippers sh
	on o.shipper_id = sh.shipper_id

在这里插入图片描述
使用left jion可以查看所有订单的快递员信息

select 
	o.order_id,
    o.order_date,
    c.first_name as customer,
    sh.name as shipper,
    os.name as status 
from orders o
join customers c
	on o.customer_id =  c.customer_id
left join shippers sh
	on o.shipper_id = sh.shipper_id
join order_statuses os
	on o.status = os.order_status_id

在这里插入图片描述

using

当join的表中有相同的列名时,可以使用using简化sql

select * 
from order_items oi
join order_item_notes oin
	on oi.order_id = oin.order_id and
		oi.product_id = oin.product_id

select * 
from order_items oi
join order_item_notes oin
	using (order_id,product_id)

自定义一个status列,该列的显示全部为'Archived'

select 
	order_id,
    order_date,
    'Archived' as status
from orders
where order_date < '2019-01-01'

在这里插入图片描述
根据判断条件(时间),status列显示不同的值(订单状态)

select 
	order_id,
    order_date,
    'Active' as status
from orders
where order_date >= '2019-01-01'
union
select 
	order_id,
    order_date,
    'Archived' as status
from orders
where order_date < '2019-01-01'

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
WITH ROLLUP:在group分组字段的基础上再进行统计数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
找重复行
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/baidu_34007305/article/details/111060921
今日推荐