Words Practice ▶ Home
1 · Words 2 · Tables 3 · Server 4 · Make 5 · Select 6 · Count 7 · Join 8 · Change 9 · Practice 10 · Help

🐘 Postgres Lab

SQL is a language. You use it to talk to a database. This page teaches it in easy English. Then you write real SQL yourself. SQL 是一种语言。你用它跟数据库说话。这一页用很简单的英语教你。然后你自己写真正的 SQL。 SQL คือภาษาหนึ่ง คุณใช้มันคุยกับฐานข้อมูล หน้านี้สอนด้วยภาษาอังกฤษง่าย ๆ แล้วคุณจะได้เขียน SQL จริงด้วยตัวเอง

There is a small database inside this page. It has two tables: students and teachers. Every blue code box below has a ▶ Try it button. Press it. The command goes to the practice console at the bottom and runs. Nothing is sent to the internet. 这一页里面有一个小小的数据库。它有两张表:studentsteachers。 下面每一个蓝色代码框都有一个 ▶ Try it 按钮。按下去,命令就会跑到下面的练习台上运行。 什么都不会送到网上。 ในหน้านี้มีฐานข้อมูลเล็ก ๆ อยู่ มีสองตาราง: students และ teachers กล่องโค้ดสีน้ำเงินทุกกล่องข้างล่างมีปุ่ม ▶ Try it กดแล้วคำสั่งจะไปรันที่แผงฝึกด้านล่าง ไม่มีอะไรถูกส่งออกอินเทอร์เน็ต

How to use this page. Read a little. Press ▶ Try it. Change one word. Run it again. See what happens. That is how you learn SQL. 怎么用这一页。读一点点。按 ▶ Try it。改一个词。再跑一次。 看看会怎么样。学 SQL 就是这样学的。 วิธีใช้หน้านี้ อ่านทีละนิด กด ▶ Try it เปลี่ยนคำหนึ่งคำ แล้วรันใหม่ ดูว่าเกิดอะไรขึ้น นี่คือวิธีเรียน SQL
Your language. Press 中文 or ไทย at the top of the page. The translation appears under the English. You can turn on both at once. 你的语言。按页面上方的 中文ไทย。 译文会出现在英文下面。两个可以同时打开。 ภาษาของคุณ กด 中文 หรือ ไทย ที่ด้านบนของหน้า คำแปลจะขึ้นใต้ภาษาอังกฤษ เปิดพร้อมกันทั้งสองภาษาก็ได้
Go to the practice console ↓ 17 exercises · the page checks your answer

1 — The words you need1 — 你需要的词1 — คำศัพท์ที่ต้องรู้

Learn these 15 words first. Then the rest of the page is easy. 先学会这 15 个词。后面的内容就很容易了。 เรียน 15 คำนี้ก่อน แล้วส่วนที่เหลือของหน้านี้จะง่ายมาก

WordMeaning
Database数据库ฐานข้อมูล A place where a computer keeps information.电脑存放资料的地方。ที่ที่คอมพิวเตอร์เก็บข้อมูลไว้
Tableตาราง A named group of rows inside a database.数据库里一组有名字的行。กลุ่มของแถวที่มีชื่อ อยู่ในฐานข้อมูล
Rowแถว One record in a table. One student is one row.表里的一条记录。一个学生就是一行。หนึ่งรายการในตาราง นักเรียนหนึ่งคนคือหนึ่งแถว
Columnคอลัมน์ One kind of information. Age is one column.一种资料。年龄就是一列。ข้อมูลหนึ่งชนิด อายุคือหนึ่งคอลัมน์
SQL The language you use to talk to the database.你用来跟数据库说话的语言。ภาษาที่ใช้คุยกับฐานข้อมูล
PostgreSQL A program that keeps your tables safe.帮你保管表的程序。โปรแกรมที่เก็บตารางของคุณไว้อย่างปลอดภัย
Client客户端ไคลเอนต์ The tool you type your commands into.你打命令用的工具。เครื่องมือที่คุณพิมพ์คำสั่งลงไป
Server服务器เซิร์ฟเวอร์ The program that holds the data and does the work.保管资料、做事情的程序。โปรแกรมที่เก็บข้อมูลและทำงานให้
Query查询คิวรี (คำถาม) A question you ask the database.你问数据库的一个问题。คำถามที่คุณถามฐานข้อมูล
Integer整数จำนวนเต็ม A whole number, like 12. No decimal point.整整的数字,比如 12。没有小数点。ตัวเลขเต็ม เช่น 12 ไม่มีจุดทศนิยม
Varchar变长文本ข้อความความยาวจำกัด Words or text, with a longest size.文字,有最长的限制。ตัวอักษรหรือข้อความ ที่กำหนดความยาวมากที่สุดไว้
Date日期วันที่ A day on the calendar.日历上的一天。วันหนึ่งวันบนปฏิทิน
Null空值ค่าว่าง Empty. We do not know this value.空的。我们不知道这个值。ว่าง เราไม่รู้ค่านี้
Join连接การเชื่อมตาราง Put two tables together in one answer.把两张表合在一个答案里。เอาสองตารางมารวมกันในคำตอบเดียว
Primary key主键คีย์หลัก A number that is different for every row.每一行都不一样的一个号码。ตัวเลขที่ไม่ซ้ำกันในทุกแถว

