Kodewick
第 1 课,共 21 课目录

表和 SELECT

第 1 课,共 21 课 · 第 1 部分 · 查数据 · 约 15 分钟

数据库把数据放在表里。这门课用的是一家小网店的数据:客户、商品、订单。这一页的每条查询都能直接在浏览器里运行:点运行,改一改,再运行一次。

main.sql
1SELECT * FROM products;
输出
idnamecategorypricestock
1笔记本文具4.50120
2中性笔(10 支)文具6.0080
3双肩包箱包39.9015
4水杯厨房12.0040
5耳机数码59.0010
6台灯数码25.000
7数据线数码8.50200
8咖啡杯厨房9.9060
9手机壳数码15.0035
10帆布袋箱包11.0025
10 行

这就是网店的商品表。每一行是一件商品,每一列是商品的一项信息:

列存的是什么
id商品的编号,每件商品都不一样
name商品名
category分类
price价格
stock还有多少库存

SELECT 和 FROM

一条查询的意思是:从(FROM)哪张表里,选出(SELECT)哪些列。* 表示「所有列」。只想看商品名和价格,就把列名写出来,中间用逗号隔开:

main.sql
1SELECT name, price FROM products;
输出
nameprice
笔记本4.50
中性笔(10 支)6.00
双肩包39.90
水杯12.00
耳机59.00
台灯25.00
数据线8.50
咖啡杯9.90
手机壳15.00
帆布袋11.00
10 行

结果也是一张表,只有你要的两列,行还是那些行。列的顺序照你写的顺序:

main.sql
1SELECT price, name FROM products;
输出
pricename
4.50笔记本
6.00中性笔(10 支)
39.90双肩包
12.00水杯
59.00耳机
25.00台灯
8.50数据线
9.90咖啡杯
15.00手机壳
11.00帆布袋
10 行

网店里的其他表

这家网店还有客户表 customers、订单表 orders、订单明细表 order_items,和员工表 employees。后面的课会一张一张用到。先看看客户:

main.sql
1SELECT id, name, city FROM customers;
输出
idnamecity
1林晓上海
2王磊北京
3陈静上海
4张伟广州
5刘洋成都
6赵敏北京
7孙强广州
8周婷上海
9吴昊成都
10郑雪杭州
10 行

小技巧: 不知道一张表有哪些列,就先 SELECT * 看一眼。

一次跑好几条

一条查询以分号 ; 结尾。一次可以写好几条,每一条都会给出自己的结果:

main.sql
1SELECT name FROM products;2SELECT name FROM customers;
输出
第 1 行的语句
name
笔记本
中性笔(10 支)
双肩包
水杯
耳机
台灯
数据线
咖啡杯
手机壳
帆布袋
10 行
第 2 行的语句
name
林晓
王磊
陈静
张伟
刘洋
赵敏
孙强
周婷
吴昊
郑雪
10 行

关键字大写,名字小写

SELECT、FROM 这样的词叫关键字,大小写都可以。习惯上关键字写大写,表名和列名写小写,一眼就能分清。换行和空格也随你,长的查询可以分几行写:

main.sql
1select name,2    stock3from products;
输出
namestock
笔记本120
中性笔(10 支)80
双肩包15
水杯40
耳机10
台灯0
数据线200
咖啡杯60
手机壳35
帆布袋25
10 行

这条和 SELECT name, stock FROM products; 完全一样。

先猜一猜

结果有几列?

1SELECT name, city FROM customers;

第一个报错

列名拼错了,数据库会告诉你哪个名字不认识:

main.sql
1SELECT name, prise FROM products;
输出
ERROR 1054 (42S22): Unknown column 'prise' in 'field list'

没有叫「prise」的列。检查一下列名有没有写错;如果它是一段文字,要加引号:'prise'。

ERROR 1054 是 MySQL 的错误编号,后面说「不认识 prise 这一列」。改成 price,再运行一次。

练一练

写好查询,点检查。提示随便看,实在想不出来再看答案。

练习 1

商品和库存

从 products 表里查出每件商品的 name 和 stock 两列。

要显示
namestock
笔记本120
中性笔(10 支)80
双肩包15
水杯40
耳机10
台灯0
数据线200
咖啡杯60
手机壳35
帆布袋25
10 行
exercise1.sql
1SELECT * FROM products;
输出
点「运行」或按 Ctrl+Enter
练习 2

员工

从 employees 表里查出 name 和 title 两列,title 在前。

要显示
titlename
经理李华
销售主管马超
仓库主管杨帆
销售黄磊
销售何琳
打包员高远
6 行
exercise2.sql
1SELECT name FROM employees;
输出
点「运行」或按 Ctrl+Enter
练习 3

修好它:列名

这条查询报错了。改好它,查出客户的 name 和 email。

要显示
10 行
exercise3.sql
1SELECT name, mail FROM customers;
输出
点「运行」或按 Ctrl+Enter

有的客户没留邮箱,那一格显示 NULL,意思是「没有值」。第 5 课专门讲它。

这一课学会了

  • 数据放在表里:每一行是一条记录,每一列是一项信息。
  • SELECT 列, 列 FROM 表; 查出想要的列;* 是所有列。
  • 每条查询以分号结尾,一次可以跑好几条。
  • 关键字习惯大写,名字小写;换行和空格随意。
  • 列名写错会得到 ERROR 1054,先看它说哪个名字不认识。