sql

作为一名程序员,最终要的是数据。 DB 分类的开篇总结一些常用的命令,为以后漫长的数据之旅打下基础。

mysql cmd

服务器上常用mysql命令

1
2
3
mysql -u root -p

mysql -h 10.0.1.99 -u root -p // -h 指定IP或域名

sql statement

通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。

查询 排序。列有相同的数据,要进一步排序。

1
SELECT id, name, gender, score FROM students ORDER BY score DESC,gender;

分页: LIMIT 3 OFFSET 0表示,对结果集从0号记录开始,最多取3条。注意SQL记录集的索引从0开始。

1
2
3
4
SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 3 OFFSET 0;

COUNT(*)表示查询所有列的行数,要注意聚合的计算结果虽然是一个数字,但查询的结果仍然是一个二维表,只是这个二维表只有一行一列,并且列名是COUNT(*)COUNT(*)COUNT(id)实际上是一样的效果。

1
SELECT COUNT(*) num FROM students;

ROUP BY子句指定了按class_id分组

1
SELECT COUNT(*) num FROM students GROUP BY class_id;

注意到FROM子句给表设置别名的语法是FROM <表名1> <别名1>, <表名2> <别名2>。这样我们用别名sc分别表示students表和classes表。

1
2
3
4
5
6
7
8
9
SELECT
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cname
FROM students s, classes c
WHERE s.gender = 'M' AND c.id = 1;

inner join 会丢失两表中null 值得数据,这是可以使用FULL OUTER JOIN

1
2
3
4
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;

要特别小心的是,UPDATE语句可以没有WHERE条件,整个表的所有记录都会被更新。

1
2
3
4
~~~
UPDATE students SET score=60;

~~~