2 — What is a database? What is a table?2 — 什么是数据库?什么是表?2 — ฐานข้อมูลคืออะไร ตารางคืออะไร

Here is our students table. Press the buttons to see a row and a column. 这是我们的 students 表。按按钮看看什么是行、什么是列。 นี่คือตาราง students ของเรา กดปุ่มเพื่อดูว่าแถวและคอลัมน์คืออะไร

Remember. A row goes across. A column goes down. SQL lets you pick some rows and some columns. 记住。行是横的,列是竖的。SQL 让你挑出一些行和一些列。 จำไว้ แถวไปตามแนวนอน คอลัมน์ไปตามแนวตั้ง SQL ให้คุณเลือกบางแถวและบางคอลัมน์

3 — PostgreSQL: a client and a server3 — PostgreSQL:客户端和服务器3 — PostgreSQL: ไคลเอนต์และเซิร์ฟเวอร์

PostgreSQL uses a client/server model. The server is the program that keeps the data. The client is the tool that you use. You type in the client. The client sends your words to the server. The server does the work. Then it sends the answer back. PostgreSQL 用的是客户端/服务器模式。服务器是保管资料的程序。 客户端是你用的工具。你在客户端里打字。客户端把你的话送给服务器。 服务器做完事,再把答案送回来。 PostgreSQL ใช้รูปแบบ ไคลเอนต์/เซิร์ฟเวอร์ เซิร์ฟเวอร์ คือโปรแกรมที่เก็บข้อมูล ไคลเอนต์ คือเครื่องมือที่คุณใช้ คุณพิมพ์ในไคลเอนต์ ไคลเอนต์ส่งคำสั่งไปให้เซิร์ฟเวอร์ เซิร์ฟเวอร์ทำงานแล้วส่งคำตอบกลับมา

The client and the server can be on two different computers. They talk over a network. One server can talk to many clients at the same time. 客户端和服务器可以在两台不同的电脑上。它们通过网络说话。 一台服务器可以同时跟很多客户端说话。 ไคลเอนต์กับเซิร์ฟเวอร์อยู่คนละเครื่องได้ ทั้งคู่คุยกันผ่านเครือข่าย เซิร์ฟเวอร์หนึ่งตัวคุยกับไคลเอนต์หลายตัวพร้อมกันได้

Making a database建立一个数据库สร้างฐานข้อมูล

You type these in your computer terminal, not in SQL. 这些是在电脑的终端里打的,不是 SQL。 คำสั่งพวกนี้พิมพ์ในเทอร์มินัลของเครื่อง ไม่ใช่ SQL

createdb mydb dropdb mydb
Careful. dropdb removes the whole database. You cannot undo it. Nothing asks you “are you sure?” 小心。dropdb 会删掉整个数据库。删了就回不来了。 它不会问你"你确定吗?" ระวัง dropdb ลบฐานข้อมูลทั้งอัน เรียกคืนไม่ได้ และไม่มีอะไรถามว่า "แน่ใจหรือ?"

Starting psql启动 psqlเริ่มใช้ psql

psql is the normal client. It is a text window. You type SQL in it. psql 是最常用的客户端。它是一个文字窗口。你在里面打 SQL。 psql คือไคลเอนต์ที่ใช้กันทั่วไป เป็นหน้าต่างตัวอักษร คุณพิมพ์ SQL ลงไป

