作为一名程序员,最终要的是数据。 DB 分类的开篇总结一些常用的命令,为以后漫长的数据之旅打下基础。
mysql cmd
服务器上常用mysql命令
1 | mysql -u root -p |
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
4SELECT 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>
。这样我们用别名s
和c
分别表示students
表和classes
表。1
2
3
4
5
6
7
8
9SELECT
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 JOIN1
2
3
4SELECT 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;
~~~