MySQL(B站CodeWithMosh)——2024.10.2(5)

ZZZZZZ目的
ZZZZZZ代码
ZZZZZZ重点
ZZZZZZ操作(非代码,需要自己手动)

11- LIMIT子句 | The LIMIT Clause_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=17&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 输出customers表格中的前三位顾客
    SELECT *
    FROM customers
    LIMIT 3

    如果输入LIMIT 300,并不会有300个顾客数据输出,因为原本customers表格中就只有10个顾客的信息,所以最多只能输出10个顾客数据
  2. 如果一个网页的顾客数据有很多页,每页只显示3个顾客数据,那么如果想要输出第7、8和9这三位的顾客数据
    LIMIT 6,3

    这里的“6”表示跳过前面6条顾客数据,“3”表示获取3条数据,那么输出的就是第7、8和9这三条数据

【练习题】
输出积分最多的三位顾客
SELECT *
FROM customers 
ORDER BY points DESC
LIMIT 3

注意,LIMIT子句永远要放在最后面,所以一般就是SELECT、FROM、WHERE、ORDER BY和LIMIT

【第三章】1- 内连接 | Inner Joins「在多张表格中检索数据」_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=18&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 合并orders表格和customers表格中的列,并指输出订单编号、姓和名
    SELECT order_id, first_name, last_name
    FROM orders
    JOIN customers ON orders.customer_id = customers.customer_id

    这里JOIN就是将两个表结合起来的运算符,orders表格和customers表格中都有customer_id这一列,所以选择customer_id作为合并列
  2. 合并orders表格和customers表格中的列,并指输出订单编号、姓、名和顾客编号
    SELECT order_id, first_name, last_name, orders.customer_id

    或者
    SELECT order_id, first_name, last_name, customers.customer_id
    FROM orders
    JOIN customers ON orders.customer_id = customers.customer_id

    下面的写法是会报错的,因为MySQL并不知道你要从rders表格还是customers表格中获取customer_id
    SELECT order_id, first_name, last_name, customer_id
    FROM orders
    JOIN customers ON orders.customer_id = customers.customer_id

    所以要用orders.customer_id或者customers.customer_id,要指明用哪个表的
    可以发现这段代码中有很多orders和customers,所以为了书写方便,可以这样表达

    SELECT order_id, first_name, last_name, o.customer_id
    FROM orders o
    JOIN  customers c ON o.customer_id = c.customer_id
    这里用“o”代表“orders表格,“c”代表customers表格

【练习题】
将order_items表格和product表格合并,并输出产品id,产品名称,产品数量和产品单价,并简化代码

SELECT p.product_id, name, quantity, p.unit_price, o.unit_price
FROM order_items o
JOIN  products p ON o.product_id = p.product_id

注意,

  1. 像name和quantity这样的列名,都是只存在一个表中,并不是order_items表格和product表格都存在,所以不用p.name和order_items.quantity,这样做了反而还会报错
  2. 一旦选择用“o”来代替order_items表格,那么所有代码都必须用“o”来代替order_items表格,如果后面写order_items会报错
  3. 对于产品单价,order_items表格和product表格中都有,但是代表的内容不一样,一个是用户下单的单价,一个是现在的单价,所以两个都要输出

2- 跨数据库连接 | Joining Across Databases_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=19&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 将sql_store中的order_items表格和sql_inventory中的product表格合并在一起
    SELECT *
    FROM order_items oi
    JOIN sql_inventory.products p ON oi.product_id = p.product_id

    总结,只需要给不在当前数据库的表加前缀,所以所写的代码会根据当前使用的数据库的变化而变化

3- 自连接 | Self Joins_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=20&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. sql_hr中employees表格中employee_id是员工编码,reports_to是指该员工对应的管理人员编码,现在将表中的employee_id和reports_to结合在一起,方便知道某员工的上级是谁,并只输出员工id,员工的名和管理人员的名,给管理人员的名那一列命名为“manager”
    USE sql_hr;
    SELECT e.employee_id, e.first_name, m.first_name AS manager
    FROM employees e
    JOIN employees m ON e.reports_to = m.employee_id

    这里虽然只用了一个表employees,但这是两个表合并,所以在JOIN的时候要用新的一个表(可以理解为一模一样,只是复制了),所以要用新的简称“m”来代替

4- 多表连接 | Joining Multiple Tables_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=21&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 将sql_store中的orders表格和customers表格合并,和order_statuses表格合并,并只保留订单id,订单日期,顾客的姓和名,还要将order_statuses中的name列命名为status输出
    USE sql_store;
    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

【练习题】
将sql_invoicing中的payment和clients,payments_methods合并,输出顾客名字和支付方式

USE sql_invoicing;
SELECT 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值