psql mydb

Inside psql some commands start with a backslash. They are not SQL. They are commands for the client itself. psql 里,有些命令用反斜线开头。它们不是 SQL, 是给客户端自己用的命令。 ใน psql คำสั่งบางอย่างขึ้นต้นด้วยเครื่องหมาย \ คำสั่งพวกนี้ไม่ใช่ SQL แต่เป็นคำสั่งของตัวไคลเอนต์เอง

CommandWhat it does
\lList all databases列出所有数据库แสดงรายชื่อฐานข้อมูลทั้งหมด
\dtList all tables列出所有表แสดงรายชื่อตารางทั้งหมด
\d mytableShow the columns of one table看一张表有哪些列ดูคอลัมน์ของตารางหนึ่งตาราง
\?Show help看说明ดูคำแนะนำ
\qQuit psql离开 psqlออกจาก psql
The console on this page is not psql. It is a small copy, written in JavaScript. You can practise with no install. Backslash commands do not work there. SQL does. 这一页的练习台不是真的 psql。它是用 JavaScript 写的一个小仿制品, 让你不用安装就能练习。反斜线命令在这里不能用,SQL 可以。 แผงฝึกในหน้านี้ไม่ใช่ psql จริง มันเป็นของจำลองเล็ก ๆ ที่เขียนด้วย JavaScript เพื่อให้คุณฝึกได้โดยไม่ต้องติดตั้งอะไร คำสั่งที่ขึ้นต้นด้วย \ ใช้ไม่ได้ แต่ SQL ใช้ได้

4 — Make a table and put data in4 — 建一张表,把资料放进去4 — สร้างตารางและใส่ข้อมูลลงไป

CREATE TABLE

You give the table a name. Then you list the columns. For each column you say what kind of data it holds. 先给表起一个名字。然后列出每一列。每一列都要说它放的是哪种资料。 ตั้งชื่อตารางก่อน แล้วไล่รายชื่อคอลัมน์ แต่ละคอลัมน์ต้องบอกว่าเก็บข้อมูลชนิดไหน

CREATE TABLE pets ( id integer PRIMARY KEY, name varchar(40), kind varchar(20), age integer );

Kinds of data (data types)资料的种类(数据类型)ชนิดของข้อมูล (data type)

A data type tells the computer what is in a column. 数据类型告诉电脑,这一列里放的是什么。 ชนิดข้อมูลบอกคอมพิวเตอร์ว่าในคอลัมน์นั้นมีอะไรอยู่

Data typeWhat it holdsExample
integerWhole numbers整数จำนวนเต็ม12
realNumbers with a dot有小数点的数字ตัวเลขที่มีจุดทศนิยม0.25
textWords, any length文字,多长都行ข้อความ ยาวเท่าไรก็ได้Chiang Mai
varchar(40)Words, 40 letters at most文字,最多 40 个字ข้อความ ยาวไม่เกิน 40 ตัวอักษรNok
dateA day一个日期วันที่1994-11-27
booleanTrue or false真或假จริงหรือเท็จtrue

Rules for your data (constraints)资料的规则(约束)กฎสำหรับข้อมูล (constraint)

A constraint is a rule. The database keeps the rule for you. If you break it, the database says no. 约束就是一条规则。数据库帮你守着这条规则。你违反了,它就不答应。 constraint คือกฎข้อหนึ่ง ฐานข้อมูลจะคอยรักษากฎนี้ให้ ถ้าคุณทำผิดกฎ มันจะไม่ยอม

RuleWhat it saysExample
NOT NULLThis box cannot be empty.这一格不可以是空的。ช่องนี้ว่างไม่ได้name text NOT NULL
UNIQUENo two rows can be the same here.这里不可以有两行一样。ห้ามมีสองแถวที่ค่าตรงนี้ซ้ำกันemail text UNIQUE
PRIMARY KEYA unique number for the row.这一行专用、不重复的号码。เลขประจำแถว ไม่ซ้ำกับใครid integer PRIMARY KEY
REFERENCESThis points at another table.这一格指向另一张表。ช่องนี้ชี้ไปที่อีกตารางหนึ่งteacher_id integer REFERENCES teachers
CHECKThe value must follow a rule.这个值必须符合一条规则。ค่านี้ต้องเป็นไปตามกฎที่ตั้งไว้price numeric CHECK (price > 0)

INSERT — add a rowINSERT — 加一行INSERT — เพิ่มหนึ่งแถว

Text and dates go inside single quotes. Numbers do not. 文字和日期要放在单引号里。数字不用。 ข้อความและวันที่ต้องอยู่ในเครื่องหมาย ' ' ส่วนตัวเลขไม่ต้อง

INSERT INTO students (id, name, age, city, score, teacher_id) VALUES (10, 'Ton', 13, 'Phrae', 70, 1);

You can add more than one row at a time. 一次可以加好几行。 เพิ่มทีละหลายแถวพร้อมกันได้

INSERT INTO teachers (id, name, subject) VALUES (5, 'Kru Ploy', 'Music'), (6, 'Kru Wit', 'History');
Common mistake. "Nok" with double quotes is wrong. Text needs single quotes: 'Nok'. Double quotes mean a column name. 常见错误。用双引号写 "Nok" 是错的。 文字要用单引号:'Nok'。双引号是用来写列名的。 ข้อผิดพลาดที่พบบ่อย เขียน "Nok" ด้วยเครื่องหมาย " " ผิด ข้อความต้องใช้ ' ' แบบนี้: 'Nok' ส่วน " " ใช้กับชื่อคอลัมน์

5 — SELECT: get data out5 — SELECT:把资料拿出来5 — SELECT: ดึงข้อมูลออกมา

SELECT is the most important word in SQL. You use it every day. SELECT 是 SQL 里最重要的词。你每天都会用到它。 SELECT คือคำที่สำคัญที่สุดใน SQL คุณจะได้ใช้มันทุกวัน

All the columns所有的列ทุกคอลัมน์

The star * means “every column”. 星号 * 的意思是"每一列"。 เครื่องหมาย * หมายถึง "ทุกคอลัมน์"

SELECT * FROM students;

Only some columns只要某几列เอาแค่บางคอลัมน์

SELECT name, score FROM students;

WHERE — only some rowsWHERE — 只要某几行WHERE — เอาแค่บางแถว

WHERE is a filter. Only rows that match come back. WHERE 是一个筛子。只有符合条件的行才会回来。 WHERE คือตัวกรอง เฉพาะแถวที่ตรงเงื่อนไขเท่านั้นที่จะกลับมา

SELECT * FROM students WHERE city = 'Lamphun';
You writeIt means
=is the same as等于เท่ากับ
<>is not the same as不等于ไม่เท่ากับ
> <bigger than, smaller than大于、小于มากกว่า, น้อยกว่า
>= <=bigger or same, smaller or same大于等于、小于等于มากกว่าหรือเท่ากับ, น้อยกว่าหรือเท่ากับ
BETWEEN 80 AND 90from 80 to 90, both included从 80 到 90,两头都算ตั้งแต่ 80 ถึง 90 นับรวมทั้งสองค่า
IN ('a', 'b')is one of these是这几个里的一个เป็นหนึ่งในค่าเหล่านี้
LIKE 'N%'starts with N (% = any letters)用 N 开头(% = 任何字母)ขึ้นต้นด้วย N (% = ตัวอักษรอะไรก็ได้)
IS NULLthis box is empty这一格是空的ช่องนี้ว่าง

AND / OR — two rules at onceAND / OR — 一次两个条件AND / OR — สองเงื่อนไขพร้อมกัน

AND means both rules must be true. OR means one rule is enough. AND 是两个条件都要成立。OR 是一个成立就够了。 AND คือต้องจริงทั้งสองเงื่อนไข OR คือจริงข้อเดียวก็พอ

SELECT name, age FROM students WHERE city = 'Chiang Mai' AND age = 12;
AND is stronger than OR. The database checks AND first. If you want a different order, use brackets: WHERE (a OR b) AND c. AND 比 OR 强。数据库先算 AND。想换顺序就加括号: WHERE (a OR b) AND c AND แรงกว่า OR ฐานข้อมูลจะคิด AND ก่อน ถ้าอยากได้ลำดับอื่นให้ใส่วงเล็บ: WHERE (a OR b) AND c

ORDER BY — put them in orderORDER BY — 排顺序ORDER BY — เรียงลำดับ

Use DESC for biggest first. ASC is smallest first, and it is the default. DESC 是从大到小。ASC 是从小到大,也是默认的。 ใช้ DESC เพื่อเรียงจากมากไปน้อย ส่วน ASC คือน้อยไปมาก และเป็นค่าเริ่มต้น

SELECT name, score FROM students ORDER BY score DESC;

LIMIT — only the first fewLIMIT — 只要前面几个LIMIT — เอาแค่ไม่กี่แถวแรก

SELECT name, score FROM students ORDER BY score DESC LIMIT 3;

DISTINCT — no copiesDISTINCT — 不要重复DISTINCT — ไม่เอาตัวซ้ำ

Three students live in Lamphun. DISTINCT shows the city name one time only. 有几个学生住在南奔。DISTINCT 让这个城市名只出现一次。 มีนักเรียนหลายคนอยู่ลำพูน DISTINCT ทำให้ชื่อเมืองขึ้นมาแค่ครั้งเดียว

SELECT DISTINCT city FROM students;
NULL is not zero. NULL means “we do not know”. WHERE teacher_id = NULL finds nothing, ever. You must write WHERE teacher_id IS NULL. NULL 不是 0。NULL 的意思是"我们不知道"。 WHERE teacher_id = NULL 永远什么都找不到。必须写 WHERE teacher_id IS NULL NULL ไม่ใช่ศูนย์ NULL แปลว่า "เราไม่รู้" WHERE teacher_id = NULL จะไม่เจออะไรเลย ต้องเขียนว่า WHERE teacher_id IS NULL

6 — Count and add up6 — 数一数、加起来6 — นับและรวมยอด

These five functions do maths on many rows. They give you one answer. We call them aggregate functions. 这五个函数会把很多行一起算,只给你一个答案。我们叫它们聚合函数 ฟังก์ชันห้าตัวนี้คิดเลขจากหลายแถวรวมกัน แล้วให้คำตอบเดียว เราเรียกว่า ฟังก์ชันสรุปผล

FunctionWhat it does
COUNT(*)How many rows?一共有几行?มีกี่แถว?
MAX(score)The biggest number最大的数字ตัวเลขที่มากที่สุด
MIN(score)The smallest number最小的数字ตัวเลขที่น้อยที่สุด
AVG(score)The average number平均数ค่าเฉลี่ย
SUM(score)All of them added together全部加起来บวกทั้งหมดเข้าด้วยกัน
SELECT COUNT(*), MAX(score), MIN(score), AVG(score) FROM students;

GROUP BY — one answer for each groupGROUP BY — 每一组给一个答案GROUP BY — ให้คำตอบทีละกลุ่ม

Without GROUP BY you get one answer for the whole table. With GROUP BY you get one answer for each city. 不用 GROUP BY,整张表只有一个答案。用了 GROUP BY,每个城市各有一个答案。 ถ้าไม่ใช้ GROUP BY จะได้คำตอบเดียวสำหรับทั้งตาราง ถ้าใช้ GROUP BY จะได้คำตอบของแต่ละเมือง

SELECT city, COUNT(*), AVG(score) FROM students GROUP BY city;

HAVING — a filter for groupsHAVING — 给"组"用的筛子HAVING — ตัวกรองสำหรับกลุ่ม

WHERE filters rows. HAVING filters groups, after the counting is done. WHERE 筛的是行。HAVING 筛的是组,在算完之后才筛。 WHERE กรองแถว ส่วน HAVING กรองกลุ่ม หลังจากนับเสร็จแล้ว

SELECT city, COUNT(*) FROM students GROUP BY city HAVING COUNT(*) > 2;
Common mistake. You cannot put MAX() inside WHERE. WHERE runs before the maths. Use HAVING, or ask a second question first. 常见错误。MAX() 不能写在 WHERE 里面。 WHERE 是在算数之前跑的。要用 HAVING,或者先问一个问题。 ข้อผิดพลาดที่พบบ่อย ใส่ MAX() ใน WHERE ไม่ได้ เพราะ WHERE ทำงานก่อนการคิดเลข ให้ใช้ HAVING หรือถามอีกคำถามก่อน

7 — JOIN: two tables together7 — JOIN:把两张表合起来7 — JOIN: เอาสองตารางมาต่อกัน

Our students table has a column teacher_id. It holds a number, not a name. The name lives in the teachers table. JOIN puts them together. 我们的 students 表有一列叫 teacher_id。 里面放的是号码,不是名字。名字在 teachers 表里。JOIN 把它们合起来。 ตาราง students ของเรามีคอลัมน์ teacher_id ข้างในเก็บตัวเลข ไม่ใช่ชื่อ ส่วนชื่ออยู่ในตาราง teachers JOIN เอาสองอย่างนี้มารวมกัน

You tell the database which columns match. That is the ON part. 你要告诉数据库哪两列是对得上的。那就是 ON 的部分。 คุณต้องบอกฐานข้อมูลว่าคอลัมน์ไหนตรงกับคอลัมน์ไหน นั่นคือส่วน ON

SELECT students.name, teachers.name, teachers.subject FROM students JOIN teachers ON students.teacher_id = teachers.id;

Long table names are slow to type. Give each table a short name instead. Here s means students and t means teachers. 表名太长,打起来很慢。可以给每张表起一个短名字。 这里 s 就是 students,t 就是 teachers。 ชื่อตารางยาว ๆ พิมพ์ช้า ตั้งชื่อสั้น ๆ ให้แต่ละตารางแทนได้ ตรงนี้ s คือ students และ t คือ teachers

SELECT s.name, t.name, t.subject FROM students s JOIN teachers t ON s.teacher_id = t.id ORDER BY t.name;

LEFT JOIN — keep everybodyLEFT JOIN — 一个都不丢LEFT JOIN — เก็บไว้ครบทุกคน

Kwan has no teacher. Her teacher_id is NULL. A normal JOIN drops her. A LEFT JOIN keeps her and writes NULL for the teacher. Kwan 还没有老师,她的 teacher_id 是 NULL。 普通的 JOIN 会把她丢掉。LEFT JOIN 会留下她,老师那一栏写 NULL。 Kwan ยังไม่มีครู teacher_id ของเธอเป็น NULL JOIN ธรรมดาจะตัดเธอทิ้ง แต่ LEFT JOIN จะเก็บเธอไว้ และใส่ NULL ตรงช่องครู

SELECT s.name, t.name AS teacher FROM students s LEFT JOIN teachers t ON s.teacher_id = t.id;
Which one? Use JOIN when you only want rows that match. Use LEFT JOIN to keep every row from the first table. It keeps rows with no match too. 用哪一个?只要对得上的行,就用 JOIN。 第一张表的每一行都要留下,不管对不对得上,就用 LEFT JOIN。 ใช้อันไหนดี? ถ้าอยากได้เฉพาะแถวที่ตรงกัน ใช้ JOIN ถ้าอยากได้ทุกแถวจากตารางแรก ไม่ว่าจะตรงหรือไม่ ใช้ LEFT JOIN

8 — Change and remove8 — 修改和删除8 — แก้ไขและลบ

UPDATE

UPDATE changes rows that are already in the table. SET says what the new value is. UPDATE 是改已经在表里的行。SET 说明新的值是什么。 UPDATE ใช้แก้แถวที่มีอยู่ในตารางแล้ว SET บอกว่าค่าใหม่คืออะไร

UPDATE students SET score = 90 WHERE name = 'Nok';

You can change two columns at the same time. 可以同时改两列。 แก้สองคอลัมน์พร้อมกันได้

UPDATE students SET score = score + 5, age = age + 1 WHERE city = 'Lamphun';

DELETE

DELETE FROM students WHERE name = 'Fon';
The most dangerous mistake in SQL. If you forget WHERE, the command hits every row. DELETE FROM students; empties the table. UPDATE students SET score = 0; makes every score zero. The database does not ask you first. It just does it. SQL 里最危险的错误。如果忘了写 WHERE,命令会打到每一行DELETE FROM students; 会把整张表清空。UPDATE students SET score = 0; 会把所有分数变成 0。数据库不会先问你,它直接就做。 ข้อผิดพลาดที่อันตรายที่สุดใน SQL ถ้าลืม WHERE คำสั่งจะไปโดนทุกแถว DELETE FROM students; จะล้างตารางจนหมด UPDATE students SET score = 0; จะทำให้ทุกคะแนนเป็นศูนย์ ฐานข้อมูลไม่ถามก่อน มันทำเลย
A safe habit. Write your WHERE as a SELECT first. Look at the rows. Are those the right rows? Then change the SELECT into an UPDATE or a DELETE. 一个安全的习惯。先把你的 WHERE 写成 SELECT 跑一次, 看看是哪些行。如果行没错,再把 SELECT 改成 UPDATE 或 DELETE。 นิสัยที่ปลอดภัย ลองเขียน WHERE ของคุณเป็น SELECT ก่อน แล้วดูว่าได้แถวไหนบ้าง ถ้าใช่แถวที่ต้องการ ค่อยเปลี่ยน SELECT เป็น UPDATE หรือ DELETE

9 — Practice: write real SQL9 — 练习:写真正的 SQL9 — ฝึก: เขียน SQL จริง

This is a real database. It lives in your browser. Type SQL and press Run. Nothing leaves your computer. If you break the data, press Reset data and it comes back. 这是一个真的数据库,就在你的浏览器里。打好 SQL 再按 Run。 什么都不会离开你的电脑。资料弄坏了就按 Reset data,它就回来了。 นี่คือฐานข้อมูลจริง อยู่ในเบราว์เซอร์ของคุณ พิมพ์ SQL แล้วกด Run ไม่มีอะไรออกไปจากเครื่องคุณ ถ้าทำข้อมูลพัง กด Reset data แล้วมันจะกลับมา

Your database你的数据库ฐานข้อมูลของคุณ

Your SQL你的 SQLSQL ของคุณ

Ctrl + Enter runs it too按 Ctrl + Enter 也能运行กด Ctrl + Enter ก็รันได้

Exercises练习题แบบฝึกหัด

Click an exercise. Write your SQL in the box above. Press ✓ Check my answer. There is more than one right answer. The page looks at your result. It does not look at your words. 点一道题。在上面的框里写 SQL。按 ✓ Check my answer。 正确答案不止一个 — 这一页看的是你的结果,不是你写的字。 คลิกเลือกข้อหนึ่ง เขียน SQL ในกล่องด้านบน แล้วกด ✓ Check my answer คำตอบที่ถูกมีได้หลายแบบ — หน้านี้ดูที่ผลลัพธ์ของคุณ ไม่ได้ดูที่ตัวหนังสือ

10 — When something goes wrong10 — 出错的时候10 — เมื่อมีอะไรผิดพลาด

Error messages in real PostgreSQL真正的 PostgreSQL 的错误信息ข้อความแจ้งข้อผิดพลาดใน PostgreSQL จริง

MessageWhat it means
command not foundPostgreSQL is not installed, or the path is wrong.PostgreSQL 没装,或者路径不对。ยังไม่ได้ติดตั้ง PostgreSQL หรือ path ไม่ถูก
connection to server failedThe server is not running.服务器没有在跑。เซิร์ฟเวอร์ไม่ได้ทำงานอยู่
role does not existYou have no database user account.你还没有数据库的用户帐号。คุณยังไม่มีบัญชีผู้ใช้ของฐานข้อมูล
permission deniedYou are not allowed to do this.你没有权限做这件事。คุณไม่มีสิทธิ์ทำสิ่งนี้
relation does not existThat table name is wrong, or the table is gone.表名写错了,或者表已经没了。ชื่อตารางผิด หรือตารางหายไปแล้ว

Beginner mistakes新手常犯的错ข้อผิดพลาดของมือใหม่

The mistakeHow to fix it
Double quotes around text: "Nok"文字用了双引号:"Nok"ใส่ " " รอบข้อความ: "Nok" Use single quotes: 'Nok'.改用单引号:'Nok'ใช้ ' ' แทน: 'Nok'
Forgetting the semicolon忘了分号ลืมใส่เซมิโคลอน End every command with ;.每个命令都用 ; 结尾。จบทุกคำสั่งด้วย ;
Using MAX() inside WHEREWHERE 里用 MAX()ใช้ MAX() ใน WHERE Use HAVING, or ask a second question first.改用 HAVING,或者先问一个问题。ใช้ HAVING หรือถามอีกคำถามก่อน
Writing = NULL写成 = NULLเขียนว่า = NULL Write IS NULL.要写 IS NULLต้องเขียน IS NULL
UPDATE or DELETE with no WHEREUPDATE 或 DELETE 没写 WHEREUPDATE หรือ DELETE ที่ไม่มี WHERE It changed every row. Test with SELECT first.它改掉了每一行。下次先用 SELECT 试。มันเปลี่ยนทุกแถว คราวหน้าลองด้วย SELECT ก่อน
Column name not found找不到列名หาชื่อคอลัมน์ไม่เจอ Check the spelling. Look at the table on the left.检查拼写。看看左边那张表。ตรวจตัวสะกด ดูตารางทางซ้ายมือ

What this console does not do这个练习台做不到的事สิ่งที่แผงฝึกนี้ทำไม่ได้

The console is small on purpose. It knows SELECT, INSERT and UPDATE. It knows DELETE, CREATE TABLE and DROP TABLE. It knows WHERE, GROUP BY and HAVING. It knows ORDER BY, LIMIT, JOIN and LEFT JOIN. It does not know subqueries, transactions, indexes or users. For those, install real PostgreSQL and use psql. 这个练习台是故意做小的。它会 SELECT、INSERT、UPDATE、DELETE、 CREATE TABLE 和 DROP TABLE,也会 WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、 JOIN 和 LEFT JOIN。它不会子查询、事务、索引和用户管理。 要用那些,就去装真正的 PostgreSQL,用 psql แผงฝึกนี้ทำเล็กไว้ตั้งใจ มันรู้จัก SELECT, INSERT, UPDATE, DELETE, CREATE TABLE และ DROP TABLE รู้จัก WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, JOIN และ LEFT JOIN แต่ไม่รู้จัก subquery, transaction, index หรือการจัดการผู้ใช้ ถ้าอยากใช้สิ่งเหล่านั้น ให้ติดตั้ง PostgreSQL จริงแล้วใช้ psql

Where this came from这些内容是哪来的เนื้อหานี้มาจากไหน

NotebookLM wrote the lesson text on this page. It read 20 pages of the official PostgreSQL 18 manual. Those pages gave us the words, the data types and the rules. They also gave us the psql commands and the error tables. Nothing here was written from memory. 课文、数据类型、规则、psql 命令和错误表,都是 NotebookLM 根据 官方 PostgreSQL 18 手册的 20 个页面生成的 — 包括教程各章、 SELECT / INSERT / CREATE TABLE 参考页、数据类型那一章、约束那一节和 psql 页。 没有一句是凭记忆写的。 เนื้อหาบทเรียน ชนิดข้อมูล กฎต่าง ๆ คำสั่ง psql และตารางข้อผิดพลาด สร้างโดย NotebookLM จาก คู่มือ PostgreSQL 18 ฉบับทางการ 20 หน้า — บททิวทอเรียล หน้าอ้างอิง SELECT / INSERT / CREATE TABLE บทชนิดข้อมูล หัวข้อ constraint และหน้า psql ไม่มีส่วนไหนเขียนจากความจำ

Read the real manual. It is free and it is very good: postgresql.org/docs/current/tutorial.html. Chapter 2 covers everything on this page, in more detail. 去读真正的手册。它是免费的,而且写得很好。第 2 章讲的就是这一页的全部内容,更详细。 ลองอ่านคู่มือตัวจริง ฟรีและดีมาก บทที่ 2 ครอบคลุมทุกอย่างในหน้านี้ แบบละเอียดกว่า
The console is a copy, not the real thing. The SQL engine here is about 600 lines of JavaScript. We wrote it for this lesson. It behaves like PostgreSQL for the commands above. Real PostgreSQL is far larger and stricter. Install it when you are ready. 练习台是仿制品,不是真货。这一页的 SQL 引擎是为这堂课写的、 大约 600 行 JavaScript。对上面那些命令,它的表现跟 PostgreSQL 一样。 真正的 PostgreSQL 大得多,也严格得多。准备好了就去装一个。 แผงฝึกเป็นของจำลอง ไม่ใช่ของจริง เอนจิน SQL ในหน้านี้เป็น JavaScript ประมาณ 600 บรรทัด ที่เขียนขึ้นสำหรับบทเรียนนี้ สำหรับคำสั่งข้างบนมันทำงานเหมือน PostgreSQL แต่ PostgreSQL ตัวจริงใหญ่กว่าและเข้มงวดกว่ามาก พอพร้อมแล้วก็ไปติดตั้งได้เลย